mdbq 4.2.21__tar.gz → 4.2.23__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 mdbq might be problematic. Click here for more details.

Files changed (46) hide show
  1. {mdbq-4.2.21 → mdbq-4.2.23}/PKG-INFO +1 -1
  2. mdbq-4.2.23/mdbq/__version__.py +1 -0
  3. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/auth/auth_backend.py +0 -1
  4. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/redis/redis_cache.py +7 -1
  5. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/route/monitor.py +30 -4
  6. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq.egg-info/PKG-INFO +1 -1
  7. mdbq-4.2.21/mdbq/__version__.py +0 -1
  8. {mdbq-4.2.21 → mdbq-4.2.23}/README.txt +0 -0
  9. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/__init__.py +0 -0
  10. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/auth/__init__.py +0 -0
  11. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/auth/crypto.py +0 -0
  12. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/auth/rate_limiter.py +0 -0
  13. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/js/__init__.py +0 -0
  14. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/js/jc.py +0 -0
  15. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/log/__init__.py +0 -0
  16. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/log/mylogger.py +0 -0
  17. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/myconf/__init__.py +0 -0
  18. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/myconf/myconf.py +0 -0
  19. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/mysql/__init__.py +0 -0
  20. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/mysql/deduplicator.py +0 -0
  21. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/mysql/mysql.py +0 -0
  22. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/mysql/s_query.py +0 -0
  23. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/mysql/unique_.py +0 -0
  24. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/mysql/uploader.py +0 -0
  25. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/other/__init__.py +0 -0
  26. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/other/download_sku_picture.py +0 -0
  27. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/other/error_handler.py +0 -0
  28. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/other/otk.py +0 -0
  29. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/other/pov_city.py +0 -0
  30. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/other/ua_sj.py +0 -0
  31. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/pbix/__init__.py +0 -0
  32. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/pbix/pbix_refresh.py +0 -0
  33. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/pbix/refresh_all.py +0 -0
  34. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/redis/__init__.py +0 -0
  35. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/redis/getredis.py +0 -0
  36. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/route/__init__.py +0 -0
  37. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/route/analytics.py +0 -0
  38. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/route/routes.py +0 -0
  39. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/selenium/__init__.py +0 -0
  40. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/selenium/get_driver.py +0 -0
  41. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq/spider/__init__.py +0 -0
  42. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq.egg-info/SOURCES.txt +0 -0
  43. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq.egg-info/dependency_links.txt +0 -0
  44. {mdbq-4.2.21 → mdbq-4.2.23}/mdbq.egg-info/top_level.txt +0 -0
  45. {mdbq-4.2.21 → mdbq-4.2.23}/setup.cfg +0 -0
  46. {mdbq-4.2.21 → mdbq-4.2.23}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: mdbq
3
- Version: 4.2.21
3
+ Version: 4.2.23
4
4
  Home-page: https://pypi.org/project/mdbq
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -0,0 +1 @@
1
+ VERSION = '4.2.23'
@@ -17,7 +17,6 @@
17
17
 
18
18
  """
19
19
 
20
- from tkinter import N
21
20
  import jwt # type: ignore
22
21
  import pymysql
23
22
  import hashlib
@@ -919,7 +919,13 @@ def flask_redis_cache(cache_key_func=None, ttl=1200, namespace="default",
919
919
  # 如果没有Flask环境,直接执行原函数
920
920
  return func(*args, **kwargs)
921
921
 
922
- # 初始化数据源标记
922
+ # OPTIONS 预检请求特殊处理:直接跳过缓存逻辑
923
+ if request.method == 'OPTIONS':
924
+ g.data_source = 'preflight' # 标记为预检请求
925
+ g.cache_hit = False
926
+ return func(*args, **kwargs)
927
+
928
+ # 初始化数据源标记(仅非 OPTIONS 请求)
923
929
  g.data_source = 'mysql'
924
930
  g.cache_hit = False
925
931
 
@@ -19,6 +19,7 @@ import threading
19
19
  import pymysql
20
20
  import functools
21
21
  import hashlib
22
+ import socket
22
23
  from datetime import datetime, timedelta
23
24
  from typing import Dict, Any, Optional
24
25
  from dbutils.pooled_db import PooledDB # type: ignore
@@ -174,9 +175,11 @@ class RouteMonitor:
174
175
  `请求方法` VARCHAR(10) NOT NULL COMMENT 'HTTP 方法(GET/POST/PUT/DELETE等)',
175
176
  `路由地址` VARCHAR(500) NOT NULL COMMENT 'API 路由地址',
176
177
  `客户端ip` VARCHAR(45) NOT NULL COMMENT '客户端 ip 地址(支持 IPv6)',
178
+ `主机名` VARCHAR(100) COMMENT '服务器主机名',
179
+ `请求来源` VARCHAR(500) COMMENT '请求来源(Referer)',
177
180
  `状态码` SMALLINT COMMENT 'HTTP 状态码',
178
181
  `响应耗时` DECIMAL(10,3) COMMENT '请求处理耗时(毫秒)',
179
- `数据源` VARCHAR(20) COMMENT '数据源类型:redis/mysql/hybrid/none',
182
+ `数据源` VARCHAR(20) COMMENT '数据源类型:redis/mysql/hybrid/none/preflight',
180
183
  `缓存命中` TINYINT(1) DEFAULT 0 COMMENT '是否命中缓存:1-命中,0-未命中',
181
184
  `用户标识` VARCHAR(64) COMMENT '用户id或标识(如有)',
182
185
  `用户代理` VARCHAR(500) COMMENT '浏览器 User-Agent(精简版)',
@@ -189,12 +192,14 @@ class RouteMonitor:
189
192
  INDEX `idx_请求时间` (`请求时间`),
190
193
  INDEX `idx_路由地址` (`路由地址`(191)),
191
194
  INDEX `idx_客户端ip` (`客户端ip`),
195
+ INDEX `idx_主机名` (`主机名`),
192
196
  INDEX `idx_状态码` (`状态码`),
193
197
  INDEX `idx_数据源` (`数据源`),
194
198
  INDEX `idx_缓存命中` (`缓存命中`),
195
199
  INDEX `idx_用户标识` (`用户标识`),
196
200
  INDEX `idx_时间_接口` (`请求时间`, `路由地址`(191)),
197
- INDEX `idx_时间_数据源` (`请求时间`, `数据源`)
201
+ INDEX `idx_时间_数据源` (`请求时间`, `数据源`),
202
+ INDEX `idx_时间_主机` (`请求时间`, `主机名`)
198
203
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
199
204
  COMMENT='API 访问日志表 - 记录每次请求的核心信息'
200
205
  ROW_FORMAT=COMPRESSED;
@@ -452,6 +457,17 @@ class RouteMonitor:
452
457
  # 获取客户端 IP
453
458
  client_ip = self.get_real_ip(request)
454
459
 
460
+ # 获取主机名
461
+ try:
462
+ hostname = socket.gethostname()
463
+ except Exception:
464
+ hostname = 'unknown'
465
+
466
+ # 获取请求来源(Referer)
467
+ referer = request.headers.get('Referer') or request.headers.get('Origin')
468
+ if referer and len(referer) > 500:
469
+ referer = referer[:500]
470
+
455
471
  # 获取 User-Agent(截断过长的)
456
472
  user_agent = request.headers.get('User-Agent', '')
457
473
  if len(user_agent) > 500:
@@ -460,6 +476,7 @@ class RouteMonitor:
460
476
  # 获取用户标识(如果有)
461
477
  # 安全获取 user_id,允许为空时使用默认值
462
478
  user_id = None
479
+
463
480
  if hasattr(g, 'current_user_id'):
464
481
  user_id = str(g.current_user_id) if g.current_user_id else None
465
482
  elif hasattr(g, 'user_id'):
@@ -518,6 +535,8 @@ class RouteMonitor:
518
535
  '请求方法': request.method,
519
536
  '路由地址': request.endpoint or request.path,
520
537
  '客户端ip': client_ip,
538
+ '主机名': hostname,
539
+ '请求来源': referer,
521
540
  '数据源': data_source,
522
541
  '缓存命中': 1 if cache_hit else 0,
523
542
  '用户标识': user_id,
@@ -553,10 +572,11 @@ class RouteMonitor:
553
572
  sql = """
554
573
  INSERT INTO `api_访问日志` (
555
574
  `请求id`, `请求时间`, `请求方法`, `路由地址`, `客户端ip`,
575
+ `主机名`, `请求来源`,
556
576
  `状态码`, `响应耗时`, `数据源`, `缓存命中`,
557
577
  `用户标识`, `用户代理`, `请求参数`, `错误信息`
558
578
  ) VALUES (
559
- %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s
579
+ %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s
560
580
  )
561
581
  """
562
582
 
@@ -566,6 +586,8 @@ class RouteMonitor:
566
586
  request_data.get('请求方法'),
567
587
  request_data.get('路由地址'),
568
588
  request_data.get('客户端ip'),
589
+ request_data.get('主机名'),
590
+ request_data.get('请求来源'),
569
591
  request_data.get('状态码'),
570
592
  request_data.get('响应耗时'),
571
593
  request_data.get('数据源', 'none'),
@@ -597,6 +619,11 @@ class RouteMonitor:
597
619
  request_data: 包含请求和响应信息的字典
598
620
  """
599
621
  try:
622
+ # 过滤掉 OPTIONS 预检请求,不参与统计
623
+ data_source = request_data.get('数据源', 'none')
624
+ if data_source == 'preflight':
625
+ return # 跳过统计
626
+
600
627
  connection = self.pool.connection()
601
628
  try:
602
629
  with connection.cursor() as cursor:
@@ -616,7 +643,6 @@ class RouteMonitor:
616
643
 
617
644
  # 获取数据源信息
618
645
  cache_hit = request_data.get('缓存命中', 0)
619
- data_source = request_data.get('数据源', 'none')
620
646
  is_cache_hit = 1 if cache_hit else 0
621
647
  is_db_query = 1 if data_source in ['mysql', 'hybrid'] else 0
622
648
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: mdbq
3
- Version: 4.2.21
3
+ Version: 4.2.23
4
4
  Home-page: https://pypi.org/project/mdbq
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -1 +0,0 @@
1
- VERSION = '4.2.21'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes