//  Licensed to the Apache Software Foundation (ASF) under one
//  or more contributor license agreements.  See the NOTICE file
//  distributed with this work for additional information
//  regarding copyright ownership.  The ASF licenses this file
//  to you 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 = "proto2";
package heron.proto.system;

option java_package = "org.apache.heron.proto.system";
option java_outer_classname = "ExecutionEnvironment";

message HeronReleaseState {
  optional string release_username = 1;
  optional string release_tag = 2;
  // This is the user facing release version
  optional string release_version = 3;
}

message ExecutionState {
  required string topology_name = 1;
  required string topology_id = 2;
  // The time the topology was submitted
  // Unix time
  optional int64 submission_time = 3;
  // The username who launched the topology
  optional string submission_user = 4;

  required string cluster = 5;
  required string environ = 6;
  required string role = 7;
  optional HeronReleaseState release_state = 8;
}
