// Copyright 2022 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

syntax = "proto3";

option optimize_for = LITE_RUNTIME;

package spaced;

// Output parameters for SetProjectId().
message SetProjectIdReply {
  // Set to true if ioctl syscall for setting the project inheritance flag
  // succeeds.
  bool success = 1;

  // Errno if success == false.
  int32 error = 2;
}

// Output parameters for SetProjectInheritanceFlag().
message SetProjectInheritanceFlagReply {
  // Set to true if ioctl syscall for setting the project id succeeds.
  bool success = 1;

  // Errno if success == false.
  int32 error = 2;
}

enum StatefulDiskSpaceState {
  // No value was set.
  NONE = 0;
  // No action is taken in this state.
  NORMAL = 1;
  // Prepare applications for impending critical disk space state.
  LOW = 2;
  // Critical disk space state.
  CRITICAL = 3;
}

message StatefulDiskSpaceUpdate {
  StatefulDiskSpaceState state = 1;
  int64 free_space_bytes = 2;
}

// Input parameters for GetQuotaCurrentSpacesForIds().
message GetQuotaCurrentSpacesForIdsRequest {
  string path = 1;
  repeated uint32 uids = 2 [packed = true];
  repeated uint32 gids = 3 [packed = true];
  repeated uint32 project_ids = 4 [packed = true];
}

// Output parameters for GetQuotaCurrentSpacesForIds().
message GetQuotaCurrentSpacesForIdsReply {
  // Maps from IDs to their current disk space usages.
  // The Value is set to -1 if quotactl fails for the ID.
  map<uint32, int64> curspaces_for_uids = 1;
  map<uint32, int64> curspaces_for_gids = 2;
  map<uint32, int64> curspaces_for_project_ids = 3;
}

// Input parameters for GetDiskIOStatsForPaths.
message GetDiskIOStatsForPathsRequest {
  repeated string path = 1;
}

message DiskIOStats {
  uint64 read_ios = 1;
  uint64 read_merges = 2;
  uint64 read_sectors = 3;
  uint64 read_ticks = 4;
  uint64 write_ios = 5;
  uint64 write_merges = 6;
  uint64 write_sectors = 7;
  uint64 write_ticks = 8;
  uint64 in_flight = 9;
  uint64 io_ticks = 10;
  uint64 time_in_queue = 11;
  uint64 discard_ios = 12;
  uint64 discard_merges = 13;
  uint64 discard_sectors = 14;
  uint64 discard_ticks = 15;
  uint64 flush_ios = 16;
  uint64 flush_ticks = 17;
}

// Disk IO stats result for a specified path.
message DiskIOStatsForPath {
  string path = 1;
  DiskIOStats stats = 2;
}

// Output parameters for GetDiskIOStatsForPaths.
message GetDiskIOStatsForPathsReply {
  repeated DiskIOStatsForPath stats_for_path = 1;
}
