// 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";

// ServiceStatus contains all the fields related to the current status of the
// instance.
message ServiceStatus {
  // 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
}
