// Copyright 2016 Google Inc.
//
// 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.

syntax = "proto3";

package google.cloud.dataproc.v1;

import "google/api/annotations.proto";
import "google/longrunning/operations.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/timestamp.proto";

option go_package = "google.golang.org/genproto/googleapis/cloud/dataproc/v1;dataproc";
option java_multiple_files = true;
option java_outer_classname = "OperationsProto";
option java_package = "com.google.cloud.dataproc.v1";


// The status of the operation.
message ClusterOperationStatus {
  // The operation state.
  enum State {
    // Unused.
    UNKNOWN = 0;

    // The operation has been created.
    PENDING = 1;

    // The operation is running.
    RUNNING = 2;

    // The operation is done; either cancelled or completed.
    DONE = 3;
  }

  // [Output-only] A message containing the operation state.
  State state = 1;

  // [Output-only] A message containing the detailed operation state.
  string inner_state = 2;

  // [Output-only]A message containing any operation metadata details.
  string details = 3;

  // [Output-only] The time this state was entered.
  google.protobuf.Timestamp state_start_time = 4;
}

// Metadata describing the operation.
message ClusterOperationMetadata {
  // [Output-only] Name of the cluster for the operation.
  string cluster_name = 7;

  // [Output-only] Cluster UUID for the operation.
  string cluster_uuid = 8;

  // [Output-only] Current operation status.
  ClusterOperationStatus status = 9;

  // [Output-only] The previous operation status.
  repeated ClusterOperationStatus status_history = 10;

  // [Output-only] The operation type.
  string operation_type = 11;

  // [Output-only] Short description of operation.
  string description = 12;
}
