// Copyright 2013 Prometheus Team // 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. package io.prometheus; import "google/protobuf/descriptor.proto"; message LabelPair { optional string name = 1; optional string value = 2; } message LabelName { optional string name = 1; } message Metric { repeated LabelPair label_pair = 1; } message Fingerprint { optional string signature = 1; } message FingerprintCollection { repeated Fingerprint member = 1; } message LabelSet { repeated LabelPair member = 1; } // The default LevelDB comparator sorts not only lexicographically, but also by // key length (which takes precedence). Thus, no variable-length fields may be // introduced into the key definition below. message SampleKey { optional Fingerprint fingerprint = 1; optional bytes timestamp = 2; optional sfixed64 last_timestamp = 3; optional fixed32 sample_count = 4; } message SampleValueSeries { message Value { optional int64 timestamp = 1; optional double value = 2; } repeated Value value = 1; } message MembershipIndexValue { } message MetricHighWatermark { optional int64 timestamp = 1; } // CompactionProcessorDefinition models a curation process across the sample // corpus that ensures that sparse samples. message CompactionProcessorDefinition { // minimum_group_size identifies how minimally samples should be grouped // together to write a new SampleValueSeries chunk. optional uint32 minimum_group_size = 1; } // CurationKey models the state of curation for a given metric fingerprint and // its associated samples. The time series database only knows about compaction // and resampling behaviors that are explicitly defined to it in its runtime // configuration, meaning it never scans on-disk tables for CurationKey // policies; rather, it looks up via the CurationKey tuple to find out what the // effectuation state for a given metric fingerprint is. // // For instance, how far along as a rule for (Fingerprint A, Samples Older Than // B, and Curation Processor) has been effectuated on-disk. message CurationKey { // fingerprint identifies the fingerprint for the given policy. optional Fingerprint fingerprint = 1; // processor_message_type_name identifies the underlying message type that // was used to encode processor_message_raw. optional string processor_message_type_name = 2; // processor_message_raw identifies the serialized ProcessorSignature for this // operation. optional bytes processor_message_raw = 3; // ignore_younger_than represents in seconds relative to when the curation // cycle start when the curator should stop operating. For instance, if // the curation cycle starts at time T and the curation remark dictates that // the curation should starts processing samples at time S, the curator should // work from S until ignore_younger_than seconds before T: // // PAST NOW FUTURE // // S--------------->|----------T // |---IYT----| // // [Curation Resumption Time (S), T - IYT) optional int64 ignore_younger_than = 4; // This could be populated by decoding the generated descriptor file into a // FileDescriptorSet message and extracting the type definition for the given // message schema that describes processor_message_type_name. // // optional google.protobuf.DescriptorProto processor_message_type_descriptor_raw = 5; } // CurationValue models the progress for a given CurationKey. message CurationValue { // last_completion_timestamp represents the seconds since the epoch UTC at // which the curator last completed its duty cycle for a given metric // fingerprint. optional int64 last_completion_timestamp = 1; }