// Copyright 2022 The Bazel Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Protos that represent a complete graph of all executed spawns, actions that
// don't have spawns, and their performance metrics. Targets are composed of
// actions, and actions are composed of 0 or more spawns.

syntax = "proto3";

package execution_graph;

// option cc_api_version = 2;
// option java_api_version = 2;
option java_package = "com.google.devtools.build.lib.actions";

// Node is one entry in the executed graph.
// Next ID: 12
message Node {
  // All nodes should have a description so human debuggers could see what was
  // going on in this step. This should be ActionAnalysisMetadata.prettyPrint().
  string description = 1;

  // The index is a unique (within a single build) but arbitrary identifier for
  // this node. The same node will likely have different indexes across builds.
  // For performance reasons, the set of all indexes in a build should be dense.
  int32 index = 2;

  // The target name. The field is not set if a spawn or action is shared
  // between multiple targets or if it doesn't belong to any target. Note that a
  // target can trigger several spawns, that can run in parallel or in sequence.
  string target_label = 3;

  // The spawn or action mnemonic. For example, Javac, GoLink, TestRunner, etc.
  string mnemonic = 4;

  // The rule class for the above target. Examples: java_test, cc_library, etc.
  string rule_class = 10;

  Metrics metrics = 5;

  // A list of node indexes corresponding to direct dependencies of this
  // node.
  repeated int32 dependent_index = 6;

  // The name of the spawn runner that ran the spawn, if applicable.
  string runner = 7;

  // Details about the runner.
  string runner_subtype = 8;

  // A node index that this is a retry of. For example, the second attempt of
  // a flaky test would point to the first attempt, and the third attempt would
  // point to the second.
  optional int32 retry_of = 9;

  // An opaque id used by spawn runner to uniquely identify the spawn. Only
  // available when remote execution, remote cache or disk cache was enabled for
  // the spawn.
  string identifier = 11;
}

// Metrics contains all the timing metrics about a Node.
message Metrics {
  // The time when the node started, as milliseconds from the Unix epoch.
  int64 start_timestamp_millis = 1
      ;

  // How long did this node last. This should be the sum of all the parts
  // below, but is included separately to identify issues when that's not true.
  int32 duration_millis = 2;

  int32 parse_millis = 3;
  int32 fetch_millis = 4;
  int32 network_millis = 5;
  int32 upload_millis = 6;
  int32 process_millis = 7;
  int32 setup_millis = 8;
  int32 process_outputs_millis = 9;
  int32 queue_millis = 10;
  int32 discover_inputs_millis = 14;

  // Total time spent on failed attempts.
  int32 retry_millis = 11;

  // Mapping from error code to the time spent on attempts that failed with
  // that error.
  map<int32, int32> retry_millis_by_error = 12;

  // Time spent where we don't have more detailed information. This should be
  // just duration_millis minus all the other parts, but it is kept separately
  // to identify bugs in the code that produces the timing info.
  int32 other_millis = 13;
}
