Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 27 additions & 19 deletions middleware/lib/_meter.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
import psutil
try:
import psutil
PSUTIL_AVAILABLE = True
except ImportError:
PSUTIL_AVAILABLE = False
# todo: report this information to Middleware servers
print("Warning: psutil is not installed. Metrics features will be disabled.")

import os
import threading
import gc
Expand Down Expand Up @@ -26,25 +33,26 @@ class DiskUsageData(NamedTuple):


def collect_metrics() -> None:
exporter = OTLPMetricExporter(
timeout=5,
compression=grpc.Compression.Gzip,
)
readers = [PeriodicExportingMetricReader(exporter)]
if config.console_exporter:
output= sys.stdout
if config.debug_log_file:
output=open("mw-metrics.log", "w")
console_reader = PeriodicExportingMetricReader(
ConsoleMetricExporter(out=output)
if PSUTIL_AVAILABLE:
exporter = OTLPMetricExporter(
timeout=5,
compression=grpc.Compression.Gzip,
)
readers.append(console_reader)
provider = MeterProvider(metric_readers=readers)
if metrics.get_meter_provider() is None:
metrics.set_meter_provider(provider)
# metrics.set_meter_provider(provider)
meter = provider.get_meter("sdk_meter_provider")
_generate_metrics(meter)
readers = [PeriodicExportingMetricReader(exporter)]
if config.console_exporter:
output= sys.stdout
if config.debug_log_file:
output=open("mw-metrics.log", "w")
console_reader = PeriodicExportingMetricReader(
ConsoleMetricExporter(out=output)
)
readers.append(console_reader)
provider = MeterProvider(metric_readers=readers)
if metrics.get_meter_provider() is None:
metrics.set_meter_provider(provider)
# metrics.set_meter_provider(provider)
meter = provider.get_meter("sdk_meter_provider")
_generate_metrics(meter)


def _generate_metrics(meter):
Expand Down
10 changes: 8 additions & 2 deletions middleware/lib/_profiler.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
import os
import requests, json
import pyroscope
try:
import pyroscope
PYROSCOPE_AVAILABLE = True
except ImportError:
PYROSCOPE_AVAILABLE = False
# todo: report this information to Middleware servers
print("Warning: Pyroscope is not installed. Profiling features will be disabled.")
from middleware.config import config

green_color = "\033[92m"
yellow_color = "\033[93m"
reset_color = "\033[0m"

def collect_profiling() -> None:
if config.access_token != "":
if PYROSCOPE_AVAILABLE and config.access_token != "":

# Setting Middleware Account Authentication URL
auth_url = os.getenv('MW_AUTH_URL', 'https://app.middleware.io/api/v1/auth')
Expand Down
11 changes: 8 additions & 3 deletions middleware/lib/mw_tracker.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import os
import psutil
try:
import psutil
PSUTIL_AVAILABLE = True
except ImportError:
PSUTIL_AVAILABLE = False
import logging
import requests
from middleware.version import SDK_VERSION
Expand All @@ -24,8 +28,9 @@ def __init__(self):
self.collect_traces()
if config.collect_logs:
self.collect_logs()
if config.collect_profiling and not psutil.WINDOWS:
self.collect_profiling()
if PSUTIL_AVAILABLE:
if config.collect_profiling and not psutil.WINDOWS:
self.collect_profiling()
self._get_instrument_info()

def collect_metrics(self):
Expand Down
12 changes: 8 additions & 4 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "middleware-apm"
version = "1.2.1"
version = "1.2.4rc4"
description = "Middleware's APM tool enables Python developers to effortlessly monitor their applications, gathering distributed tracing, metrics, logs, and profiling data for valuable insights and performance optimization."
readme = "README.md"
requires-python = ">=3.8"
Expand All @@ -27,9 +27,6 @@ dependencies = [
"opentelemetry-util-http==0.48b0",
"PyYAML==6.0.2",
"requests==2.32.3",
"thrift==0.20.0",
"pyroscope-io==0.8.5; sys_platform != 'win32'",
"psutil==6.0.0",
"tomli==2.0.1",
"opentelemetry-propagator-b3==1.27.0",
"opentelemetry-propagator-jaeger==1.27.0",
Expand All @@ -38,6 +35,13 @@ dependencies = [
"opentelemetry-propagator-gcp==1.7.0"
]

[project.optional-dependencies]
test = [
"pyroscope-io==0.8.5",
"psutil==6.0.0",
"thrift==0.20.0",
]

[project.urls]
Source = "https://github.com/middleware-labs/agent-apm-python.git"
Homepage = "https://docs.middleware.io/docs/apm-configuration/python"
Expand Down
3 changes: 0 additions & 3 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,6 @@ opentelemetry-semantic-conventions==0.48b0
opentelemetry-util-http==0.48b0
PyYAML==6.0.2
requests==2.32.3
thrift==0.20.0
pyroscope-io==0.8.5; sys_platform != 'win32'
psutil==6.0.0
tomli==2.0.1
# webencodings==0.5.1
# websocket-client==0.53.0
Expand Down
Loading