from flask import Flask, redirect, request, jsonify from jaeger_client import Config import opentracing import requests import traceback import os import json # A very boring and basic space-service to demonstrate # observability via tracing. service = os.environ.get('SERVICE', 'space') app = Flask(__name__) config = Config(config = { 'sampler': { 'type': 'const', 'param': 1 }, 'logging': True, 'reporter_batch_size': 1 }, service_name=service) tracer = config.initialize_tracer() @app.route('/') def index(): return redirect('/space') @app.route('/space') def space(): with tracer.start_span(operation_name="space") as parent_span: try: lat = float(request.args.get('lat', "0.0001")) lon = float(request.args.get('lon', "0.0001")) except Exception as ex: print(ex) return "Bad request (lat/lon not numeric)", 400 queries = { "astros": "http://api.open-notify.org/astros.json", "position": "http://api.open-notify.org/iss-now.json", "passtime": f"http://api.open-notify.org/iss-pass.json?lat={ lat }&lon={ lon }" } result = {} for key, url in queries.items(): with tracer.start_span(operation_name=key, child_of=parent_span) as span: result[key] = json.loads(requests.get(url).content) print(result) return jsonify(result) app.run(host="0.0.0.0", port=80)