mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-07-28 20:52:57 +08:00
Setup Prometheus Remote Write Exporter (#180)
This commit is contained in:

committed by
GitHub

parent
18c18f30a2
commit
9b71f8b30c
1
.flake8
1
.flake8
@ -19,6 +19,7 @@ exclude =
|
|||||||
__pycache__
|
__pycache__
|
||||||
exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/
|
exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/
|
||||||
exporter/opentelemetry-exporter-jaeger/build/*
|
exporter/opentelemetry-exporter-jaeger/build/*
|
||||||
|
exporter/opentelemetry-exporter-prometheus-remote-write/src/opentelemetry/exporter/prometheus_remote_write/gen
|
||||||
docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/gen/
|
docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/gen/
|
||||||
docs/examples/opentelemetry-example-app/build/*
|
docs/examples/opentelemetry-example-app/build/*
|
||||||
opentelemetry-python-core/
|
opentelemetry-python-core/
|
||||||
|
@ -165,7 +165,7 @@ contextmanager-decorators=contextlib.contextmanager
|
|||||||
# List of members which are set dynamically and missed by pylint inference
|
# List of members which are set dynamically and missed by pylint inference
|
||||||
# system, and so shouldn't trigger E1101 when accessed. Python regular
|
# system, and so shouldn't trigger E1101 when accessed. Python regular
|
||||||
# expressions are accepted.
|
# expressions are accepted.
|
||||||
generated-members=
|
generated-members=*_pb2.py
|
||||||
|
|
||||||
# Tells whether missing members accessed in mixin class should be ignored. A
|
# Tells whether missing members accessed in mixin class should be ignored. A
|
||||||
# mixin class is detected if its name ends with "mixin" (case insensitive).
|
# mixin class is detected if its name ends with "mixin" (case insensitive).
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
## Unreleased
|
||||||
|
- Setup for Prometheus Remote Write Exporter
|
||||||
|
((#180)[https://github.com/open-telemetry/opentelemetry-python-contrib/pull/180])
|
@ -0,0 +1,27 @@
|
|||||||
|
OpenTelemetry Prometheus Remote Write Exporter
|
||||||
|
==============================================
|
||||||
|
|
||||||
|
This library allows exporting metric data to `Prometheus Remote Write Integrated Backends
|
||||||
|
<https://prometheus.io/docs/operating/integrations/>`_. Latest `types.proto
|
||||||
|
<https://github.com/prometheus/prometheus/blob/master/prompb/types.proto>` and `remote.proto
|
||||||
|
<https://github.com/prometheus/prometheus/blob/master/prompb/remote.proto>` Protocol Buffers
|
||||||
|
used to create WriteRequest objects were taken from Prometheus repository. Development is
|
||||||
|
currently in progress.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
------------
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
pip install opentelemetry-exporter-prometheus-remote-write
|
||||||
|
|
||||||
|
|
||||||
|
.. _Prometheus: https://prometheus.io/
|
||||||
|
.. _OpenTelemetry: https://github.com/open-telemetry/opentelemetry-python/
|
||||||
|
|
||||||
|
|
||||||
|
References
|
||||||
|
----------
|
||||||
|
|
||||||
|
* `Prometheus <https://prometheus.io/>`_
|
||||||
|
* `OpenTelemetry Project <https://opentelemetry.io/>`_
|
@ -0,0 +1,49 @@
|
|||||||
|
# Copyright The OpenTelemetry 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.
|
||||||
|
#
|
||||||
|
[metadata]
|
||||||
|
name = opentelemetry-exporter-prometheus-remote-write
|
||||||
|
description = Prometheus Remote Write Metrics Exporter for OpenTelemetry
|
||||||
|
long_description = file: README.rst
|
||||||
|
long_description_content_type = text/x-rst
|
||||||
|
author = OpenTelemetry Authors
|
||||||
|
author_email = cncf-opentelemetry-contributors@lists.cncf.io
|
||||||
|
url = https://github.com/open-telemetry/opentelemetry-python-contrib/tree/master/exporter/opentelemetry-exporter-prometheus-remote-write
|
||||||
|
platforms = any
|
||||||
|
license = Apache-2.0
|
||||||
|
classifiers =
|
||||||
|
Development Status :: 4 - Beta
|
||||||
|
Intended Audience :: Developers
|
||||||
|
License :: OSI Approved :: Apache Software License
|
||||||
|
Programming Language :: Python
|
||||||
|
Programming Language :: Python :: 3
|
||||||
|
Programming Language :: Python :: 3.5
|
||||||
|
Programming Language :: Python :: 3.6
|
||||||
|
Programming Language :: Python :: 3.7
|
||||||
|
Programming Language :: Python :: 3.8
|
||||||
|
|
||||||
|
[options]
|
||||||
|
python_requires = >=3.5
|
||||||
|
package_dir=
|
||||||
|
=src
|
||||||
|
packages=find_namespace:
|
||||||
|
install_requires =
|
||||||
|
opentelemetry-api == 0.16.dev0
|
||||||
|
opentelemetry-sdk == 0.16.dev0
|
||||||
|
|
||||||
|
[options.packages.find]
|
||||||
|
where = src
|
||||||
|
|
||||||
|
[options.extras_require]
|
||||||
|
test =
|
@ -0,0 +1,32 @@
|
|||||||
|
# Copyright The OpenTelemetry 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.
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
import setuptools
|
||||||
|
|
||||||
|
BASE_DIR = os.path.dirname(__file__)
|
||||||
|
VERSION_FILENAME = os.path.join(
|
||||||
|
BASE_DIR,
|
||||||
|
"src",
|
||||||
|
"opentelemetry",
|
||||||
|
"exporter",
|
||||||
|
"prometheus_remote_write",
|
||||||
|
"version.py",
|
||||||
|
)
|
||||||
|
PACKAGE_INFO = {}
|
||||||
|
with open(VERSION_FILENAME) as f:
|
||||||
|
exec(f.read(), PACKAGE_INFO)
|
||||||
|
|
||||||
|
setuptools.setup(version=PACKAGE_INFO["__version__"])
|
@ -0,0 +1,113 @@
|
|||||||
|
# Copyright The OpenTelemetry 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.
|
||||||
|
|
||||||
|
from typing import Dict, Sequence
|
||||||
|
|
||||||
|
from opentelemetry.exporter.prometheus_remote_write.gen.types_pb2 import (
|
||||||
|
Label,
|
||||||
|
Sample,
|
||||||
|
TimeSeries,
|
||||||
|
)
|
||||||
|
from opentelemetry.sdk.metrics.export import (
|
||||||
|
ExportRecord,
|
||||||
|
MetricsExporter,
|
||||||
|
MetricsExportResult,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class PrometheusRemoteWriteMetricsExporter(MetricsExporter):
|
||||||
|
"""
|
||||||
|
Prometheus remote write metric exporter for OpenTelemetry.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
endpoint: url where data will be sent (Required)
|
||||||
|
basic_auth: username and password for authentication (Optional)
|
||||||
|
bearer_token: token used for authentication (Optional)
|
||||||
|
bearer_token_file: filepath to file containing authentication token (Optional)
|
||||||
|
headers: additional headers for remote write request (Optional
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
endpoint: str,
|
||||||
|
basic_auth: Dict = None,
|
||||||
|
bearer_token: str = None,
|
||||||
|
bearer_token_file: str = None,
|
||||||
|
headers: Dict = None,
|
||||||
|
):
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def export(
|
||||||
|
self, export_records: Sequence[ExportRecord]
|
||||||
|
) -> MetricsExportResult:
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def shutdown(self) -> None:
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def convert_to_timeseries(
|
||||||
|
self, export_records: Sequence[ExportRecord]
|
||||||
|
) -> Sequence[TimeSeries]:
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def convert_from_sum(self, sum_record: ExportRecord) -> TimeSeries:
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def convert_from_min_max_sum_count(
|
||||||
|
self, min_max_sum_count_record: ExportRecord
|
||||||
|
) -> TimeSeries:
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def convert_from_histogram(
|
||||||
|
self, histogram_record: ExportRecord
|
||||||
|
) -> TimeSeries:
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def convert_from_last_value(
|
||||||
|
self, last_value_record: ExportRecord
|
||||||
|
) -> TimeSeries:
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def convert_from_value_observer(
|
||||||
|
self, value_observer_record: ExportRecord
|
||||||
|
) -> TimeSeries:
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def convert_from_quantile(
|
||||||
|
self, summary_record: ExportRecord
|
||||||
|
) -> TimeSeries:
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
# pylint: disable=no-member
|
||||||
|
def create_timeseries(
|
||||||
|
self, export_record: ExportRecord, name, value: float
|
||||||
|
) -> TimeSeries:
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def create_sample(self, timestamp: int, value: float) -> Sample:
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def create_label(self, name: str, value: str) -> Label:
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def build_message(self, timeseries: Sequence[TimeSeries]) -> bytes:
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def get_headers(self) -> Dict:
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def send_message(
|
||||||
|
self, message: bytes, headers: Dict
|
||||||
|
) -> MetricsExportResult:
|
||||||
|
raise NotImplementedError()
|
@ -0,0 +1,145 @@
|
|||||||
|
// Protocol Buffers for Go with Gadgets
|
||||||
|
//
|
||||||
|
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
||||||
|
// http://github.com/gogo/protobuf
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
syntax = "proto2";
|
||||||
|
package gogoproto;
|
||||||
|
|
||||||
|
import "google/protobuf/descriptor.proto";
|
||||||
|
|
||||||
|
option java_package = "com.google.protobuf";
|
||||||
|
option java_outer_classname = "GoGoProtos";
|
||||||
|
option go_package = "github.com/gogo/protobuf/gogoproto";
|
||||||
|
|
||||||
|
extend google.protobuf.EnumOptions {
|
||||||
|
optional bool goproto_enum_prefix = 62001;
|
||||||
|
optional bool goproto_enum_stringer = 62021;
|
||||||
|
optional bool enum_stringer = 62022;
|
||||||
|
optional string enum_customname = 62023;
|
||||||
|
optional bool enumdecl = 62024;
|
||||||
|
}
|
||||||
|
|
||||||
|
extend google.protobuf.EnumValueOptions {
|
||||||
|
optional string enumvalue_customname = 66001;
|
||||||
|
}
|
||||||
|
|
||||||
|
extend google.protobuf.FileOptions {
|
||||||
|
optional bool goproto_getters_all = 63001;
|
||||||
|
optional bool goproto_enum_prefix_all = 63002;
|
||||||
|
optional bool goproto_stringer_all = 63003;
|
||||||
|
optional bool verbose_equal_all = 63004;
|
||||||
|
optional bool face_all = 63005;
|
||||||
|
optional bool gostring_all = 63006;
|
||||||
|
optional bool populate_all = 63007;
|
||||||
|
optional bool stringer_all = 63008;
|
||||||
|
optional bool onlyone_all = 63009;
|
||||||
|
|
||||||
|
optional bool equal_all = 63013;
|
||||||
|
optional bool description_all = 63014;
|
||||||
|
optional bool testgen_all = 63015;
|
||||||
|
optional bool benchgen_all = 63016;
|
||||||
|
optional bool marshaler_all = 63017;
|
||||||
|
optional bool unmarshaler_all = 63018;
|
||||||
|
optional bool stable_marshaler_all = 63019;
|
||||||
|
|
||||||
|
optional bool sizer_all = 63020;
|
||||||
|
|
||||||
|
optional bool goproto_enum_stringer_all = 63021;
|
||||||
|
optional bool enum_stringer_all = 63022;
|
||||||
|
|
||||||
|
optional bool unsafe_marshaler_all = 63023;
|
||||||
|
optional bool unsafe_unmarshaler_all = 63024;
|
||||||
|
|
||||||
|
optional bool goproto_extensions_map_all = 63025;
|
||||||
|
optional bool goproto_unrecognized_all = 63026;
|
||||||
|
optional bool gogoproto_import = 63027;
|
||||||
|
optional bool protosizer_all = 63028;
|
||||||
|
optional bool compare_all = 63029;
|
||||||
|
optional bool typedecl_all = 63030;
|
||||||
|
optional bool enumdecl_all = 63031;
|
||||||
|
|
||||||
|
optional bool goproto_registration = 63032;
|
||||||
|
optional bool messagename_all = 63033;
|
||||||
|
|
||||||
|
optional bool goproto_sizecache_all = 63034;
|
||||||
|
optional bool goproto_unkeyed_all = 63035;
|
||||||
|
}
|
||||||
|
|
||||||
|
extend google.protobuf.MessageOptions {
|
||||||
|
optional bool goproto_getters = 64001;
|
||||||
|
optional bool goproto_stringer = 64003;
|
||||||
|
optional bool verbose_equal = 64004;
|
||||||
|
optional bool face = 64005;
|
||||||
|
optional bool gostring = 64006;
|
||||||
|
optional bool populate = 64007;
|
||||||
|
optional bool stringer = 67008;
|
||||||
|
optional bool onlyone = 64009;
|
||||||
|
|
||||||
|
optional bool equal = 64013;
|
||||||
|
optional bool description = 64014;
|
||||||
|
optional bool testgen = 64015;
|
||||||
|
optional bool benchgen = 64016;
|
||||||
|
optional bool marshaler = 64017;
|
||||||
|
optional bool unmarshaler = 64018;
|
||||||
|
optional bool stable_marshaler = 64019;
|
||||||
|
|
||||||
|
optional bool sizer = 64020;
|
||||||
|
|
||||||
|
optional bool unsafe_marshaler = 64023;
|
||||||
|
optional bool unsafe_unmarshaler = 64024;
|
||||||
|
|
||||||
|
optional bool goproto_extensions_map = 64025;
|
||||||
|
optional bool goproto_unrecognized = 64026;
|
||||||
|
|
||||||
|
optional bool protosizer = 64028;
|
||||||
|
optional bool compare = 64029;
|
||||||
|
|
||||||
|
optional bool typedecl = 64030;
|
||||||
|
|
||||||
|
optional bool messagename = 64033;
|
||||||
|
|
||||||
|
optional bool goproto_sizecache = 64034;
|
||||||
|
optional bool goproto_unkeyed = 64035;
|
||||||
|
}
|
||||||
|
|
||||||
|
extend google.protobuf.FieldOptions {
|
||||||
|
optional bool nullable = 65001;
|
||||||
|
optional bool embed = 65002;
|
||||||
|
optional string customtype = 65003;
|
||||||
|
optional string customname = 65004;
|
||||||
|
optional string jsontag = 65005;
|
||||||
|
optional string moretags = 65006;
|
||||||
|
optional string casttype = 65007;
|
||||||
|
optional string castkey = 65008;
|
||||||
|
optional string castvalue = 65009;
|
||||||
|
|
||||||
|
optional bool stdtime = 65010;
|
||||||
|
optional bool stdduration = 65011;
|
||||||
|
optional bool wktpointer = 65012;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,82 @@
|
|||||||
|
// Copyright 2016 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.
|
||||||
|
|
||||||
|
syntax = "proto3";
|
||||||
|
package prometheus;
|
||||||
|
|
||||||
|
option go_package = "prompb";
|
||||||
|
|
||||||
|
import "types.proto";
|
||||||
|
import "gogoproto/gogo.proto";
|
||||||
|
|
||||||
|
message WriteRequest {
|
||||||
|
repeated prometheus.TimeSeries timeseries = 1 [(gogoproto.nullable) = false];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReadRequest represents a remote read request.
|
||||||
|
message ReadRequest {
|
||||||
|
repeated Query queries = 1;
|
||||||
|
|
||||||
|
enum ResponseType {
|
||||||
|
// Server will return a single ReadResponse message with matched series that includes list of raw samples.
|
||||||
|
// It's recommended to use streamed response types instead.
|
||||||
|
//
|
||||||
|
// Response headers:
|
||||||
|
// Content-Type: "application/x-protobuf"
|
||||||
|
// Content-Encoding: "snappy"
|
||||||
|
SAMPLES = 0;
|
||||||
|
// Server will stream a delimited ChunkedReadResponse message that contains XOR encoded chunks for a single series.
|
||||||
|
// Each message is following varint size and fixed size bigendian uint32 for CRC32 Castagnoli checksum.
|
||||||
|
//
|
||||||
|
// Response headers:
|
||||||
|
// Content-Type: "application/x-streamed-protobuf; proto=prometheus.ChunkedReadResponse"
|
||||||
|
// Content-Encoding: ""
|
||||||
|
STREAMED_XOR_CHUNKS = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// accepted_response_types allows negotiating the content type of the response.
|
||||||
|
//
|
||||||
|
// Response types are taken from the list in the FIFO order. If no response type in `accepted_response_types` is
|
||||||
|
// implemented by server, error is returned.
|
||||||
|
// For request that do not contain `accepted_response_types` field the SAMPLES response type will be used.
|
||||||
|
repeated ResponseType accepted_response_types = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReadResponse is a response when response_type equals SAMPLES.
|
||||||
|
message ReadResponse {
|
||||||
|
// In same order as the request's queries.
|
||||||
|
repeated QueryResult results = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Query {
|
||||||
|
int64 start_timestamp_ms = 1;
|
||||||
|
int64 end_timestamp_ms = 2;
|
||||||
|
repeated prometheus.LabelMatcher matchers = 3;
|
||||||
|
prometheus.ReadHints hints = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message QueryResult {
|
||||||
|
// Samples within a time series must be ordered by time.
|
||||||
|
repeated prometheus.TimeSeries timeseries = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChunkedReadResponse is a response when response_type equals STREAMED_XOR_CHUNKS.
|
||||||
|
// We strictly stream full series after series, optionally split by time. This means that a single frame can contain
|
||||||
|
// partition of the single series, but once a new series is started to be streamed it means that no more chunks will
|
||||||
|
// be sent for previous one. Series are returned sorted in the same way TSDB block are internally.
|
||||||
|
message ChunkedReadResponse {
|
||||||
|
repeated prometheus.ChunkedSeries chunked_series = 1;
|
||||||
|
|
||||||
|
// query_index represents an index of the query from ReadRequest.queries these chunks relates to.
|
||||||
|
int64 query_index = 2;
|
||||||
|
}
|
@ -0,0 +1,345 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||||
|
# source: remote.proto
|
||||||
|
"""Generated protocol buffer code."""
|
||||||
|
from google.protobuf import descriptor as _descriptor
|
||||||
|
from google.protobuf import message as _message
|
||||||
|
from google.protobuf import reflection as _reflection
|
||||||
|
from google.protobuf import symbol_database as _symbol_database
|
||||||
|
# @@protoc_insertion_point(imports)
|
||||||
|
|
||||||
|
_sym_db = _symbol_database.Default()
|
||||||
|
|
||||||
|
|
||||||
|
from . import types_pb2 as types__pb2
|
||||||
|
from .gogoproto import gogo_pb2 as gogoproto_dot_gogo__pb2
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTOR = _descriptor.FileDescriptor(
|
||||||
|
name='remote.proto',
|
||||||
|
package='prometheus',
|
||||||
|
syntax='proto3',
|
||||||
|
serialized_options=b'Z\006prompb',
|
||||||
|
create_key=_descriptor._internal_create_key,
|
||||||
|
serialized_pb=b'\n\x0cremote.proto\x12\nprometheus\x1a\x0btypes.proto\x1a\x14gogoproto/gogo.proto\"@\n\x0cWriteRequest\x12\x30\n\ntimeseries\x18\x01 \x03(\x0b\x32\x16.prometheus.TimeSeriesB\x04\xc8\xde\x1f\x00\"\xae\x01\n\x0bReadRequest\x12\"\n\x07queries\x18\x01 \x03(\x0b\x32\x11.prometheus.Query\x12\x45\n\x17\x61\x63\x63\x65pted_response_types\x18\x02 \x03(\x0e\x32$.prometheus.ReadRequest.ResponseType\"4\n\x0cResponseType\x12\x0b\n\x07SAMPLES\x10\x00\x12\x17\n\x13STREAMED_XOR_CHUNKS\x10\x01\"8\n\x0cReadResponse\x12(\n\x07results\x18\x01 \x03(\x0b\x32\x17.prometheus.QueryResult\"\x8f\x01\n\x05Query\x12\x1a\n\x12start_timestamp_ms\x18\x01 \x01(\x03\x12\x18\n\x10\x65nd_timestamp_ms\x18\x02 \x01(\x03\x12*\n\x08matchers\x18\x03 \x03(\x0b\x32\x18.prometheus.LabelMatcher\x12$\n\x05hints\x18\x04 \x01(\x0b\x32\x15.prometheus.ReadHints\"9\n\x0bQueryResult\x12*\n\ntimeseries\x18\x01 \x03(\x0b\x32\x16.prometheus.TimeSeries\"]\n\x13\x43hunkedReadResponse\x12\x31\n\x0e\x63hunked_series\x18\x01 \x03(\x0b\x32\x19.prometheus.ChunkedSeries\x12\x13\n\x0bquery_index\x18\x02 \x01(\x03\x42\x08Z\x06prompbb\x06proto3'
|
||||||
|
,
|
||||||
|
dependencies=[types__pb2.DESCRIPTOR,gogoproto_dot_gogo__pb2.DESCRIPTOR,])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_READREQUEST_RESPONSETYPE = _descriptor.EnumDescriptor(
|
||||||
|
name='ResponseType',
|
||||||
|
full_name='prometheus.ReadRequest.ResponseType',
|
||||||
|
filename=None,
|
||||||
|
file=DESCRIPTOR,
|
||||||
|
create_key=_descriptor._internal_create_key,
|
||||||
|
values=[
|
||||||
|
_descriptor.EnumValueDescriptor(
|
||||||
|
name='SAMPLES', index=0, number=0,
|
||||||
|
serialized_options=None,
|
||||||
|
type=None,
|
||||||
|
create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.EnumValueDescriptor(
|
||||||
|
name='STREAMED_XOR_CHUNKS', index=1, number=1,
|
||||||
|
serialized_options=None,
|
||||||
|
type=None,
|
||||||
|
create_key=_descriptor._internal_create_key),
|
||||||
|
],
|
||||||
|
containing_type=None,
|
||||||
|
serialized_options=None,
|
||||||
|
serialized_start=252,
|
||||||
|
serialized_end=304,
|
||||||
|
)
|
||||||
|
_sym_db.RegisterEnumDescriptor(_READREQUEST_RESPONSETYPE)
|
||||||
|
|
||||||
|
|
||||||
|
_WRITEREQUEST = _descriptor.Descriptor(
|
||||||
|
name='WriteRequest',
|
||||||
|
full_name='prometheus.WriteRequest',
|
||||||
|
filename=None,
|
||||||
|
file=DESCRIPTOR,
|
||||||
|
containing_type=None,
|
||||||
|
create_key=_descriptor._internal_create_key,
|
||||||
|
fields=[
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='timeseries', full_name='prometheus.WriteRequest.timeseries', index=0,
|
||||||
|
number=1, type=11, cpp_type=10, label=3,
|
||||||
|
has_default_value=False, default_value=[],
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=b'\310\336\037\000', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
],
|
||||||
|
extensions=[
|
||||||
|
],
|
||||||
|
nested_types=[],
|
||||||
|
enum_types=[
|
||||||
|
],
|
||||||
|
serialized_options=None,
|
||||||
|
is_extendable=False,
|
||||||
|
syntax='proto3',
|
||||||
|
extension_ranges=[],
|
||||||
|
oneofs=[
|
||||||
|
],
|
||||||
|
serialized_start=63,
|
||||||
|
serialized_end=127,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
_READREQUEST = _descriptor.Descriptor(
|
||||||
|
name='ReadRequest',
|
||||||
|
full_name='prometheus.ReadRequest',
|
||||||
|
filename=None,
|
||||||
|
file=DESCRIPTOR,
|
||||||
|
containing_type=None,
|
||||||
|
create_key=_descriptor._internal_create_key,
|
||||||
|
fields=[
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='queries', full_name='prometheus.ReadRequest.queries', index=0,
|
||||||
|
number=1, type=11, cpp_type=10, label=3,
|
||||||
|
has_default_value=False, default_value=[],
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='accepted_response_types', full_name='prometheus.ReadRequest.accepted_response_types', index=1,
|
||||||
|
number=2, type=14, cpp_type=8, label=3,
|
||||||
|
has_default_value=False, default_value=[],
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
],
|
||||||
|
extensions=[
|
||||||
|
],
|
||||||
|
nested_types=[],
|
||||||
|
enum_types=[
|
||||||
|
_READREQUEST_RESPONSETYPE,
|
||||||
|
],
|
||||||
|
serialized_options=None,
|
||||||
|
is_extendable=False,
|
||||||
|
syntax='proto3',
|
||||||
|
extension_ranges=[],
|
||||||
|
oneofs=[
|
||||||
|
],
|
||||||
|
serialized_start=130,
|
||||||
|
serialized_end=304,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
_READRESPONSE = _descriptor.Descriptor(
|
||||||
|
name='ReadResponse',
|
||||||
|
full_name='prometheus.ReadResponse',
|
||||||
|
filename=None,
|
||||||
|
file=DESCRIPTOR,
|
||||||
|
containing_type=None,
|
||||||
|
create_key=_descriptor._internal_create_key,
|
||||||
|
fields=[
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='results', full_name='prometheus.ReadResponse.results', index=0,
|
||||||
|
number=1, type=11, cpp_type=10, label=3,
|
||||||
|
has_default_value=False, default_value=[],
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
],
|
||||||
|
extensions=[
|
||||||
|
],
|
||||||
|
nested_types=[],
|
||||||
|
enum_types=[
|
||||||
|
],
|
||||||
|
serialized_options=None,
|
||||||
|
is_extendable=False,
|
||||||
|
syntax='proto3',
|
||||||
|
extension_ranges=[],
|
||||||
|
oneofs=[
|
||||||
|
],
|
||||||
|
serialized_start=306,
|
||||||
|
serialized_end=362,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
_QUERY = _descriptor.Descriptor(
|
||||||
|
name='Query',
|
||||||
|
full_name='prometheus.Query',
|
||||||
|
filename=None,
|
||||||
|
file=DESCRIPTOR,
|
||||||
|
containing_type=None,
|
||||||
|
create_key=_descriptor._internal_create_key,
|
||||||
|
fields=[
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='start_timestamp_ms', full_name='prometheus.Query.start_timestamp_ms', index=0,
|
||||||
|
number=1, type=3, cpp_type=2, label=1,
|
||||||
|
has_default_value=False, default_value=0,
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='end_timestamp_ms', full_name='prometheus.Query.end_timestamp_ms', index=1,
|
||||||
|
number=2, type=3, cpp_type=2, label=1,
|
||||||
|
has_default_value=False, default_value=0,
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='matchers', full_name='prometheus.Query.matchers', index=2,
|
||||||
|
number=3, type=11, cpp_type=10, label=3,
|
||||||
|
has_default_value=False, default_value=[],
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='hints', full_name='prometheus.Query.hints', index=3,
|
||||||
|
number=4, type=11, cpp_type=10, label=1,
|
||||||
|
has_default_value=False, default_value=None,
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
],
|
||||||
|
extensions=[
|
||||||
|
],
|
||||||
|
nested_types=[],
|
||||||
|
enum_types=[
|
||||||
|
],
|
||||||
|
serialized_options=None,
|
||||||
|
is_extendable=False,
|
||||||
|
syntax='proto3',
|
||||||
|
extension_ranges=[],
|
||||||
|
oneofs=[
|
||||||
|
],
|
||||||
|
serialized_start=365,
|
||||||
|
serialized_end=508,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
_QUERYRESULT = _descriptor.Descriptor(
|
||||||
|
name='QueryResult',
|
||||||
|
full_name='prometheus.QueryResult',
|
||||||
|
filename=None,
|
||||||
|
file=DESCRIPTOR,
|
||||||
|
containing_type=None,
|
||||||
|
create_key=_descriptor._internal_create_key,
|
||||||
|
fields=[
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='timeseries', full_name='prometheus.QueryResult.timeseries', index=0,
|
||||||
|
number=1, type=11, cpp_type=10, label=3,
|
||||||
|
has_default_value=False, default_value=[],
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
],
|
||||||
|
extensions=[
|
||||||
|
],
|
||||||
|
nested_types=[],
|
||||||
|
enum_types=[
|
||||||
|
],
|
||||||
|
serialized_options=None,
|
||||||
|
is_extendable=False,
|
||||||
|
syntax='proto3',
|
||||||
|
extension_ranges=[],
|
||||||
|
oneofs=[
|
||||||
|
],
|
||||||
|
serialized_start=510,
|
||||||
|
serialized_end=567,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
_CHUNKEDREADRESPONSE = _descriptor.Descriptor(
|
||||||
|
name='ChunkedReadResponse',
|
||||||
|
full_name='prometheus.ChunkedReadResponse',
|
||||||
|
filename=None,
|
||||||
|
file=DESCRIPTOR,
|
||||||
|
containing_type=None,
|
||||||
|
create_key=_descriptor._internal_create_key,
|
||||||
|
fields=[
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='chunked_series', full_name='prometheus.ChunkedReadResponse.chunked_series', index=0,
|
||||||
|
number=1, type=11, cpp_type=10, label=3,
|
||||||
|
has_default_value=False, default_value=[],
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='query_index', full_name='prometheus.ChunkedReadResponse.query_index', index=1,
|
||||||
|
number=2, type=3, cpp_type=2, label=1,
|
||||||
|
has_default_value=False, default_value=0,
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
],
|
||||||
|
extensions=[
|
||||||
|
],
|
||||||
|
nested_types=[],
|
||||||
|
enum_types=[
|
||||||
|
],
|
||||||
|
serialized_options=None,
|
||||||
|
is_extendable=False,
|
||||||
|
syntax='proto3',
|
||||||
|
extension_ranges=[],
|
||||||
|
oneofs=[
|
||||||
|
],
|
||||||
|
serialized_start=569,
|
||||||
|
serialized_end=662,
|
||||||
|
)
|
||||||
|
|
||||||
|
_WRITEREQUEST.fields_by_name['timeseries'].message_type = types__pb2._TIMESERIES
|
||||||
|
_READREQUEST.fields_by_name['queries'].message_type = _QUERY
|
||||||
|
_READREQUEST.fields_by_name['accepted_response_types'].enum_type = _READREQUEST_RESPONSETYPE
|
||||||
|
_READREQUEST_RESPONSETYPE.containing_type = _READREQUEST
|
||||||
|
_READRESPONSE.fields_by_name['results'].message_type = _QUERYRESULT
|
||||||
|
_QUERY.fields_by_name['matchers'].message_type = types__pb2._LABELMATCHER
|
||||||
|
_QUERY.fields_by_name['hints'].message_type = types__pb2._READHINTS
|
||||||
|
_QUERYRESULT.fields_by_name['timeseries'].message_type = types__pb2._TIMESERIES
|
||||||
|
_CHUNKEDREADRESPONSE.fields_by_name['chunked_series'].message_type = types__pb2._CHUNKEDSERIES
|
||||||
|
DESCRIPTOR.message_types_by_name['WriteRequest'] = _WRITEREQUEST
|
||||||
|
DESCRIPTOR.message_types_by_name['ReadRequest'] = _READREQUEST
|
||||||
|
DESCRIPTOR.message_types_by_name['ReadResponse'] = _READRESPONSE
|
||||||
|
DESCRIPTOR.message_types_by_name['Query'] = _QUERY
|
||||||
|
DESCRIPTOR.message_types_by_name['QueryResult'] = _QUERYRESULT
|
||||||
|
DESCRIPTOR.message_types_by_name['ChunkedReadResponse'] = _CHUNKEDREADRESPONSE
|
||||||
|
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
|
||||||
|
|
||||||
|
WriteRequest = _reflection.GeneratedProtocolMessageType('WriteRequest', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _WRITEREQUEST,
|
||||||
|
'__module__' : 'remote_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:prometheus.WriteRequest)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(WriteRequest)
|
||||||
|
|
||||||
|
ReadRequest = _reflection.GeneratedProtocolMessageType('ReadRequest', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _READREQUEST,
|
||||||
|
'__module__' : 'remote_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:prometheus.ReadRequest)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(ReadRequest)
|
||||||
|
|
||||||
|
ReadResponse = _reflection.GeneratedProtocolMessageType('ReadResponse', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _READRESPONSE,
|
||||||
|
'__module__' : 'remote_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:prometheus.ReadResponse)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(ReadResponse)
|
||||||
|
|
||||||
|
Query = _reflection.GeneratedProtocolMessageType('Query', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _QUERY,
|
||||||
|
'__module__' : 'remote_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:prometheus.Query)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(Query)
|
||||||
|
|
||||||
|
QueryResult = _reflection.GeneratedProtocolMessageType('QueryResult', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _QUERYRESULT,
|
||||||
|
'__module__' : 'remote_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:prometheus.QueryResult)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(QueryResult)
|
||||||
|
|
||||||
|
ChunkedReadResponse = _reflection.GeneratedProtocolMessageType('ChunkedReadResponse', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _CHUNKEDREADRESPONSE,
|
||||||
|
'__module__' : 'remote_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:prometheus.ChunkedReadResponse)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(ChunkedReadResponse)
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTOR._options = None
|
||||||
|
_WRITEREQUEST.fields_by_name['timeseries']._options = None
|
||||||
|
# @@protoc_insertion_point(module_scope)
|
@ -0,0 +1,85 @@
|
|||||||
|
// Copyright 2017 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.
|
||||||
|
|
||||||
|
syntax = "proto3";
|
||||||
|
package prometheus;
|
||||||
|
|
||||||
|
option go_package = "prompb";
|
||||||
|
|
||||||
|
import "gogoproto/gogo.proto";
|
||||||
|
|
||||||
|
message Sample {
|
||||||
|
double value = 1;
|
||||||
|
int64 timestamp = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TimeSeries represents samples and labels for a single time series.
|
||||||
|
message TimeSeries {
|
||||||
|
repeated Label labels = 1 [(gogoproto.nullable) = false];
|
||||||
|
repeated Sample samples = 2 [(gogoproto.nullable) = false];
|
||||||
|
}
|
||||||
|
|
||||||
|
message Label {
|
||||||
|
string name = 1;
|
||||||
|
string value = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Labels {
|
||||||
|
repeated Label labels = 1 [(gogoproto.nullable) = false];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Matcher specifies a rule, which can match or set of labels or not.
|
||||||
|
message LabelMatcher {
|
||||||
|
enum Type {
|
||||||
|
EQ = 0;
|
||||||
|
NEQ = 1;
|
||||||
|
RE = 2;
|
||||||
|
NRE = 3;
|
||||||
|
}
|
||||||
|
Type type = 1;
|
||||||
|
string name = 2;
|
||||||
|
string value = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ReadHints {
|
||||||
|
int64 step_ms = 1; // Query step size in milliseconds.
|
||||||
|
string func = 2; // String representation of surrounding function or aggregation.
|
||||||
|
int64 start_ms = 3; // Start time in milliseconds.
|
||||||
|
int64 end_ms = 4; // End time in milliseconds.
|
||||||
|
repeated string grouping = 5; // List of label names used in aggregation.
|
||||||
|
bool by = 6; // Indicate whether it is without or by.
|
||||||
|
int64 range_ms = 7; // Range vector selector range in milliseconds.
|
||||||
|
}
|
||||||
|
|
||||||
|
// Chunk represents a TSDB chunk.
|
||||||
|
// Time range [min, max] is inclusive.
|
||||||
|
message Chunk {
|
||||||
|
int64 min_time_ms = 1;
|
||||||
|
int64 max_time_ms = 2;
|
||||||
|
|
||||||
|
// We require this to match chunkenc.Encoding.
|
||||||
|
enum Encoding {
|
||||||
|
UNKNOWN = 0;
|
||||||
|
XOR = 1;
|
||||||
|
}
|
||||||
|
Encoding type = 3;
|
||||||
|
bytes data = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChunkedSeries represents single, encoded time series.
|
||||||
|
message ChunkedSeries {
|
||||||
|
// Labels should be sorted.
|
||||||
|
repeated Label labels = 1 [(gogoproto.nullable) = false];
|
||||||
|
// Chunks will be in start time order and may overlap.
|
||||||
|
repeated Chunk chunks = 2 [(gogoproto.nullable) = false];
|
||||||
|
}
|
@ -0,0 +1,534 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||||
|
# source: types.proto
|
||||||
|
"""Generated protocol buffer code."""
|
||||||
|
from google.protobuf import descriptor as _descriptor
|
||||||
|
from google.protobuf import message as _message
|
||||||
|
from google.protobuf import reflection as _reflection
|
||||||
|
from google.protobuf import symbol_database as _symbol_database
|
||||||
|
# @@protoc_insertion_point(imports)
|
||||||
|
|
||||||
|
_sym_db = _symbol_database.Default()
|
||||||
|
|
||||||
|
|
||||||
|
from .gogoproto import gogo_pb2 as gogoproto_dot_gogo__pb2
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTOR = _descriptor.FileDescriptor(
|
||||||
|
name='types.proto',
|
||||||
|
package='prometheus',
|
||||||
|
syntax='proto3',
|
||||||
|
serialized_options=b'Z\006prompb',
|
||||||
|
create_key=_descriptor._internal_create_key,
|
||||||
|
serialized_pb=b'\n\x0btypes.proto\x12\nprometheus\x1a\x14gogoproto/gogo.proto\"*\n\x06Sample\x12\r\n\x05value\x18\x01 \x01(\x01\x12\x11\n\ttimestamp\x18\x02 \x01(\x03\"`\n\nTimeSeries\x12\'\n\x06labels\x18\x01 \x03(\x0b\x32\x11.prometheus.LabelB\x04\xc8\xde\x1f\x00\x12)\n\x07samples\x18\x02 \x03(\x0b\x32\x12.prometheus.SampleB\x04\xc8\xde\x1f\x00\"$\n\x05Label\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"1\n\x06Labels\x12\'\n\x06labels\x18\x01 \x03(\x0b\x32\x11.prometheus.LabelB\x04\xc8\xde\x1f\x00\"\x82\x01\n\x0cLabelMatcher\x12+\n\x04type\x18\x01 \x01(\x0e\x32\x1d.prometheus.LabelMatcher.Type\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\r\n\x05value\x18\x03 \x01(\t\"(\n\x04Type\x12\x06\n\x02\x45Q\x10\x00\x12\x07\n\x03NEQ\x10\x01\x12\x06\n\x02RE\x10\x02\x12\x07\n\x03NRE\x10\x03\"|\n\tReadHints\x12\x0f\n\x07step_ms\x18\x01 \x01(\x03\x12\x0c\n\x04\x66unc\x18\x02 \x01(\t\x12\x10\n\x08start_ms\x18\x03 \x01(\x03\x12\x0e\n\x06\x65nd_ms\x18\x04 \x01(\x03\x12\x10\n\x08grouping\x18\x05 \x03(\t\x12\n\n\x02\x62y\x18\x06 \x01(\x08\x12\x10\n\x08range_ms\x18\x07 \x01(\x03\"\x8b\x01\n\x05\x43hunk\x12\x13\n\x0bmin_time_ms\x18\x01 \x01(\x03\x12\x13\n\x0bmax_time_ms\x18\x02 \x01(\x03\x12(\n\x04type\x18\x03 \x01(\x0e\x32\x1a.prometheus.Chunk.Encoding\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\" \n\x08\x45ncoding\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03XOR\x10\x01\"a\n\rChunkedSeries\x12\'\n\x06labels\x18\x01 \x03(\x0b\x32\x11.prometheus.LabelB\x04\xc8\xde\x1f\x00\x12\'\n\x06\x63hunks\x18\x02 \x03(\x0b\x32\x11.prometheus.ChunkB\x04\xc8\xde\x1f\x00\x42\x08Z\x06prompbb\x06proto3'
|
||||||
|
,
|
||||||
|
dependencies=[gogoproto_dot_gogo__pb2.DESCRIPTOR,])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_LABELMATCHER_TYPE = _descriptor.EnumDescriptor(
|
||||||
|
name='Type',
|
||||||
|
full_name='prometheus.LabelMatcher.Type',
|
||||||
|
filename=None,
|
||||||
|
file=DESCRIPTOR,
|
||||||
|
create_key=_descriptor._internal_create_key,
|
||||||
|
values=[
|
||||||
|
_descriptor.EnumValueDescriptor(
|
||||||
|
name='EQ', index=0, number=0,
|
||||||
|
serialized_options=None,
|
||||||
|
type=None,
|
||||||
|
create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.EnumValueDescriptor(
|
||||||
|
name='NEQ', index=1, number=1,
|
||||||
|
serialized_options=None,
|
||||||
|
type=None,
|
||||||
|
create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.EnumValueDescriptor(
|
||||||
|
name='RE', index=2, number=2,
|
||||||
|
serialized_options=None,
|
||||||
|
type=None,
|
||||||
|
create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.EnumValueDescriptor(
|
||||||
|
name='NRE', index=3, number=3,
|
||||||
|
serialized_options=None,
|
||||||
|
type=None,
|
||||||
|
create_key=_descriptor._internal_create_key),
|
||||||
|
],
|
||||||
|
containing_type=None,
|
||||||
|
serialized_options=None,
|
||||||
|
serialized_start=371,
|
||||||
|
serialized_end=411,
|
||||||
|
)
|
||||||
|
_sym_db.RegisterEnumDescriptor(_LABELMATCHER_TYPE)
|
||||||
|
|
||||||
|
_CHUNK_ENCODING = _descriptor.EnumDescriptor(
|
||||||
|
name='Encoding',
|
||||||
|
full_name='prometheus.Chunk.Encoding',
|
||||||
|
filename=None,
|
||||||
|
file=DESCRIPTOR,
|
||||||
|
create_key=_descriptor._internal_create_key,
|
||||||
|
values=[
|
||||||
|
_descriptor.EnumValueDescriptor(
|
||||||
|
name='UNKNOWN', index=0, number=0,
|
||||||
|
serialized_options=None,
|
||||||
|
type=None,
|
||||||
|
create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.EnumValueDescriptor(
|
||||||
|
name='XOR', index=1, number=1,
|
||||||
|
serialized_options=None,
|
||||||
|
type=None,
|
||||||
|
create_key=_descriptor._internal_create_key),
|
||||||
|
],
|
||||||
|
containing_type=None,
|
||||||
|
serialized_options=None,
|
||||||
|
serialized_start=647,
|
||||||
|
serialized_end=679,
|
||||||
|
)
|
||||||
|
_sym_db.RegisterEnumDescriptor(_CHUNK_ENCODING)
|
||||||
|
|
||||||
|
|
||||||
|
_SAMPLE = _descriptor.Descriptor(
|
||||||
|
name='Sample',
|
||||||
|
full_name='prometheus.Sample',
|
||||||
|
filename=None,
|
||||||
|
file=DESCRIPTOR,
|
||||||
|
containing_type=None,
|
||||||
|
create_key=_descriptor._internal_create_key,
|
||||||
|
fields=[
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='value', full_name='prometheus.Sample.value', index=0,
|
||||||
|
number=1, type=1, cpp_type=5, label=1,
|
||||||
|
has_default_value=False, default_value=float(0),
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='timestamp', full_name='prometheus.Sample.timestamp', index=1,
|
||||||
|
number=2, type=3, cpp_type=2, label=1,
|
||||||
|
has_default_value=False, default_value=0,
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
],
|
||||||
|
extensions=[
|
||||||
|
],
|
||||||
|
nested_types=[],
|
||||||
|
enum_types=[
|
||||||
|
],
|
||||||
|
serialized_options=None,
|
||||||
|
is_extendable=False,
|
||||||
|
syntax='proto3',
|
||||||
|
extension_ranges=[],
|
||||||
|
oneofs=[
|
||||||
|
],
|
||||||
|
serialized_start=49,
|
||||||
|
serialized_end=91,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
_TIMESERIES = _descriptor.Descriptor(
|
||||||
|
name='TimeSeries',
|
||||||
|
full_name='prometheus.TimeSeries',
|
||||||
|
filename=None,
|
||||||
|
file=DESCRIPTOR,
|
||||||
|
containing_type=None,
|
||||||
|
create_key=_descriptor._internal_create_key,
|
||||||
|
fields=[
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='labels', full_name='prometheus.TimeSeries.labels', index=0,
|
||||||
|
number=1, type=11, cpp_type=10, label=3,
|
||||||
|
has_default_value=False, default_value=[],
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=b'\310\336\037\000', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='samples', full_name='prometheus.TimeSeries.samples', index=1,
|
||||||
|
number=2, type=11, cpp_type=10, label=3,
|
||||||
|
has_default_value=False, default_value=[],
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=b'\310\336\037\000', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
],
|
||||||
|
extensions=[
|
||||||
|
],
|
||||||
|
nested_types=[],
|
||||||
|
enum_types=[
|
||||||
|
],
|
||||||
|
serialized_options=None,
|
||||||
|
is_extendable=False,
|
||||||
|
syntax='proto3',
|
||||||
|
extension_ranges=[],
|
||||||
|
oneofs=[
|
||||||
|
],
|
||||||
|
serialized_start=93,
|
||||||
|
serialized_end=189,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
_LABEL = _descriptor.Descriptor(
|
||||||
|
name='Label',
|
||||||
|
full_name='prometheus.Label',
|
||||||
|
filename=None,
|
||||||
|
file=DESCRIPTOR,
|
||||||
|
containing_type=None,
|
||||||
|
create_key=_descriptor._internal_create_key,
|
||||||
|
fields=[
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='name', full_name='prometheus.Label.name', index=0,
|
||||||
|
number=1, type=9, cpp_type=9, label=1,
|
||||||
|
has_default_value=False, default_value=b"".decode('utf-8'),
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='value', full_name='prometheus.Label.value', index=1,
|
||||||
|
number=2, type=9, cpp_type=9, label=1,
|
||||||
|
has_default_value=False, default_value=b"".decode('utf-8'),
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
],
|
||||||
|
extensions=[
|
||||||
|
],
|
||||||
|
nested_types=[],
|
||||||
|
enum_types=[
|
||||||
|
],
|
||||||
|
serialized_options=None,
|
||||||
|
is_extendable=False,
|
||||||
|
syntax='proto3',
|
||||||
|
extension_ranges=[],
|
||||||
|
oneofs=[
|
||||||
|
],
|
||||||
|
serialized_start=191,
|
||||||
|
serialized_end=227,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
_LABELS = _descriptor.Descriptor(
|
||||||
|
name='Labels',
|
||||||
|
full_name='prometheus.Labels',
|
||||||
|
filename=None,
|
||||||
|
file=DESCRIPTOR,
|
||||||
|
containing_type=None,
|
||||||
|
create_key=_descriptor._internal_create_key,
|
||||||
|
fields=[
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='labels', full_name='prometheus.Labels.labels', index=0,
|
||||||
|
number=1, type=11, cpp_type=10, label=3,
|
||||||
|
has_default_value=False, default_value=[],
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=b'\310\336\037\000', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
],
|
||||||
|
extensions=[
|
||||||
|
],
|
||||||
|
nested_types=[],
|
||||||
|
enum_types=[
|
||||||
|
],
|
||||||
|
serialized_options=None,
|
||||||
|
is_extendable=False,
|
||||||
|
syntax='proto3',
|
||||||
|
extension_ranges=[],
|
||||||
|
oneofs=[
|
||||||
|
],
|
||||||
|
serialized_start=229,
|
||||||
|
serialized_end=278,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
_LABELMATCHER = _descriptor.Descriptor(
|
||||||
|
name='LabelMatcher',
|
||||||
|
full_name='prometheus.LabelMatcher',
|
||||||
|
filename=None,
|
||||||
|
file=DESCRIPTOR,
|
||||||
|
containing_type=None,
|
||||||
|
create_key=_descriptor._internal_create_key,
|
||||||
|
fields=[
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='type', full_name='prometheus.LabelMatcher.type', index=0,
|
||||||
|
number=1, type=14, cpp_type=8, label=1,
|
||||||
|
has_default_value=False, default_value=0,
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='name', full_name='prometheus.LabelMatcher.name', index=1,
|
||||||
|
number=2, type=9, cpp_type=9, label=1,
|
||||||
|
has_default_value=False, default_value=b"".decode('utf-8'),
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='value', full_name='prometheus.LabelMatcher.value', index=2,
|
||||||
|
number=3, type=9, cpp_type=9, label=1,
|
||||||
|
has_default_value=False, default_value=b"".decode('utf-8'),
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
],
|
||||||
|
extensions=[
|
||||||
|
],
|
||||||
|
nested_types=[],
|
||||||
|
enum_types=[
|
||||||
|
_LABELMATCHER_TYPE,
|
||||||
|
],
|
||||||
|
serialized_options=None,
|
||||||
|
is_extendable=False,
|
||||||
|
syntax='proto3',
|
||||||
|
extension_ranges=[],
|
||||||
|
oneofs=[
|
||||||
|
],
|
||||||
|
serialized_start=281,
|
||||||
|
serialized_end=411,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
_READHINTS = _descriptor.Descriptor(
|
||||||
|
name='ReadHints',
|
||||||
|
full_name='prometheus.ReadHints',
|
||||||
|
filename=None,
|
||||||
|
file=DESCRIPTOR,
|
||||||
|
containing_type=None,
|
||||||
|
create_key=_descriptor._internal_create_key,
|
||||||
|
fields=[
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='step_ms', full_name='prometheus.ReadHints.step_ms', index=0,
|
||||||
|
number=1, type=3, cpp_type=2, label=1,
|
||||||
|
has_default_value=False, default_value=0,
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='func', full_name='prometheus.ReadHints.func', index=1,
|
||||||
|
number=2, type=9, cpp_type=9, label=1,
|
||||||
|
has_default_value=False, default_value=b"".decode('utf-8'),
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='start_ms', full_name='prometheus.ReadHints.start_ms', index=2,
|
||||||
|
number=3, type=3, cpp_type=2, label=1,
|
||||||
|
has_default_value=False, default_value=0,
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='end_ms', full_name='prometheus.ReadHints.end_ms', index=3,
|
||||||
|
number=4, type=3, cpp_type=2, label=1,
|
||||||
|
has_default_value=False, default_value=0,
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='grouping', full_name='prometheus.ReadHints.grouping', index=4,
|
||||||
|
number=5, type=9, cpp_type=9, label=3,
|
||||||
|
has_default_value=False, default_value=[],
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='by', full_name='prometheus.ReadHints.by', index=5,
|
||||||
|
number=6, type=8, cpp_type=7, label=1,
|
||||||
|
has_default_value=False, default_value=False,
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='range_ms', full_name='prometheus.ReadHints.range_ms', index=6,
|
||||||
|
number=7, type=3, cpp_type=2, label=1,
|
||||||
|
has_default_value=False, default_value=0,
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
],
|
||||||
|
extensions=[
|
||||||
|
],
|
||||||
|
nested_types=[],
|
||||||
|
enum_types=[
|
||||||
|
],
|
||||||
|
serialized_options=None,
|
||||||
|
is_extendable=False,
|
||||||
|
syntax='proto3',
|
||||||
|
extension_ranges=[],
|
||||||
|
oneofs=[
|
||||||
|
],
|
||||||
|
serialized_start=413,
|
||||||
|
serialized_end=537,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
_CHUNK = _descriptor.Descriptor(
|
||||||
|
name='Chunk',
|
||||||
|
full_name='prometheus.Chunk',
|
||||||
|
filename=None,
|
||||||
|
file=DESCRIPTOR,
|
||||||
|
containing_type=None,
|
||||||
|
create_key=_descriptor._internal_create_key,
|
||||||
|
fields=[
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='min_time_ms', full_name='prometheus.Chunk.min_time_ms', index=0,
|
||||||
|
number=1, type=3, cpp_type=2, label=1,
|
||||||
|
has_default_value=False, default_value=0,
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='max_time_ms', full_name='prometheus.Chunk.max_time_ms', index=1,
|
||||||
|
number=2, type=3, cpp_type=2, label=1,
|
||||||
|
has_default_value=False, default_value=0,
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='type', full_name='prometheus.Chunk.type', index=2,
|
||||||
|
number=3, type=14, cpp_type=8, label=1,
|
||||||
|
has_default_value=False, default_value=0,
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='data', full_name='prometheus.Chunk.data', index=3,
|
||||||
|
number=4, type=12, cpp_type=9, label=1,
|
||||||
|
has_default_value=False, default_value=b"",
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
],
|
||||||
|
extensions=[
|
||||||
|
],
|
||||||
|
nested_types=[],
|
||||||
|
enum_types=[
|
||||||
|
_CHUNK_ENCODING,
|
||||||
|
],
|
||||||
|
serialized_options=None,
|
||||||
|
is_extendable=False,
|
||||||
|
syntax='proto3',
|
||||||
|
extension_ranges=[],
|
||||||
|
oneofs=[
|
||||||
|
],
|
||||||
|
serialized_start=540,
|
||||||
|
serialized_end=679,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
_CHUNKEDSERIES = _descriptor.Descriptor(
|
||||||
|
name='ChunkedSeries',
|
||||||
|
full_name='prometheus.ChunkedSeries',
|
||||||
|
filename=None,
|
||||||
|
file=DESCRIPTOR,
|
||||||
|
containing_type=None,
|
||||||
|
create_key=_descriptor._internal_create_key,
|
||||||
|
fields=[
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='labels', full_name='prometheus.ChunkedSeries.labels', index=0,
|
||||||
|
number=1, type=11, cpp_type=10, label=3,
|
||||||
|
has_default_value=False, default_value=[],
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=b'\310\336\037\000', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='chunks', full_name='prometheus.ChunkedSeries.chunks', index=1,
|
||||||
|
number=2, type=11, cpp_type=10, label=3,
|
||||||
|
has_default_value=False, default_value=[],
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=b'\310\336\037\000', file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
],
|
||||||
|
extensions=[
|
||||||
|
],
|
||||||
|
nested_types=[],
|
||||||
|
enum_types=[
|
||||||
|
],
|
||||||
|
serialized_options=None,
|
||||||
|
is_extendable=False,
|
||||||
|
syntax='proto3',
|
||||||
|
extension_ranges=[],
|
||||||
|
oneofs=[
|
||||||
|
],
|
||||||
|
serialized_start=681,
|
||||||
|
serialized_end=778,
|
||||||
|
)
|
||||||
|
|
||||||
|
_TIMESERIES.fields_by_name['labels'].message_type = _LABEL
|
||||||
|
_TIMESERIES.fields_by_name['samples'].message_type = _SAMPLE
|
||||||
|
_LABELS.fields_by_name['labels'].message_type = _LABEL
|
||||||
|
_LABELMATCHER.fields_by_name['type'].enum_type = _LABELMATCHER_TYPE
|
||||||
|
_LABELMATCHER_TYPE.containing_type = _LABELMATCHER
|
||||||
|
_CHUNK.fields_by_name['type'].enum_type = _CHUNK_ENCODING
|
||||||
|
_CHUNK_ENCODING.containing_type = _CHUNK
|
||||||
|
_CHUNKEDSERIES.fields_by_name['labels'].message_type = _LABEL
|
||||||
|
_CHUNKEDSERIES.fields_by_name['chunks'].message_type = _CHUNK
|
||||||
|
DESCRIPTOR.message_types_by_name['Sample'] = _SAMPLE
|
||||||
|
DESCRIPTOR.message_types_by_name['TimeSeries'] = _TIMESERIES
|
||||||
|
DESCRIPTOR.message_types_by_name['Label'] = _LABEL
|
||||||
|
DESCRIPTOR.message_types_by_name['Labels'] = _LABELS
|
||||||
|
DESCRIPTOR.message_types_by_name['LabelMatcher'] = _LABELMATCHER
|
||||||
|
DESCRIPTOR.message_types_by_name['ReadHints'] = _READHINTS
|
||||||
|
DESCRIPTOR.message_types_by_name['Chunk'] = _CHUNK
|
||||||
|
DESCRIPTOR.message_types_by_name['ChunkedSeries'] = _CHUNKEDSERIES
|
||||||
|
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
|
||||||
|
|
||||||
|
Sample = _reflection.GeneratedProtocolMessageType('Sample', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _SAMPLE,
|
||||||
|
'__module__' : 'types_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:prometheus.Sample)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(Sample)
|
||||||
|
|
||||||
|
TimeSeries = _reflection.GeneratedProtocolMessageType('TimeSeries', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _TIMESERIES,
|
||||||
|
'__module__' : 'types_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:prometheus.TimeSeries)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(TimeSeries)
|
||||||
|
|
||||||
|
Label = _reflection.GeneratedProtocolMessageType('Label', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _LABEL,
|
||||||
|
'__module__' : 'types_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:prometheus.Label)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(Label)
|
||||||
|
|
||||||
|
Labels = _reflection.GeneratedProtocolMessageType('Labels', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _LABELS,
|
||||||
|
'__module__' : 'types_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:prometheus.Labels)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(Labels)
|
||||||
|
|
||||||
|
LabelMatcher = _reflection.GeneratedProtocolMessageType('LabelMatcher', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _LABELMATCHER,
|
||||||
|
'__module__' : 'types_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:prometheus.LabelMatcher)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(LabelMatcher)
|
||||||
|
|
||||||
|
ReadHints = _reflection.GeneratedProtocolMessageType('ReadHints', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _READHINTS,
|
||||||
|
'__module__' : 'types_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:prometheus.ReadHints)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(ReadHints)
|
||||||
|
|
||||||
|
Chunk = _reflection.GeneratedProtocolMessageType('Chunk', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _CHUNK,
|
||||||
|
'__module__' : 'types_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:prometheus.Chunk)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(Chunk)
|
||||||
|
|
||||||
|
ChunkedSeries = _reflection.GeneratedProtocolMessageType('ChunkedSeries', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _CHUNKEDSERIES,
|
||||||
|
'__module__' : 'types_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:prometheus.ChunkedSeries)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(ChunkedSeries)
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTOR._options = None
|
||||||
|
_TIMESERIES.fields_by_name['labels']._options = None
|
||||||
|
_TIMESERIES.fields_by_name['samples']._options = None
|
||||||
|
_LABELS.fields_by_name['labels']._options = None
|
||||||
|
_CHUNKEDSERIES.fields_by_name['labels']._options = None
|
||||||
|
_CHUNKEDSERIES.fields_by_name['chunks']._options = None
|
||||||
|
# @@protoc_insertion_point(module_scope)
|
@ -0,0 +1,15 @@
|
|||||||
|
# Copyright The OpenTelemetry 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.
|
||||||
|
|
||||||
|
__version__ = "0.16.dev0"
|
@ -0,0 +1,13 @@
|
|||||||
|
# Copyright The OpenTelemetry 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.
|
@ -0,0 +1,112 @@
|
|||||||
|
# Copyright The OpenTelemetry 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.
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
|
||||||
|
class TestValidation(unittest.TestCase):
|
||||||
|
# Test cases to ensure exporter parameter validation works as intended
|
||||||
|
def test_valid_standard_param(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_valid_basic_auth_param(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_valid_bearer_token_param(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_invalid_no_endpoint_param(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_invalid_no_username_param(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_invalid_no_password_param(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_invalid_conflicting_passwords_param(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_invalid_conflicting_bearer_tokens_param(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_invalid_conflicting_auth_param(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class TestConversion(unittest.TestCase):
|
||||||
|
# Initializes test data that is reused across tests
|
||||||
|
def setUp(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Ensures conversion to timeseries function works with valid aggregation types
|
||||||
|
def test_valid_convert_to_timeseries(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Ensures conversion to timeseries fails for unsupported aggregation types
|
||||||
|
def test_invalid_convert_to_timeseries(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Ensures sum aggregator is correctly converted to timeseries
|
||||||
|
def test_convert_from_sum(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Ensures sum min_max_count aggregator is correctly converted to timeseries
|
||||||
|
def test_convert_from_min_max_sum_count(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Ensures histogram aggregator is correctly converted to timeseries
|
||||||
|
def test_convert_from_histogram(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Ensures last value aggregator is correctly converted to timeseries
|
||||||
|
def test_convert_from_last_value(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Ensures value observer aggregator is correctly converted to timeseries
|
||||||
|
def test_convert_from_value_observer(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Ensures quantile aggregator is correctly converted to timeseries
|
||||||
|
# TODO: Add test once method is implemented
|
||||||
|
def test_convert_from_quantile(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Ensures timeseries produced contains appropriate sample and labels
|
||||||
|
def test_create_timeseries(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class TestExport(unittest.TestCase):
|
||||||
|
# Initializes test data that is reused across tests
|
||||||
|
def setUp(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Ensures export is successful with valid export_records and config
|
||||||
|
def test_export(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_valid_send_message(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_invalid_send_message(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Verifies that build_message calls snappy.compress and returns SerializedString
|
||||||
|
def test_build_message(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Ensure correct headers are added when valid config is provided
|
||||||
|
def test_get_headers(self):
|
||||||
|
pass
|
@ -3,7 +3,8 @@ line-length = 79
|
|||||||
exclude = '''
|
exclude = '''
|
||||||
(
|
(
|
||||||
/(
|
/(
|
||||||
reference # original files from DataDog
|
reference| # original files from DataDog
|
||||||
|
exporter/opentelemetry-exporter-prometheus-remote-write/src/opentelemetry/exporter/prometheus_remote_write/gen
|
||||||
)/
|
)/
|
||||||
)
|
)
|
||||||
'''
|
'''
|
||||||
|
Reference in New Issue
Block a user