syntax = "proto2";

package telemetry;
option go_package = "./;telemetry"; // 包名声明符

message Telemetry {
  required string ip = 1;
  required string host = 2;
  required Content content = 3;
  required float ts = 4;
  required string app = 5;
}

message Content {
  optional FeatureUsage featureUsage = 1;
  repeated HardWare hardware = 2;
  optional HostExstra hostExtra = 3;
  repeated Instances instances = 4;
  required int64 reportTimestamp = 5;
  map<string, int64> slowQueryStats = 6;
  required string trackingId = 7;
  repeated WindowedStats windowedStats = 8;
}

message FeatureUsage {
  map<string, ClusterIndex> clusterIndex = 1;
  map<string, int64> cte = 2;
  optional bool temporaryTable = 3;
  optional TxnUsage txn = 4;
}

message ClusterIndex {
  optional string clusterPKType = 1;
  optional bool isClustered = 2;
}

message TxnUsage {
  optional bool asyncCommitUsed = 1;
  optional bool onePCUsed = 2;
  map<string, int64> txnCommitCounter = 3;
}

message HardWare {
  map<string, string> cpu = 1;
  map<string, DiskInfo> disk = 2;
  optional string instanceType = 3;
  optional string listenHostHash = 4;
  optional string listenPort = 5;
  optional Memory memory = 6;
}

message DiskInfo {
  optional string deviceName = 1;
  optional int64 free = 2;
  optional float freePercent = 3;
  optional string fstype = 4;
  optional string opts = 5;
  optional string path = 6;
  optional int64 total = 7;
  optional int64 used = 8;
  optional float usedPercent = 9;
}

message Memory {
  optional string capacity = 1;
}

message HostExstra {
  repeated string cpuFlags = 1;
  optional string cpuModelName = 2;
  optional string kernelArch = 3;
  optional string kernelVersion = 4;
  optional string os = 5;
  optional string platform = 6;
  optional string platformFamily = 7;
  optional string platformVersion = 8;
  optional string virtualizationRole = 9;
  optional string virtualizationSystem = 10;
}

message Instances {
  optional string gitHash = 1;
  optional string instanceType = 2;
  optional string listenHostHash = 3;
  optional int64 listenPort = 4;
  optional string startTime = 5;
  optional string statusHostHash = 6;
  optional int64 statusPort = 7;
  optional string upTime = 8;
  optional string version = 9;
}


message WindowedStats {
  map<string, int64> coprCacheUsage = 1;
  map<string, int64> tiFlashUsage = 2;
  optional int64 executeCount = 3;
  optional string beginAt = 4;
  optional SqlUsage SQLUsage = 5;
}

message SqlUsage {
optional int64 total = 1;
map<string, int64> type = 2;
}
