fix: trace information setup
This commit is contained in:
parent
a5e3e4fe7d
commit
0a8d66dcc3
3 changed files with 57 additions and 28 deletions
|
|
@ -36,7 +36,6 @@ from plane.db.models import (
|
||||||
WorkspaceMember,
|
WorkspaceMember,
|
||||||
)
|
)
|
||||||
from plane.utils.cache import cache_response, invalidate_cache
|
from plane.utils.cache import cache_response, invalidate_cache
|
||||||
from plane.utils.tracer import trace_operation
|
|
||||||
|
|
||||||
from .. import BaseViewSet
|
from .. import BaseViewSet
|
||||||
|
|
||||||
|
|
@ -66,7 +65,6 @@ class WorkSpaceMemberViewSet(BaseViewSet):
|
||||||
@allow_permission(
|
@allow_permission(
|
||||||
allowed_roles=[ROLE.ADMIN, ROLE.MEMBER, ROLE.GUEST], level="WORKSPACE"
|
allowed_roles=[ROLE.ADMIN, ROLE.MEMBER, ROLE.GUEST], level="WORKSPACE"
|
||||||
)
|
)
|
||||||
@trace_operation("workspace_member_list", custom_attribute="value")
|
|
||||||
def list(self, request, slug):
|
def list(self, request, slug):
|
||||||
workspace_member = WorkspaceMember.objects.get(
|
workspace_member = WorkspaceMember.objects.get(
|
||||||
member=request.user,
|
member=request.user,
|
||||||
|
|
@ -76,7 +74,6 @@ class WorkSpaceMemberViewSet(BaseViewSet):
|
||||||
|
|
||||||
# Get all active workspace members
|
# Get all active workspace members
|
||||||
workspace_members = self.get_queryset()
|
workspace_members = self.get_queryset()
|
||||||
|
|
||||||
if workspace_member.role > 5:
|
if workspace_member.role > 5:
|
||||||
serializer = WorkspaceMemberAdminSerializer(
|
serializer = WorkspaceMemberAdminSerializer(
|
||||||
workspace_members,
|
workspace_members,
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,21 @@ from django.conf import settings
|
||||||
|
|
||||||
# Module imports
|
# Module imports
|
||||||
from plane.license.models import Instance
|
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):
|
class Command(BaseCommand):
|
||||||
|
|
@ -60,4 +74,32 @@ class Command(BaseCommand):
|
||||||
self.stdout.write(
|
self.stdout.write(
|
||||||
self.style.SUCCESS("Instance already registered")
|
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)
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,8 @@ from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import (
|
||||||
from opentelemetry.sdk.trace import TracerProvider
|
from opentelemetry.sdk.trace import TracerProvider
|
||||||
from opentelemetry.sdk.trace.export import BatchSpanProcessor
|
from opentelemetry.sdk.trace.export import BatchSpanProcessor
|
||||||
from opentelemetry.sdk.resources import Resource
|
from opentelemetry.sdk.resources import Resource
|
||||||
|
from opentelemetry.instrumentation.django import DjangoInstrumentor
|
||||||
|
|
||||||
|
|
||||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
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!
|
# SECURITY WARNING: don't run with debug turned on in production!
|
||||||
DEBUG = int(os.environ.get("DEBUG", "0"))
|
DEBUG = int(os.environ.get("DEBUG", "0"))
|
||||||
|
|
||||||
# Check if telemetry should be enabled
|
# Initialize Django instrumentation
|
||||||
TELEMETRY_ENABLED = (
|
DjangoInstrumentor().instrument()
|
||||||
os.environ.get("ENABLE_TELEMETRY", "True").lower() == "true"
|
# 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
|
||||||
ALLOWED_HOSTS = ["*"]
|
ALLOWED_HOSTS = ["*"]
|
||||||
|
|
@ -81,7 +77,6 @@ INSTALLED_APPS = [
|
||||||
|
|
||||||
# Middlewares
|
# Middlewares
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
"opentelemetry.instrumentation.django.middleware.OpenTelemetryMiddleware",
|
|
||||||
"corsheaders.middleware.CorsMiddleware",
|
"corsheaders.middleware.CorsMiddleware",
|
||||||
"django.middleware.security.SecurityMiddleware",
|
"django.middleware.security.SecurityMiddleware",
|
||||||
"plane.authentication.middleware.session.SessionMiddleware",
|
"plane.authentication.middleware.session.SessionMiddleware",
|
||||||
|
|
@ -93,11 +88,6 @@ MIDDLEWARE = [
|
||||||
"django.middleware.gzip.GZipMiddleware",
|
"django.middleware.gzip.GZipMiddleware",
|
||||||
"plane.middleware.api_log_middleware.APITokenLogMiddleware",
|
"plane.middleware.api_log_middleware.APITokenLogMiddleware",
|
||||||
]
|
]
|
||||||
if TELEMETRY_ENABLED:
|
|
||||||
MIDDLEWARE.insert(
|
|
||||||
0,
|
|
||||||
"opentelemetry.instrumentation.django.middleware.OpenTelemetryMiddleware",
|
|
||||||
)
|
|
||||||
|
|
||||||
# Rest Framework settings
|
# Rest Framework settings
|
||||||
REST_FRAMEWORK = {
|
REST_FRAMEWORK = {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue