from flask import Flask, redirect, request from jaeger_client import Config from flask_opentracing import FlaskTracer #, FlaskTracing import opentracing from opentracing.propagation import Format import requests import traceback import os # A very boring and basic hip-hop-service to demonstrate # observability via tracing. service = os.environ.get('HIPHOP', 'hiphop') tier = int(os.environ.get('TIER', '1')) app = Flask(__name__) config = Config(config = { 'sampler': { 'type': 'const', 'param': 1 }, 'logging': True, 'reporter_batch_size': 1 }, service_name=service) #tracer = config.initialize_tracer() tracer = FlaskTracer(config.initialize_tracer(), True, app) #tracing = FlaskTracing(tracer, True, app) @app.route('/') def index(): return redirect('/hip') @app.route('/hip') def hip(): print(request.headers) r = "" try: parent_span = tracer.extract(Format.HTTP_HEADERS, request.headers) if tier > 1 else tracer.get_span() print(f"{parent_span}") url = f"http://{service}-{tier + 1}/hip" with opentracing.tracer.start_span(operation_name=url, child_of=parent_span) as span: print(f"{span}") span.set_tag("http.url", url) headers = dict(request.headers) tracer.inject(span, Format.HTTP_HEADERS, headers) print(f"tracer injected headers: { headers }") r = requests.get(url, headers=headers) span.set_tag("http.status_code", r.status_code) print(r) r = r.content.decode('utf-8') except Exception as ex: print(ex) traceback.print_exc() r = "END" return f"hop-{ tier } -> { r }" app.run(host="0.0.0.0", port=80)