aury-boot 0.0.28__py3-none-any.whl → 0.0.30__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.
Files changed (40) hide show
  1. aury/boot/_version.py +2 -2
  2. aury/boot/application/app/base.py +126 -2
  3. aury/boot/application/app/components.py +224 -1
  4. aury/boot/application/config/settings.py +195 -3
  5. aury/boot/application/constants/components.py +3 -0
  6. aury/boot/application/middleware/logging.py +45 -6
  7. aury/boot/commands/docs.py +40 -0
  8. aury/boot/commands/init.py +2 -0
  9. aury/boot/commands/templates/project/AGENTS.md.tpl +16 -1
  10. aury/boot/commands/templates/project/alert_rules.example.yaml.tpl +85 -0
  11. aury/boot/commands/templates/project/aury_docs/00-overview.md.tpl +3 -0
  12. aury/boot/commands/templates/project/aury_docs/03-service.md.tpl +60 -0
  13. aury/boot/commands/templates/project/aury_docs/17-alerting.md.tpl +210 -0
  14. aury/boot/commands/templates/project/env_templates/monitoring.tpl +61 -0
  15. aury/boot/common/logging/context.py +17 -1
  16. aury/boot/common/logging/format.py +4 -0
  17. aury/boot/domain/transaction/__init__.py +57 -0
  18. aury/boot/infrastructure/channel/base.py +6 -2
  19. aury/boot/infrastructure/database/query_tools/__init__.py +3 -5
  20. aury/boot/infrastructure/monitoring/__init__.py +210 -6
  21. aury/boot/infrastructure/monitoring/alerting/__init__.py +50 -0
  22. aury/boot/infrastructure/monitoring/alerting/aggregator.py +193 -0
  23. aury/boot/infrastructure/monitoring/alerting/events.py +141 -0
  24. aury/boot/infrastructure/monitoring/alerting/manager.py +428 -0
  25. aury/boot/infrastructure/monitoring/alerting/notifiers/__init__.py +16 -0
  26. aury/boot/infrastructure/monitoring/alerting/notifiers/base.py +60 -0
  27. aury/boot/infrastructure/monitoring/alerting/notifiers/feishu.py +209 -0
  28. aury/boot/infrastructure/monitoring/alerting/notifiers/webhook.py +110 -0
  29. aury/boot/infrastructure/monitoring/alerting/rules.py +163 -0
  30. aury/boot/infrastructure/monitoring/health/__init__.py +231 -0
  31. aury/boot/infrastructure/monitoring/tracing/__init__.py +55 -0
  32. aury/boot/infrastructure/monitoring/tracing/context.py +43 -0
  33. aury/boot/infrastructure/monitoring/tracing/logging.py +73 -0
  34. aury/boot/infrastructure/monitoring/tracing/processor.py +327 -0
  35. aury/boot/infrastructure/monitoring/tracing/provider.py +320 -0
  36. aury/boot/infrastructure/monitoring/tracing/tracing.py +235 -0
  37. {aury_boot-0.0.28.dist-info → aury_boot-0.0.30.dist-info}/METADATA +14 -1
  38. {aury_boot-0.0.28.dist-info → aury_boot-0.0.30.dist-info}/RECORD +40 -21
  39. {aury_boot-0.0.28.dist-info → aury_boot-0.0.30.dist-info}/WHEEL +0 -0
  40. {aury_boot-0.0.28.dist-info → aury_boot-0.0.30.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,235 @@
1
+ """便捷的链路追踪 API。
2
+
3
+ 提供简洁的 span 创建方式,用于手动追踪自定义业务逻辑。
4
+
5
+ 用法:
6
+ # 上下文管理器方式(kind 可自定义,如 "llm"、"tool" 等)
7
+ with span("llm.chat", kind="llm", model="gpt-4") as s:
8
+ response = await call_openai()
9
+ s.set_attribute("tokens", response.usage.total_tokens)
10
+
11
+ # 装饰器方式
12
+ @trace_span("tool.search", kind="tool")
13
+ async def search(query: str):
14
+ ...
15
+ """
16
+
17
+ from __future__ import annotations
18
+
19
+ import asyncio
20
+ from collections.abc import Callable
21
+ from contextlib import contextmanager
22
+ from functools import wraps
23
+ from typing import TYPE_CHECKING, Any
24
+
25
+ # OTel 可选依赖
26
+ try:
27
+ from opentelemetry import trace as otel_trace
28
+ from opentelemetry.trace import SpanKind as OTelSpanKind
29
+ from opentelemetry.trace import StatusCode
30
+ except ImportError:
31
+ otel_trace = None # type: ignore[assignment]
32
+ OTelSpanKind = None # type: ignore[assignment, misc]
33
+ StatusCode = None # type: ignore[assignment, misc]
34
+
35
+ if TYPE_CHECKING:
36
+ from opentelemetry.trace import Span
37
+
38
+
39
+ class SpanKind:
40
+ """OTel 标准 Span 类型常量。
41
+
42
+ 开发者也可传入任意字符串作为 kind(如 "llm"、"tool"),
43
+ 会作为属性记录,并默认映射为 INTERNAL。
44
+ """
45
+
46
+ INTERNAL = "internal" # 内部操作
47
+ CLIENT = "client" # 外部调用(HTTP client、DB)
48
+ SERVER = "server" # 处理请求
49
+ PRODUCER = "producer" # 消息生产者
50
+ CONSUMER = "consumer" # 消息消费者
51
+
52
+
53
+ def _get_tracer():
54
+ """获取 tracer 实例。"""
55
+ if otel_trace is None:
56
+ return None
57
+ return otel_trace.get_tracer("aury")
58
+
59
+
60
+ def _to_otel_span_kind(kind: str):
61
+ """转换为 OTel SpanKind。
62
+
63
+ 标准类型(internal/client/server/producer/consumer)映射到对应的 OTel SpanKind,
64
+ 其他自定义类型(如 llm/tool 等)默认映射为 INTERNAL。
65
+ """
66
+ if OTelSpanKind is None:
67
+ return None
68
+
69
+ mapping = {
70
+ "internal": OTelSpanKind.INTERNAL,
71
+ "client": OTelSpanKind.CLIENT,
72
+ "server": OTelSpanKind.SERVER,
73
+ "producer": OTelSpanKind.PRODUCER,
74
+ "consumer": OTelSpanKind.CONSUMER,
75
+ }
76
+ return mapping.get(kind, OTelSpanKind.INTERNAL)
77
+
78
+
79
+ @contextmanager
80
+ def span(
81
+ name: str,
82
+ kind: str = "internal",
83
+ **attributes: Any,
84
+ ):
85
+ """创建追踪 span(上下文管理器)。
86
+
87
+ Args:
88
+ name: span 名称,建议格式 "{category}.{operation}"
89
+ kind: span 类型,可自由定义(如 "llm"、"tool"、"task" 等),
90
+ 标准类型(internal/client/server)会映射到 OTel SpanKind
91
+ **attributes: 附加属性
92
+
93
+ Yields:
94
+ Span: OTel span 对象,可调用 set_attribute() 添加更多属性
95
+
96
+ 用法:
97
+ # 追踪 LLM 调用
98
+ with span("llm.chat", kind="llm", model="gpt-4") as s:
99
+ response = await openai.chat.completions.create(...)
100
+ s.set_attribute("llm.tokens", response.usage.total_tokens)
101
+
102
+ # 追踪工具调用
103
+ with span("tool.web_search", kind="tool", query=query):
104
+ result = await search(query)
105
+
106
+ # 追踪自定义业务
107
+ with span("payment.process", order_id=order_id):
108
+ await process_payment(order_id)
109
+ """
110
+ tracer = _get_tracer()
111
+
112
+ if tracer is None:
113
+ # OTel 未安装,使用空上下文
114
+ yield _DummySpan()
115
+ return
116
+
117
+ otel_kind = _to_otel_span_kind(kind)
118
+
119
+ with tracer.start_as_current_span(name, kind=otel_kind) as s:
120
+ # 设置自定义类型标识(用于 AlertingSpanProcessor 识别)
121
+ s.set_attribute("aury.span_kind", kind)
122
+
123
+ # 设置用户传入的属性
124
+ for key, value in attributes.items():
125
+ if value is not None:
126
+ s.set_attribute(key, _safe_attribute_value(value))
127
+
128
+ yield s
129
+
130
+
131
+ def trace_span(
132
+ name: str | None = None,
133
+ kind: str = "internal",
134
+ **attributes: Any,
135
+ ) -> Callable:
136
+ """追踪装饰器。
137
+
138
+ Args:
139
+ name: span 名称,默认使用函数名
140
+ kind: span 类型,可自由定义
141
+ **attributes: 附加属性
142
+
143
+ 用法:
144
+ @trace_span(kind="llm", model="gpt-4")
145
+ async def chat(prompt: str):
146
+ return await openai.chat.completions.create(...)
147
+
148
+ @trace_span("custom.operation")
149
+ def sync_operation():
150
+ ...
151
+ """
152
+ def decorator(func: Callable) -> Callable:
153
+ span_name = name or f"{func.__module__}.{func.__qualname__}"
154
+
155
+ @wraps(func)
156
+ async def async_wrapper(*args, **kwargs):
157
+ with span(span_name, kind=kind, **attributes):
158
+ return await func(*args, **kwargs)
159
+
160
+ @wraps(func)
161
+ def sync_wrapper(*args, **kwargs):
162
+ with span(span_name, kind=kind, **attributes):
163
+ return func(*args, **kwargs)
164
+
165
+ # 根据函数类型返回对应包装器
166
+ if asyncio.iscoroutinefunction(func):
167
+ return async_wrapper
168
+ return sync_wrapper
169
+
170
+ return decorator
171
+
172
+
173
+ def set_span_error(error: Exception, message: str | None = None) -> None:
174
+ """在当前 span 上记录错误。
175
+
176
+ Args:
177
+ error: 异常对象
178
+ message: 错误消息(可选)
179
+ """
180
+ if otel_trace is None or StatusCode is None:
181
+ return
182
+
183
+ current_span = otel_trace.get_current_span()
184
+ if current_span and current_span.is_recording():
185
+ current_span.set_status(StatusCode.ERROR, message or str(error))
186
+ current_span.record_exception(error)
187
+
188
+
189
+ def set_span_attribute(key: str, value: Any) -> None:
190
+ """在当前 span 上设置属性。
191
+
192
+ Args:
193
+ key: 属性名
194
+ value: 属性值
195
+ """
196
+ if otel_trace is None:
197
+ return
198
+
199
+ current_span = otel_trace.get_current_span()
200
+ if current_span and current_span.is_recording():
201
+ current_span.set_attribute(key, _safe_attribute_value(value))
202
+
203
+
204
+ def _safe_attribute_value(value: Any) -> Any:
205
+ """转换属性值为 OTel 支持的类型。"""
206
+ if isinstance(value, str | int | float | bool):
207
+ return value
208
+ if isinstance(value, list | tuple):
209
+ return [_safe_attribute_value(v) for v in value]
210
+ return str(value)
211
+
212
+
213
+ class _DummySpan:
214
+ """占位 span,用于 OTel 未安装时。"""
215
+
216
+ def set_attribute(self, key: str, value: Any) -> None:
217
+ pass
218
+
219
+ def set_status(self, status, description: str | None = None) -> None:
220
+ pass
221
+
222
+ def record_exception(self, exception: Exception) -> None:
223
+ pass
224
+
225
+ def add_event(self, name: str, attributes: dict | None = None) -> None:
226
+ pass
227
+
228
+
229
+ __all__ = [
230
+ "SpanKind",
231
+ "set_span_attribute",
232
+ "set_span_error",
233
+ "span",
234
+ "trace_span",
235
+ ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aury-boot
3
- Version: 0.0.28
3
+ Version: 0.0.30
4
4
  Summary: Aury Boot - 基于 FastAPI 生态的企业级 API 开发框架
5
5
  Requires-Python: >=3.13
6
6
  Requires-Dist: alembic>=1.17.2
@@ -42,6 +42,14 @@ Requires-Dist: mkdocs-material>=9.7.0; extra == 'docs'
42
42
  Requires-Dist: mkdocs>=1.6.0; extra == 'docs'
43
43
  Provides-Extra: mysql
44
44
  Requires-Dist: aiomysql>=0.3.2; extra == 'mysql'
45
+ Provides-Extra: otel
46
+ Requires-Dist: opentelemetry-api>=1.25.0; extra == 'otel'
47
+ Requires-Dist: opentelemetry-instrumentation-fastapi>=0.46b0; extra == 'otel'
48
+ Requires-Dist: opentelemetry-instrumentation-httpx>=0.46b0; extra == 'otel'
49
+ Requires-Dist: opentelemetry-instrumentation-sqlalchemy>=0.46b0; extra == 'otel'
50
+ Requires-Dist: opentelemetry-sdk>=1.25.0; extra == 'otel'
51
+ Provides-Extra: otel-exporter
52
+ Requires-Dist: opentelemetry-exporter-otlp>=1.25.0; extra == 'otel-exporter'
45
53
  Provides-Extra: postgres
46
54
  Requires-Dist: asyncpg>=0.31.0; extra == 'postgres'
47
55
  Provides-Extra: rabbitmq
@@ -52,6 +60,11 @@ Requires-Dist: apscheduler>=3.11.1; extra == 'recommended'
52
60
  Requires-Dist: asyncpg>=0.31.0; extra == 'recommended'
53
61
  Requires-Dist: aury-sdk-storage[aws]>=0.0.1; extra == 'recommended'
54
62
  Requires-Dist: dramatiq>=1.18.0; extra == 'recommended'
63
+ Requires-Dist: opentelemetry-api>=1.25.0; extra == 'recommended'
64
+ Requires-Dist: opentelemetry-instrumentation-fastapi>=0.46b0; extra == 'recommended'
65
+ Requires-Dist: opentelemetry-instrumentation-httpx>=0.46b0; extra == 'recommended'
66
+ Requires-Dist: opentelemetry-instrumentation-sqlalchemy>=0.46b0; extra == 'recommended'
67
+ Requires-Dist: opentelemetry-sdk>=1.25.0; extra == 'recommended'
55
68
  Requires-Dist: redis>=7.1.0; extra == 'recommended'
56
69
  Provides-Extra: redis
57
70
  Requires-Dist: redis>=7.1.0; extra == 'redis'
@@ -1,5 +1,5 @@
1
1
  aury/boot/__init__.py,sha256=pCno-EInnpIBa1OtxNYF-JWf9j95Cd2h6vmu0xqa_-4,1791
2
- aury/boot/_version.py,sha256=rsZxmANBVfE-nN63y-ZZ_71Lkm6YP4u4TgVEBJV3mNM,706
2
+ aury/boot/_version.py,sha256=od6_NordEIvGqyI_S2FZ1DYZPTNZflFSs-zacl-pIks,706
3
3
  aury/boot/application/__init__.py,sha256=0o_XmiwFCeAu06VHggS8I1e7_nSMoRq0Hcm0fYfCywU,3071
4
4
  aury/boot/application/adapter/__init__.py,sha256=e1bcSb1bxUMfofTwiCuHBZJk5-STkMCWPF2EJXHQ7UU,3976
5
5
  aury/boot/application/adapter/base.py,sha256=Ar_66fiHPDEmV-1DKnqXKwc53p3pozG31bgTJTEUriY,15763
@@ -8,15 +8,15 @@ aury/boot/application/adapter/decorators.py,sha256=yyGu_16bWWUiO36gxCeQWgG0DN19p
8
8
  aury/boot/application/adapter/exceptions.py,sha256=Kzm-ytRxdUnSMIcWCSOHPxo4Jh_A6YbyxlOVIUs-5F4,6183
9
9
  aury/boot/application/adapter/http.py,sha256=4TADsSzdSRU63307dmmo-2U_JpVP12mwTFy66B5Ps-w,10759
10
10
  aury/boot/application/app/__init__.py,sha256=I8FfCKDuDQsGzAK6BevyfdtAwieMUVYu6qgVQzBazpE,830
11
- aury/boot/application/app/base.py,sha256=MYfkrb2zZgumLrGWhtT71neGncUfVHyUeAHRnetoSXk,17668
12
- aury/boot/application/app/components.py,sha256=qBAd8hJ4Ap3cfCYJUJu9v_IvC16U9Q8O5dEZDtjDveY,24188
11
+ aury/boot/application/app/base.py,sha256=7n7uFAVmIylr9YZannWKeQSOLSifNosIJUMbL-nmJe4,21897
12
+ aury/boot/application/app/components.py,sha256=p_OA0sIy65sKgVLZWurxHygEzG3g4wDfGg8F3A7i6VY,33294
13
13
  aury/boot/application/app/middlewares.py,sha256=BXe2H14FHzJUVpQM6DZUm-zfZRXSXIi1QIZ4_3izfHw,3306
14
14
  aury/boot/application/app/startup.py,sha256=DHKt3C2G7V5XfFr1SQMl14tNzcuDd9MqUVAxi274HDQ,7873
15
15
  aury/boot/application/config/__init__.py,sha256=Dd-myRSBCM18DXXsi863h0cJG5VFrI10xMRtjnvelGo,1894
16
16
  aury/boot/application/config/multi_instance.py,sha256=RXSp-xP8-bKMDEhq3SeL7T3lS8-vpRlvBEVBuZVjVK4,6475
17
- aury/boot/application/config/settings.py,sha256=-afn5p9rIS4_63OLqfG-mrTl2UergOZb6z8I5GyYOAY,31621
17
+ aury/boot/application/config/settings.py,sha256=NoYmacyjXMkOHA1-OVj5XTu_ZzKqGqsKRmQ0YUz3hes,37621
18
18
  aury/boot/application/constants/__init__.py,sha256=DCXs13_VVaQWHqO-qpJoZwRd7HIexiirtw_nu8msTXE,340
19
- aury/boot/application/constants/components.py,sha256=VBCgxJ_iZXjEZyUkC13ZCdqPmdKq-lQmU7jQpXnTa2Y,1056
19
+ aury/boot/application/constants/components.py,sha256=I4SlsF2DpSzMiLsi1wVrEmdHn4yV5J2h3ikMQqufPmM,1120
20
20
  aury/boot/application/constants/scheduler.py,sha256=S77FBIvHlyruvlabRWZJ2J1YAs2xWXPQI2yuGdGUDNA,471
21
21
  aury/boot/application/constants/service.py,sha256=_BjSNP83m1KuLcGs1oqciDU9Nk1mO45COucRYubuFkM,513
22
22
  aury/boot/application/errors/__init__.py,sha256=aYhGqjHayYr7sv9kM22y0sOo9R-8RK0r3Jf5_tgm7TQ,1217
@@ -29,7 +29,7 @@ aury/boot/application/interfaces/__init__.py,sha256=EGbiCL8IoGseylLVZO29Lkt3luyg
29
29
  aury/boot/application/interfaces/egress.py,sha256=t8FK17V649rsm65uAeBruYr2mhfcqJiIzkS8UPsOzlc,5346
30
30
  aury/boot/application/interfaces/ingress.py,sha256=rlflJ4nxAZ2Mc3Iy8ZX__GRgfAWcMYYzLhHL2NSk4_U,2425
31
31
  aury/boot/application/middleware/__init__.py,sha256=T01fmbcdO0Sm6JE74g23uuDyebBGYA4DMZMDBl0L00w,258
32
- aury/boot/application/middleware/logging.py,sha256=d3wbprbCxFJ6TpeEDomTSnjQ7sIadYxXnnKS6b_Wj38,11899
32
+ aury/boot/application/middleware/logging.py,sha256=kStfLskA_srNvWIuNMs0ptZ4Wr9-ke6hYl8kESxbhxc,13509
33
33
  aury/boot/application/migrations/__init__.py,sha256=Z5Gizx7f3AImRcl3cooiIDAZcNi5W-6GvB7mK5w1TNA,204
34
34
  aury/boot/application/migrations/manager.py,sha256=G7mzkNA3MFjyQmM2UwY0ZFNgGGVS4W5GoG2Sbj5AUXk,23685
35
35
  aury/boot/application/migrations/setup.py,sha256=cxzBIHGzRXhlIYs4_ZW6P85Z9A7uVnTq_dmQFKp3ha4,6485
@@ -45,9 +45,9 @@ aury/boot/commands/add.py,sha256=JRJir92oFHwIBtIKKEjQ7trUhfb9-kCH84x_7saV2gI,264
45
45
  aury/boot/commands/app.py,sha256=k0zHzR3ckt17laAYk6WwwS-lqzS-N8811XjKC-7lerg,7857
46
46
  aury/boot/commands/config.py,sha256=gPkG_jSWrXidjpyVdzABH7uRhoCgX5yrOcdKabtX5wY,4928
47
47
  aury/boot/commands/docker.py,sha256=7mKorZCPZgxH1XFslzo6W-uzpe61hGXz86JKOhOeBlo,9006
48
- aury/boot/commands/docs.py,sha256=7VaZyEuezmL28aM9y13ni-y-VYP-eNKff5-qb-9q1RQ,13066
48
+ aury/boot/commands/docs.py,sha256=Hz1W-2TW8DzaPxARqEF4UncPhGMI9h97jJ962dlox3U,14327
49
49
  aury/boot/commands/generate.py,sha256=WZieSXuofxJOC7NBiVGpBigB9NZ4GMcF2F1ReTNun1I,44420
50
- aury/boot/commands/init.py,sha256=vHg2Zhdoar1ANug9J8pT1tNGdH5S0GO19Rhsy-04mXQ,32262
50
+ aury/boot/commands/init.py,sha256=W_eCL3wydWaMSLqTpadREDnzC0w-LGgNnj3IBjuQAfA,32348
51
51
  aury/boot/commands/pkg.py,sha256=bw0QPptKscNgQ4I1SfSehTio9Q5KrvxgvkYx4tbZ7Vs,14495
52
52
  aury/boot/commands/scheduler.py,sha256=BCIGQcGryXpsYNF-mncP6v5kNoz6DZ10DMzMKVDiXxA,3516
53
53
  aury/boot/commands/worker.py,sha256=qAcPdoKpMBLYoi45X_y2-nobuYKxscJpooEB_0HhM4o,4163
@@ -61,17 +61,18 @@ aury/boot/commands/templates/generate/model.py.tpl,sha256=knFwMyGZ7wMpzH4_bQD_V1
61
61
  aury/boot/commands/templates/generate/repository.py.tpl,sha256=xoEg6lPAaLIRDeFy4I0FBsPPVLSy91h6xosAlaCL_mM,590
62
62
  aury/boot/commands/templates/generate/schema.py.tpl,sha256=HIaY5B0UG_S188nQLrZDEJ0q73WPdb7BmCdc0tseZA4,545
63
63
  aury/boot/commands/templates/generate/service.py.tpl,sha256=2hwQ8e4a5d_bIMx_jGDobdmKPMFLBlfQrQVQH4Ym5k4,1842
64
- aury/boot/commands/templates/project/AGENTS.md.tpl,sha256=-KrVhPqwVaf1IWRIl4L9Yb0LSRihq69ZaZ-ynnGM4W8,7882
64
+ aury/boot/commands/templates/project/AGENTS.md.tpl,sha256=IWMtEqabtI0n_Mj0oBpIIblvZqF2AWRcZ_loByozMHA,8528
65
65
  aury/boot/commands/templates/project/README.md.tpl,sha256=oCeBiukk6Pa3hrCKybkfM2sIRHsPZ15nlwuFTUSFDwY,2459
66
66
  aury/boot/commands/templates/project/admin_console_init.py.tpl,sha256=K81L14thyEhRA8lFCQJVZL_NU22-sBz0xS68MJPeoCo,1541
67
+ aury/boot/commands/templates/project/alert_rules.example.yaml.tpl,sha256=QZH6SC5TcUhgX_2JRXk0k0g26wJf9xNwsdquiEIgg-I,2492
67
68
  aury/boot/commands/templates/project/config.py.tpl,sha256=H_B05FypBJxTjb7qIL91zC1C9e37Pk7C9gO0-b3CqNs,1009
68
69
  aury/boot/commands/templates/project/conftest.py.tpl,sha256=chbETK81Hy26cWz6YZ2cFgy7HbnABzYCqeyMzgpa3eI,726
69
70
  aury/boot/commands/templates/project/gitignore.tpl,sha256=OI0nt9u2E9EC-jAMoh3gpqamsWo18uDgyPybgee_snQ,3053
70
71
  aury/boot/commands/templates/project/main.py.tpl,sha256=Q61ve3o1VkNPv8wcQK7lUosne18JWYeItxoXVNNoYJM,1070
71
- aury/boot/commands/templates/project/aury_docs/00-overview.md.tpl,sha256=8Aept3yEAe9cVdRvkddr_oEF-lr2riPXYRzBuw_6DBA,2138
72
+ aury/boot/commands/templates/project/aury_docs/00-overview.md.tpl,sha256=eOjtqMeKqZ8OgijrOwcpfpHhrhUvt_CiHPUtRG0dilA,2251
72
73
  aury/boot/commands/templates/project/aury_docs/01-model.md.tpl,sha256=1mQ3hGDxqEZjev4CD5-3dzYRFVonPNcAaStI1UBEUyM,6811
73
74
  aury/boot/commands/templates/project/aury_docs/02-repository.md.tpl,sha256=JfUVdrIgW7_J6JGCcB-_uP_x-gCtjKiewwGv4Xr44QI,7803
74
- aury/boot/commands/templates/project/aury_docs/03-service.md.tpl,sha256=Dg_8RGSeRmmyQrhhpppEoxl-6C5pNe9M2OzVOl1kjSk,13102
75
+ aury/boot/commands/templates/project/aury_docs/03-service.md.tpl,sha256=SgfPAgLVi_RbMjSAe-m49jQOIr6vfUT8VF2V1E-qa3w,15098
75
76
  aury/boot/commands/templates/project/aury_docs/04-schema.md.tpl,sha256=ZwwKhUbLI--PEEmwnuo2fIZrhCEZagBN6fRNDTFCnNk,2891
76
77
  aury/boot/commands/templates/project/aury_docs/05-api.md.tpl,sha256=oPzda3V6ZPDDEW-5MwyzmsMRuu5mXrsRGEq3lj0M-58,2997
77
78
  aury/boot/commands/templates/project/aury_docs/06-exception.md.tpl,sha256=Tv_Q5lsScHzvtcaFWmuQzN4YqvpcWZIdXS8jw99K29E,3340
@@ -85,6 +86,7 @@ aury/boot/commands/templates/project/aury_docs/13-channel.md.tpl,sha256=aGpf2phQ
85
86
  aury/boot/commands/templates/project/aury_docs/14-mq.md.tpl,sha256=4bxLQBbCi0Fue0VQWOPt6acZ5P00BoLkCoLPQe_8k4U,2396
86
87
  aury/boot/commands/templates/project/aury_docs/15-events.md.tpl,sha256=a4wQRgVPuYUGTGmw_lX1HJH_yFTbD30mBz7Arc4zgfs,3361
87
88
  aury/boot/commands/templates/project/aury_docs/16-adapter.md.tpl,sha256=pkmJkZw2Ca6_uYk2jZvAb8DozjBa2tWq_t3gtq1lFSk,11456
89
+ aury/boot/commands/templates/project/aury_docs/17-alerting.md.tpl,sha256=2MosApSAuGerBw7SOO-ihk4NTp2qEkgOUyu6pS2m0UY,5709
88
90
  aury/boot/commands/templates/project/aury_docs/99-cli.md.tpl,sha256=9JSdiAbu3SGmmF_iCslw5LBPlks2DYf4WYw05pA_2_I,5673
89
91
  aury/boot/commands/templates/project/env_templates/_header.tpl,sha256=Pt0X_I25o1th3CLR228L2-nlcC-lIkN8cPailohBEkU,513
90
92
  aury/boot/commands/templates/project/env_templates/admin.tpl,sha256=wWt3iybOpBHtuw6CkoUJ1bzEL0aNgOzKDEkMKhI2oag,2032
@@ -92,6 +94,7 @@ aury/boot/commands/templates/project/env_templates/cache.tpl,sha256=_sK-p_FECj4m
92
94
  aury/boot/commands/templates/project/env_templates/database.tpl,sha256=2lWzTKt4X0SpeBBCkrDV90Di4EfoAuqYzhVsh74vTUI,907
93
95
  aury/boot/commands/templates/project/env_templates/log.tpl,sha256=x5rkrEFJISH0gaCcr-wTCbDYtyFnlLNJpY789fqjZgc,754
94
96
  aury/boot/commands/templates/project/env_templates/messaging.tpl,sha256=ZaNBM4pq0pgkTXbCBx_sgjm8QKEBfW1nSnsKZfHu-HM,1771
97
+ aury/boot/commands/templates/project/env_templates/monitoring.tpl,sha256=02I4pxCkSbHaBeD9a7BN7YhecH2f2s3yY0Ufi2lMyaE,2429
95
98
  aury/boot/commands/templates/project/env_templates/rpc.tpl,sha256=FhweCFakawGLSs01a_BkmZo11UhWax2-VCBudHj68WA,1163
96
99
  aury/boot/commands/templates/project/env_templates/scheduler.tpl,sha256=c8Grcs1rgBB58RHlxqmDMPHQl8BnbcqNW473ctmsojU,752
97
100
  aury/boot/commands/templates/project/env_templates/service.tpl,sha256=b-a2GyRyoaunbDj_2kaSw3OFxcugscmPvUBG7w0XO8c,710
@@ -106,9 +109,9 @@ aury/boot/common/exceptions/__init__.py,sha256=aS3rIXWc5qNNJbfMs_PNmBlFsyNdKUMEr
106
109
  aury/boot/common/i18n/__init__.py,sha256=2cy4kteU-1YsAHkuMDTr2c5o4G33fvtYUGKtzEy1Q6c,394
107
110
  aury/boot/common/i18n/translator.py,sha256=_vEDL2SjEI1vwMNHbnJb0xErKUPLm7VmhyOuMBeCqRM,8412
108
111
  aury/boot/common/logging/__init__.py,sha256=Z6pMdjXZMWXz6w-1ev0h6QN3G3c8Cz7EpOqZh42kgQ0,1612
109
- aury/boot/common/logging/context.py,sha256=U78XwjVcDP7Y96VTGclCcP09p0ZWCmiEYzVhp1Obytw,2058
112
+ aury/boot/common/logging/context.py,sha256=ndml3rUokEIt5-845E5aW8jI8b4N93ZtukyqsjqzuNE,2566
110
113
  aury/boot/common/logging/decorators.py,sha256=UaGMhRJdARNJ2VgCuRwaNX0DD5wIc1gAl6NDj7u8K2c,3354
111
- aury/boot/common/logging/format.py,sha256=V1VoZCPFAaAXy20n3WehOsZGTHuboYMHnSFGa0GxhdU,9648
114
+ aury/boot/common/logging/format.py,sha256=ZEqLagTdyGadywTamybcEh1fAZng3Wfx7DC952TFU30,9782
112
115
  aury/boot/common/logging/setup.py,sha256=ZPxOHJD8Fw4KxKPgsf8ZHQ2mWuXxKh4EJtXXvGY7Hgo,9422
113
116
  aury/boot/contrib/__init__.py,sha256=fyk_St9VufIx64hsobv9EsOYzb_T5FbJHxjqtPds4g8,198
114
117
  aury/boot/contrib/admin_console/__init__.py,sha256=HEesLFrtYtBFWTDrh5H3mR-4V4LRg5N4a2a1C4-Whgs,445
@@ -130,7 +133,7 @@ aury/boot/domain/repository/interface.py,sha256=CmkiqVhhHPx_xcpuBCz11Vr26-govwYB
130
133
  aury/boot/domain/repository/query_builder.py,sha256=pFErMzsBql-T6gBX0S4FxIheCkNaGjpSewzcJ2DxrUU,10890
131
134
  aury/boot/domain/service/__init__.py,sha256=ZRotaBlqJXn7ebPTQjjoHtorpQREk8AgTD69UCcRd1k,118
132
135
  aury/boot/domain/service/base.py,sha256=6sN0nf8r5yUZsE6AcZOiOXFCqzb61oCxTfrWlqjIo9I,2035
133
- aury/boot/domain/transaction/__init__.py,sha256=Mk-J-5VOuuQ7NDW1DQmU-skCvcUOuEENfP_Ej3iZuJ8,13497
136
+ aury/boot/domain/transaction/__init__.py,sha256=EKnjJ235SYjMCvGIuLVlTdYRzU35RxNMejRGUExYqqE,15488
134
137
  aury/boot/infrastructure/__init__.py,sha256=ppP1-suaDICMNvBSXj_4DVSH3h0D8e0qZhtENCr16m8,3007
135
138
  aury/boot/infrastructure/cache/__init__.py,sha256=G40uCkpJ1jSs2fc_CBDem73iQQzCcp-4GG1WpDJzwaA,658
136
139
  aury/boot/infrastructure/cache/backends.py,sha256=9QMQ8G9DtZgzVXZ_Ng7n1gXRu-_OQZgw4FHPOfr1qco,13585
@@ -139,7 +142,7 @@ aury/boot/infrastructure/cache/exceptions.py,sha256=KZsFIHXW3_kOh_KB93EVZJKbiDvD
139
142
  aury/boot/infrastructure/cache/factory.py,sha256=aF74JoiiSKFgctqqh2Z8OtGRS2Am_ou-I40GyygLzC0,2489
140
143
  aury/boot/infrastructure/cache/manager.py,sha256=GGoOgYyIdWKMmhej5cRvEfpNeMN1GaSaU9hc0dy8_sA,12106
141
144
  aury/boot/infrastructure/channel/__init__.py,sha256=Ztcfn1-TomgV91qhePpFK-3_nKgBt862yEFYUzIwPlo,566
142
- aury/boot/infrastructure/channel/base.py,sha256=kRjvoOQ0X5ilUAdz03BNBfbZJgdqcsjUviK4_dJatBs,2642
145
+ aury/boot/infrastructure/channel/base.py,sha256=FRFHzjDDLHqVSzpjGiPM15BSSVEihRMHBtja74vkRYM,2782
143
146
  aury/boot/infrastructure/channel/manager.py,sha256=wOkO018Ch2694z9vOGgojaGOdCXHi0zrekkfLezn8bo,7444
144
147
  aury/boot/infrastructure/channel/backends/__init__.py,sha256=zrOhrzkhEIgsO7Armhgda1ruJQ6a9ZK7GPZuzvEiuN8,151
145
148
  aury/boot/infrastructure/channel/backends/memory.py,sha256=QQyZxIdYtA_pWqdKgUIMkvnbBwvv45-vX-qostDHyfg,4699
@@ -155,7 +158,7 @@ aury/boot/infrastructure/database/__init__.py,sha256=MsHNyrJ2CZJT-lbVZzOAJ0nFfFE
155
158
  aury/boot/infrastructure/database/config.py,sha256=5LYy4DuLL0XNjVnX2HUcrMh3c71eeZa-vWGM8QCkL0U,1408
156
159
  aury/boot/infrastructure/database/exceptions.py,sha256=hUjsU23c0eMwogSDrKq_bQ6zvnY7PQSGaitbCEhhDZQ,766
157
160
  aury/boot/infrastructure/database/manager.py,sha256=lRSKL9jDkSdaA99DjD1k4EoQuQsn2vbh9XQQBOt9dM0,10317
158
- aury/boot/infrastructure/database/query_tools/__init__.py,sha256=D-8Wxm8x48rg9G95aH_b4re7S4_IGJO9zznArYXldFo,5500
161
+ aury/boot/infrastructure/database/query_tools/__init__.py,sha256=pOFuyDDNpkY5cSMJ-O6UA0-5Lq96-Zvt4FaYMhiwaMg,5488
159
162
  aury/boot/infrastructure/database/strategies/__init__.py,sha256=foj_2xEsgLZxshpK65YAhdJ2UZyh1tKvGRq6sre8pQY,5909
160
163
  aury/boot/infrastructure/di/__init__.py,sha256=qFYlk265d6_rS8OiX37_wOc7mBFw8hk3yipDYNkyjQg,231
161
164
  aury/boot/infrastructure/di/container.py,sha256=14FVbafGXea-JEAYeOEBxB6zAwndLCZJvprKiD_1IOQ,12524
@@ -167,7 +170,23 @@ aury/boot/infrastructure/events/backends/__init__.py,sha256=V_hPtdjVUkYU4Uf8hTPV
167
170
  aury/boot/infrastructure/events/backends/memory.py,sha256=Up7vAxdJvIqkcqpnKNCu81ec6iCfNIhcQ-jKM3M2hZc,2623
168
171
  aury/boot/infrastructure/events/backends/rabbitmq.py,sha256=XCuI9mc3GR-t0zht4yZ3e2nnyFl8UuTDir_0nsDbfxM,6495
169
172
  aury/boot/infrastructure/events/backends/redis.py,sha256=i8jPCtR7ITPVTl9DVFDbNbjypnWoeSpar6z4lJJlOD8,5790
170
- aury/boot/infrastructure/monitoring/__init__.py,sha256=VgElCdCVcgERTIn3oRoSNslR82W9gRX5vgJcYDeloak,16149
173
+ aury/boot/infrastructure/monitoring/__init__.py,sha256=KGtJU0slbRvFzzUv60LQHB12sX7eNNvGDu8Lyk9Owy8,22415
174
+ aury/boot/infrastructure/monitoring/alerting/__init__.py,sha256=gBZ23JnCjqglyYTTUxfkmilZ4mY_ZkrkKMDo--3COGE,1363
175
+ aury/boot/infrastructure/monitoring/alerting/aggregator.py,sha256=fiI-lBSqWxXv1eVPfaDNjcigX-81w41fcmhD_vN_XSs,5805
176
+ aury/boot/infrastructure/monitoring/alerting/events.py,sha256=zJvTevQ-9JflIDyYVo1BRzOVyAGhdgEfRlMsD0NcBgM,4056
177
+ aury/boot/infrastructure/monitoring/alerting/manager.py,sha256=7QWQ_epf3b8Y3SkJ08RI6pAf0OFmX_Apm8znV93wYQY,14373
178
+ aury/boot/infrastructure/monitoring/alerting/rules.py,sha256=sNj0uKsfioq64aWx3eRGZjqY-dJKNzTCxAkpf0cSHzc,5294
179
+ aury/boot/infrastructure/monitoring/alerting/notifiers/__init__.py,sha256=dsfxThPHO_Ofb3Wo_dYlL8HvP_N63pb_S_UXm_qSxF8,321
180
+ aury/boot/infrastructure/monitoring/alerting/notifiers/base.py,sha256=_RXZMzWX-YeTG0Up1U8CwK8ADfX34dd0Sh56ugfqOWM,1462
181
+ aury/boot/infrastructure/monitoring/alerting/notifiers/feishu.py,sha256=JAMJiCNRYoDeJrYn29ew_ZVXDGq8OLgiFApRWd4iPY0,7134
182
+ aury/boot/infrastructure/monitoring/alerting/notifiers/webhook.py,sha256=EiGtLCztHoyjRTR3cvhguRMXbMkScfwY_mXRy9AD5Vw,3514
183
+ aury/boot/infrastructure/monitoring/health/__init__.py,sha256=nqwFFXl6J9yTfQa1JLjQDs4hS4qSVEeA4w07JWdt4jM,7305
184
+ aury/boot/infrastructure/monitoring/tracing/__init__.py,sha256=YizkpnhY-bcUUcd8YaDzUsluMflhNOH1dAKdVtkW05U,1287
185
+ aury/boot/infrastructure/monitoring/tracing/context.py,sha256=s_k2MzNl4LDDpei9xUP6TFW5BwZneoQg44RPaw95jac,978
186
+ aury/boot/infrastructure/monitoring/tracing/logging.py,sha256=gzuKa1ZiyY4z06fHNTbjgZasS6mLftSEaZQQ-Z6J_RE,2041
187
+ aury/boot/infrastructure/monitoring/tracing/processor.py,sha256=rzsFbs05acj_CGH4yFSYYR1yxV9cJasxBIBoS3bAONE,11409
188
+ aury/boot/infrastructure/monitoring/tracing/provider.py,sha256=b12lVkQvypI3sPDkj14z9Tlup6UMpitZRLoKObL-Lg4,11364
189
+ aury/boot/infrastructure/monitoring/tracing/tracing.py,sha256=BeWL-FYtlQ05r05wGJ6qjTSpypgCp-7OzdNnZ3uunB0,6890
171
190
  aury/boot/infrastructure/mq/__init__.py,sha256=Q7kBk_GeQnxnqkyp29Bh1yFH3Q8xxxjs8oDYLeDj8C0,498
172
191
  aury/boot/infrastructure/mq/base.py,sha256=kHrWUysWflMj3qyOnioLZ90it8d9Alq1Wb4PYhpBW4k,3396
173
192
  aury/boot/infrastructure/mq/manager.py,sha256=DVXOQhoqx9dz9INajWiAxLnKjLaP-otKmdiBUzxgsAY,7502
@@ -192,7 +211,7 @@ aury/boot/testing/client.py,sha256=KOg1EemuIVsBG68G5y0DjSxZGcIQVdWQ4ASaHE3o1R0,4
192
211
  aury/boot/testing/factory.py,sha256=8GvwX9qIDu0L65gzJMlrWB0xbmJ-7zPHuwk3eECULcg,5185
193
212
  aury/boot/toolkit/__init__.py,sha256=AcyVb9fDf3CaEmJPNkWC4iGv32qCPyk4BuFKSuNiJRQ,334
194
213
  aury/boot/toolkit/http/__init__.py,sha256=zIPmpIZ9Qbqe25VmEr7jixoY2fkRbLm7NkCB9vKpg6I,11039
195
- aury_boot-0.0.28.dist-info/METADATA,sha256=7fabDsArEBQ_L5MoamQPJa9xmdi19-CLTSGG5YgPQPw,7695
196
- aury_boot-0.0.28.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
197
- aury_boot-0.0.28.dist-info/entry_points.txt,sha256=f9KXEkDIGc0BGkgBvsNx_HMz9VhDjNxu26q00jUpDwQ,49
198
- aury_boot-0.0.28.dist-info/RECORD,,
214
+ aury_boot-0.0.30.dist-info/METADATA,sha256=5vGoIS2-MUEahzRGkZcOX8xeTDYXKTGKm-gV4x7qpJY,8560
215
+ aury_boot-0.0.30.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
216
+ aury_boot-0.0.30.dist-info/entry_points.txt,sha256=f9KXEkDIGc0BGkgBvsNx_HMz9VhDjNxu26q00jUpDwQ,49
217
+ aury_boot-0.0.30.dist-info/RECORD,,