// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

syntax = "proto3";

package cobalt;

option go_package = "src/registry;config";

import "src/registry/metric_definition.proto";

// ProjectConfigFile is a representation of a yaml config file for a single
// cobalt project.
message ProjectConfigFile {
  reserved 1, 2, 3;

  // Cobalt 1.0 registration.
  repeated MetricDefinition metric_definitions = 4;
}

// Configuration for the Cobalt 1.0 projects of a customer.
message CustomerConfig {
  string customer_name = 1;
  uint32 customer_id = 2;
  repeated ProjectConfig projects = 3;
}

// Configuration for a Cobalt 1.0 project.
message ProjectConfig {
  string project_name = 1;
  uint32 project_id = 2;
  repeated MetricDefinition metrics = 3;
  string project_contact = 4;
}

// CobaltRegistry holds a set of metrics and reports registered with Cobalt.
//
// A CobaltRegistry can be in one of two states:
//
// (1) It can contain data for a single Cobalt 1.0 project. In this case, there is a single
//     CustomerConfig which contains a single ProjectConfig.
//
// (2) It can contain data for multiple Cobalt projects. In this case, there may be any number of
//     |customers|, which in turn may contain any number of ProjectConfigs.
message CobaltRegistry {
  reserved 1, 2, 3, 4;
  // Cobalt 1.0 registration.
  repeated CustomerConfig customers = 5;
}
