// Copyright 2021 Google LLC
//
// 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.

// Protobuf definitions for reporting instance status.
syntax = "proto2";

package protos;
// option go_package = "policy_manager/protos";

// InstanceStatus contains all the fields related to the current status of the
// instance.
message InstanceStatus {
  // GCE instance ID.
  optional uint64 instance_id = 1;

  // update_engine is set to true if the update engine systemd
  // service is active.
  optional string update_engine = 2;

  // metrics is set to true if the crash reporter systemd
  // service is active.
  optional bool metrics = 3;

  // logging is set to true if the logging systemd service
  // is active and running.
  optional bool logging = 4;

  // monitoring is set to true if the monitoring systemd service
  // is active and running.
  optional bool monitoring = 5;

  // If an error occurred while collecting the instance status, this field will
  // be set with the error message and all other fields except the instance_id
  // are undefined.
  optional string error = 6;

  // Next number: 7
}
