Spaces:
Build error
Build error
Validify-testbot-1
/
botbuilder-python
/libraries
/botbuilder-applicationinsights
/botbuilder
/applicationinsights
/django
/bot_telemetry_middleware.py
| # Copyright (c) Microsoft Corporation. All rights reserved. | |
| # Licensed under the MIT License. | |
| """Bot Telemetry Middleware.""" | |
| from threading import current_thread | |
| # Map of thread id => POST body text | |
| _REQUEST_BODIES = {} | |
| def retrieve_bot_body(): | |
| """ | |
| Retrieve the POST body text from temporary cache. | |
| The POST body corresponds to the thread ID and must reside in the cache just for the lifetime of the request. | |
| """ | |
| result = _REQUEST_BODIES.get(current_thread().ident, None) | |
| return result | |
| class BotTelemetryMiddleware: | |
| """ | |
| Save off the POST body to later populate bot-specific properties to add to Application Insights. | |
| Example activating MIDDLEWARE in Django settings: | |
| .. code-block:: python | |
| MIDDLEWARE = [ | |
| # Ideally add somewhere near top | |
| 'botbuilder.applicationinsights.django.BotTelemetryMiddleware', | |
| ... | |
| ] | |
| """ | |
| def __init__(self, get_response): | |
| self.get_response = get_response | |
| def __call__(self, request): | |
| self.process_request(request) | |
| response = self.get_response(request) | |
| _REQUEST_BODIES.pop(current_thread().ident, None) | |
| return response | |
| def process_request(self, request) -> bool: | |
| """Process the incoming Django request.""" | |
| # Bot Service doesn't handle anything over 256k | |
| # TODO: Add length check | |
| body_unicode = ( | |
| request.body.decode("utf-8") if request.method == "POST" else None | |
| ) | |
| # Sanity check JSON | |
| if body_unicode is not None: | |
| # Integration layer expecting just the json text. | |
| _REQUEST_BODIES[current_thread().ident] = body_unicode | |
| return True | |