Compare commits

...

1 Commits

Author SHA1 Message Date
Abed d1f808aea4 feat#2 2025-02-20 15:50:13 +08:00
+51
View File
@@ -0,0 +1,51 @@
from flask import Flask, request, jsonify
import consul
from opentelemetry import trace
from opentelemetry.instrumentation.flask import FlaskInstrumentor
from opentelemetry.instrumentation.requests import RequestsInstrumentor
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
# Initialize Flask app
app = Flask(__name__)
# Initialize Consul client
consul_client = consul.Consul(host='127.0.0.1', port=8500)
# OpenTelemetry configuration
trace.set_tracer_provider(TracerProvider())
tracer = trace.get_tracer(__name__)
# Configure OTLP exporter (e.g., for exporting to Jaeger or Prometheus via OpenTelemetry Collector)
otlp_exporter = OTLPSpanExporter(endpoint="http://localhost:4317", insecure=True)
span_processor = BatchSpanProcessor(otlp_exporter)
trace.get_tracer_provider().add_span_processor(span_processor)
# Instrument Flask and Requests
FlaskInstrumentor().instrument_app(app)
RequestsInstrumentor().instrument()
# Endpoint to set configuration properties in Consul
@app.route('/config', methods=['POST'])
def set_config():
key = request.json.get('key')
value = request.json.get('value')
if not key or not value:
return jsonify({"error": "Key and value are required"}), 400
consul_client.kv.put(key, value)
return jsonify({"message": "Configuration set", "key": key, "value": value})
# Endpoint to get configuration properties from Consul
@app.route('/config/<key>', methods=['GET'])
def get_config(key):
with tracer.start_as_current_span("get_config"): # Manual tracing
index, data = consul_client.kv.get(key)
if data and 'Value' in data:
return jsonify({"key": key, "value": data['Value'].decode('utf-8')})
return jsonify({"error": "Key not found"}), 404
if __name__ == '__main__':
app.run(debug=True)