fix: api tracing

This commit is contained in:
sriram veeraghanta 2024-10-04 01:14:29 +05:30
parent f1a0a8d925
commit a5e3e4fe7d
4 changed files with 67 additions and 0 deletions

View file

@ -16,6 +16,15 @@ from sentry_sdk.integrations.django import DjangoIntegration
from sentry_sdk.integrations.redis import RedisIntegration
from corsheaders.defaults import default_headers
# OpenTelemetry
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import (
OTLPSpanExporter,
)
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk.resources import Resource
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Secret Key
@ -24,6 +33,25 @@ SECRET_KEY = os.environ.get("SECRET_KEY", get_random_secret_key())
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = int(os.environ.get("DEBUG", "0"))
# Check if telemetry should be enabled
TELEMETRY_ENABLED = (
os.environ.get("ENABLE_TELEMETRY", "True").lower() == "true"
)
if TELEMETRY_ENABLED:
# Configure the tracer provider
service_name = os.environ.get("SERVICE_NAME", "plane-ce")
resource = Resource.create({"service.name": service_name})
trace.set_tracer_provider(TracerProvider(resource=resource))
# Configure the OTLP exporter
otel_endpoint = os.environ.get("OTLP_ENDPOINT", "https://ingest.plane.so")
otlp_exporter = OTLPSpanExporter(endpoint=otel_endpoint)
span_processor = BatchSpanProcessor(otlp_exporter)
trace.get_tracer_provider().add_span_processor(span_processor)
else:
# Set up a no-op tracer when telemetry is disabled
trace.set_tracer_provider(TracerProvider())
# Allowed Hosts
ALLOWED_HOSTS = ["*"]
@ -53,6 +81,7 @@ INSTALLED_APPS = [
# Middlewares
MIDDLEWARE = [
"opentelemetry.instrumentation.django.middleware.OpenTelemetryMiddleware",
"corsheaders.middleware.CorsMiddleware",
"django.middleware.security.SecurityMiddleware",
"plane.authentication.middleware.session.SessionMiddleware",
@ -64,6 +93,11 @@ MIDDLEWARE = [
"django.middleware.gzip.GZipMiddleware",
"plane.middleware.api_log_middleware.APITokenLogMiddleware",
]
if TELEMETRY_ENABLED:
MIDDLEWARE.insert(
0,
"opentelemetry.instrumentation.django.middleware.OpenTelemetryMiddleware",
)
# Rest Framework settings
REST_FRAMEWORK = {