monocle-apptrace 0.5.1b1__tar.gz → 0.5.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of monocle-apptrace might be problematic. Click here for more details.
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/PKG-INFO +1 -1
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/pyproject.toml +1 -1
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/exporters/file_exporter.py +8 -1
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/common/span_handler.py +7 -4
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/common/utils.py +10 -2
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/common/wrapper_method.py +3 -1
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/adk/entities/agent.py +6 -1
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/adk/entities/tool.py +8 -3
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/agents/entities/inference.py +15 -3
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/aiohttp/_helper.py +22 -7
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/aiohttp/entities/http.py +14 -3
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/azfunc/_helper.py +21 -11
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/azfunc/entities/http.py +7 -2
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/fastapi/_helper.py +19 -6
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/fastapi/entities/http.py +6 -2
- monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/fastapi/methods.py +23 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/flask/_helper.py +20 -6
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/flask/entities/http.py +7 -2
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/lambdafunc/_helper.py +25 -14
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/lambdafunc/entities/http.py +7 -2
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langgraph/entities/inference.py +1 -1
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/entities/agent.py +1 -1
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/mcp/entities/inference.py +5 -0
- monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/mistral/_helper.py +174 -0
- monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/mistral/entities/inference.py +85 -0
- monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/mistral/methods.py +41 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/teamsai/_helper.py +2 -2
- monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/teamsai/entities/__init__.py +0 -0
- monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/teamsai/entities/inference/__init__.py +0 -0
- monocle_apptrace-0.5.1b1/src/monocle_apptrace/instrumentation/metamodel/fastapi/methods.py +0 -23
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/.gitignore +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/LICENSE +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/NOTICE +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/README.md +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/README.md +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/__main__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/exporters/aws/s3_exporter.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/exporters/aws/s3_exporter_opendal.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/exporters/azure/blob_exporter.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/exporters/azure/blob_exporter_opendal.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/exporters/base_exporter.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/exporters/exporter_processor.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/exporters/monocle_exporters.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/exporters/okahu/okahu_exporter.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/common/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/common/constants.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/common/instrumentor.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/common/method_wrappers.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/common/scope_wrapper.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/common/tracing.md +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/common/wrapper.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/a2a/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/a2a/_helper.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/a2a/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/a2a/entities/inference.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/a2a/methods.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/adk/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/adk/_helper.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/adk/methods.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/agents/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/agents/_helper.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/agents/agents_processor.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/agents/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/agents/methods.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/aiohttp/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/aiohttp/methods.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/anthropic/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/anthropic/_helper.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/anthropic/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/anthropic/entities/inference.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/anthropic/methods.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/azfunc/methods.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/azfunc/wrapper.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/azureaiinference/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/azureaiinference/_helper.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/azureaiinference/entities/inference.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/azureaiinference/methods.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/botocore/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/botocore/_helper.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/botocore/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/botocore/entities/inference.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/botocore/handlers/botocore_span_handler.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/botocore/methods.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/fastapi/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/fastapi/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/finish_types.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/flask/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/flask/methods.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/gemini/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/gemini/_helper.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/gemini/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/gemini/entities/inference.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/gemini/entities/retrieval.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/gemini/methods.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/haystack/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/haystack/_helper.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/haystack/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/haystack/entities/inference.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/haystack/entities/retrieval.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/haystack/methods.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/lambdafunc/methods.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/lambdafunc/wrapper.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langchain/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langchain/_helper.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langchain/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langchain/entities/inference.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langchain/entities/retrieval.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langchain/methods.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langgraph/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langgraph/_helper.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langgraph/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langgraph/langgraph_processor.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langgraph/methods.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/litellm/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/litellm/_helper.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/litellm/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/litellm/entities/inference.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/litellm/methods.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/_helper.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/entities/inference.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/entities/retrieval.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/llamaindex_processor.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/methods.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/mcp/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/mcp/_helper.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/mcp/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/mcp/mcp_processor.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/mcp/methods.py +0 -0
- {monocle_apptrace-0.5.1b1/src/monocle_apptrace/instrumentation/metamodel/openai → monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/mistral}/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1/src/monocle_apptrace/instrumentation/metamodel/openai → monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/mistral}/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1/src/monocle_apptrace/instrumentation/metamodel/teamsai → monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/openai}/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/openai/_helper.py +0 -0
- {monocle_apptrace-0.5.1b1/src/monocle_apptrace/instrumentation/metamodel/teamsai → monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/openai}/entities/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/openai/entities/inference.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/openai/entities/retrieval.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/openai/methods.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/requests/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/requests/_helper.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/requests/entities/http.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/requests/methods.py +0 -0
- {monocle_apptrace-0.5.1b1/src/monocle_apptrace/instrumentation/metamodel/teamsai/entities/inference → monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/teamsai}/__init__.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/teamsai/entities/inference/actionplanner_output_processor.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/teamsai/entities/inference/teamsai_output_processor.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/teamsai/methods.py +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/teamsai/sample.json +0 -0
- {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/mcp_server.py +0 -0
{monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/exporters/file_exporter.py
RENAMED
|
@@ -14,12 +14,13 @@ from monocle_apptrace.exporters.exporter_processor import ExportTaskProcessor
|
|
|
14
14
|
DEFAULT_FILE_PREFIX:str = "monocle_trace_"
|
|
15
15
|
DEFAULT_TIME_FORMAT:str = "%Y-%m-%d_%H.%M.%S"
|
|
16
16
|
HANDLE_TIMEOUT_SECONDS: int = 60 # 1 minute timeout
|
|
17
|
+
DEFAULT_TRACE_FOLDER = ".monocle"
|
|
17
18
|
|
|
18
19
|
class FileSpanExporter(SpanExporterBase):
|
|
19
20
|
def __init__(
|
|
20
21
|
self,
|
|
21
22
|
service_name: Optional[str] = None,
|
|
22
|
-
out_path:str = ".",
|
|
23
|
+
out_path:str = path.join(".", DEFAULT_TRACE_FOLDER),
|
|
23
24
|
file_prefix = DEFAULT_FILE_PREFIX,
|
|
24
25
|
time_format = DEFAULT_TIME_FORMAT,
|
|
25
26
|
formatter: Callable[
|
|
@@ -34,12 +35,16 @@ class FileSpanExporter(SpanExporterBase):
|
|
|
34
35
|
self.formatter = formatter
|
|
35
36
|
self.service_name = service_name
|
|
36
37
|
self.output_path = os.getenv("MONOCLE_TRACE_OUTPUT_PATH", out_path)
|
|
38
|
+
if not os.path.exists(self.output_path):
|
|
39
|
+
os.makedirs(self.output_path)
|
|
37
40
|
self.file_prefix = file_prefix
|
|
38
41
|
self.time_format = time_format
|
|
39
42
|
self.task_processor = task_processor
|
|
40
43
|
self.is_first_span_in_file = True # Track if this is the first span in the current file
|
|
41
44
|
if self.task_processor is not None:
|
|
42
45
|
self.task_processor.start()
|
|
46
|
+
self.last_file_processed:str = None
|
|
47
|
+
self.last_trace_id = None
|
|
43
48
|
|
|
44
49
|
def export(self, spans: Sequence[ReadableSpan]) -> SpanExportResult:
|
|
45
50
|
is_root_span = any(not span.parent for span in spans)
|
|
@@ -96,6 +101,8 @@ class FileSpanExporter(SpanExporterBase):
|
|
|
96
101
|
print(f"Error closing file {file_path}: {e}")
|
|
97
102
|
finally:
|
|
98
103
|
del self.file_handles[trace_id]
|
|
104
|
+
self.last_file_processed = file_path
|
|
105
|
+
self.last_trace_id = trace_id
|
|
99
106
|
|
|
100
107
|
def _mark_span_written(self, trace_id: int) -> None:
|
|
101
108
|
"""Mark that a span has been written for this trace (no longer first span)."""
|
|
@@ -26,6 +26,7 @@ WORKFLOW_TYPE_MAP = {
|
|
|
26
26
|
"anthropic": "workflow.anthropic",
|
|
27
27
|
"gemini": "workflow.gemini",
|
|
28
28
|
"litellm": "workflow.litellm",
|
|
29
|
+
"mistralai": "workflow.mistral"
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
FRAMEWORK_WORKFLOW_LIST = [
|
|
@@ -185,7 +186,12 @@ class SpanHandler:
|
|
|
185
186
|
accessor = attribute.get("accessor")
|
|
186
187
|
if accessor:
|
|
187
188
|
try:
|
|
188
|
-
|
|
189
|
+
try:
|
|
190
|
+
result = accessor(arguments)
|
|
191
|
+
except MonocleSpanException as e:
|
|
192
|
+
span.set_status(StatusCode.ERROR, e.message)
|
|
193
|
+
detected_error = True
|
|
194
|
+
result = e.get_err_code()
|
|
189
195
|
if result and isinstance(result, dict):
|
|
190
196
|
result = dict((key, value) for key, value in result.items() if value is not None)
|
|
191
197
|
if result and isinstance(result, (int, str, list, dict)):
|
|
@@ -193,9 +199,6 @@ class SpanHandler:
|
|
|
193
199
|
event_attributes[attribute_key] = result
|
|
194
200
|
else:
|
|
195
201
|
event_attributes.update(result)
|
|
196
|
-
except MonocleSpanException as e:
|
|
197
|
-
span.set_status(StatusCode.ERROR, e.message)
|
|
198
|
-
detected_error = True
|
|
199
202
|
except Exception as e:
|
|
200
203
|
logger.debug(f"Error evaluating accessor for attribute '{attribute_key}': {e}")
|
|
201
204
|
matching_timestamp = getattr(ret_result, "timestamps", {}).get(event_name, None)
|
|
@@ -30,7 +30,7 @@ except Exception as e:
|
|
|
30
30
|
logger.warning("Exception finding monocle-apptrace version.")
|
|
31
31
|
|
|
32
32
|
class MonocleSpanException(Exception):
|
|
33
|
-
def __init__(self, err_message:str):
|
|
33
|
+
def __init__(self, err_message:str, err_code:str = None):
|
|
34
34
|
"""
|
|
35
35
|
Monocle exeption to indicate error in span processing.
|
|
36
36
|
Parameters:
|
|
@@ -39,10 +39,15 @@ class MonocleSpanException(Exception):
|
|
|
39
39
|
"""
|
|
40
40
|
super().__init__(err_message)
|
|
41
41
|
self.message = err_message
|
|
42
|
+
self.err_code = err_code
|
|
42
43
|
|
|
43
44
|
def __str__(self):
|
|
44
45
|
"""String representation of the exception."""
|
|
45
|
-
return f"[Monocle Span Error: {self.message}
|
|
46
|
+
return f"[Monocle Span Error: {self.message}"
|
|
47
|
+
|
|
48
|
+
def get_err_code(self):
|
|
49
|
+
"""Retrieve the error code."""
|
|
50
|
+
return self.err_code
|
|
46
51
|
|
|
47
52
|
def set_span_attribute(span, name, value):
|
|
48
53
|
if value is not None:
|
|
@@ -98,6 +103,7 @@ def with_tracer_wrapper(func):
|
|
|
98
103
|
|
|
99
104
|
return _with_tracer
|
|
100
105
|
|
|
106
|
+
|
|
101
107
|
def resolve_from_alias(my_map, alias):
|
|
102
108
|
"""Find a alias that is not none from list of aliases"""
|
|
103
109
|
|
|
@@ -393,6 +399,7 @@ def get_exception_message(arguments):
|
|
|
393
399
|
else:
|
|
394
400
|
return ''
|
|
395
401
|
|
|
402
|
+
|
|
396
403
|
def get_error_message(arguments):
|
|
397
404
|
status_code = get_status_code(arguments)
|
|
398
405
|
if status_code == 'success':
|
|
@@ -400,6 +407,7 @@ def get_error_message(arguments):
|
|
|
400
407
|
else:
|
|
401
408
|
return status_code
|
|
402
409
|
|
|
410
|
+
|
|
403
411
|
def get_status_code(arguments):
|
|
404
412
|
if arguments["exception"] is not None:
|
|
405
413
|
return get_exception_status_code(arguments)
|
|
@@ -37,6 +37,7 @@ from monocle_apptrace.instrumentation.metamodel.mcp.mcp_processor import MCPAgen
|
|
|
37
37
|
from monocle_apptrace.instrumentation.metamodel.a2a.methods import A2A_CLIENT_METHODS
|
|
38
38
|
from monocle_apptrace.instrumentation.metamodel.litellm.methods import LITELLM_METHODS
|
|
39
39
|
from monocle_apptrace.instrumentation.metamodel.adk.methods import ADK_METHODS
|
|
40
|
+
from monocle_apptrace.instrumentation.metamodel.mistral.methods import MISTRAL_METHODS
|
|
40
41
|
|
|
41
42
|
class WrapperMethod:
|
|
42
43
|
def __init__(
|
|
@@ -107,7 +108,8 @@ DEFAULT_METHODS_LIST = (
|
|
|
107
108
|
MCP_METHODS +
|
|
108
109
|
A2A_CLIENT_METHODS +
|
|
109
110
|
LITELLM_METHODS +
|
|
110
|
-
ADK_METHODS
|
|
111
|
+
ADK_METHODS +
|
|
112
|
+
MISTRAL_METHODS
|
|
111
113
|
)
|
|
112
114
|
|
|
113
115
|
MONOCLE_SPAN_HANDLERS: Dict[str, SpanHandler] = {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from monocle_apptrace.instrumentation.common.constants import SPAN_SUBTYPES, SPAN_TYPES
|
|
2
|
+
from monocle_apptrace.instrumentation.common.utils import get_error_message
|
|
2
3
|
from monocle_apptrace.instrumentation.metamodel.adk import _helper
|
|
3
4
|
AGENT = {
|
|
4
5
|
"type": SPAN_TYPES.AGENTIC_INVOCATION,
|
|
@@ -45,6 +46,10 @@ AGENT = {
|
|
|
45
46
|
"_comment": "this is response from LLM",
|
|
46
47
|
"attribute": "response",
|
|
47
48
|
"accessor": lambda arguments: _helper.extract_agent_response(arguments['result'])
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"attribute": "error_code",
|
|
52
|
+
"accessor": lambda arguments: get_error_message(arguments)
|
|
48
53
|
}
|
|
49
54
|
]
|
|
50
55
|
}
|
|
@@ -108,4 +113,4 @@ DELEGATION = {
|
|
|
108
113
|
}
|
|
109
114
|
]
|
|
110
115
|
]
|
|
111
|
-
}
|
|
116
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from monocle_apptrace.instrumentation.common.constants import SPAN_SUBTYPES, SPAN_TYPES
|
|
2
|
+
from monocle_apptrace.instrumentation.common.utils import get_error_message
|
|
2
3
|
from monocle_apptrace.instrumentation.metamodel.adk import _helper
|
|
3
4
|
TOOL = {
|
|
4
5
|
"type": SPAN_TYPES.AGENTIC_TOOL_INVOCATION,
|
|
@@ -40,7 +41,7 @@ TOOL = {
|
|
|
40
41
|
"attributes": [
|
|
41
42
|
{
|
|
42
43
|
"_comment": "this is Tool input",
|
|
43
|
-
"attribute": "
|
|
44
|
+
"attribute": "input",
|
|
44
45
|
"accessor": lambda arguments: _helper.extract_tool_input(arguments)
|
|
45
46
|
},
|
|
46
47
|
]
|
|
@@ -52,8 +53,12 @@ TOOL = {
|
|
|
52
53
|
"_comment": "this is response from Tool",
|
|
53
54
|
"attribute": "response",
|
|
54
55
|
"accessor": lambda arguments: _helper.extract_tool_response(arguments['result'])
|
|
55
|
-
}
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"attribute": "error_code",
|
|
59
|
+
"accessor": lambda arguments: get_error_message(arguments)
|
|
60
|
+
},
|
|
56
61
|
]
|
|
57
62
|
}
|
|
58
63
|
]
|
|
59
|
-
}
|
|
64
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from monocle_apptrace.instrumentation.common.constants import AGENT_REQUEST_SPAN_NAME, SPAN_SUBTYPES, SPAN_TYPES
|
|
2
|
+
from monocle_apptrace.instrumentation.common.utils import get_error_message
|
|
2
3
|
from monocle_apptrace.instrumentation.metamodel.agents import _helper
|
|
3
4
|
|
|
4
5
|
AGENT = {
|
|
@@ -50,6 +51,10 @@ AGENT = {
|
|
|
50
51
|
"accessor": lambda arguments: _helper.extract_agent_response(
|
|
51
52
|
arguments["result"]
|
|
52
53
|
),
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"attribute": "error_code",
|
|
57
|
+
"accessor": lambda arguments: get_error_message(arguments)
|
|
53
58
|
}
|
|
54
59
|
],
|
|
55
60
|
},
|
|
@@ -101,8 +106,11 @@ AGENT_REQUEST = {
|
|
|
101
106
|
"accessor": lambda arguments: _helper.extract_agent_response(
|
|
102
107
|
arguments["result"]
|
|
103
108
|
),
|
|
104
|
-
|
|
105
|
-
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"attribute": "error_code",
|
|
112
|
+
"accessor": lambda arguments: get_error_message(arguments)
|
|
113
|
+
}],
|
|
106
114
|
},
|
|
107
115
|
],
|
|
108
116
|
}
|
|
@@ -151,7 +159,7 @@ TOOLS = {
|
|
|
151
159
|
"attributes": [
|
|
152
160
|
{
|
|
153
161
|
"_comment": "this is Tool input",
|
|
154
|
-
"attribute": "
|
|
162
|
+
"attribute": "input",
|
|
155
163
|
"accessor": lambda arguments: _helper.extract_tool_input(arguments),
|
|
156
164
|
},
|
|
157
165
|
],
|
|
@@ -165,6 +173,10 @@ TOOLS = {
|
|
|
165
173
|
"accessor": lambda arguments: _helper.extract_tool_response(
|
|
166
174
|
arguments["result"]
|
|
167
175
|
),
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"attribute": "error_code",
|
|
179
|
+
"accessor": lambda arguments: get_error_message(arguments)
|
|
168
180
|
}
|
|
169
181
|
],
|
|
170
182
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
from threading import local
|
|
3
|
-
from monocle_apptrace.instrumentation.common.utils import extract_http_headers, clear_http_scopes, try_option, Option, MonocleSpanException
|
|
3
|
+
from monocle_apptrace.instrumentation.common.utils import extract_http_headers, clear_http_scopes, get_exception_status_code, try_option, Option, MonocleSpanException
|
|
4
4
|
from monocle_apptrace.instrumentation.common.span_handler import SpanHandler
|
|
5
5
|
from monocle_apptrace.instrumentation.common.constants import HTTP_SUCCESS_CODES
|
|
6
6
|
from urllib.parse import unquote
|
|
@@ -8,7 +8,7 @@ from urllib.parse import unquote
|
|
|
8
8
|
logger = logging.getLogger(__name__)
|
|
9
9
|
MAX_DATA_LENGTH = 1000
|
|
10
10
|
|
|
11
|
-
def
|
|
11
|
+
def get_url(args) -> str:
|
|
12
12
|
route_path: Option[str] = try_option(getattr, args[0], 'path')
|
|
13
13
|
return route_path.unwrap_or("")
|
|
14
14
|
|
|
@@ -31,11 +31,17 @@ def extract_response(result) -> str:
|
|
|
31
31
|
response = ""
|
|
32
32
|
return response
|
|
33
33
|
|
|
34
|
-
def extract_status(
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
34
|
+
def extract_status(arguments) -> str:
|
|
35
|
+
if arguments["exception"] is not None:
|
|
36
|
+
return get_exception_status_code(arguments)
|
|
37
|
+
result = arguments['result']
|
|
38
|
+
if hasattr(result, 'status'):
|
|
39
|
+
status = f"{result.status}"
|
|
40
|
+
if status not in HTTP_SUCCESS_CODES:
|
|
41
|
+
error_message = extract_response(result)
|
|
42
|
+
raise MonocleSpanException(f"error: {status} - {error_message}", status)
|
|
43
|
+
else:
|
|
44
|
+
status = "success"
|
|
39
45
|
return status
|
|
40
46
|
|
|
41
47
|
def aiohttp_pre_tracing(args):
|
|
@@ -49,6 +55,15 @@ def aiohttp_skip_span(args) -> bool:
|
|
|
49
55
|
return True
|
|
50
56
|
return False
|
|
51
57
|
|
|
58
|
+
def get_route(args) -> str:
|
|
59
|
+
try:
|
|
60
|
+
return args[0].match_info.route.resource.canonical
|
|
61
|
+
except Exception as e:
|
|
62
|
+
return get_url(args)
|
|
63
|
+
|
|
64
|
+
def get_function_name(args) -> str:
|
|
65
|
+
return args[0].match_info.handler.__name__
|
|
66
|
+
|
|
52
67
|
class aiohttpSpanHandler(SpanHandler):
|
|
53
68
|
|
|
54
69
|
def pre_tracing(self, to_wrap, wrapped, instance, args, kwargs):
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from monocle_apptrace.instrumentation.common.constants import SPAN_TYPES
|
|
2
2
|
from monocle_apptrace.instrumentation.metamodel.aiohttp import _helper
|
|
3
|
+
|
|
3
4
|
AIO_HTTP_PROCESSOR = {
|
|
4
5
|
"type": SPAN_TYPES.HTTP_PROCESS,
|
|
5
6
|
"attributes": [
|
|
@@ -14,11 +15,21 @@ AIO_HTTP_PROCESSOR = {
|
|
|
14
15
|
"attribute": "route",
|
|
15
16
|
"accessor": lambda arguments: _helper.get_route(arguments['args'])
|
|
16
17
|
},
|
|
18
|
+
{
|
|
19
|
+
"_comment": "request method, request URI",
|
|
20
|
+
"attribute": "url",
|
|
21
|
+
"accessor": lambda arguments: _helper.get_url(arguments['args'])
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"_comment": "request function name",
|
|
25
|
+
"attribute": "function_name",
|
|
26
|
+
"accessor": lambda arguments: _helper.get_function_name(arguments['args'])
|
|
27
|
+
},
|
|
17
28
|
{
|
|
18
29
|
"_comment": "request method, request URI",
|
|
19
30
|
"attribute": "body",
|
|
20
31
|
"accessor": lambda arguments: _helper.get_body(arguments['args'])
|
|
21
|
-
}
|
|
32
|
+
}
|
|
22
33
|
]
|
|
23
34
|
],
|
|
24
35
|
"events": [
|
|
@@ -37,8 +48,8 @@ AIO_HTTP_PROCESSOR = {
|
|
|
37
48
|
"attributes": [
|
|
38
49
|
{
|
|
39
50
|
"_comment": "status from HTTP response",
|
|
40
|
-
"attribute": "
|
|
41
|
-
"accessor": lambda arguments: _helper.extract_status(arguments
|
|
51
|
+
"attribute": "error_code",
|
|
52
|
+
"accessor": lambda arguments: _helper.extract_status(arguments)
|
|
42
53
|
},
|
|
43
54
|
{
|
|
44
55
|
"_comment": "this is result from LLM",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
from threading import local
|
|
3
|
-
from monocle_apptrace.instrumentation.common.utils import extract_http_headers, clear_http_scopes, try_option, Option, MonocleSpanException
|
|
3
|
+
from monocle_apptrace.instrumentation.common.utils import extract_http_headers, clear_http_scopes, get_exception_status_code, try_option, Option, MonocleSpanException
|
|
4
4
|
from monocle_apptrace.instrumentation.common.span_handler import SpanHandler
|
|
5
5
|
from monocle_apptrace.instrumentation.common.constants import HTTP_SUCCESS_CODES
|
|
6
6
|
from urllib.parse import unquote, urlparse, ParseResult
|
|
@@ -13,7 +13,7 @@ def get_url(kwargs) -> ParseResult:
|
|
|
13
13
|
url_str = try_option(getattr, kwargs['req'], 'url')
|
|
14
14
|
url = url_str.unwrap_or(None)
|
|
15
15
|
if url is not None:
|
|
16
|
-
return
|
|
16
|
+
return url
|
|
17
17
|
else:
|
|
18
18
|
return None
|
|
19
19
|
|
|
@@ -25,9 +25,11 @@ def get_function_name(kwargs) -> str:
|
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
def get_route(kwargs) -> str:
|
|
28
|
-
|
|
29
|
-
if
|
|
28
|
+
url_str = get_url(kwargs)
|
|
29
|
+
if url_str is not None:
|
|
30
|
+
url: ParseResult = urlparse(url_str)
|
|
30
31
|
return url.path
|
|
32
|
+
return ""
|
|
31
33
|
|
|
32
34
|
def get_method(kwargs) -> str:
|
|
33
35
|
# return args[0]['method'] if 'method' in args[0] else ""
|
|
@@ -35,9 +37,11 @@ def get_method(kwargs) -> str:
|
|
|
35
37
|
return http_method.unwrap_or("")
|
|
36
38
|
|
|
37
39
|
def get_params(kwargs) -> dict:
|
|
38
|
-
|
|
39
|
-
if
|
|
40
|
+
url_str = get_url(kwargs)
|
|
41
|
+
if url_str is not None:
|
|
42
|
+
url: ParseResult = urlparse(url_str)
|
|
40
43
|
return unquote(url.query)
|
|
44
|
+
return {}
|
|
41
45
|
|
|
42
46
|
def get_body(kwargs) -> dict:
|
|
43
47
|
if hasattr(kwargs['req'], 'get_body'):
|
|
@@ -57,11 +61,17 @@ def extract_response(result) -> str:
|
|
|
57
61
|
response = ""
|
|
58
62
|
return response
|
|
59
63
|
|
|
60
|
-
def extract_status(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
64
|
+
def extract_status(arguments) -> str:
|
|
65
|
+
if arguments["exception"] is not None:
|
|
66
|
+
return get_exception_status_code(arguments)
|
|
67
|
+
result = arguments['result']
|
|
68
|
+
if hasattr(result, 'status_code'):
|
|
69
|
+
status = f"{result.status_code}"
|
|
70
|
+
if status not in HTTP_SUCCESS_CODES:
|
|
71
|
+
error_message = extract_response(result)
|
|
72
|
+
raise MonocleSpanException(f"error: {status} - {error_message}", status)
|
|
73
|
+
else:
|
|
74
|
+
status = "success"
|
|
65
75
|
return status
|
|
66
76
|
|
|
67
77
|
def azure_func_pre_tracing(kwargs):
|
|
@@ -23,6 +23,11 @@ AZFUNC_HTTP_PROCESSOR = {
|
|
|
23
23
|
"_comment": "request function name",
|
|
24
24
|
"attribute": "function_name",
|
|
25
25
|
"accessor": lambda arguments: _helper.get_function_name(arguments['kwargs'])
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"_comment": "request function name",
|
|
29
|
+
"attribute": "url",
|
|
30
|
+
"accessor": lambda arguments: _helper.get_url(arguments['kwargs'])
|
|
26
31
|
}
|
|
27
32
|
]
|
|
28
33
|
],
|
|
@@ -42,8 +47,8 @@ AZFUNC_HTTP_PROCESSOR = {
|
|
|
42
47
|
"attributes": [
|
|
43
48
|
{
|
|
44
49
|
"_comment": "status from HTTP response",
|
|
45
|
-
"attribute": "
|
|
46
|
-
"accessor": lambda arguments: _helper.extract_status(arguments
|
|
50
|
+
"attribute": "error_code",
|
|
51
|
+
"accessor": lambda arguments: _helper.extract_status(arguments)
|
|
47
52
|
},
|
|
48
53
|
{
|
|
49
54
|
"_comment": "this is result from LLM",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
from threading import local
|
|
3
|
-
from monocle_apptrace.instrumentation.common.utils import extract_http_headers, clear_http_scopes
|
|
3
|
+
from monocle_apptrace.instrumentation.common.utils import extract_http_headers, clear_http_scopes, get_exception_status_code
|
|
4
4
|
from monocle_apptrace.instrumentation.common.span_handler import SpanHandler
|
|
5
5
|
from monocle_apptrace.instrumentation.common.constants import HTTP_SUCCESS_CODES
|
|
6
6
|
from monocle_apptrace.instrumentation.common.utils import MonocleSpanException
|
|
@@ -15,6 +15,13 @@ MAX_DATA_LENGTH = 1000
|
|
|
15
15
|
token_data = local()
|
|
16
16
|
token_data.current_token = None
|
|
17
17
|
|
|
18
|
+
def get_url(args) -> str:
|
|
19
|
+
server = args.get('server', ('127.0.0.1', 80))
|
|
20
|
+
host, port = server
|
|
21
|
+
path = args.get('path', '/')
|
|
22
|
+
scheme = args.get('scheme', 'http')
|
|
23
|
+
return f"{scheme}://{host}:{port}{path}"
|
|
24
|
+
|
|
18
25
|
def get_route(scope) -> str:
|
|
19
26
|
return scope.get('path', '')
|
|
20
27
|
|
|
@@ -42,11 +49,17 @@ def extract_response(response) -> str:
|
|
|
42
49
|
logger.warning(f"Error extracting response: {e}")
|
|
43
50
|
return ""
|
|
44
51
|
|
|
45
|
-
def extract_status(
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
52
|
+
def extract_status(arguments) -> str:
|
|
53
|
+
if arguments["exception"] is not None:
|
|
54
|
+
return get_exception_status_code(arguments)
|
|
55
|
+
instance = arguments['instance']
|
|
56
|
+
if hasattr(instance, 'status_code'):
|
|
57
|
+
status = f"{instance.status_code}"
|
|
58
|
+
if status not in HTTP_SUCCESS_CODES:
|
|
59
|
+
error_message = extract_response(instance)
|
|
60
|
+
raise MonocleSpanException(f"error: {status} - {error_message}", status)
|
|
61
|
+
else:
|
|
62
|
+
status = "success"
|
|
50
63
|
return status
|
|
51
64
|
|
|
52
65
|
def fastapi_pre_tracing(scope):
|
|
@@ -13,6 +13,10 @@ FASTAPI_HTTP_PROCESSOR = {
|
|
|
13
13
|
"attribute": "route",
|
|
14
14
|
"accessor": lambda arguments: _helper.get_route(arguments['args'][0])
|
|
15
15
|
},
|
|
16
|
+
{
|
|
17
|
+
"attribute": "url",
|
|
18
|
+
"accessor": lambda arguments: _helper.get_url(arguments['args'][0])
|
|
19
|
+
},
|
|
16
20
|
]
|
|
17
21
|
]
|
|
18
22
|
}
|
|
@@ -32,8 +36,8 @@ FASTAPI_RESPONSE_PROCESSOR = {
|
|
|
32
36
|
"name": "data.output",
|
|
33
37
|
"attributes": [
|
|
34
38
|
{
|
|
35
|
-
"attribute": "
|
|
36
|
-
"accessor": lambda arguments: _helper.extract_status(arguments
|
|
39
|
+
"attribute": "error_code",
|
|
40
|
+
"accessor": lambda arguments: _helper.extract_status(arguments)
|
|
37
41
|
},
|
|
38
42
|
{
|
|
39
43
|
"attribute": "response",
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from monocle_apptrace.instrumentation.common.wrapper import atask_wrapper,task_wrapper
|
|
2
|
+
from monocle_apptrace.instrumentation.metamodel.fastapi.entities.http import FASTAPI_HTTP_PROCESSOR, FASTAPI_RESPONSE_PROCESSOR
|
|
3
|
+
|
|
4
|
+
FASTAPI_METHODS = [
|
|
5
|
+
{
|
|
6
|
+
"package": "fastapi",
|
|
7
|
+
"object": "FastAPI",
|
|
8
|
+
"method": "__call__",
|
|
9
|
+
"wrapper_method": task_wrapper,
|
|
10
|
+
"span_name": "fastapi.request",
|
|
11
|
+
"span_handler": "fastapi_handler",
|
|
12
|
+
"output_processor": FASTAPI_HTTP_PROCESSOR,
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"package": "starlette.responses",
|
|
16
|
+
"object": "Response",
|
|
17
|
+
"method": "__call__",
|
|
18
|
+
"span_name": "fastapi.response",
|
|
19
|
+
"wrapper_method": task_wrapper,
|
|
20
|
+
"span_handler": "fastapi_response_handler",
|
|
21
|
+
"output_processor": FASTAPI_RESPONSE_PROCESSOR
|
|
22
|
+
}
|
|
23
|
+
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
from threading import local
|
|
3
|
-
from monocle_apptrace.instrumentation.common.utils import extract_http_headers, clear_http_scopes
|
|
3
|
+
from monocle_apptrace.instrumentation.common.utils import extract_http_headers, clear_http_scopes, get_exception_status_code
|
|
4
4
|
from monocle_apptrace.instrumentation.common.span_handler import SpanHandler
|
|
5
5
|
from monocle_apptrace.instrumentation.common.constants import HTTP_SUCCESS_CODES
|
|
6
6
|
from monocle_apptrace.instrumentation.common.utils import MonocleSpanException
|
|
@@ -22,6 +22,14 @@ def get_params(args) -> dict:
|
|
|
22
22
|
params = args[0]['QUERY_STRING'] if 'QUERY_STRING' in args[0] else ""
|
|
23
23
|
return unquote(params)
|
|
24
24
|
|
|
25
|
+
def get_url(args) -> str:
|
|
26
|
+
url = ""
|
|
27
|
+
if len(args) > 1 or not isinstance(args[0], dict):
|
|
28
|
+
if 'HTTP_HOST' in args[0]:
|
|
29
|
+
url = f"http://{args[0]['HTTP_HOST']}{args[0].get('REQUEST_URI', '')}"
|
|
30
|
+
|
|
31
|
+
return url
|
|
32
|
+
|
|
25
33
|
def get_body(args) -> dict:
|
|
26
34
|
return ""
|
|
27
35
|
|
|
@@ -32,11 +40,17 @@ def extract_response(instance) -> str:
|
|
|
32
40
|
response = ""
|
|
33
41
|
return response
|
|
34
42
|
|
|
35
|
-
def extract_status(
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
43
|
+
def extract_status(arguments) -> str:
|
|
44
|
+
if arguments["exception"] is not None:
|
|
45
|
+
return get_exception_status_code(arguments)
|
|
46
|
+
instance = arguments['instance']
|
|
47
|
+
if hasattr(instance, 'status_code'):
|
|
48
|
+
status = f"{instance.status_code}"
|
|
49
|
+
if status not in HTTP_SUCCESS_CODES:
|
|
50
|
+
error_message = extract_response(instance)
|
|
51
|
+
raise MonocleSpanException(f"error: {status} - {error_message}", status)
|
|
52
|
+
else:
|
|
53
|
+
status = "success"
|
|
40
54
|
return status
|
|
41
55
|
|
|
42
56
|
def flask_pre_tracing(args):
|
|
@@ -14,6 +14,11 @@ FLASK_HTTP_PROCESSOR = {
|
|
|
14
14
|
"attribute": "route",
|
|
15
15
|
"accessor": lambda arguments: _helper.get_route(arguments['args'])
|
|
16
16
|
},
|
|
17
|
+
{
|
|
18
|
+
"_comment": "request method, request URI",
|
|
19
|
+
"attribute": "url",
|
|
20
|
+
"accessor": lambda arguments: _helper.get_url(arguments['args'])
|
|
21
|
+
},
|
|
17
22
|
]
|
|
18
23
|
]
|
|
19
24
|
}
|
|
@@ -35,8 +40,8 @@ FLASK_RESPONSE_PROCESSOR = {
|
|
|
35
40
|
"attributes": [
|
|
36
41
|
{
|
|
37
42
|
"_comment": "status from HTTP response",
|
|
38
|
-
"attribute": "
|
|
39
|
-
"accessor": lambda arguments: _helper.extract_status(arguments
|
|
43
|
+
"attribute": "error_code",
|
|
44
|
+
"accessor": lambda arguments: _helper.extract_status(arguments)
|
|
40
45
|
},
|
|
41
46
|
{
|
|
42
47
|
"_comment": "this is result from LLM",
|