github.com/grafana/pyroscope@v1.18.0/examples/tracing/python/lib/server.py (about) 1 import os 2 3 import pyroscope 4 from flask import Flask 5 6 # OpenTelemetry 7 from opentelemetry.instrumentation.flask import FlaskInstrumentor 8 from opentelemetry import trace 9 from opentelemetry.sdk.trace import TracerProvider 10 from opentelemetry.sdk.trace.export import BatchSpanProcessor 11 from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter 12 from pyroscope.otel import PyroscopeSpanProcessor 13 14 from bike.bike import order_bike 15 from car.car import order_car 16 from scooter.scooter import order_scooter 17 18 provider = TracerProvider() 19 provider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter())) 20 provider.add_span_processor(PyroscopeSpanProcessor()) 21 22 # Sets the global default tracer provider 23 trace.set_tracer_provider(provider) 24 25 app_name = os.getenv("PYROSCOPE_APPLICATION_NAME", "rideshare.python.push.app") 26 server_addr = os.getenv("PYROSCOPE_SERVER_ADDRESS", "http://pyroscope:4040") 27 basic_auth_username = os.getenv("PYROSCOPE_BASIC_AUTH_USER", "") 28 basic_auth_password = os.getenv("PYROSCOPE_BASIC_AUTH_PASSWORD", "") 29 port = int(os.getenv("RIDESHARE_LISTEN_PORT", "5000")) 30 31 pyroscope.configure( 32 application_name = app_name, 33 server_address = server_addr, 34 basic_auth_username = basic_auth_username, # for grafana cloud 35 basic_auth_password = basic_auth_password, # for grafana cloud 36 tags = { 37 "region": f'{os.getenv("REGION")}', 38 } 39 ) 40 41 app = Flask(__name__) 42 FlaskInstrumentor().instrument_app(app) 43 44 @app.route("/bike") 45 def bike(): 46 order_bike(0.2) 47 return "<p>Bike ordered</p>" 48 49 @app.route("/scooter") 50 def scooter(): 51 order_scooter(0.3) 52 return "<p>Scooter ordered</p>" 53 54 @app.route("/car") 55 def car(): 56 order_car(0.4) 57 return "<p>Car ordered</p>" 58 59 60 @app.route("/") 61 def environment(): 62 result = "<h1>environment vars:</h1>" 63 for key, value in os.environ.items(): 64 result +=f"<p>{key}={value}</p>" 65 return result 66 67 if __name__ == '__main__': 68 app.run(threaded=False, processes=1, host='0.0.0.0', port=port, debug=False)