15
15
"""OpenCensus Collector Metrics Exporter."""
16
16
17
17
import logging
18
- from typing import Sequence
18
+ from typing import Optional , Sequence
19
19
20
20
import grpc
21
+ from google .protobuf .timestamp_pb2 import Timestamp
22
+
23
+ import opentelemetry .ext .opencensusexporter .util as utils
21
24
from opencensus .proto .agent .metrics .v1 import (
22
25
metrics_service_pb2 ,
23
26
metrics_service_pb2_grpc ,
24
27
)
25
28
from opencensus .proto .metrics .v1 import metrics_pb2
26
-
27
- import opentelemetry .ext .opencensusexporter .util as utils
28
29
from opentelemetry .sdk .metrics import Counter , Metric
29
30
from opentelemetry .sdk .metrics .export import (
30
31
MetricRecord ,
@@ -65,6 +66,8 @@ def __init__(
65
66
self .client = client
66
67
67
68
self .node = utils .get_node (service_name , host_name )
69
+ self .exporter_start_time_proto = Timestamp ()
70
+ self .exporter_start_time_proto .GetCurrentTime ()
68
71
69
72
def export (
70
73
self , metric_records : Sequence [MetricRecord ]
@@ -89,16 +92,21 @@ def shutdown(self) -> None:
89
92
def generate_metrics_requests (
90
93
self , metrics : Sequence [MetricRecord ]
91
94
) -> metrics_service_pb2 .ExportMetricsServiceRequest :
92
- collector_metrics = translate_to_collector (metrics )
95
+ collector_metrics = translate_to_collector (
96
+ metrics , self .exporter_start_time_proto
97
+ )
93
98
service_request = metrics_service_pb2 .ExportMetricsServiceRequest (
94
99
node = self .node , metrics = collector_metrics
95
100
)
101
+ # for testing, will delete
102
+ print (collector_metrics )
96
103
yield service_request
97
104
98
105
99
106
# pylint: disable=too-many-branches
100
107
def translate_to_collector (
101
108
metric_records : Sequence [MetricRecord ],
109
+ start_timestamp : Optional [Timestamp ],
102
110
) -> Sequence [metrics_pb2 .Metric ]:
103
111
collector_metrics = []
104
112
for metric_record in metric_records :
@@ -121,9 +129,15 @@ def translate_to_collector(
121
129
label_keys = label_keys ,
122
130
)
123
131
132
+ is_cumulative = metric_descriptor .type in (
133
+ metrics_pb2 .MetricDescriptor .CUMULATIVE_INT64 ,
134
+ metrics_pb2 .MetricDescriptor .CUMULATIVE_DOUBLE ,
135
+ metrics_pb2 .MetricDescriptor .CUMULATIVE_DISTRIBUTION ,
136
+ )
124
137
timeseries = metrics_pb2 .TimeSeries (
125
138
label_values = label_values ,
126
139
points = [get_collector_point (metric_record )],
140
+ start_timestamp = (start_timestamp if is_cumulative else None ),
127
141
)
128
142
collector_metrics .append (
129
143
metrics_pb2 .Metric (
0 commit comments