// 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.

syntax = "proto3";

package cast.metrics;

option optimize_for = LITE_RUNTIME;

service MetricsRecorderService {
  // Record a set of|Event|
  rpc Record(RecordRequest) returns (RecordResponse);
}

message RecordRequest {
  repeated Event event = 1;
}

message RecordResponse {}

// This repliciates the Fuchsia approach to Cast metrics; for documentation on
// event structure, refer to
// fuchsia.googlesource.com/fuchsia/+/master/sdk/fidl/fuchsia.legacymetrics/event.fidl
message Event {
  oneof event_type {
    UserActionEvent user_action_event = 1;
    Histogram histogram = 2;
    ImplementationDefinedEvent impl_defined_event = 3;
  }
}

message UserActionEvent {
  string name = 1;
  int64 time = 2;
}

message Histogram {
  string name = 1;
  repeated HistogramBucket bucket = 2;
  int64 sum = 3;
}

message HistogramBucket {
  int64 min = 1;
  int64 max = 2;
  int64 count = 3;
}

message ImplementationDefinedEvent {
  bytes data = 1;
  string name = 2;
}
