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)