-
Notifications
You must be signed in to change notification settings - Fork 51
Expand file tree
/
Copy pathbyoo.py
More file actions
138 lines (110 loc) · 4.78 KB
/
Copy pathbyoo.py
File metadata and controls
138 lines (110 loc) · 4.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# 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 logging
import os
import sys
import importlib
from opentelemetry import metrics,trace
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.metrics.export import (
PeriodicExportingMetricReader,
)
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk.trace import TracerProvider
task_results_counter = None
task_progress_gauge = None
def otel_metric_exporter_configured():
value = os.environ.get("OTEL_EXPORTER_OTLP_METRICS_ENDPOINT")
return True if value else False
def otel_log_exporter_configured():
value = os.environ.get("OTEL_EXPORTER_OTLP_LOGS_ENDPOINT")
return True if value else False
def otel_trace_exporter_configured():
value = os.environ.get("OTEL_EXPORTER_OTLP_TRACES_ENDPOINT")
return True if value else False
def is_valid_protocol(protocol):
if not protocol:
return False
return protocol in ["http", "grpc"]
def get_otlp_exporter(protocol, exporter_type, exporter_class):
if not is_valid_protocol(protocol):
raise ValueError(f"Invalid OTLP protocol '{protocol}'")
module_name = f"opentelemetry.exporter.otlp.proto.{protocol}.{exporter_type}"
module = importlib.import_module(module_name)
exporter = getattr(module, exporter_class)
return exporter()
def get_otlp_log_exporter():
"""
:return: One of the following otlp log exporter
opentelemetry.exporter.otlp.proto.http._log_exporter.OTLPLogExporter
opentelemetry.exporter.otlp.proto.grpc._log_exporter.OTLPLogExporter
"""
protocol = os.getenv("OTEL_EXPORTER_OTLP_LOGS_PROTOCOL", "grpc")
return get_otlp_exporter(protocol, "_log_exporter", "OTLPLogExporter")
def get_otlp_metrics_exporter():
"""
:return: One of the following otlp metrics exporter
opentelemetry.exporter.otlp.proto.http.metric_exporter.OTLPMetricExporter
opentelemetry.exporter.otlp.proto.grpc.metric_exporter.OTLPMetricExporter
"""
protocol = os.getenv("OTEL_EXPORTER_OTLP_METRICS_PROTOCOL", "grpc")
return get_otlp_exporter(protocol, "metric_exporter", "OTLPMetricExporter")
def get_otlp_trace_exporter():
"""
:return: One of the following otlp trace exporter
opentelemetry.exporter.otlp.proto.http.trace_exporter.OTLPSpanExporter
opentelemetry.exporter.otlp.proto.grpc.trace_exporter.OTLPSpanExporter
"""
protocol = os.getenv("OTEL_EXPORTER_OTLP_TRACES_PROTOCOL", "grpc").lower()
return get_otlp_exporter(protocol, "trace_exporter", "OTLPSpanExporter")
resource = Resource.create({"service.name": "byoo-task-test"})
# Set up OpenTelemetry traces
otlp_trace_exporter = None
tracer = None
# Set up OpenTelemetry traces
if otel_trace_exporter_configured():
otlp_trace_exporter = get_otlp_trace_exporter()
if otlp_trace_exporter is not None:
tracer_provider = TracerProvider(resource=resource)
tracer_provider.add_span_processor(BatchSpanProcessor(otlp_trace_exporter))
trace.set_tracer_provider(tracer_provider)
tracer = trace.get_tracer(__name__)
# Set up OpenTelemetry metrics
otlp_metric_exporter = None
meter = None
if otel_metric_exporter_configured():
otlp_metric_exporter = get_otlp_metrics_exporter()
if otlp_metric_exporter is not None:
metric_reader = PeriodicExportingMetricReader(otlp_metric_exporter)
metrics.set_meter_provider(
MeterProvider(resource=resource, metric_readers=[metric_reader])
)
meter = metrics.get_meter(__name__)
# Set up OpenTelemetry logs
otlp_log_exporter = None
logging_handler = None
if otel_log_exporter_configured():
otlp_log_exporter = get_otlp_log_exporter()
if otlp_log_exporter is not None:
logger_provider = LoggerProvider(resource=resource)
logger_provider.add_log_record_processor(BatchLogRecordProcessor(otlp_log_exporter))
logging_handler = LoggingHandler(
level=logging.NOTSET, logger_provider=logger_provider
)
else:
logging_handler = logging.StreamHandler(sys.stdout)