github.com/grafana/pyroscope@v1.18.0/examples/language-sdk-instrumentation/python/rideshare/flask/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", "ride-sharing-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 50 @app.route("/scooter") 51 def scooter(): 52 order_scooter(0.3) 53 return "<p>Scooter ordered</p>" 54 55 56 @app.route("/car") 57 def car(): 58 order_car(0.4) 59 return "<p>Car ordered</p>" 60 61 62 @app.route("/") 63 def environment(): 64 result = "<h1>environment vars:</h1>" 65 for key, value in os.environ.items(): 66 result +=f"<p>{key}={value}</p>" 67 return result 68 69 if __name__ == '__main__': 70 app.run(threaded=False, processes=1, host='0.0.0.0', port=port, debug=False) 71