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.
- aury/boot/_version.py +2 -2
- aury/boot/application/app/base.py +126 -2
- aury/boot/application/app/components.py +224 -1
- aury/boot/application/config/settings.py +195 -3
- aury/boot/application/constants/components.py +3 -0
- aury/boot/application/middleware/logging.py +45 -6
- aury/boot/commands/docs.py +40 -0
- aury/boot/commands/init.py +2 -0
- aury/boot/commands/templates/project/AGENTS.md.tpl +16 -1
- aury/boot/commands/templates/project/alert_rules.example.yaml.tpl +85 -0
- aury/boot/commands/templates/project/aury_docs/00-overview.md.tpl +3 -0
- aury/boot/commands/templates/project/aury_docs/03-service.md.tpl +60 -0
- aury/boot/commands/templates/project/aury_docs/17-alerting.md.tpl +210 -0
- aury/boot/commands/templates/project/env_templates/monitoring.tpl +61 -0
- aury/boot/common/logging/context.py +17 -1
- aury/boot/common/logging/format.py +4 -0
- aury/boot/domain/transaction/__init__.py +57 -0
- aury/boot/infrastructure/channel/base.py +6 -2
- aury/boot/infrastructure/database/query_tools/__init__.py +3 -5
- aury/boot/infrastructure/monitoring/__init__.py +210 -6
- aury/boot/infrastructure/monitoring/alerting/__init__.py +50 -0
- aury/boot/infrastructure/monitoring/alerting/aggregator.py +193 -0
- aury/boot/infrastructure/monitoring/alerting/events.py +141 -0
- aury/boot/infrastructure/monitoring/alerting/manager.py +428 -0
- aury/boot/infrastructure/monitoring/alerting/notifiers/__init__.py +16 -0
- aury/boot/infrastructure/monitoring/alerting/notifiers/base.py +60 -0
- aury/boot/infrastructure/monitoring/alerting/notifiers/feishu.py +209 -0
- aury/boot/infrastructure/monitoring/alerting/notifiers/webhook.py +110 -0
- aury/boot/infrastructure/monitoring/alerting/rules.py +163 -0
- aury/boot/infrastructure/monitoring/health/__init__.py +231 -0
- aury/boot/infrastructure/monitoring/tracing/__init__.py +55 -0
- aury/boot/infrastructure/monitoring/tracing/context.py +43 -0
- aury/boot/infrastructure/monitoring/tracing/logging.py +73 -0
- aury/boot/infrastructure/monitoring/tracing/processor.py +327 -0
- aury/boot/infrastructure/monitoring/tracing/provider.py +320 -0
- aury/boot/infrastructure/monitoring/tracing/tracing.py +235 -0
- {aury_boot-0.0.28.dist-info → aury_boot-0.0.30.dist-info}/METADATA +14 -1
- {aury_boot-0.0.28.dist-info → aury_boot-0.0.30.dist-info}/RECORD +40 -21
- {aury_boot-0.0.28.dist-info → aury_boot-0.0.30.dist-info}/WHEEL +0 -0
- {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.
|
|
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=
|
|
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=
|
|
12
|
-
aury/boot/application/app/components.py,sha256=
|
|
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
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
196
|
-
aury_boot-0.0.
|
|
197
|
-
aury_boot-0.0.
|
|
198
|
-
aury_boot-0.0.
|
|
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,,
|
|
File without changes
|
|
File without changes
|