algo-backend-framework 0.0.1__py3-none-any.whl → 0.0.2__py3-none-any.whl

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.
@@ -84,8 +84,8 @@ class ClientTimeCostMetrics(BasicTimeCostMetrics):
84
84
 
85
85
  class PrometheusTimeCostMetricSetting:
86
86
  __default_metrics = BasicTimeCostMetrics()
87
- __api_metrics = None
88
- __client_metrics = None
87
+
88
+ __metrics_dict = {"default": BasicTimeCostMetrics(), "api": None, "client": None}
89
89
 
90
90
  @classmethod
91
91
  def initialize(
@@ -94,35 +94,42 @@ class PrometheusTimeCostMetricSetting:
94
94
  api_metrics_buckets: Optional[List[int]] = None,
95
95
  client_metrics_buckets: Optional[List[int]] = None,
96
96
  ):
97
- if api_metrics_buckets is None:
98
- cls.__api_metrics = ApiTimeCostMetrics()
99
- elif len(api_metrics_buckets) == 0:
100
- cls.__api_metrics = BasicTimeCostMetrics()
101
- else:
102
- cls.__api_metrics = ApiTimeCostMetrics(buckets=list(api_metrics_buckets))
97
+ cls.init_metrics("api", ApiTimeCostMetrics, api_metrics_buckets)
98
+ cls.init_metrics("client", ClientTimeCostMetrics, client_metrics_buckets)
103
99
 
104
- if client_metrics_buckets is None:
105
- cls.__client_metrics = ClientTimeCostMetrics()
106
- elif len(client_metrics_buckets) == 0:
107
- cls.__client_metrics = BasicTimeCostMetrics()
100
+ @classmethod
101
+ def init_metrics(
102
+ cls, name: str, metrics_class, buckets: Optional[List[int]] = None
103
+ ):
104
+ if cls.__metrics_dict[name] is None:
105
+ cls.__metrics_dict[name] = metrics_class()
106
+ elif len(buckets) == 0:
107
+ cls.__metrics_dict[name] = cls.__default_metrics
108
108
  else:
109
- cls.__client_metrics = ClientTimeCostMetrics(
110
- buckets=list(client_metrics_buckets)
111
- )
109
+ cls.__metrics_dict[name] = metrics_class(buckets=list(buckets))
110
+
111
+ @classmethod
112
+ def get_metrics(cls, name: str) -> BasicTimeCostMetrics:
113
+ return cls.__metrics_dict.get(name, cls.__default_metrics)
112
114
 
113
115
  @classmethod
114
116
  def api_metrics_instance(cls) -> BasicTimeCostMetrics:
115
- return cls.__api_metrics or cls.__default_metrics
117
+ return cls.get_metrics("api")
116
118
 
117
119
  @classmethod
118
120
  def client_metrics_instance(cls) -> BasicTimeCostMetrics:
119
- return cls.__client_metrics or cls.__default_metrics
121
+ return cls.get_metrics("client")
120
122
 
121
123
  @classmethod
122
- def metrics_handler(cls, key: str, metrics: BasicTimeCostMetrics):
124
+ def metrics_handler(cls, key: str, metrics_cls_name: str):
125
+ """
126
+ 装饰器只会初始化一次,因此要使用动态方式获取指标类,否则初始化装饰器时,指标类还没有被初始化
127
+ """
128
+
123
129
  def decorator(func: Callable[..., Awaitable]) -> Callable[..., Awaitable]:
124
130
  @wraps(func)
125
131
  async def wrapper(*args, **kwargs):
132
+ metrics = cls.get_metrics(metrics_cls_name)
126
133
  try:
127
134
  start = time.perf_counter()
128
135
  result = await func(*args, **kwargs)
@@ -139,8 +146,8 @@ class PrometheusTimeCostMetricSetting:
139
146
 
140
147
  @classmethod
141
148
  def client_metrics_handler(cls, client_name: str):
142
- return cls.metrics_handler(client_name, cls.client_metrics_instance())
149
+ return cls.metrics_handler(client_name, "client")
143
150
 
144
151
  @classmethod
145
152
  def api_metrics_handler(cls, api_name: str):
146
- return cls.metrics_handler(api_name, cls.api_metrics_instance())
153
+ return cls.metrics_handler(api_name, "api")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: algo-backend-framework
3
- Version: 0.0.1
3
+ Version: 0.0.2
4
4
  Summary: Ctcdn algorithm backend framework
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -24,7 +24,7 @@ algo_backend/log/nblog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
24
24
  algo_backend/metrics/__init__.py,sha256=20CPEFgi0yJ2Fy-LTcFQ3aqlXHhLPtgPFboqOMBhl34,640
25
25
  algo_backend/metrics/http_metrics.py,sha256=3GYNhKJoS6oJ8L7FXnVkPZ_wa-SKj_444KLdBeGkbs4,1944
26
26
  algo_backend/metrics/prometheus_context.py,sha256=GqemLccNbTx_5DBijOyzySzWydbpWYfnhWh17rujjwE,1910
27
- algo_backend/metrics/time_cost_metrics.py,sha256=0v8Mu4lXbgKjAFH3aK0GPtVhw_70kIYMd-eH-ceyrkI,4645
27
+ algo_backend/metrics/time_cost_metrics.py,sha256=wXSv3yN6_Eq55KduGy9tIX7sZWsdHI9YBnWoSsT9sZE,4895
28
28
  algo_backend/metrics/collector/__init__.py,sha256=t5Csl-Z9qpik-isEUVYDYBWYgf7xdM49548YfJr4X64,413
29
29
  algo_backend/metrics/collector/common.py,sha256=yeiZp9ufbYSW7N-R6ytk74UF0dCqJ8r338lL64TmA4g,475
30
30
  algo_backend/metrics/collector/gc_metrics.py,sha256=s2ariKimji9LC71eAQFlrFkpcF3hkSy5IBC6D8LFePc,2510
@@ -42,7 +42,7 @@ algo_backend/starter/event_list.py,sha256=vQHzQIpW8LZmQ93YyET-1gX6pQGVE5A6I_pLoY
42
42
  algo_backend/utils/__init__.py,sha256=oX6OyL-28jzc94u4fyH1TtntCzQySkfZ8jibMk1KPU8,168
43
43
  algo_backend/utils/meta_class.py,sha256=hcZPGF7EIHvJOXXR82_7Gah_AWbqkcSxUc473I_6maY,1850
44
44
  algo_backend/utils/utils.py,sha256=q3bxBrivndLRggWsLryloSpu-_Ecbj4mhZL8oYdiDTo,481
45
- algo_backend_framework-0.0.1.dist-info/METADATA,sha256=D4eriT_lp8IIMOwz5JLKBGca-6k7STDRBNKTLcmMVRE,2196
46
- algo_backend_framework-0.0.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
47
- algo_backend_framework-0.0.1.dist-info/top_level.txt,sha256=zLsbLTRV1tO2hQfazqiBLO73VnjSAhJSUpMMBmQaLfw,13
48
- algo_backend_framework-0.0.1.dist-info/RECORD,,
45
+ algo_backend_framework-0.0.2.dist-info/METADATA,sha256=U9d8H4QUHPR0DMGyRlbthlHnRROgg8X0mw1t0LdyokQ,2196
46
+ algo_backend_framework-0.0.2.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
47
+ algo_backend_framework-0.0.2.dist-info/top_level.txt,sha256=zLsbLTRV1tO2hQfazqiBLO73VnjSAhJSUpMMBmQaLfw,13
48
+ algo_backend_framework-0.0.2.dist-info/RECORD,,