Skip to main content
Glama
enkryptai

Enkrypt AI Secure MCP Gateway

Official
by enkryptai
example_providers.py12.2 kB
"""Example telemetry providers.""" from __future__ import annotations import logging from typing import Any, Dict from secure_mcp_gateway.plugins.telemetry.base import ( TelemetryLevel, TelemetryProvider, TelemetryResult, ) from secure_mcp_gateway.utils import logger # ============================================================================ # Console Provider (Simple Logging) # ============================================================================ class ConsoleTelemetryProvider(TelemetryProvider): """ Simple console-based telemetry provider. Logs everything to console using Python's logging module. Useful for development and debugging. """ def __init__(self): self._logger = None self._initialized = False @property def name(self) -> str: return "console" @property def version(self) -> str: return "1.0.0" def initialize(self, config: dict[str, Any]) -> TelemetryResult: """Initialize console logging""" try: log_level = config.get("level", "INFO") # Create logger self._logger = logging.getLogger("enkrypt-console") self._logger.setLevel(getattr(logging, log_level.upper())) # Add console handler if not exists if not self._logger.handlers: handler = logging.StreamHandler() formatter = logging.Formatter( "%(asctime)s - %(name)s - %(levelname)s - %(message)s" ) handler.setFormatter(formatter) self._logger.addHandler(handler) self._initialized = True return TelemetryResult( success=True, provider_name=self.name, message="Console telemetry initialized", ) except Exception as e: return TelemetryResult( success=False, provider_name=self.name, error=str(e), ) def create_logger(self, name: str) -> Any: """Return the logger""" return self._logger def create_tracer(self, name: str) -> Any: """Console provider doesn't support tracing""" return None # ============================================================================ # Datadog Provider (Stub) # ============================================================================ class DatadogTelemetryProvider(TelemetryProvider): """ Datadog telemetry provider. This is a stub implementation showing how to integrate with Datadog. To use: pip install ddtrace """ def __init__(self, api_key: str, app_key: str | None = None): self.api_key = api_key self.app_key = app_key self._logger = None self._tracer = None self._initialized = False @property def name(self) -> str: return "datadog" @property def version(self) -> str: return "1.0.0" def initialize(self, config: dict[str, Any]) -> TelemetryResult: """ Initialize Datadog integration. Config: - api_key: Datadog API key - app_key: Datadog application key (optional) - service_name: Service name - environment: Environment (prod, staging, dev) """ try: logger.info(f"[{self.name}] Initializing Datadog provider...") # Import Datadog tracer try: from ddtrace import patch_all, tracer # Patch all supported libraries patch_all() # Configure tracer tracer.configure( hostname=config.get("hostname", "localhost"), port=config.get("port", 8126), ) self._tracer = tracer self._initialized = True logger.info(f"[{self.name}] ✓ Datadog initialized") return TelemetryResult( success=True, provider_name=self.name, message="Datadog initialized successfully", ) except ImportError: return TelemetryResult( success=False, provider_name=self.name, error="ddtrace not installed. Run: pip install ddtrace", ) except Exception as e: logger.error(f"[{self.name}] ✗ Failed: {e}") return TelemetryResult( success=False, provider_name=self.name, error=str(e), ) def create_logger(self, name: str) -> Any: """Create Datadog logger""" import logging return logging.getLogger(name) def create_tracer(self, name: str) -> Any: """Return Datadog tracer""" return self._tracer # ============================================================================ # New Relic Provider (Stub) # ============================================================================ class NewRelicTelemetryProvider(TelemetryProvider): """ New Relic telemetry provider. This is a stub implementation showing how to integrate with New Relic. To use: pip install newrelic """ def __init__(self, license_key: str): self.license_key = license_key self._initialized = False @property def name(self) -> str: return "newrelic" @property def version(self) -> str: return "1.0.0" def initialize(self, config: dict[str, Any]) -> TelemetryResult: """ Initialize New Relic integration. Config: - license_key: New Relic license key - app_name: Application name - environment: Environment """ try: logger.info(f"[{self.name}] Initializing New Relic provider...") try: import newrelic.agent # Initialize New Relic newrelic.agent.initialize( config_file=config.get("config_file"), environment=config.get("environment", "production"), ) self._initialized = True logger.info(f"[{self.name}] ✓ New Relic initialized") return TelemetryResult( success=True, provider_name=self.name, message="New Relic initialized successfully", ) except ImportError: return TelemetryResult( success=False, provider_name=self.name, error="newrelic not installed. Run: pip install newrelic", ) except Exception as e: logger.error(f"[{self.name}] ✗ Failed: {e}") return TelemetryResult( success=False, provider_name=self.name, error=str(e), ) def create_logger(self, name: str) -> Any: """Create logger""" import logging return logging.getLogger(name) def create_tracer(self, name: str) -> Any: """New Relic uses decorators, not explicit tracers""" return None # ============================================================================ # Prometheus Provider (Stub) # ============================================================================ class PrometheusTelemetryProvider(TelemetryProvider): """ Prometheus telemetry provider. This is a stub implementation showing how to integrate with Prometheus. To use: pip install prometheus-client """ def __init__(self, port: int = 8000): self.port = port self._initialized = False @property def name(self) -> str: return "prometheus" @property def version(self) -> str: return "1.0.0" def initialize(self, config: dict[str, Any]) -> TelemetryResult: """ Initialize Prometheus metrics. Config: - port: Port for metrics endpoint - namespace: Metrics namespace """ try: logger.info(f"[{self.name}] Initializing Prometheus provider...") try: from prometheus_client import start_http_server # Start metrics server start_http_server(self.port) self._initialized = True logger.info(f"[{self.name}] ✓ Prometheus metrics on port {self.port}") return TelemetryResult( success=True, provider_name=self.name, message=f"Prometheus initialized on port {self.port}", ) except ImportError: return TelemetryResult( success=False, provider_name=self.name, error="prometheus-client not installed. Run: pip install prometheus-client", ) except Exception as e: logger.error(f"[{self.name}] ✗ Failed: {e}") return TelemetryResult( success=False, provider_name=self.name, error=str(e), ) def create_logger(self, name: str) -> Any: """Create logger""" import logging return logging.getLogger(name) def create_tracer(self, name: str) -> Any: """Prometheus doesn't use tracers""" return None # ============================================================================ # Custom Provider Template # ============================================================================ class CustomTelemetryProvider(TelemetryProvider): """ Template for creating custom telemetry providers. Copy this class and implement the required methods for your telemetry backend. """ def __init__(self, **kwargs): """Initialize with custom configuration""" self._config = kwargs self._initialized = False self._logger = None self._tracer = None @property def name(self) -> str: """Return your provider name""" return "custom" @property def version(self) -> str: """Return your provider version""" return "1.0.0" def initialize(self, config: dict[str, Any]) -> TelemetryResult: """ Initialize your telemetry backend. Implement your initialization logic here: 1. Connect to your telemetry service 2. Configure authentication 3. Set up logging/tracing/metrics 4. Return TelemetryResult """ try: logger.info(f"[{self.name}] Initializing custom provider...") # TODO: Implement your initialization logic self._initialized = True logger.info(f"[{self.name}] ✓ Custom provider initialized") return TelemetryResult( success=True, provider_name=self.name, message="Custom provider initialized", ) except Exception as e: logger.error(f"[{self.name}] ✗ Failed: {e}") return TelemetryResult( success=False, provider_name=self.name, error=str(e), ) def create_logger(self, name: str) -> Any: """ Create and return a logger instance. This should return an object compatible with Python's logging interface. """ # TODO: Implement logger creation import logging return logging.getLogger(name) def create_tracer(self, name: str) -> Any: """ Create and return a tracer instance. This should return an object compatible with OpenTelemetry's tracer interface. """ # TODO: Implement tracer creation return None __all__ = [ "ConsoleTelemetryProvider", "DatadogTelemetryProvider", "NewRelicTelemetryProvider", "PrometheusTelemetryProvider", "CustomTelemetryProvider", ]

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/enkryptai/secure-mcp-gateway'

If you have feedback or need assistance with the MCP directory API, please join our Discord server