sycommon-python-lib 0.1.23__tar.gz → 0.1.25__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 sycommon-python-lib might be problematic. Click here for more details.

Files changed (60) hide show
  1. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/PKG-INFO +1 -1
  2. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/pyproject.toml +1 -1
  3. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/database/database_service.py +6 -1
  4. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/logging/kafka_log.py +2 -2
  5. sycommon_python_lib-0.1.25/src/sycommon/logging/sql_logger.py +59 -0
  6. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
  7. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon_python_lib.egg-info/SOURCES.txt +1 -0
  8. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/README.md +0 -0
  9. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/setup.cfg +0 -0
  10. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/command/cli.py +0 -0
  11. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/__init__.py +0 -0
  12. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/config/Config.py +0 -0
  13. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/config/DatabaseConfig.py +0 -0
  14. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/config/EmbeddingConfig.py +0 -0
  15. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/config/LLMConfig.py +0 -0
  16. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/config/MQConfig.py +0 -0
  17. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/config/RerankerConfig.py +0 -0
  18. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/config/__init__.py +0 -0
  19. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/database/base_db_service.py +0 -0
  20. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/health/__init__.py +0 -0
  21. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/health/health_check.py +0 -0
  22. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/health/metrics.py +0 -0
  23. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/health/ping.py +0 -0
  24. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/logging/__init__.py +0 -0
  25. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/logging/logger_wrapper.py +0 -0
  26. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/middleware/__init__.py +0 -0
  27. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/middleware/context.py +0 -0
  28. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/middleware/cors.py +0 -0
  29. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/middleware/docs.py +0 -0
  30. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/middleware/exception.py +0 -0
  31. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/middleware/middleware.py +0 -0
  32. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/middleware/monitor_memory.py +0 -0
  33. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/middleware/mq.py +0 -0
  34. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/middleware/timeout.py +0 -0
  35. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/middleware/traceid.py +0 -0
  36. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/models/__init__.py +0 -0
  37. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/models/base_http.py +0 -0
  38. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/models/log.py +0 -0
  39. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/models/mqlistener_config.py +0 -0
  40. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/models/mqmsg_model.py +0 -0
  41. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/models/mqsend_config.py +0 -0
  42. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/models/sso_user.py +0 -0
  43. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
  44. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
  45. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
  46. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/services.py +0 -0
  47. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/sse/__init__.py +0 -0
  48. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/sse/event.py +0 -0
  49. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/sse/sse.py +0 -0
  50. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/synacos/__init__.py +0 -0
  51. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/synacos/feign.py +0 -0
  52. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/synacos/nacos_service.py +0 -0
  53. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/tools/__init__.py +0 -0
  54. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/tools/docs.py +0 -0
  55. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/tools/snowflake.py +0 -0
  56. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon/tools/timing.py +0 -0
  57. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
  58. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
  59. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
  60. {sycommon_python_lib-0.1.23 → sycommon_python_lib-0.1.25}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.1.23
3
+ Version: 0.1.25
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sycommon-python-lib"
3
- version = "0.1.23"
3
+ version = "0.1.25"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -3,6 +3,7 @@ from sqlalchemy import create_engine, text
3
3
  from sycommon.config.Config import SingletonMeta
4
4
  from sycommon.config.DatabaseConfig import DatabaseConfig, convert_dict_keys
5
5
  from sycommon.logging.kafka_log import SYLogger
6
+ from sycommon.logging.sql_logger import SQLTraceLogger
6
7
  from sycommon.synacos.nacos_service import NacosService
7
8
 
8
9
 
@@ -62,9 +63,13 @@ class DatabaseConnector(metaclass=SingletonMeta):
62
63
  max_overflow=20, # 最大溢出连接数
63
64
  pool_timeout=30, # 连接超时时间(秒)
64
65
  pool_recycle=3600, # 连接回收时间(秒)
65
- pool_pre_ping=True # 每次获取连接前检查连接是否有效
66
+ pool_pre_ping=True, # 每次获取连接前检查连接是否有效
67
+ echo=False, # 打印 SQL 语句
66
68
  )
67
69
 
70
+ # 注册 SQL 日志拦截器
71
+ SQLTraceLogger.setup_sql_logging(self.engine)
72
+
68
73
  # 测试
69
74
  if not self.test_connection():
70
75
  raise Exception("Database connection test failed")
@@ -173,7 +173,7 @@ class KafkaLogger(metaclass=SingletonMeta):
173
173
  "className": "",
174
174
  "sqlCost": 0,
175
175
  "size": len(str(message)),
176
- "uid": int(trace_id) if trace_id and trace_id.isdigit() else 0
176
+ "uid": int(Snowflake.next_id()) # 独立新的id
177
177
  }
178
178
 
179
179
  # 智能队列管理
@@ -490,7 +490,7 @@ class SYLogger:
490
490
  logger.info(_log)
491
491
 
492
492
  if os.getenv('DEV-LOG', 'false').lower() == 'true':
493
- pprint(_log)
493
+ pprint.pprint(_log)
494
494
 
495
495
  @staticmethod
496
496
  def info(msg: any, *args, **kwargs):
@@ -0,0 +1,59 @@
1
+ from sqlalchemy import event
2
+ from sqlalchemy.engine import Engine
3
+ from sycommon.logging.kafka_log import SYLogger
4
+ import time
5
+ from datetime import datetime
6
+ from decimal import Decimal
7
+
8
+
9
+ class SQLTraceLogger:
10
+ @staticmethod
11
+ def setup_sql_logging(engine: Engine):
12
+ """为 SQLAlchemy 引擎注册事件监听器,绑定 trace_id 到 SQL 日志"""
13
+ def serialize_params(params):
14
+ """处理特殊类型参数的序列化"""
15
+ if isinstance(params, (list, tuple)):
16
+ return [SQLTraceLogger.serialize_params(p) for p in params]
17
+ elif isinstance(params, dict):
18
+ return {k: SQLTraceLogger.serialize_params(v) for k, v in params.items()}
19
+ elif isinstance(params, datetime):
20
+ return params.isoformat()
21
+ elif isinstance(params, Decimal):
22
+ return float(params)
23
+ else:
24
+ return params
25
+
26
+ # 监听 SQL 语句执行后事件(计算耗时并输出日志)
27
+ @event.listens_for(Engine, "after_cursor_execute")
28
+ def after_cursor_execute(
29
+ conn, cursor, statement, parameters, context, executemany
30
+ ):
31
+ try:
32
+ # 从连接的 execution_options 中获取开始时间
33
+ start_time = conn._execution_options.get(
34
+ "_start_time", time.time())
35
+ execution_time = (time.time() - start_time) * 1000
36
+
37
+ # 构建 SQL 日志信息
38
+ sql_log = {
39
+ "type": "SQL",
40
+ "statement": statement,
41
+ "parameters": serialize_params(parameters),
42
+ "execution_time_ms": round(execution_time, 2),
43
+ }
44
+
45
+ SYLogger.info(f"SQL 执行: {sql_log}")
46
+ except Exception as e:
47
+ SYLogger.error(f"SQL 日志处理失败: {str(e)}")
48
+
49
+ # 监听 SQL 执行开始事件(记录开始时间到连接的 execution_options)
50
+ @event.listens_for(Engine, "before_cursor_execute")
51
+ def before_cursor_execute(
52
+ conn, cursor, statement, parameters, context, executemany
53
+ ):
54
+ try:
55
+ # 通过连接对象的 execution_options 设置开始时间
56
+ # 这里会创建一个新的执行选项副本,避免修改不可变对象
57
+ conn = conn.execution_options(_start_time=time.time())
58
+ except Exception as e:
59
+ SYLogger.error(f"SQL 开始时间记录失败: {str(e)}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.1.23
3
+ Version: 0.1.25
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -19,6 +19,7 @@ src/sycommon/health/ping.py
19
19
  src/sycommon/logging/__init__.py
20
20
  src/sycommon/logging/kafka_log.py
21
21
  src/sycommon/logging/logger_wrapper.py
22
+ src/sycommon/logging/sql_logger.py
22
23
  src/sycommon/middleware/__init__.py
23
24
  src/sycommon/middleware/context.py
24
25
  src/sycommon/middleware/cors.py