// Copyright 2020 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.legacymetrics;

/// Accepts metrics events and uploads them to UMA servers for analysis. Metrics
/// events are batched and uploaded at a regular interval. If this service is
/// unable to upload events, it will try persisting them for later re-upload.
/// For similar behavior, see Chromium's MetricsService:
/// https://chromium.googlesource.com/chromium/src.git/+/HEAD/components/metrics/metrics_service.cc
[Discoverable]
protocol MetricsRecorder {
    /// Processes and enqueues a batch of events for upload. Returns after the
    /// provided metrics are successfully processed by the service. Clients
    /// should wait for a completion callback before sending subsequent Record()
    /// requests.
    Record(vector<Event>:MAX events) -> ();

    /// Indicates that this service will close all connections soon. Upon
    /// receiving this event, each client should call Record() once for any
    /// available metrics and close its connection to this sevice. Otherwise,
    /// this service will close all incoming connections after a predefined
    /// timeout starting from the moment it broadcasts this event.
    -> OnCloseSoon();
};
