// Copyright 2018 The gVisor Authors. // // 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 gvisor; import "google/protobuf/timestamp.proto"; // MetricMetadata contains all of the metadata describing a single metric. message MetricMetadata { // name is the unique name of the metric, usually in a "directory" format // (e.g., /foo/count). string name = 1; // description is a human-readable description of the metric. string description = 2; // cumulative indicates that this metric is never decremented. bool cumulative = 3; // sync indicates that values from the final metric event should be // synchronized to the backing monitoring system at exit. // // If sync is false, values are only sent to the monitoring system // periodically. There is no guarantee that values will ever be received by // the monitoring system. bool sync = 4; enum Type { TYPE_UINT64 = 0; } // type is the type of the metric value. Type type = 5; enum Units { UNITS_NONE = 0; UNITS_NANOSECONDS = 1; } // units is the units of the metric value. Units units = 6; message Field { string field_name = 1; repeated string allowed_values = 2; } // fields contains the metric fields. Currently a metric can have at most // one field. repeated Field fields = 7; } // MetricRegistration contains the metadata for all metrics that will be in // future MetricUpdates. message MetricRegistration { repeated MetricMetadata metrics = 1; repeated string stages = 2; } // MetricValue the value of a metric at a single point in time. message MetricValue { // name is the unique name of the metric, as in MetricMetadata. string name = 1; // value is the value of the metric at a single point in time. The field set // depends on the type of the metric. oneof value { uint64 uint64_value = 2; } repeated string field_values = 4; } // StageTiming represents a new stage that's been reached by the Sentry. message StageTiming { string stage = 1; google.protobuf.Timestamp started = 2; google.protobuf.Timestamp ended = 3; } // MetricUpdate contains new values for multiple distinct metrics. // // Metrics whose values have not changed are not included. message MetricUpdate { repeated MetricValue metrics = 1; // Timing information of initialization stages reached since last update. // The first MetricUpdate will include multiple entries, since metric // initialization happens relatively late in the Sentry startup process. repeated StageTiming stage_timing = 2; }