blob: 74337a89f26f3c5a53f449b22b562d04826e62b5 [file] [log] [blame]
// 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.
library fuchsia.cobalt;
/// A specification to identify a single Cobalt report.
type ReportSpec = table {
/// The customer ID, as specified in Cobalt's metrics registry.
1: customer_id uint32;
/// The ID of the project, as specified in Cobalt's metrics registry.
2: project_id uint32;
/// The ID of the metric, as specified in Cobalt's metrics registry.
3: metric_id uint32;
/// The ID of the report, as specified in Cobalt's metrics registry.
4: report_id uint32;
/// The Controller is primarily useful for testing the Cobalt service.
/// Cobalt clients should use the Logger.
closed protocol Controller {
/// Requests that the collection of Observations that are currently cached
/// locally be sent to the Cobalt server soon. Cobalt will send the
/// Observations in one or more batches and will retry several times upon
/// failure. The response occurs only after that procedure is completed. A
/// return value of true indicates that all Observations were successfully
/// sent. A return value of false indicates otherwise.
strict RequestSendSoon() -> (struct {
success bool;
/// Triggers Cobalt to generate Observations based on locally aggregated
/// event data and write them to the local ObservationStore. In a non-test
/// environment this would normally be done periodically by a background
/// thread. In a test environment this method should be invoked against an
/// instance of the Cobalt FIDL service that was passed the flag
/// --start_event_aggregator_worker=false.
/// `day_index` The index of the day for which locally aggregated
/// Observations should be generated.
/// `report_specs` A vector of specifications identifying the reports to
/// return the number of observations for.
/// Returns a vector whose k-th element is the number of observations
/// generated for the k-th element of `report_specs`. If `report_specs`
/// is the empty vector, then an empty vector is returned.
strict GenerateAggregatedObservations(struct {
day_index uint32;
report_specs vector<ReportSpec>:MAX;
}) -> (struct {
num_obs vector<uint64>:MAX;
/// Requests that the caller be notified after the Cobalt FIDL service
/// is in the fully-initialized state.
/// Cobalt starts serving requests before it is fully initialized. In this
/// pre-initialized state it will buffer incoming log events in memory
/// but not complete their processing. After Cobalt becomes fully
/// initialized the events in the bufer are fully processed.
/// A partial list of things that must happen before Cobalt enters the
/// fully-initialized state are:
/// - Cobalt must by notified by the timekeeper service that the system
/// clock has become accurate--usually because the time has been
/// fetched from a trusted network resource.
/// The callback to this method will be invoked after Cobalt transistions
// to the fully-initialized state. This may never happen.
strict ListenForInitialized() -> ();