// 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.api.servicemanagement.v1;

import "google/api/annotations.proto";
import "google/api/config_change.proto";
import "google/api/service.proto";
import "google/longrunning/operations.proto";
import "google/protobuf/any.proto";
import "google/protobuf/field_mask.proto";
import "google/protobuf/struct.proto";
import "google/protobuf/timestamp.proto";
import "google/rpc/status.proto";

option go_package = "google.golang.org/genproto/googleapis/api/servicemanagement/v1;servicemanagement";
option java_multiple_files = true;
option java_outer_classname = "ResourcesProto";
option java_package = "com.google.api.servicemanagement.v1";
option objc_class_prefix = "GASM";


// The full representation of a Service that is managed by
// Google Service Management.
message ManagedService {
  // The name of the service. See the [overview](/service-management/overview)
  // for naming requirements.
  string service_name = 2;

  // ID of the project that produces and owns this service.
  string producer_project_id = 3;
}

// The metadata associated with a long running operation resource.
message OperationMetadata {
  // Represents the status of one operation step.
  message Step {
    // The short description of the step.
    string description = 2;

    // The status code.
    Status status = 4;
  }

  // Code describes the status of one operation step.
  enum Status {
    // Unspecifed code.
    STATUS_UNSPECIFIED = 0;

    // The step has completed without errors.
    DONE = 1;

    // The step has not started yet.
    NOT_STARTED = 2;

    // The step is in progress.
    IN_PROGRESS = 3;

    // The step has completed with errors.
    FAILED = 4;

    // The step has completed with cancellation.
    CANCELLED = 5;
  }

  // The full name of the resources that this operation is directly
  // associated with.
  repeated string resource_names = 1;

  // Detailed status information for each step. The order is undetermined.
  repeated Step steps = 2;

  // Percentage of completion of this operation, ranging from 0 to 100.
  int32 progress_percentage = 3;

  // The start time of the operation.
  google.protobuf.Timestamp start_time = 4;
}

// Represents a diagnostic message (error or warning)
message Diagnostic {
  // The kind of diagnostic information possible.
  enum Kind {
    // Warnings and errors
    WARNING = 0;

    // Only errors
    ERROR = 1;
  }

  // File name and line number of the error or warning.
  string location = 1;

  // The kind of diagnostic information provided.
  Kind kind = 2;

  // Message describing the error or warning.
  string message = 3;
}

// Represents a source file which is used to generate the service configuration
// defined by `google.api.Service`.
message ConfigSource {
  // A unique ID for a specific instance of this message, typically assigned
  // by the client for tracking purpose. If empty, the server may choose to
  // generate one instead.
  string id = 5;

  // Set of source configuration files that are used to generate a service
  // configuration (`google.api.Service`).
  repeated ConfigFile files = 2;
}

// Generic specification of a source configuration file
message ConfigFile {
  enum FileType {
    // Unknown file type.
    FILE_TYPE_UNSPECIFIED = 0;

    // YAML-specification of service.
    SERVICE_CONFIG_YAML = 1;

    // OpenAPI specification, serialized in JSON.
    OPEN_API_JSON = 2;

    // OpenAPI specification, serialized in YAML.
    OPEN_API_YAML = 3;

    // FileDescriptorSet, generated by protoc.
    //
    // To generate, use protoc with imports and source info included.
    // For an example test.proto file, the following command would put the value
    // in a new file named out.pb.
    //
    // $protoc --include_imports --include_source_info test.proto -o out.pb
    FILE_DESCRIPTOR_SET_PROTO = 4;
  }

  // The file name of the configuration file (full or relative path).
  string file_path = 1;

  // The bytes that constitute the file.
  bytes file_contents = 3;

  // The type of configuration file this represents.
  FileType file_type = 4;
}

// Represents a service configuration with its name and id.
message ConfigRef {
  // Resource name of a service config. It must have the following
  // format: "services/{service name}/configs/{config id}".
  string name = 1;
}

// Change report associated with a particular service configuration.
//
// It contains a list of ConfigChanges based on the comparison between
// two service configurations.
message ChangeReport {
  // List of changes between two service configurations.
  // The changes will be alphabetically sorted based on the identifier
  // of each change.
  // A ConfigChange identifier is a dot separated path to the configuration.
  // Example: visibility.rules[selector='LibraryService.CreateBook'].restriction
  repeated google.api.ConfigChange config_changes = 1;
}

// A rollout resource that defines how service configuration versions are pushed
// to control plane systems. Typically, you create a new version of the
// service config, and then create a Rollout to push the service config.
message Rollout {
  // Strategy that specifies how Google Service Control should select
  // different
  // versions of service configurations based on traffic percentage.
  //
  // One example of how to gradually rollout a new service configuration using
  // this
  // strategy:
  // Day 1
  //
  //     Rollout {
  //       id: "example.googleapis.com/rollout_20160206"
  //       traffic_percent_strategy {
  //         percentages: {
  //           "example.googleapis.com/20160201": 70.00
  //           "example.googleapis.com/20160206": 30.00
  //         }
  //       }
  //     }
  //
  // Day 2
  //
  //     Rollout {
  //       id: "example.googleapis.com/rollout_20160207"
  //       traffic_percent_strategy: {
  //         percentages: {
  //           "example.googleapis.com/20160206": 100.00
  //         }
  //       }
  //     }
  message TrafficPercentStrategy {
    // Maps service configuration IDs to their corresponding traffic percentage.
    // Key is the service configuration ID, Value is the traffic percentage
    // which must be greater than 0.0 and the sum must equal to 100.0.
    map<string, double> percentages = 1;
  }

  // Strategy used to delete a service. This strategy is a placeholder only
  // used by the system generated rollout to delete a service.
  message DeleteServiceStrategy {

  }

  // Status of a Rollout.
  enum RolloutStatus {
    // No status specified.
    ROLLOUT_STATUS_UNSPECIFIED = 0;

    // The Rollout is in progress.
    IN_PROGRESS = 1;

    // The Rollout has completed successfully.
    SUCCESS = 2;

    // The Rollout has been cancelled. This can happen if you have overlapping
    // Rollout pushes, and the previous ones will be cancelled.
    CANCELLED = 3;

    // The Rollout has failed. It is typically caused by configuration errors.
    FAILED = 4;

    // The Rollout has not started yet and is pending for execution.
    PENDING = 5;
  }

  // Optional unique identifier of this Rollout. Only lower case letters, digits
  //  and '-' are allowed.
  //
  // If not specified by client, the server will generate one. The generated id
  // will have the form of <date><revision number>, where "date" is the create
  // date in ISO 8601 format.  "revision number" is a monotonically increasing
  // positive number that is reset every day for each service.
  // An example of the generated rollout_id is '2016-02-16r1'
  string rollout_id = 1;

  // Creation time of the rollout. Readonly.
  google.protobuf.Timestamp create_time = 2;

  // The user who created the Rollout. Readonly.
  string created_by = 3;

  // The status of this rollout. Readonly. In case of a failed rollout,
  // the system will automatically rollback to the current Rollout
  // version. Readonly.
  RolloutStatus status = 4;

  // Strategy that defines which versions of service configurations should be
  // pushed
  // and how they should be used at runtime.
  oneof strategy {
    // Google Service Control selects service configurations based on
    // traffic percentage.
    TrafficPercentStrategy traffic_percent_strategy = 5;

    // The strategy associated with a rollout to delete a `ManagedService`.
    // Readonly.
    DeleteServiceStrategy delete_service_strategy = 200;
  }

  // The name of the service associated with this Rollout.
  string service_name = 8;
}
