fix: trace information setup

This commit is contained in:
sriram veeraghanta
2024-10-04 16:40:33 +05:30
parent a5e3e4fe7d
commit 0a8d66dcc3
3 changed files with 57 additions and 28 deletions

View File

@@ -36,7 +36,6 @@ from plane.db.models import (
WorkspaceMember,
)
from plane.utils.cache import cache_response, invalidate_cache
from plane.utils.tracer import trace_operation
from .. import BaseViewSet
@@ -66,7 +65,6 @@ class WorkSpaceMemberViewSet(BaseViewSet):
@allow_permission(
allowed_roles=[ROLE.ADMIN, ROLE.MEMBER, ROLE.GUEST], level="WORKSPACE"
)
@trace_operation("workspace_member_list", custom_attribute="value")
def list(self, request, slug):
workspace_member = WorkspaceMember.objects.get(
member=request.user,
@@ -76,7 +74,6 @@ class WorkSpaceMemberViewSet(BaseViewSet):
# Get all active workspace members
workspace_members = self.get_queryset()
if workspace_member.role > 5:
serializer = WorkspaceMemberAdminSerializer(
workspace_members,

View File

@@ -9,7 +9,21 @@ from django.conf import settings
# Module imports
from plane.license.models import Instance
from plane.db.models import User
from plane.db.models import (
User,
Workspace,
Project,
Issue,
Module,
Cycle,
CycleIssue,
ModuleIssue,
Page,
)
from opentelemetry import trace
tracer = trace.get_tracer(__name__)
class Command(BaseCommand):
@@ -60,4 +74,32 @@ class Command(BaseCommand):
self.stdout.write(
self.style.SUCCESS("Instance already registered")
)
return
if instance.is_telemetry_enabled:
with tracer.start_as_current_span("instance_details") as span:
workspace_count = Workspace.objects.count()
user_count = User.objects.count()
project_count = Project.objects.count()
issue_count = Issue.objects.count()
module_count = Module.objects.count()
cycle_count = Cycle.objects.count()
cycle_issue_count = CycleIssue.objects.count()
module_issue_count = ModuleIssue.objects.count()
page_count = Page.objects.count()
span.set_attribute("instance_id", instance.instance_id)
span.set_attribute("instance_name", instance.instance_name)
span.set_attribute("current_version", instance.current_version)
span.set_attribute("latest_version", instance.latest_version)
span.set_attribute(
"is_telemetry_enabled", instance.is_telemetry_enabled
)
span.set_attribute("user_count", user_count)
span.set_attribute("workspace_count", workspace_count)
span.set_attribute("project_count", project_count)
span.set_attribute("issue_count", issue_count)
span.set_attribute("module_count", module_count)
span.set_attribute("cycle_count", cycle_count)
span.set_attribute("cycle_issue_count", cycle_issue_count)
span.set_attribute("module_issue_count", module_issue_count)
span.set_attribute("page_count", page_count)

View File

@@ -24,6 +24,8 @@ from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import (
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk.resources import Resource
from opentelemetry.instrumentation.django import DjangoInstrumentor
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
@@ -33,24 +35,18 @@ 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"
)
# Initialize Django instrumentation
DjangoInstrumentor().instrument()
# Configure the tracer provider
service_name = os.environ.get("SERVICE_NAME", "plane-ce-api")
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://telemetry.plane.so")
otlp_exporter = OTLPSpanExporter(endpoint=otel_endpoint)
span_processor = BatchSpanProcessor(otlp_exporter)
trace.get_tracer_provider().add_span_processor(span_processor)
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 = ["*"]
@@ -81,7 +77,6 @@ INSTALLED_APPS = [
# Middlewares
MIDDLEWARE = [
"opentelemetry.instrumentation.django.middleware.OpenTelemetryMiddleware",
"corsheaders.middleware.CorsMiddleware",
"django.middleware.security.SecurityMiddleware",
"plane.authentication.middleware.session.SessionMiddleware",
@@ -93,11 +88,6 @@ 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 = {