// Copyright 2020 The Pigweed 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 // // https://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 pw.metric; // A metric, described by the name (path + name), and the value. // // This flattened representation, while more complicated than the obvious tree // structure alternative, enables streaming metrics from the device in low // memory or low compute situations. message Metric { // The token path from the root. The last token is the metric name, and // previous tokens are the parent group names. This could be converted from // the tokens into a string; for example the token path {0xfaff, 0xabcd}: // // - The group is 0xfaff (root, parent) // - The metric is 0xabcd // // Given the token database, this might be converted into: // // /i2c_bus_1/failed_transactions // // Note: This uses a repeated fixed32 instead of a "Oneof" with the string // path to reduce the encoded size. Using a repeated Oneof name { str, // fixed32 } would cost approximately 6N bytes for N path elements, vs 2 + 4N // bytes in the packed case. repeated fixed32 token_path = 1; // The string path from the root. Similar to token path, but with strings. // Note: This is currently unsupported. repeated string string_path = 2; // The metric value. This field should be omitted when used as a query. oneof value { float as_float = 3; uint32 as_int = 4; }; } message MetricRequest { // Metrics or the groups matched to the given paths are returned. The intent // is to support matching semantics, with at least subsetting to e.g. collect // all the metrics in a group and its children. We may also implement // wildcard matchers. // // Value fields in the metrics will be ignored, since this is a query. // // Note: This is currently unsupported. repeated Metric metrics = 1; } message MetricResponse { repeated Metric metrics = 1; } service MetricService { // Returns metrics or groups matching the requested paths. rpc Get(MetricRequest) returns (stream MetricResponse) {} }