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.

Files changed (151) hide show
  1. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/PKG-INFO +1 -1
  2. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/pyproject.toml +1 -1
  3. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/exporters/file_exporter.py +8 -1
  4. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/common/span_handler.py +7 -4
  5. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/common/utils.py +10 -2
  6. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/common/wrapper_method.py +3 -1
  7. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/adk/entities/agent.py +6 -1
  8. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/adk/entities/tool.py +8 -3
  9. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/agents/entities/inference.py +15 -3
  10. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/aiohttp/_helper.py +22 -7
  11. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/aiohttp/entities/http.py +14 -3
  12. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/azfunc/_helper.py +21 -11
  13. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/azfunc/entities/http.py +7 -2
  14. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/fastapi/_helper.py +19 -6
  15. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/fastapi/entities/http.py +6 -2
  16. monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/fastapi/methods.py +23 -0
  17. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/flask/_helper.py +20 -6
  18. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/flask/entities/http.py +7 -2
  19. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/lambdafunc/_helper.py +25 -14
  20. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/lambdafunc/entities/http.py +7 -2
  21. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langgraph/entities/inference.py +1 -1
  22. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/entities/agent.py +1 -1
  23. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/mcp/entities/inference.py +5 -0
  24. monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/mistral/_helper.py +174 -0
  25. monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/mistral/entities/inference.py +85 -0
  26. monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/mistral/methods.py +41 -0
  27. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/teamsai/_helper.py +2 -2
  28. monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/teamsai/entities/__init__.py +0 -0
  29. monocle_apptrace-0.5.3/src/monocle_apptrace/instrumentation/metamodel/teamsai/entities/inference/__init__.py +0 -0
  30. monocle_apptrace-0.5.1b1/src/monocle_apptrace/instrumentation/metamodel/fastapi/methods.py +0 -23
  31. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/.gitignore +0 -0
  32. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/LICENSE +0 -0
  33. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/NOTICE +0 -0
  34. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/README.md +0 -0
  35. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/README.md +0 -0
  36. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/__init__.py +0 -0
  37. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/__main__.py +0 -0
  38. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/exporters/aws/s3_exporter.py +0 -0
  39. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/exporters/aws/s3_exporter_opendal.py +0 -0
  40. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/exporters/azure/blob_exporter.py +0 -0
  41. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/exporters/azure/blob_exporter_opendal.py +0 -0
  42. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/exporters/base_exporter.py +0 -0
  43. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/exporters/exporter_processor.py +0 -0
  44. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/exporters/monocle_exporters.py +0 -0
  45. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/exporters/okahu/okahu_exporter.py +0 -0
  46. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/__init__.py +0 -0
  47. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/common/__init__.py +0 -0
  48. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/common/constants.py +0 -0
  49. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/common/instrumentor.py +0 -0
  50. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/common/method_wrappers.py +0 -0
  51. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/common/scope_wrapper.py +0 -0
  52. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/common/tracing.md +0 -0
  53. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/common/wrapper.py +0 -0
  54. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/__init__.py +0 -0
  55. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/a2a/__init__.py +0 -0
  56. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/a2a/_helper.py +0 -0
  57. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/a2a/entities/__init__.py +0 -0
  58. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/a2a/entities/inference.py +0 -0
  59. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/a2a/methods.py +0 -0
  60. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/adk/__init__.py +0 -0
  61. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/adk/_helper.py +0 -0
  62. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/adk/methods.py +0 -0
  63. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/agents/__init__.py +0 -0
  64. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/agents/_helper.py +0 -0
  65. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/agents/agents_processor.py +0 -0
  66. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/agents/entities/__init__.py +0 -0
  67. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/agents/methods.py +0 -0
  68. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/aiohttp/__init__.py +0 -0
  69. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/aiohttp/methods.py +0 -0
  70. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/anthropic/__init__.py +0 -0
  71. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/anthropic/_helper.py +0 -0
  72. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/anthropic/entities/__init__.py +0 -0
  73. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/anthropic/entities/inference.py +0 -0
  74. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/anthropic/methods.py +0 -0
  75. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/azfunc/methods.py +0 -0
  76. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/azfunc/wrapper.py +0 -0
  77. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/azureaiinference/__init__.py +0 -0
  78. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/azureaiinference/_helper.py +0 -0
  79. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/azureaiinference/entities/inference.py +0 -0
  80. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/azureaiinference/methods.py +0 -0
  81. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/botocore/__init__.py +0 -0
  82. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/botocore/_helper.py +0 -0
  83. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/botocore/entities/__init__.py +0 -0
  84. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/botocore/entities/inference.py +0 -0
  85. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/botocore/handlers/botocore_span_handler.py +0 -0
  86. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/botocore/methods.py +0 -0
  87. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/fastapi/__init__.py +0 -0
  88. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/fastapi/entities/__init__.py +0 -0
  89. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/finish_types.py +0 -0
  90. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/flask/__init__.py +0 -0
  91. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/flask/methods.py +0 -0
  92. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/gemini/__init__.py +0 -0
  93. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/gemini/_helper.py +0 -0
  94. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/gemini/entities/__init__.py +0 -0
  95. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/gemini/entities/inference.py +0 -0
  96. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/gemini/entities/retrieval.py +0 -0
  97. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/gemini/methods.py +0 -0
  98. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/haystack/__init__.py +0 -0
  99. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/haystack/_helper.py +0 -0
  100. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/haystack/entities/__init__.py +0 -0
  101. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/haystack/entities/inference.py +0 -0
  102. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/haystack/entities/retrieval.py +0 -0
  103. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/haystack/methods.py +0 -0
  104. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/lambdafunc/methods.py +0 -0
  105. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/lambdafunc/wrapper.py +0 -0
  106. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langchain/__init__.py +0 -0
  107. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langchain/_helper.py +0 -0
  108. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langchain/entities/__init__.py +0 -0
  109. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langchain/entities/inference.py +0 -0
  110. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langchain/entities/retrieval.py +0 -0
  111. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langchain/methods.py +0 -0
  112. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langgraph/__init__.py +0 -0
  113. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langgraph/_helper.py +0 -0
  114. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langgraph/entities/__init__.py +0 -0
  115. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langgraph/langgraph_processor.py +0 -0
  116. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/langgraph/methods.py +0 -0
  117. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/litellm/__init__.py +0 -0
  118. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/litellm/_helper.py +0 -0
  119. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/litellm/entities/__init__.py +0 -0
  120. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/litellm/entities/inference.py +0 -0
  121. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/litellm/methods.py +0 -0
  122. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/__init__.py +0 -0
  123. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/_helper.py +0 -0
  124. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/entities/__init__.py +0 -0
  125. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/entities/inference.py +0 -0
  126. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/entities/retrieval.py +0 -0
  127. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/llamaindex_processor.py +0 -0
  128. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/llamaindex/methods.py +0 -0
  129. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/mcp/__init__.py +0 -0
  130. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/mcp/_helper.py +0 -0
  131. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/mcp/entities/__init__.py +0 -0
  132. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/mcp/mcp_processor.py +0 -0
  133. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/mcp/methods.py +0 -0
  134. {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
  135. {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
  136. {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
  137. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/openai/_helper.py +0 -0
  138. {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
  139. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/openai/entities/inference.py +0 -0
  140. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/openai/entities/retrieval.py +0 -0
  141. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/openai/methods.py +0 -0
  142. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/requests/__init__.py +0 -0
  143. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/requests/_helper.py +0 -0
  144. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/requests/entities/http.py +0 -0
  145. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/requests/methods.py +0 -0
  146. {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
  147. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/teamsai/entities/inference/actionplanner_output_processor.py +0 -0
  148. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/teamsai/entities/inference/teamsai_output_processor.py +0 -0
  149. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/teamsai/methods.py +0 -0
  150. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/instrumentation/metamodel/teamsai/sample.json +0 -0
  151. {monocle_apptrace-0.5.1b1 → monocle_apptrace-0.5.3}/src/monocle_apptrace/mcp_server.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: monocle_apptrace
3
- Version: 0.5.1b1
3
+ Version: 0.5.3
4
4
  Summary: package with monocle genAI tracing
5
5
  Project-URL: Homepage, https://github.com/monocle2ai/monocle
6
6
  Project-URL: Issues, https://github.com/monocle2ai/monocle/issues
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "monocle_apptrace"
7
- version = "0.5.1b1"
7
+ version = "0.5.3"
8
8
  authors = [
9
9
  { name="Okahu Inc.", email="okahu-pypi@okahu.ai" },
10
10
  ]
@@ -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
- result = accessor(arguments)
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} {self.status}"
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": "Inputs",
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": "Inputs",
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 get_route(args) -> str:
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(result) -> str:
35
- status = f"{result.status}" if hasattr(result, 'status') else ""
36
- if status not in HTTP_SUCCESS_CODES:
37
- error_message = extract_response(result)
38
- raise MonocleSpanException(f"error: {status} - {error_message}")
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": "status",
41
- "accessor": lambda arguments: _helper.extract_status(arguments['result'])
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 urlparse(url)
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
- url:ParseResult = get_url(kwargs)
29
- if url is not None:
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
- url:ParseResult = get_url(kwargs)
39
- if url is not None:
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(result) -> str:
61
- status = f"{result.status_code}" if hasattr(result, 'status_code') else ""
62
- if status not in HTTP_SUCCESS_CODES:
63
- error_message = extract_response(result)
64
- raise MonocleSpanException(f"error: {status} - {error_message}")
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": "status",
46
- "accessor": lambda arguments: _helper.extract_status(arguments['result'])
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(instance) -> str:
46
- status = f"{instance.status_code}" if hasattr(instance, 'status_code') else ""
47
- if status not in HTTP_SUCCESS_CODES:
48
- error_message = extract_response(instance)
49
- raise MonocleSpanException(f"error: {status} - {error_message}")
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": "status",
36
- "accessor": lambda arguments: _helper.extract_status(arguments['instance'])
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(instance) -> str:
36
- status = f"{instance.status_code}" if hasattr(instance, 'status_code') else ""
37
- if status not in HTTP_SUCCESS_CODES:
38
- error_message = extract_response(instance)
39
- raise MonocleSpanException(f"error: {status} - {error_message}")
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": "status",
39
- "accessor": lambda arguments: _helper.extract_status(arguments['instance'])
43
+ "attribute": "error_code",
44
+ "accessor": lambda arguments: _helper.extract_status(arguments)
40
45
  },
41
46
  {
42
47
  "_comment": "this is result from LLM",