Skip to content

Commit

Permalink
Logs auto instrumentation
Browse files Browse the repository at this point in the history
  • Loading branch information
Philippe GUEMKAM committed Aug 10, 2024
1 parent 825771d commit 1f7c1e0
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 74 deletions.
14 changes: 9 additions & 5 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM python:3.8
FROM python:3.10

WORKDIR /app

Expand All @@ -11,22 +11,26 @@ COPY . /app/
RUN pip install --no-cache-dir -r requirements.txt

# Install OpenTelemetry dependencies
RUN pip install opentelemetry-distro opentelemetry-exporter-otlp opentelemetry-instrumentation-flask
RUN pip install opentelemetry-api opentelemetry-distro opentelemetry-exporter-otlp opentelemetry-instrumentation-flask
RUN opentelemetry-bootstrap -a install

# Make sure entrypoint.sh is executable
RUN chmod 755 entrypoint.sh

EXPOSE 5000

# Set environment variables for OpenTelemetry
# Set environment variables for OpenTelemetry (https://opentelemetry-python-contrib.readthedocs.io/en/latest/instrumentation/logging/logging.html)
ENV OTEL_SERVICE_NAME=sandbox-provisioner-${PROFILE}
ENV OTEL_LOGS_EXPORTER=otlp,console

ENV OTEL_PYTHON_LOG_CORRELATION=true
ENV OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED=true
ENV OTEL_LOG_LEVEL="DEBUG"
ENV OTEL_PYHTON_LOG_LEVEL=debug

ENV OTEL_LOGS_EXPORTER=otlp

ENV OTEL_TRACES_EXPORTER=otlp
ENV OTEL_METRICS_EXPORTER=otlp

ENV OTEL_EXPORTER_OTLP_ENDPOINT=http://otelcol-opentelemetry-collector.monitoring.svc.cluster.local:4317

# Set entrypoint
Expand Down
139 changes: 70 additions & 69 deletions app/__init__.py
Original file line number Diff line number Diff line change
@@ -1,106 +1,107 @@
import os
import logging

from opentelemetry import trace

from flask import Flask, request

from app.utils import create_keycloak_user, apply_k8s_config, delete_keycloak_user, delete_k8s_namespace, \
create_grafana_user, delete_grafana_user, make_username, make_usernames

app = Flask(__name__)
logger = logging.getLogger(__name__)
# logging.basicConfig(level=logging.DEBUG)
tracer = trace.get_tracer_provider().get_tracer(__name__)

with tracer.start_as_current_span("provisioner-flask-endpoint"):
logger.info("Provisioning flask endpoint.")
@app.route('/')
def home():
return "Hello"

@app.route('/')
def home():
return "Hello"


@app.route('/provisioner', methods=['POST'])
def provisioner():
token = request.headers.get('Authorization')

expected_token = os.environ.get('VERIFICATION_TOKEN')
@app.route('/provisioner', methods=['POST'])
def provisioner():
token = request.headers.get('Authorization')

if token != expected_token:
return {'message': 'Please submit a valid token'}, 401
expected_token = os.environ.get('VERIFICATION_TOKEN')

data = request.get_json()
email = data.get('email')
full_name = data.get('full_name')
if token != expected_token:
return {'message': 'Please submit a valid token'}, 401

username = None
data = request.get_json()
email = data.get('email')
full_name = data.get('full_name')

if not email:
username = None

if not full_name:
if not email and not full_name:
return {'message': 'Email address and full name are missing'}, 400

username = make_username(email, full_name)
username = make_username(email, full_name)
logger.info(f"will attempt to create sandbox with username : {username}")

print(username)
user_data = create_keycloak_user(username, email)

user_data = create_keycloak_user(username, email)
if user_data == "CREATED":
return {'message': "USER ALREADY EXIST"}, 500

if user_data == "CREATED":
return {'message': "USER ALREADY EXIST"}, 500
user_id, password = user_data

user_id, password = user_data

try:
apply_k8s_config(username, user_id)
except:
delete_keycloak_user(username)
return {'message': "Can't create k8s user"}, 500
try:
apply_k8s_config(username, user_id)
except:
delete_keycloak_user(username)
return {'message': "Can't create k8s user"}, 500

try:
create_grafana_user(username, email, password)
except:
delete_keycloak_user(username)
delete_k8s_namespace(username)
return {'message': "Can't create grafana user"}, 500
try:
create_grafana_user(username, email, password)
except:
delete_keycloak_user(username)
delete_k8s_namespace(username)
return {'message': "Can't create grafana user"}, 500

return {
'message': 'User has been successfully created',
'user_id': user_id,
'password': password,
'username': username
}
return {
'message': 'User has been successfully created',
'user_id': user_id,
'password': password,
'username': username
}


@app.route('/provisioner', methods=['DELETE'])
def provisioner_clean():
token = request.headers.get('Authorization')
@app.route('/provisioner', methods=['DELETE'])
def provisioner_clean():
token = request.headers.get('Authorization')

expected_token = os.environ.get('VERIFICATION_TOKEN')
expected_token = os.environ.get('VERIFICATION_TOKEN')

if token != expected_token:
return {'message': 'Please submit a valid token'}, 401
if token != expected_token:
return {'message': 'Please submit a valid token'}, 401

data = request.get_json()
email = data.get("email")
full_name = data.get('full_name')
data = request.get_json()
email = data.get("email")
full_name = data.get('full_name')

if not email:
if not full_name:
if not email and not full_name:
return {'message': 'Email address and full name are missing'}, 400

usernames = make_usernames(email, full_name)

for username in usernames:
try:
delete_k8s_namespace(username)
user_id = delete_keycloak_user(username)
delete_grafana_user(username)
return {
'message': 'User has been deleted successfully',
'user_id': user_id,
'username': username
}
except Exception as e:
logger.error(f"Failed to delete with this username : {username} : {e}", exc_info=True)

return {"Failed to delete user and related resources, it may not exist."}, 500

usernames = make_usernames(email, full_name)

for username in usernames:
try:
logger.info(f"Attempting to delete sandbox with username : {username}")
delete_k8s_namespace(username)
user_id = delete_keycloak_user(username)
delete_grafana_user(username)
return {
'message': 'User has been deleted successfully',
'user_id': user_id,
'username': username
}
except Exception as e:
logger.error(f"Failed to delete with this username : {username} : {e}", exc_info=True)

return {"Failed to delete user and related resources, it may not exist."}, 500

if __name__ == '__main__':
app.run()

0 comments on commit 1f7c1e0

Please sign in to comment.