// Copyright 2011 Google LLC. All Rights Reserved.

//
// proto definitions for goma log.

syntax = "proto2";

package devtools_goma;

option go_package = "go.chromium.org/goma/server/proto/api";

// NEXT ID TO USE: 96
message ExecLog {
  enum AuthenticationType {
    NONE = 0;
    UNKNOWN = 1;
    // reserved 2,3
    OAUTH2_UNSPEC = 4;
    OAUTH2_APPLICATION = 5;
    OAUTH2_SERVICE_ACCOUNT = 6;
    OAUTH2_GCE_SERVICE_ACCOUNT = 7;
    OAUTH2_LUCI_LOCAL_AUTH = 8;
  };
  enum NetworkFailureType {
    NO_NETWORK_ERROR = 0;  // succeeded or not used.
    DISABLED = 1;  // failed because http is disabled (failnow() is true).
    UNKNOWN_NETWORK_ERROR = 2;  // unknown error status.
    CONNECT_FAILED = 3;  // failed at connect.
    SEND_FAILED = 4;  // failed at send.
    TIMEDOUT_AFTER_SEND = 5;  // timed out after request has sent.
    RECEIVE_FAILED = 6;  // failed at receiving response.
    BAD_HTTP_STATUS_CODE = 7;  // received but response was not 2xx.
  };
  enum CacheSource {
    UNKNOWN_CACHE = 0;
    MEM_CACHE = 1;
    STORAGE_CACHE = 2;
    LOCAL_OUTPUT_CACHE = 3;
  };
  // optional string compiler_proxy_id = 1;
  optional string username = 46;
  optional string nodename = 47;
  optional int32 port = 48;
  optional int32 compiler_proxy_start_time = 49;
  optional int32 task_id = 50;
  reserved 81;  // deprecated: use_case
  optional string build_id = 91;
  optional string service_account_id = 94;
  optional string oauth2_email = 95;

  optional string compiler_proxy_user_agent = 51;

  // request info.
  optional int32 start_time = 2;
  repeated string arg = 3;
  repeated string env = 4;
  optional string cwd = 5;
  repeated string expanded_arg = 62;

  // command spec
  optional string command_version = 71;
  optional string command_target = 72;

  optional string latest_input_filename = 59;
  optional int32 latest_input_mtime = 60;

  optional bool use_ssl = 64;
  reserved 65;
  optional AuthenticationType auth_type = 86 [default = NONE];
  optional CpuFeatures cpu_features = 87;
  optional NetworkFailureType network_failure_type = 88
      [default = NO_NETWORK_ERROR];
  optional OSInfo os_info = 89;

  // in INIT.
  optional int32 pending_time = 63;
  // in SETUP.
  optional int32 compiler_info_process_time = 82;
  // include_preprocess_time is sum of
  // include_processor_wait_time and include_processor_run_time.
  optional int32 include_preprocess_time = 6;
  optional int32 include_processor_wait_time = 84;
  optional int32 include_processor_run_time = 85;
  optional bool depscache_used = 78;
  optional int32 include_preprocess_total_files = 79;
  optional int32 include_preprocess_skipped_files = 80;

  // in FILE_REQ.
  optional int32 include_fileload_time = 7;
  repeated int32 include_fileload_pending_time = 69;
  repeated int32 include_fileload_run_time = 70;
  optional int32 num_total_input_file = 8;
  optional int64 total_input_file_size = 93;

  // repeated by retry.
  repeated int32 num_uploading_input_file = 9;
  repeated int32 num_missing_input_file = 10;
  repeated int32 num_dropped_input_file = 92;
  repeated int32 num_file_uploaded_during_exec_failure = 66;
  // repeated by each input file.
  repeated int32 input_file_time = 11;
  repeated int32 input_file_size = 12;

  // in CALL_EXEC.  repeated by retry.
  repeated int32 rpc_call_time = 13;
  repeated int32 rpc_req_size = 14;
  repeated int32 rpc_resp_size = 15;
  repeated int32 rpc_raw_req_size = 16;
  repeated int32 rpc_raw_resp_size = 17;
  repeated string rpc_master_trace_id = 58;
  repeated int32 rpc_throttle_time = 67;
  repeated int32 rpc_pending_time = 57;
  repeated int32 rpc_req_build_time = 18;
  repeated int32 rpc_req_send_time = 19;
  repeated int32 rpc_wait_time = 20;
  repeated int32 rpc_resp_recv_time = 21;
  repeated int32 rpc_resp_parse_time = 22;

  // stats from backends. repeated by exec retry.

  // in FILE_RESP.
  optional int32 file_response_time = 32;
  optional int32 num_output_file = 33;
  // repeated by each output file
  repeated int32 output_file_time = 34;
  repeated int32 output_file_size = 35;
  repeated int32 chunk_resp_size = 36;

  // Total time elapsed for handling the request in compiler_proxy.
  optional int32 handler_time = 37;

  // result info
  optional string exec_command_not_found = 76;
  optional string exec_command_name_mismatch = 73;
  optional string exec_command_target_mismatch = 74;
  optional string exec_command_version_mismatch = 38;
  optional string exec_command_binary_hash_mismatch = 39;
  optional string exec_command_subprograms_mismatch = 75;
  optional int32 exec_exit_status = 40;
  optional int32 exec_request_retry = 41;
  repeated string exec_request_retry_reason = 56;

  // local run
  optional string local_run_reason = 42;
  optional int32 local_pending_time = 43;
  optional int32 local_run_time = 44;
  // TODO: use int32?
  optional int64 local_mem_kb = 52;
  repeated int32 local_output_file_time = 54;
  // TODO: use int64?
  repeated int32 local_output_file_size = 55;
  optional int32 local_delay_time = 61;

  optional bool cache_hit = 45;
  optional CacheSource cache_source = 90;

  // goma_error indicates result mismatch (exit status, stdout, stderr) between
  // local and remote.
  optional bool goma_error = 53;

  // compiler_proxy_error indicates it replied failure exit status to gomacc
  // while remote/local compilation have succeeded.
  // so not genuie compilation failure.
  optional bool compiler_proxy_error = 77;
}

// NEXT ID TO USE: 8
message MemoryUsageLog {
  // compiler_proxy identification
  optional int32 compiler_proxy_start_time = 1;
  optional string compiler_proxy_user_agent = 2;

  // user information
  optional string username = 3;
  optional string nodename = 4;

  // memory information
  optional int64 memory = 5;
  optional int64 virtual_memory = 7;
  optional int64 time = 6;
}

message SaveLogReq {
  repeated ExecLog exec_log = 1;
  repeated MemoryUsageLog memory_usage_log = 2;
}

message SaveLogResp {
}

message NumberSummary {
  optional int64 samples = 1;
  optional int32 average = 2;

  optional int32 minimum = 10;
  optional int32 percentile_2 = 11;
  optional int32 percentile_9 = 12;
  optional int32 lower_quantile = 13;
  optional int32 median = 14;
  optional int32 upper_quantile = 15;
  optional int32 percentile_91 = 16;
  optional int32 percentile_98 = 17;
  optional int32 maximum = 18;
}

// NEXT ID TO USE: 13
message ExecLogStat {
  optional NumberSummary handler_time = 1;

  optional NumberSummary compiler_info_process_time = 12;
  optional NumberSummary include_preprocess_time = 2;
  optional NumberSummary include_fileload_time = 3;
  optional NumberSummary rpc_call_time = 4;
  optional NumberSummary file_response_time = 7;
  optional NumberSummary local_pending_time = 8;
  optional NumberSummary local_run_time = 9;

  optional int64 cache_hit = 10;
  optional int64 goma_error = 11;
}

// NEXT ID TO USE: 12
message CpuFeatures {
  optional bool mmx = 1;
  optional bool sse = 2;
  optional bool sse2 = 3;
  optional bool sse3 = 4;
  optional bool sse41 = 5;
  optional bool sse42 = 6;
  optional bool popcnt = 7;
  optional bool avx = 8;
  optional bool avx2 = 9;
  optional bool aesni = 10;
  optional bool non_stop_time_stamp_counter = 11;
}

// NEXT ID TO USE: 4
message OSInfo {
  message LinuxInfo {
    optional string gnu_libc_version = 1;
  };

  message WinInfo {
  };

  message MacInfo {
    // TODO: Have max_osx_major_version
    optional int32 mac_osx_minor_version = 1;
  };

  oneof os_info_oneof {
    LinuxInfo linux_info = 1;
    WinInfo win_info = 2;
    MacInfo mac_info = 3;
  };
}
