// Copyright 2020 The Chromium OS 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 prototype;

import "prototype/client_profile_id.proto";
import "google/protobuf/duration.proto";

option go_package = "go.chromium.org/chromiumos/infra/proto/go/prototype";

// Profile to coordinate behavioral configs of internal sub services e.g. test
// platform Next Tag: 4
message ClientProfile {
  string name = 1;
  ClientProfileId id = 2;
  TestPlatformProfile test_platform_profile = 3;
}

// TestPlatformProfile configures aspects of the test platform behaviour
// per-request. Configure the scheduling priorities in the test platform, retry
// behavior, timeout characteristics and alerting thresholds throughout the test
// platform stack. Next Tag: 5
message TestPlatformProfile {
  SchedulerProfile scheduler = 1;
  RetryProfile retry = 2;
  TimeoutProfile timeout = 3;
  MonitoringProfile monitoring = 4;
}

// SchedulerProfile controls the test platform scheduling behaviour.
// Next Tag: 5
message SchedulerProfile {
  // The task scheduling pools this device may be used for.
  //
  // Historical note: The concept of managed pools (e.g.: DUT_POOL_CQ) was used
  // for automatic balancing of healthy devices in critical pools. Due to
  // merging of critical pools into a common scheduler pool, this auto-balancing
  // service is no longer required.
  //
  // Old enum values are now serialized to the JSON encoding of those enums
  // (e.g. "DUT_POOL_QUOTA").
  // See lab/device.proto:DeviceUnderTest::DutPool.
  repeated string pools = 1;

  oneof qos_channel {
    // Priority corresponding to a swarming task priority.
    // If specified, it should be in the range [50,255].
    // It will be used for any swarming tasks created by this run.
    //
    // Note that the scheduler behavior with a given priority depends on
    // other factors, such as pool. In particular, if requests are run in
    // a quotascheduler-controlled pool, then this priority will be ignored,
    // as priority will be determined by quota account balances.
    uint32 priority = 2;

    // Quota account for both managed and unamanged pools.
    // It should be used if the request is scheduled on a pool
    // managed by QuotaScheduler. See go/qs-enabled-pools for details.
    // If set for requests on no QuotaScheduler pools,
    // it will be ignored and the request will default to running at
    // the lowest priority.
    string quota_account = 3;
  }

}

// RetryPrfoile defines parameters that affect how failed tests within
// a request are retried.
message RetryProfile {
  // Whether to allow test retries.
  bool allow = 1;

  // Maximum number of retries of tests within this invocation to allow.
  // 0 = unlimited.
  uint32 max = 2;
}

// TimeoutProfile defines parameters related to timeouts.
message TimeoutProfile {
  // Maximum duration for the entire request to be handled.
  google.protobuf.Duration maximum_duration = 1;
}

// MonitoringProfile controls the alerting and monitoring of requests
// associated with the profile throughout the test infrastructure
// stack.
message MonitoringProfile {
  TestPlatformAlertingThresholds test_platform_alerting_thresholds = 1;
}

// TestPlatformAlertingThresholds capture alerting thresholds for test platform.
message TestPlatformAlertingThresholds {
  // TODO: TBD
}
