syntax = "proto3";

package v2ray.core.app.stats.command;
option csharp_namespace = "V2Ray.Core.App.Stats.Command";
option go_package = "github.com/v2fly/v2ray-core/v5/app/stats/command";
option java_package = "com.v2ray.core.app.stats.command";
option java_multiple_files = true;

import "common/protoext/extensions.proto";

message GetStatsRequest {
  // Name of the stat counter.
  string name = 1;
  // Whether or not to reset the counter to fetching its value.
  bool reset = 2;
}

message Stat {
  string name = 1;
  int64 value = 2;
}

message GetStatsResponse {
  Stat stat = 1;
}

message QueryStatsRequest {
  // Deprecated, use Patterns instead
  string pattern = 1;
  bool reset = 2;
  repeated string patterns = 3;
  bool regexp = 4;
}

message QueryStatsResponse {
  repeated Stat stat = 1;
}

message SysStatsRequest {}

message SysStatsResponse {
  uint32 NumGoroutine = 1;
  uint32 NumGC = 2;
  uint64 Alloc = 3;
  uint64 TotalAlloc = 4;
  uint64 Sys = 5;
  uint64 Mallocs = 6;
  uint64 Frees = 7;
  uint64 LiveObjects = 8;
  uint64 PauseTotalNs = 9;
  uint32 Uptime = 10;
}

service StatsService {
  rpc GetStats(GetStatsRequest) returns (GetStatsResponse) {}
  rpc QueryStats(QueryStatsRequest) returns (QueryStatsResponse) {}
  rpc GetSysStats(SysStatsRequest) returns (SysStatsResponse) {}
}

message Config {
  option (v2ray.core.common.protoext.message_opt).type = "grpcservice";
  option (v2ray.core.common.protoext.message_opt).short_name = "stats";
}
