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