whatap-python 1.8.7__tar.gz → 1.8.8__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 whatap-python might be problematic. Click here for more details.

Files changed (143) hide show
  1. {whatap_python-1.8.7 → whatap_python-1.8.8}/PKG-INFO +1 -1
  2. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/__init__.py +4 -4
  3. whatap_python-1.8.8/whatap/build.py +4 -0
  4. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/conf/configuration.py +3 -0
  5. whatap_python-1.8.7/whatap/trace/mod/amqp_kombu.py → whatap_python-1.8.8/whatap/trace/mod/amqp/kombu.py +1 -1
  6. whatap_python-1.8.7/whatap/trace/mod/amqp_pika.py → whatap_python-1.8.8/whatap/trace/mod/amqp/pika.py +1 -1
  7. whatap_python-1.8.7/whatap/trace/mod/application_bottle.py → whatap_python-1.8.8/whatap/trace/mod/application/bottle.py +1 -1
  8. whatap_python-1.8.7/whatap/trace/mod/application_celery.py → whatap_python-1.8.8/whatap/trace/mod/application/celery.py +1 -1
  9. whatap_python-1.8.7/whatap/trace/mod/application_cherrypy.py → whatap_python-1.8.8/whatap/trace/mod/application/cherrypy.py +1 -1
  10. whatap_python-1.8.7/whatap/trace/mod/application_django.py → whatap_python-1.8.8/whatap/trace/mod/application/django.py +3 -3
  11. whatap_python-1.8.7/whatap/trace/mod/application_django_asgi.py → whatap_python-1.8.8/whatap/trace/mod/application/django_asgi.py +1 -1
  12. whatap_python-1.8.7/whatap/trace/mod/application_django_py3.py → whatap_python-1.8.8/whatap/trace/mod/application/django_py3.py +1 -1
  13. whatap_python-1.8.7/whatap/trace/mod/application_fastapi.py → whatap_python-1.8.8/whatap/trace/mod/application/fastapi.py +1 -1
  14. whatap_python-1.8.7/whatap/trace/mod/application_flask.py → whatap_python-1.8.8/whatap/trace/mod/application/flask.py +1 -1
  15. whatap_python-1.8.7/whatap/trace/mod/application_frappe.py → whatap_python-1.8.8/whatap/trace/mod/application/frappe.py +1 -1
  16. whatap_python-1.8.7/whatap/trace/mod/application_graphql.py → whatap_python-1.8.8/whatap/trace/mod/application/graphql.py +1 -1
  17. whatap_python-1.8.7/whatap/trace/mod/application_nameko.py → whatap_python-1.8.8/whatap/trace/mod/application/nameko.py +1 -1
  18. whatap_python-1.8.7/whatap/trace/mod/application_odoo.py → whatap_python-1.8.8/whatap/trace/mod/application/odoo.py +1 -1
  19. whatap_python-1.8.7/whatap/trace/mod/application_starlette.py → whatap_python-1.8.8/whatap/trace/mod/application/starlette.py +1 -1
  20. whatap_python-1.8.7/whatap/trace/mod/application_tornado.py → whatap_python-1.8.8/whatap/trace/mod/application/tornado.py +1 -1
  21. whatap_python-1.8.8/whatap/trace/mod/database/__init__.py +0 -0
  22. whatap_python-1.8.7/whatap/trace/mod/database_cxoracle.py → whatap_python-1.8.8/whatap/trace/mod/database/cxoracle.py +1 -1
  23. whatap_python-1.8.7/whatap/trace/mod/database_mongo.py → whatap_python-1.8.8/whatap/trace/mod/database/mongo.py +1 -1
  24. whatap_python-1.8.7/whatap/trace/mod/database_mysql.py → whatap_python-1.8.8/whatap/trace/mod/database/mysql.py +1 -1
  25. whatap_python-1.8.7/whatap/trace/mod/database_neo4j.py → whatap_python-1.8.8/whatap/trace/mod/database/neo4j.py +1 -1
  26. whatap_python-1.8.7/whatap/trace/mod/database_postgresql.py → whatap_python-1.8.8/whatap/trace/mod/database/postgresql.py +1 -1
  27. whatap_python-1.8.7/whatap/trace/mod/database_redis.py → whatap_python-1.8.8/whatap/trace/mod/database/redis.py +1 -1
  28. whatap_python-1.8.7/whatap/trace/mod/database_toolkit.py → whatap_python-1.8.8/whatap/trace/mod/database/toolkit.py +1 -1
  29. whatap_python-1.8.8/whatap/trace/mod/email/__init__.py +0 -0
  30. whatap_python-1.8.7/whatap/trace/mod/email_smtp.py → whatap_python-1.8.8/whatap/trace/mod/email/smtp.py +1 -1
  31. whatap_python-1.8.8/whatap/trace/mod/httpc/__init__.py +0 -0
  32. whatap_python-1.8.7/whatap/trace/mod/httpc_django.py → whatap_python-1.8.8/whatap/trace/mod/httpc/django.py +1 -1
  33. whatap_python-1.8.7/whatap/trace/mod/httpc_httplib.py → whatap_python-1.8.8/whatap/trace/mod/httpc/httplib.py +1 -1
  34. whatap_python-1.8.8/whatap/trace/mod/httpc/httpx.py +24 -0
  35. whatap_python-1.8.7/whatap/trace/mod/httpc_requests.py → whatap_python-1.8.8/whatap/trace/mod/httpc/requests.py +1 -1
  36. whatap_python-1.8.7/whatap/trace/mod/httpc_urllib3.py → whatap_python-1.8.8/whatap/trace/mod/httpc/urllib3.py +1 -1
  37. whatap_python-1.8.8/whatap/trace/mod/llm/__init__.py +0 -0
  38. whatap_python-1.8.8/whatap/trace/mod/llm/openai.py +199 -0
  39. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/trace/mod/plugin.py +1 -1
  40. whatap_python-1.8.8/whatap/trace/mod/standalone/__init__.py +0 -0
  41. whatap_python-1.8.7/whatap/trace/mod/standalone_multiple.py → whatap_python-1.8.8/whatap/trace/mod/standalone/multiple.py +1 -1
  42. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/trace/trace_module_definition.py +33 -27
  43. whatap_python-1.8.8/whatap/util/__init__.py +0 -0
  44. whatap_python-1.8.8/whatap/util/cardinality/__init__.py +0 -0
  45. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap_python.egg-info/PKG-INFO +1 -1
  46. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap_python.egg-info/SOURCES.txt +40 -31
  47. whatap_python-1.8.7/whatap/build.py +0 -4
  48. {whatap_python-1.8.7 → whatap_python-1.8.8}/README.md +0 -0
  49. {whatap_python-1.8.7 → whatap_python-1.8.8}/setup.cfg +0 -0
  50. {whatap_python-1.8.7 → whatap_python-1.8.8}/setup.py +0 -0
  51. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/LICENSE +0 -0
  52. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/README.rst +0 -0
  53. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/__main__.py +0 -0
  54. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/agent/darwin/amd64/whatap_python +0 -0
  55. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/agent/darwin/arm64/whatap_python +0 -0
  56. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/agent/linux/amd64/whatap_python +0 -0
  57. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/agent/linux/arm64/whatap_python +0 -0
  58. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/bootstrap/__init__.py +0 -0
  59. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/bootstrap/sitecustomize.py +0 -0
  60. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/conf/__init__.py +0 -0
  61. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/conf/configure.py +0 -0
  62. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/conf/license.py +0 -0
  63. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/control/__init__.py +0 -0
  64. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/counter/__init__.py +0 -0
  65. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/counter/counter_manager.py +0 -0
  66. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/counter/tasks/__init__.py +0 -0
  67. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/counter/tasks/openfiledescriptor.py +0 -0
  68. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/io/__init__.py +0 -0
  69. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/io/data_inputx.py +0 -0
  70. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/io/data_outputx.py +0 -0
  71. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/net/__init__.py +0 -0
  72. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/net/async_sender.py +0 -0
  73. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/net/packet_enum.py +0 -0
  74. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/net/packet_type_enum.py +0 -0
  75. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/net/param_def.py +0 -0
  76. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/net/stackhelper.py +0 -0
  77. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/net/udp_session.py +0 -0
  78. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/net/udp_thread.py +0 -0
  79. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/pack/__init__.py +0 -0
  80. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/pack/logSinkPack.py +0 -0
  81. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/pack/pack.py +0 -0
  82. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/pack/pack_enum.py +0 -0
  83. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/pack/tagCountPack.py +0 -0
  84. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/scripts/__init__.py +0 -0
  85. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/trace/__init__.py +0 -0
  86. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/trace/mod/__init__.py +0 -0
  87. {whatap_python-1.8.7/whatap/util → whatap_python-1.8.8/whatap/trace/mod/amqp}/__init__.py +0 -0
  88. {whatap_python-1.8.7/whatap/util/cardinality → whatap_python-1.8.8/whatap/trace/mod/application}/__init__.py +0 -0
  89. /whatap_python-1.8.7/whatap/trace/mod/application_wsgi.py → /whatap_python-1.8.8/whatap/trace/mod/application/wsgi.py +0 -0
  90. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/trace/mod/logging.py +0 -0
  91. /whatap_python-1.8.7/whatap/trace/mod/standalone_single.py → /whatap_python-1.8.8/whatap/trace/mod/standalone/single.py +0 -0
  92. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/trace/simple_trace_context.py +0 -0
  93. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/trace/trace_context.py +0 -0
  94. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/trace/trace_context_manager.py +0 -0
  95. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/trace/trace_import.py +0 -0
  96. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/util/bit_util.py +0 -0
  97. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/util/cardinality/hyperloglog.py +0 -0
  98. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/util/cardinality/murmurhash.py +0 -0
  99. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/util/cardinality/registerset.py +0 -0
  100. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/util/compare_util.py +0 -0
  101. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/util/date_util.py +0 -0
  102. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/util/debug_util.py +0 -0
  103. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/util/escape_literal_sql.py +0 -0
  104. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/util/hash_util.py +0 -0
  105. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/util/hexa32.py +0 -0
  106. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/util/int_set.py +0 -0
  107. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/util/ip_util.py +0 -0
  108. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/util/keygen.py +0 -0
  109. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/util/linked_list.py +0 -0
  110. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/util/linked_map.py +0 -0
  111. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/util/metering_util.py +0 -0
  112. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/util/request_double_queue.py +0 -0
  113. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/util/request_queue.py +0 -0
  114. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/util/string_util.py +0 -0
  115. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/util/throttle_util.py +0 -0
  116. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/util/userid_util.py +0 -0
  117. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/value/__init__.py +0 -0
  118. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/value/blob_value.py +0 -0
  119. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/value/boolean_value.py +0 -0
  120. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/value/decimal_value.py +0 -0
  121. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/value/double_summary.py +0 -0
  122. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/value/double_value.py +0 -0
  123. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/value/float_array.py +0 -0
  124. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/value/float_value.py +0 -0
  125. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/value/int_array.py +0 -0
  126. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/value/ip4_value.py +0 -0
  127. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/value/list_value.py +0 -0
  128. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/value/long_array.py +0 -0
  129. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/value/long_summary.py +0 -0
  130. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/value/map_value.py +0 -0
  131. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/value/null_value.py +0 -0
  132. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/value/number_value.py +0 -0
  133. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/value/summary_value.py +0 -0
  134. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/value/text_array.py +0 -0
  135. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/value/text_hash_value.py +0 -0
  136. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/value/text_value.py +0 -0
  137. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/value/value.py +0 -0
  138. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/value/value_enum.py +0 -0
  139. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap/whatap.conf +0 -0
  140. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap_python.egg-info/dependency_links.txt +0 -0
  141. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap_python.egg-info/entry_points.txt +0 -0
  142. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap_python.egg-info/not-zip-safe +0 -0
  143. {whatap_python-1.8.7 → whatap_python-1.8.8}/whatap_python.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: whatap-python
3
- Version: 1.8.7
3
+ Version: 1.8.8
4
4
  Summary: Monitoring and Profiling Service
5
5
  Home-page: https://www.whatap.io
6
6
  Author: whatap
@@ -340,10 +340,10 @@ def hooks(home):
340
340
 
341
341
  if conf.standalone_enabled:
342
342
  if conf.standalone_type == 'multiple-transaction':
343
- from whatap.trace.mod.standalone_multiple import instrument_standalone_multiple
343
+ from whatap.trace.mod.standalone.multiple import instrument_standalone_multiple
344
344
  instrument_standalone_multiple()
345
345
  else:
346
- from whatap.trace.mod.standalone_single import instrument_standalone_single
346
+ from whatap.trace.mod.standalone.single import instrument_standalone_single
347
347
  instrument_standalone_single()
348
348
 
349
349
  except Exception as e:
@@ -453,9 +453,9 @@ def go(batch=False, opts={}):
453
453
 
454
454
  import signal
455
455
 
456
- from whatap.trace.mod.application_wsgi import interceptor, start_interceptor, \
456
+ from whatap.trace.mod.application.wsgi import interceptor, start_interceptor, \
457
457
  end_interceptor, trace_handler, interceptor_step_error
458
- from whatap.trace.mod.application_fastapi import interceptor_error_log
458
+ from whatap.trace.mod.application.fastapi import interceptor_error_log
459
459
  from whatap.trace.trace_context import TraceContext, TraceContextManager
460
460
 
461
461
  def register_app(fn):
@@ -0,0 +1,4 @@
1
+ app = 'Python'
2
+ name = 'whatap-python'
3
+ version = '1.8.8'
4
+ release_date = '20250804'
@@ -4,6 +4,7 @@ Configuration = {
4
4
  "ignore_whatap_stdout" : False,
5
5
  "net_udp_port": "6600",
6
6
  "web_static_content_extensions": "js, htm, html, gif, png, jpg, css, swf, ico",
7
+
7
8
  "trace_auto_normalize_enabled": True,
8
9
  "trace_user_enabled": True,
9
10
  "trace_user_using_ip": True,
@@ -15,6 +16,8 @@ Configuration = {
15
16
  "trace_ignore_url_prefix": None,
16
17
  "trace_websocket_enabled": False,
17
18
 
19
+ "trace_llm_log_enabled": False,
20
+
18
21
  "debug": False,
19
22
  "query_string_enabled": False,
20
23
  "query_string_urls": "",
@@ -1,5 +1,5 @@
1
1
  from whatap.trace import get_dict
2
- from whatap.trace.mod.application_wsgi import trace_handler, \
2
+ from whatap.trace.mod.application.wsgi import trace_handler, \
3
3
  interceptor_step_error, start_interceptor, end_interceptor
4
4
  from whatap.trace.trace_context import TraceContext
5
5
  from whatap.trace.trace_context_manager import TraceContextManager
@@ -1,5 +1,5 @@
1
1
  from whatap.trace import get_dict
2
- from whatap.trace.mod.application_wsgi import trace_handler, \
2
+ from whatap.trace.mod.application.wsgi import trace_handler, \
3
3
  interceptor_step_error, start_interceptor, end_interceptor
4
4
  from whatap.trace.trace_context import TraceContext
5
5
  from whatap.trace.trace_context_manager import TraceContextManager
@@ -1,4 +1,4 @@
1
- from whatap.trace.mod.application_wsgi import interceptor, trace_handler, \
1
+ from whatap.trace.mod.application.wsgi import interceptor, trace_handler, \
2
2
  interceptor_error
3
3
 
4
4
 
@@ -1,7 +1,7 @@
1
1
  from functools import wraps
2
2
  from whatap.trace.trace_context import TraceContext
3
3
  from whatap.trace.trace_context_manager import TraceContextManager
4
- from whatap.trace.mod.application_wsgi import start_interceptor, end_interceptor, interceptor_step_error
4
+ from whatap.trace.mod.application.wsgi import start_interceptor, end_interceptor, interceptor_step_error
5
5
  from whatap import logging
6
6
  from whatap.conf.configure import Configure as conf
7
7
  import time
@@ -1,4 +1,4 @@
1
- from whatap.trace.mod.application_wsgi import interceptor, trace_handler, \
1
+ from whatap.trace.mod.application.wsgi import interceptor, trace_handler, \
2
2
  interceptor_error
3
3
 
4
4
 
@@ -1,7 +1,7 @@
1
1
  from whatap.conf.configure import Configure as conf
2
2
  from whatap.net.packet_type_enum import PacketTypeEnum
3
3
  import whatap.net.async_sender as async_sender
4
- from whatap.trace.mod.application_wsgi import interceptor, trace_handler, \
4
+ from whatap.trace.mod.application.wsgi import interceptor, trace_handler, \
5
5
  interceptor_error, interceptor_step_error
6
6
  from whatap.trace.trace_context_manager import TraceContextManager
7
7
  from whatap.trace.trace_context import TraceContext
@@ -76,7 +76,7 @@ def instrument_asgi(module):
76
76
  module.ASGIHandler.__call__ = wrapper(module.ASGIHandler.__call__)
77
77
 
78
78
  try:
79
- from whatap.trace.mod.application_django_py3 import \
79
+ from whatap.trace.mod.application.django_py3 import \
80
80
  instrument_handlers_async, interceptor_async,\
81
81
  trace_handler_async, blocking_handler_async,\
82
82
  parseHeaders as parseHeadersAsync,\
@@ -84,7 +84,7 @@ try:
84
84
 
85
85
  django_py3_loaded = True
86
86
  except Exception as e:
87
- print("application_django error:",e)
87
+ print("application.django error:",e)
88
88
  django_py3_loaded = False
89
89
 
90
90
  def instrument_handlers_channels(module):
@@ -4,7 +4,7 @@ from whatap.conf.configure import Configure as conf
4
4
  from whatap.net import async_sender
5
5
  from whatap.trace.trace_context_manager import TraceContextManager
6
6
  from whatap.trace.trace_context import TraceContext
7
- from whatap.trace.mod.application_wsgi import isIgnore, start_interceptor, end_interceptor
7
+ from whatap.trace.mod.application.wsgi import isIgnore, start_interceptor, end_interceptor
8
8
  from whatap.util.hash_util import HashUtil as hash_util
9
9
  from whatap.util.userid_util import UseridUtil
10
10
  from whatap.util.date_util import DateUtil
@@ -2,7 +2,7 @@
2
2
  from whatap.conf.configure import Configure as conf
3
3
  from whatap.trace.trace_context_manager import TraceContextManager
4
4
  from whatap.trace.trace_context import TraceContext
5
- from whatap.trace.mod.application_wsgi import \
5
+ from whatap.trace.mod.application.wsgi import \
6
6
  interceptor_error,isIgnore, start_interceptor, end_interceptor
7
7
  from whatap.util.hash_util import HashUtil as hash_util
8
8
  from whatap.util.userid_util import UseridUtil
@@ -1,4 +1,4 @@
1
- from whatap.trace.mod.application_wsgi import trace_handler, \
1
+ from whatap.trace.mod.application.wsgi import trace_handler, \
2
2
  interceptor_error, start_interceptor, end_interceptor, \
3
3
  isIgnore, interceptor_step_error
4
4
  from copy import copy
@@ -1,4 +1,4 @@
1
- from whatap.trace.mod.application_wsgi import interceptor, trace_handler, \
1
+ from whatap.trace.mod.application.wsgi import interceptor, trace_handler, \
2
2
  interceptor_error
3
3
  from whatap.trace.trace_context_manager import TraceContextManager
4
4
 
@@ -1,4 +1,4 @@
1
- from whatap.trace.mod.application_wsgi import trace_handler, \
1
+ from whatap.trace.mod.application.wsgi import trace_handler, \
2
2
  interceptor_error, start_interceptor, isIgnore, \
3
3
  end_interceptor
4
4
  from whatap.trace.trace_context_manager import TraceContextManager
@@ -1,5 +1,5 @@
1
1
  from whatap.trace import get_dict
2
- from whatap.trace.mod.application_wsgi import trace_handler, \
2
+ from whatap.trace.mod.application.wsgi import trace_handler, \
3
3
  interceptor_step_error, start_interceptor, end_interceptor
4
4
  from whatap.trace.trace_context import TraceContext
5
5
  from whatap.trace.trace_context_manager import TraceContextManager
@@ -1,5 +1,5 @@
1
1
  from whatap.trace import get_dict
2
- from whatap.trace.mod.application_wsgi import trace_handler, \
2
+ from whatap.trace.mod.application.wsgi import trace_handler, \
3
3
  interceptor_step_error, start_interceptor, end_interceptor
4
4
  from whatap.trace.trace_context import TraceContext
5
5
  from whatap.trace.trace_context_manager import TraceContextManager
@@ -1,5 +1,5 @@
1
1
  import traceback
2
- from whatap.trace.mod.application_wsgi import interceptor, trace_handler, interceptor_error
2
+ from whatap.trace.mod.application.wsgi import interceptor, trace_handler, interceptor_error
3
3
  from whatap.trace.trace_context_manager import TraceContextManager
4
4
 
5
5
 
@@ -4,7 +4,7 @@ from whatap.trace.trace_context_manager import TraceContextManager
4
4
  from whatap.net.packet_type_enum import PacketTypeEnum
5
5
  from whatap.util.date_util import DateUtil
6
6
  from whatap.util.userid_util import UseridUtil as userid_util
7
- from whatap.trace.mod.application_wsgi import interceptor_step_error, \
7
+ from whatap.trace.mod.application.wsgi import interceptor_step_error, \
8
8
  start_interceptor,end_interceptor
9
9
  from whatap.conf.configure import Configure as conf
10
10
  from typing import Any
@@ -6,7 +6,7 @@ from whatap.trace.trace_context import TraceContext
6
6
  from whatap.trace.trace_context_manager import TraceContextManager
7
7
  from whatap.util.date_util import DateUtil
8
8
  from whatap.conf.configure import Configure as conf
9
- from whatap.trace.mod.application_wsgi import trace_handler, \
9
+ from whatap.trace.mod.application.wsgi import trace_handler, \
10
10
  start_interceptor, end_interceptor, interceptor_error, isIgnore
11
11
 
12
12
 
@@ -1,5 +1,5 @@
1
1
  from whatap.trace import get_dict
2
- from whatap.trace.mod.application_wsgi import trace_handler, \
2
+ from whatap.trace.mod.application.wsgi import trace_handler, \
3
3
  interceptor_db_con, interceptor_db_execute, interceptor_db_close
4
4
 
5
5
  db_info = {}
@@ -1,6 +1,6 @@
1
1
  import pymongo.monitoring
2
2
  from whatap.trace import get_dict
3
- from whatap.trace.mod.application_wsgi import trace_handler, \
3
+ from whatap.trace.mod.application.wsgi import trace_handler, \
4
4
  interceptor_step_error
5
5
  from whatap.trace.trace_context_manager import TraceContextManager
6
6
  import whatap.net.async_sender as async_sender
@@ -1,5 +1,5 @@
1
1
  from whatap.trace import get_dict
2
- from whatap.trace.mod.application_wsgi import trace_handler, \
2
+ from whatap.trace.mod.application.wsgi import trace_handler, \
3
3
  interceptor_db_con, interceptor_db_execute, interceptor_db_close
4
4
 
5
5
  db_info = {}
@@ -1,5 +1,5 @@
1
1
  from whatap.trace import get_dict
2
- from whatap.trace.mod.application_wsgi import (
2
+ from whatap.trace.mod.application.wsgi import (
3
3
  trace_handler,
4
4
  interceptor_db_con,
5
5
  interceptor_db_execute,
@@ -1,5 +1,5 @@
1
1
  from whatap.trace import get_dict
2
- from whatap.trace.mod.application_wsgi import trace_handler, \
2
+ from whatap.trace.mod.application.wsgi import trace_handler, \
3
3
  interceptor_db_con, interceptor_db_execute, interceptor_db_close
4
4
 
5
5
  db_info = {}
@@ -1,5 +1,5 @@
1
1
  from whatap.trace import get_dict
2
- from whatap.trace.mod.application_wsgi import trace_handler, interceptor_step_error
2
+ from whatap.trace.mod.application.wsgi import trace_handler, interceptor_step_error
3
3
  from whatap.trace.trace_context_manager import TraceContextManager
4
4
  import whatap.net.async_sender as async_sender
5
5
  from whatap.net.packet_type_enum import PacketTypeEnum
@@ -1,6 +1,6 @@
1
1
  from whatap.net.packet_type_enum import PacketTypeEnum
2
2
  import whatap.net.async_sender as async_sender
3
- from whatap.trace.mod.application_wsgi import trace_handler, interceptor_db_execute, interceptor_step_error, sendDebugProfile
3
+ from whatap.trace.mod.application.wsgi import trace_handler, interceptor_db_execute, interceptor_step_error, sendDebugProfile
4
4
  from whatap.util.date_util import DateUtil
5
5
  from whatap.trace.trace_context_manager import TraceContextManager
6
6
  import sys
File without changes
@@ -1,5 +1,5 @@
1
1
  from whatap.trace import get_dict
2
- from whatap.trace.mod.application_wsgi import trace_handler, \
2
+ from whatap.trace.mod.application.wsgi import trace_handler, \
3
3
  interceptor_step_error
4
4
  from whatap.trace.trace_context_manager import TraceContextManager
5
5
  import whatap.net.async_sender as async_sender
File without changes
@@ -1,4 +1,4 @@
1
- from whatap.trace.mod.application_wsgi import transfer, trace_handler, \
1
+ from whatap.trace.mod.application.wsgi import transfer, trace_handler, \
2
2
  interceptor_httpc_request
3
3
 
4
4
 
@@ -1,4 +1,4 @@
1
- from whatap.trace.mod.application_wsgi import transfer, trace_handler, \
1
+ from whatap.trace.mod.application.wsgi import transfer, trace_handler, \
2
2
  interceptor_httpc_request, interceptor_sock_connect
3
3
 
4
4
  request_injection_processed = False
@@ -0,0 +1,24 @@
1
+ from whatap.trace.mod.application.wsgi import transfer, trace_handler, \
2
+ interceptor_httpc_request
3
+
4
+
5
+ def instrument_httpx(module):
6
+ def wrapper(fn):
7
+ @trace_handler(fn)
8
+ def trace(*args, **kwargs):
9
+ request = args[1]
10
+ request.headers = transfer(request.headers)
11
+
12
+ httpc_url = str(request.url)
13
+ callback = interceptor_httpc_request(fn, httpc_url, *args, **kwargs)
14
+
15
+ return callback
16
+
17
+ return trace
18
+
19
+ if hasattr(module, 'Client') and hasattr(module.Client, 'send'):
20
+ module.Client.send = wrapper(module.Client.send)
21
+
22
+
23
+ if hasattr(module, 'AsyncClient') and hasattr(module.AsyncClient, 'send'):
24
+ module.AsyncClient.send = wrapper(module.AsyncClient.send)
@@ -1,4 +1,4 @@
1
- from whatap.trace.mod.application_wsgi import transfer, trace_handler, \
1
+ from whatap.trace.mod.application.wsgi import transfer, trace_handler, \
2
2
  interceptor_httpc_request
3
3
 
4
4
 
@@ -1,4 +1,4 @@
1
- from whatap.trace.mod.application_wsgi import transfer, interceptor_httpc_request, \
1
+ from whatap.trace.mod.application.wsgi import transfer, interceptor_httpc_request, \
2
2
  trace_handler, interceptor_sock_connect
3
3
 
4
4
 
File without changes
@@ -0,0 +1,199 @@
1
+ import socket
2
+ import logging
3
+
4
+ from openai import OpenAIError
5
+
6
+ from whatap import DateUtil, conf
7
+ from whatap.pack import logSinkPack
8
+ from whatap.trace.trace_context_manager import TraceContextManager
9
+ from whatap.trace.mod.application.wsgi import trace_handler
10
+
11
+ import whatap.io as whatapio
12
+ import whatap.net.async_sender as async_sender
13
+
14
+
15
+ def __send_llm_pack(metadata):
16
+ try:
17
+ ctx = TraceContextManager.getLocalContext()
18
+
19
+ input_text = metadata.get("input_text", "")
20
+ output_text = metadata.get("output_text", "")
21
+ content = f"[REQUEST]{input_text}\n[RESPONSE]{output_text}"
22
+
23
+ tags = {'@txid': str(ctx.id)} if ctx else {}
24
+ fields = {}
25
+
26
+ # 1. 기본 LLM 팩 데이터 구성
27
+ llm_tags = {
28
+ 'ip': metadata.get('ip'),
29
+ 'host_name': metadata.get('host_name'),
30
+ 'model': metadata.get('model'),
31
+ 'stream': str(metadata.get('stream', False)),
32
+ 'success': str(metadata.get('success', False))
33
+ }
34
+ tags.update(llm_tags)
35
+
36
+ llm_fields = {
37
+ 'prompt_tokens': metadata.get('prompt_tokens'),
38
+ 'completion_tokens': metadata.get('completion_tokens'),
39
+ 'total_tokens': metadata.get('total_tokens'),
40
+ }
41
+
42
+ fields.update(llm_fields)
43
+
44
+ # 2. 에러 데이터 팩인지 확인
45
+ if (metadata.get('error_type') == 'api_error'):
46
+ error_fields = {
47
+ "error": metadata.get('error'),
48
+ "error_type": "api_error",
49
+ }
50
+ fields.update(error_fields)
51
+
52
+ elif (metadata.get('error_type') == 'program_error'):
53
+ error_fields = {
54
+ "error": metadata.get('error'),
55
+ "error_type": "program_error",
56
+ }
57
+ fields.update(error_fields)
58
+
59
+ # 3. value 가 None 이 아닌 것들로 tags,fields 재구성
60
+ tags = {k: v for k, v in tags.items() if v is not None}
61
+ fields = {k: v for k, v in fields.items() if v is not None}
62
+
63
+ p = logSinkPack.getLogSinkPack(
64
+ t=DateUtil.now(),
65
+ category="LLMResponse",
66
+ tags=tags,
67
+ fields=fields,
68
+ line=DateUtil.now(),
69
+ content=content
70
+ )
71
+
72
+ p.pcode = conf.PCODE
73
+ bout = whatapio.DataOutputX()
74
+ bout.writePack(p, None)
75
+ packbytes = bout.toByteArray()
76
+ try:
77
+ async_sender.send_relaypack(packbytes)
78
+ except Exception as e:
79
+ logging.debug(str(e))
80
+ pass
81
+
82
+ except Exception as e:
83
+ logging.debug(str(e))
84
+ pass
85
+
86
+
87
+ def __streaming_response_wrapper(response_stream, metadata, prompt_tokens):
88
+ collected_text = ""
89
+ is_first_chunk = True
90
+ #TODO
91
+ """
92
+ 스트리밍 경우인 경우, completion_tokens 의 개수를 가져올 수 없기 때문에 토큰 계산 모듈을 통해, 추출하는 방법밖에 없음.
93
+ 현재 관련 로직에 대해서 개발된 바가 없기에 0으로 제공중임.
94
+ """
95
+ completion_tokens = 0
96
+ try:
97
+ for chunk in response_stream:
98
+ if is_first_chunk:
99
+ is_first_chunk = False
100
+
101
+ delta = chunk.choices[0].delta
102
+ content = getattr(delta, "content", None) or ""
103
+ collected_text += content
104
+ yield chunk
105
+ finally:
106
+ metadata.update({
107
+ "completion_tokens": completion_tokens,
108
+ "total_tokens": prompt_tokens + completion_tokens,
109
+ "output_text": collected_text,
110
+ "success": True,
111
+ })
112
+ __send_llm_pack(metadata)
113
+
114
+
115
+ def intercept_create(fn, *args, **kwargs):
116
+ prompt_messages = kwargs.get("messages", [])
117
+ model_name = kwargs.get("model")
118
+ stream_flag = kwargs.get("stream", False)
119
+
120
+
121
+ input_text = "".join([msg.get("content", "") or "" for msg in prompt_messages])
122
+
123
+
124
+ metadata = {
125
+ "ip": socket.gethostbyname(socket.gethostname()),
126
+ "host_name": socket.gethostname(),
127
+ "model": model_name,
128
+ "input_text": input_text,
129
+ "stream": stream_flag,
130
+ }
131
+
132
+ try:
133
+ response = fn(*args, **kwargs)
134
+
135
+ usage = getattr(response, "usage", None)
136
+ prompt_tokens = getattr(usage, "prompt_tokens", 0)
137
+ completion_tokens = getattr(usage, "completion_tokens", 0)
138
+
139
+ except OpenAIError as api_err:
140
+ metadata.update({
141
+ "success": False,
142
+ "error": str(api_err),
143
+ "error_type": "api_error"
144
+ })
145
+ __send_llm_pack(metadata)
146
+ raise api_err
147
+
148
+ except Exception as code_err:
149
+ metadata.update({
150
+ "success": False,
151
+ "error": str(code_err),
152
+ "error_type": "program_error"
153
+ })
154
+ __send_llm_pack(metadata)
155
+ raise code_err
156
+
157
+ if stream_flag:
158
+ return __streaming_response_wrapper(response, metadata, prompt_tokens)
159
+
160
+ try:
161
+ response_text = "".join([choice.message.content or "" for choice in response.choices])
162
+ except Exception as e:
163
+ raise e
164
+
165
+ metadata.update({
166
+ "prompt_tokens": prompt_tokens,
167
+ "completion_tokens": completion_tokens,
168
+ "total_tokens": prompt_tokens + completion_tokens,
169
+ "output_text": response_text,
170
+ "success": True,
171
+ })
172
+ __send_llm_pack(metadata)
173
+
174
+ if not hasattr(response, "choices"):
175
+ logging.debug("The returned object doesn't have attribute which is 'choices'")
176
+
177
+ return response
178
+
179
+
180
+ def instrument_openai(module):
181
+
182
+ if not (conf.trace_llm_log_enabled):
183
+ return
184
+
185
+ def create_wrapper(fn):
186
+ @trace_handler(fn)
187
+ def trace(*args, **kwargs):
188
+ return intercept_create(fn, *args, **kwargs)
189
+
190
+ return trace
191
+
192
+
193
+ if (hasattr(module, 'resources') and
194
+ hasattr(module.resources, 'chat') and
195
+ hasattr(module.resources.chat, 'completions') and
196
+ hasattr(module.resources.chat.completions, 'Completions') and
197
+ hasattr(module.resources.chat.completions.Completions, 'create')):
198
+ original_create = module.resources.chat.completions.Completions.create
199
+ module.resources.chat.completions.Completions.create = create_wrapper(original_create)
@@ -2,7 +2,7 @@ import inspect
2
2
  from whatap.net.packet_type_enum import PacketTypeEnum
3
3
  import whatap.net.async_sender as async_sender
4
4
  from whatap.trace import get_dict
5
- from whatap.trace.mod.application_wsgi import trace_handler
5
+ from whatap.trace.mod.application.wsgi import trace_handler
6
6
  from whatap.util.date_util import DateUtil
7
7
  from whatap.trace.trace_context_manager import TraceContextManager
8
8
 
@@ -12,7 +12,7 @@ from whatap.util.date_util import DateUtil
12
12
  from whatap.trace.trace_context import TraceContext
13
13
  from whatap.trace.trace_context_manager import TraceContextManager
14
14
  from whatap.net.packet_type_enum import PacketTypeEnum
15
- from whatap.trace.mod.application_wsgi import trace_handler
15
+ from whatap.trace.mod.application.wsgi import trace_handler
16
16
  from whatap import logging
17
17
 
18
18
  def trace_handler(fn, start=False, preload=None):