truthound-dashboard 1.4.4__py3-none-any.whl → 1.5.1__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.
- truthound_dashboard/api/alerts.py +75 -86
- truthound_dashboard/api/anomaly.py +7 -13
- truthound_dashboard/api/cross_alerts.py +38 -52
- truthound_dashboard/api/drift.py +49 -59
- truthound_dashboard/api/drift_monitor.py +234 -79
- truthound_dashboard/api/enterprise_sampling.py +498 -0
- truthound_dashboard/api/history.py +57 -5
- truthound_dashboard/api/lineage.py +3 -48
- truthound_dashboard/api/maintenance.py +104 -49
- truthound_dashboard/api/mask.py +1 -2
- truthound_dashboard/api/middleware.py +2 -1
- truthound_dashboard/api/model_monitoring.py +435 -311
- truthound_dashboard/api/notifications.py +227 -191
- truthound_dashboard/api/notifications_advanced.py +21 -20
- truthound_dashboard/api/observability.py +586 -0
- truthound_dashboard/api/plugins.py +2 -433
- truthound_dashboard/api/profile.py +199 -37
- truthound_dashboard/api/quality_reporter.py +701 -0
- truthound_dashboard/api/reports.py +7 -16
- truthound_dashboard/api/router.py +66 -0
- truthound_dashboard/api/rule_suggestions.py +5 -5
- truthound_dashboard/api/scan.py +17 -19
- truthound_dashboard/api/schedules.py +85 -50
- truthound_dashboard/api/schema_evolution.py +6 -6
- truthound_dashboard/api/schema_watcher.py +667 -0
- truthound_dashboard/api/sources.py +98 -27
- truthound_dashboard/api/tiering.py +1323 -0
- truthound_dashboard/api/triggers.py +14 -11
- truthound_dashboard/api/validations.py +12 -11
- truthound_dashboard/api/versioning.py +1 -6
- truthound_dashboard/core/__init__.py +129 -3
- truthound_dashboard/core/actions/__init__.py +62 -0
- truthound_dashboard/core/actions/custom.py +426 -0
- truthound_dashboard/core/actions/notifications.py +910 -0
- truthound_dashboard/core/actions/storage.py +472 -0
- truthound_dashboard/core/actions/webhook.py +281 -0
- truthound_dashboard/core/anomaly.py +262 -67
- truthound_dashboard/core/anomaly_explainer.py +4 -3
- truthound_dashboard/core/backends/__init__.py +67 -0
- truthound_dashboard/core/backends/base.py +299 -0
- truthound_dashboard/core/backends/errors.py +191 -0
- truthound_dashboard/core/backends/factory.py +423 -0
- truthound_dashboard/core/backends/mock_backend.py +451 -0
- truthound_dashboard/core/backends/truthound_backend.py +718 -0
- truthound_dashboard/core/checkpoint/__init__.py +87 -0
- truthound_dashboard/core/checkpoint/adapters.py +814 -0
- truthound_dashboard/core/checkpoint/checkpoint.py +491 -0
- truthound_dashboard/core/checkpoint/runner.py +270 -0
- truthound_dashboard/core/connections.py +645 -23
- truthound_dashboard/core/converters/__init__.py +14 -0
- truthound_dashboard/core/converters/truthound.py +620 -0
- truthound_dashboard/core/cross_alerts.py +540 -320
- truthound_dashboard/core/datasource_factory.py +1672 -0
- truthound_dashboard/core/drift_monitor.py +216 -20
- truthound_dashboard/core/enterprise_sampling.py +1291 -0
- truthound_dashboard/core/interfaces/__init__.py +225 -0
- truthound_dashboard/core/interfaces/actions.py +652 -0
- truthound_dashboard/core/interfaces/base.py +247 -0
- truthound_dashboard/core/interfaces/checkpoint.py +676 -0
- truthound_dashboard/core/interfaces/protocols.py +664 -0
- truthound_dashboard/core/interfaces/reporters.py +650 -0
- truthound_dashboard/core/interfaces/routing.py +646 -0
- truthound_dashboard/core/interfaces/triggers.py +619 -0
- truthound_dashboard/core/lineage.py +407 -71
- truthound_dashboard/core/model_monitoring.py +431 -3
- truthound_dashboard/core/notifications/base.py +4 -0
- truthound_dashboard/core/notifications/channels.py +501 -1203
- truthound_dashboard/core/notifications/deduplication/__init__.py +81 -115
- truthound_dashboard/core/notifications/deduplication/service.py +131 -348
- truthound_dashboard/core/notifications/dispatcher.py +202 -11
- truthound_dashboard/core/notifications/escalation/__init__.py +119 -106
- truthound_dashboard/core/notifications/escalation/engine.py +168 -358
- truthound_dashboard/core/notifications/routing/__init__.py +88 -128
- truthound_dashboard/core/notifications/routing/engine.py +90 -317
- truthound_dashboard/core/notifications/stats_aggregator.py +246 -1
- truthound_dashboard/core/notifications/throttling/__init__.py +67 -50
- truthound_dashboard/core/notifications/throttling/builder.py +117 -255
- truthound_dashboard/core/notifications/truthound_adapter.py +842 -0
- truthound_dashboard/core/phase5/collaboration.py +1 -1
- truthound_dashboard/core/plugins/lifecycle/__init__.py +0 -13
- truthound_dashboard/core/quality_reporter.py +1359 -0
- truthound_dashboard/core/report_history.py +0 -6
- truthound_dashboard/core/reporters/__init__.py +175 -14
- truthound_dashboard/core/reporters/adapters.py +943 -0
- truthound_dashboard/core/reporters/base.py +0 -3
- truthound_dashboard/core/reporters/builtin/__init__.py +18 -0
- truthound_dashboard/core/reporters/builtin/csv_reporter.py +111 -0
- truthound_dashboard/core/reporters/builtin/html_reporter.py +270 -0
- truthound_dashboard/core/reporters/builtin/json_reporter.py +127 -0
- truthound_dashboard/core/reporters/compat.py +266 -0
- truthound_dashboard/core/reporters/csv_reporter.py +2 -35
- truthound_dashboard/core/reporters/factory.py +526 -0
- truthound_dashboard/core/reporters/interfaces.py +745 -0
- truthound_dashboard/core/reporters/registry.py +1 -10
- truthound_dashboard/core/scheduler.py +165 -0
- truthound_dashboard/core/schema_evolution.py +3 -3
- truthound_dashboard/core/schema_watcher.py +1528 -0
- truthound_dashboard/core/services.py +595 -76
- truthound_dashboard/core/store_manager.py +810 -0
- truthound_dashboard/core/streaming_anomaly.py +169 -4
- truthound_dashboard/core/tiering.py +1309 -0
- truthound_dashboard/core/triggers/evaluators.py +178 -8
- truthound_dashboard/core/truthound_adapter.py +2620 -197
- truthound_dashboard/core/unified_alerts.py +23 -20
- truthound_dashboard/db/__init__.py +8 -0
- truthound_dashboard/db/database.py +8 -2
- truthound_dashboard/db/models.py +944 -25
- truthound_dashboard/db/repository.py +2 -0
- truthound_dashboard/main.py +15 -0
- truthound_dashboard/schemas/__init__.py +177 -16
- truthound_dashboard/schemas/base.py +44 -23
- truthound_dashboard/schemas/collaboration.py +19 -6
- truthound_dashboard/schemas/cross_alerts.py +19 -3
- truthound_dashboard/schemas/drift.py +61 -55
- truthound_dashboard/schemas/drift_monitor.py +67 -23
- truthound_dashboard/schemas/enterprise_sampling.py +653 -0
- truthound_dashboard/schemas/lineage.py +0 -33
- truthound_dashboard/schemas/mask.py +10 -8
- truthound_dashboard/schemas/model_monitoring.py +89 -10
- truthound_dashboard/schemas/notifications_advanced.py +13 -0
- truthound_dashboard/schemas/observability.py +453 -0
- truthound_dashboard/schemas/plugins.py +0 -280
- truthound_dashboard/schemas/profile.py +154 -247
- truthound_dashboard/schemas/quality_reporter.py +403 -0
- truthound_dashboard/schemas/reports.py +2 -2
- truthound_dashboard/schemas/rule_suggestion.py +8 -1
- truthound_dashboard/schemas/scan.py +4 -24
- truthound_dashboard/schemas/schedule.py +11 -3
- truthound_dashboard/schemas/schema_watcher.py +727 -0
- truthound_dashboard/schemas/source.py +17 -2
- truthound_dashboard/schemas/tiering.py +822 -0
- truthound_dashboard/schemas/triggers.py +16 -0
- truthound_dashboard/schemas/unified_alerts.py +7 -0
- truthound_dashboard/schemas/validation.py +0 -13
- truthound_dashboard/schemas/validators/base.py +41 -21
- truthound_dashboard/schemas/validators/business_rule_validators.py +244 -0
- truthound_dashboard/schemas/validators/localization_validators.py +273 -0
- truthound_dashboard/schemas/validators/ml_feature_validators.py +308 -0
- truthound_dashboard/schemas/validators/profiling_validators.py +275 -0
- truthound_dashboard/schemas/validators/referential_validators.py +312 -0
- truthound_dashboard/schemas/validators/registry.py +93 -8
- truthound_dashboard/schemas/validators/timeseries_validators.py +389 -0
- truthound_dashboard/schemas/versioning.py +1 -6
- truthound_dashboard/static/index.html +2 -2
- truthound_dashboard-1.5.1.dist-info/METADATA +312 -0
- {truthound_dashboard-1.4.4.dist-info → truthound_dashboard-1.5.1.dist-info}/RECORD +149 -148
- truthound_dashboard/core/plugins/hooks/__init__.py +0 -63
- truthound_dashboard/core/plugins/hooks/decorators.py +0 -367
- truthound_dashboard/core/plugins/hooks/manager.py +0 -403
- truthound_dashboard/core/plugins/hooks/protocols.py +0 -265
- truthound_dashboard/core/plugins/lifecycle/hot_reload.py +0 -584
- truthound_dashboard/core/reporters/junit_reporter.py +0 -233
- truthound_dashboard/core/reporters/markdown_reporter.py +0 -207
- truthound_dashboard/core/reporters/pdf_reporter.py +0 -209
- truthound_dashboard/static/assets/_baseUniq-BcrSP13d.js +0 -1
- truthound_dashboard/static/assets/arc-DlYjKwIL.js +0 -1
- truthound_dashboard/static/assets/architectureDiagram-VXUJARFQ-Bb2drbQM.js +0 -36
- truthound_dashboard/static/assets/blockDiagram-VD42YOAC-BlsPG1CH.js +0 -122
- truthound_dashboard/static/assets/c4Diagram-YG6GDRKO-B9JdUoaC.js +0 -10
- truthound_dashboard/static/assets/channel-Q6mHF1Hd.js +0 -1
- truthound_dashboard/static/assets/chunk-4BX2VUAB-DmyoPVuJ.js +0 -1
- truthound_dashboard/static/assets/chunk-55IACEB6-Bcz6Siv8.js +0 -1
- truthound_dashboard/static/assets/chunk-B4BG7PRW-Br3G5Rum.js +0 -165
- truthound_dashboard/static/assets/chunk-DI55MBZ5-DuM9c23u.js +0 -220
- truthound_dashboard/static/assets/chunk-FMBD7UC4-DNU-5mvT.js +0 -15
- truthound_dashboard/static/assets/chunk-QN33PNHL-Im2yNcmS.js +0 -1
- truthound_dashboard/static/assets/chunk-QZHKN3VN-kZr8XFm1.js +0 -1
- truthound_dashboard/static/assets/chunk-TZMSLE5B-Q__360q_.js +0 -1
- truthound_dashboard/static/assets/classDiagram-2ON5EDUG-vtixxUyK.js +0 -1
- truthound_dashboard/static/assets/classDiagram-v2-WZHVMYZB-vtixxUyK.js +0 -1
- truthound_dashboard/static/assets/clone-BOt2LwD0.js +0 -1
- truthound_dashboard/static/assets/cose-bilkent-S5V4N54A-CBDw6iac.js +0 -1
- truthound_dashboard/static/assets/dagre-6UL2VRFP-XdKqmmY9.js +0 -4
- truthound_dashboard/static/assets/diagram-PSM6KHXK-DAZ8nx9V.js +0 -24
- truthound_dashboard/static/assets/diagram-QEK2KX5R-BRvDTbGD.js +0 -43
- truthound_dashboard/static/assets/diagram-S2PKOQOG-bQcczUkl.js +0 -24
- truthound_dashboard/static/assets/erDiagram-Q2GNP2WA-DPje7VMN.js +0 -60
- truthound_dashboard/static/assets/flowDiagram-NV44I4VS-B7BVtFVS.js +0 -162
- truthound_dashboard/static/assets/ganttDiagram-JELNMOA3-D6WKSS7U.js +0 -267
- truthound_dashboard/static/assets/gitGraphDiagram-NY62KEGX-D3vtVd3y.js +0 -65
- truthound_dashboard/static/assets/graph-BKgNKZVp.js +0 -1
- truthound_dashboard/static/assets/index-C6JSrkHo.css +0 -1
- truthound_dashboard/static/assets/index-DkU82VsU.js +0 -1800
- truthound_dashboard/static/assets/infoDiagram-WHAUD3N6-DnNCT429.js +0 -2
- truthound_dashboard/static/assets/journeyDiagram-XKPGCS4Q-DGiMozqS.js +0 -139
- truthound_dashboard/static/assets/kanban-definition-3W4ZIXB7-BV2gUgli.js +0 -89
- truthound_dashboard/static/assets/katex-Cu_Erd72.js +0 -261
- truthound_dashboard/static/assets/layout-DI2MfQ5G.js +0 -1
- truthound_dashboard/static/assets/min-DYdgXVcT.js +0 -1
- truthound_dashboard/static/assets/mindmap-definition-VGOIOE7T-C7x4ruxz.js +0 -68
- truthound_dashboard/static/assets/pieDiagram-ADFJNKIX-CAJaAB9f.js +0 -30
- truthound_dashboard/static/assets/quadrantDiagram-AYHSOK5B-DeqwDI46.js +0 -7
- truthound_dashboard/static/assets/requirementDiagram-UZGBJVZJ-e3XDpZIM.js +0 -64
- truthound_dashboard/static/assets/sankeyDiagram-TZEHDZUN-CNnAv5Ux.js +0 -10
- truthound_dashboard/static/assets/sequenceDiagram-WL72ISMW-Dsne-Of3.js +0 -145
- truthound_dashboard/static/assets/stateDiagram-FKZM4ZOC-Ee0sQXyb.js +0 -1
- truthound_dashboard/static/assets/stateDiagram-v2-4FDKWEC3-B26KqW_W.js +0 -1
- truthound_dashboard/static/assets/timeline-definition-IT6M3QCI-DZYi2yl3.js +0 -61
- truthound_dashboard/static/assets/treemap-KMMF4GRG-CY3f8In2.js +0 -128
- truthound_dashboard/static/assets/unmerged_dictionaries-Dd7xcPWG.js +0 -1
- truthound_dashboard/static/assets/xychartDiagram-PRI3JC2R-CS7fydZZ.js +0 -7
- truthound_dashboard-1.4.4.dist-info/METADATA +0 -507
- {truthound_dashboard-1.4.4.dist-info → truthound_dashboard-1.5.1.dist-info}/WHEEL +0 -0
- {truthound_dashboard-1.4.4.dist-info → truthound_dashboard-1.5.1.dist-info}/entry_points.txt +0 -0
- {truthound_dashboard-1.4.4.dist-info → truthound_dashboard-1.5.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -82,9 +82,11 @@ from ..db.models import (
|
|
|
82
82
|
RoutingRuleModel,
|
|
83
83
|
ThrottlingConfig,
|
|
84
84
|
)
|
|
85
|
+
from ..schemas.base import MessageResponse
|
|
85
86
|
from ..schemas.notifications_advanced import (
|
|
86
87
|
AcknowledgeRequest,
|
|
87
88
|
CacheInfo,
|
|
89
|
+
CacheInvalidateResponse,
|
|
88
90
|
CombinatorType,
|
|
89
91
|
ConfigExportRequest,
|
|
90
92
|
ConfigImportConflict,
|
|
@@ -550,11 +552,11 @@ async def update_routing_rule(
|
|
|
550
552
|
return _routing_rule_to_response(rule)
|
|
551
553
|
|
|
552
554
|
|
|
553
|
-
@router.delete("/routing/rules/{rule_id}")
|
|
555
|
+
@router.delete("/routing/rules/{rule_id}", response_model=MessageResponse)
|
|
554
556
|
async def delete_routing_rule(
|
|
555
557
|
rule_id: str,
|
|
556
558
|
session: AsyncSession = Depends(get_session),
|
|
557
|
-
) ->
|
|
559
|
+
) -> MessageResponse:
|
|
558
560
|
"""Delete a routing rule."""
|
|
559
561
|
result = await session.execute(
|
|
560
562
|
select(RoutingRuleModel).where(RoutingRuleModel.id == rule_id)
|
|
@@ -567,7 +569,7 @@ async def delete_routing_rule(
|
|
|
567
569
|
await session.delete(rule)
|
|
568
570
|
await session.commit()
|
|
569
571
|
|
|
570
|
-
return
|
|
572
|
+
return MessageResponse(message="Routing rule deleted")
|
|
571
573
|
|
|
572
574
|
|
|
573
575
|
def _convert_nested_rule_config_to_dict(config: NestedRuleConfig) -> dict[str, Any]:
|
|
@@ -874,11 +876,11 @@ async def update_deduplication_config(
|
|
|
874
876
|
return _dedup_config_to_response(config)
|
|
875
877
|
|
|
876
878
|
|
|
877
|
-
@router.delete("/deduplication/configs/{config_id}")
|
|
879
|
+
@router.delete("/deduplication/configs/{config_id}", response_model=MessageResponse)
|
|
878
880
|
async def delete_deduplication_config(
|
|
879
881
|
config_id: str,
|
|
880
882
|
session: AsyncSession = Depends(get_session),
|
|
881
|
-
) ->
|
|
883
|
+
) -> MessageResponse:
|
|
882
884
|
"""Delete a deduplication config."""
|
|
883
885
|
result = await session.execute(
|
|
884
886
|
select(DeduplicationConfig).where(DeduplicationConfig.id == config_id)
|
|
@@ -891,7 +893,7 @@ async def delete_deduplication_config(
|
|
|
891
893
|
await session.delete(config)
|
|
892
894
|
await session.commit()
|
|
893
895
|
|
|
894
|
-
return
|
|
896
|
+
return MessageResponse(message="Deduplication config deleted")
|
|
895
897
|
|
|
896
898
|
|
|
897
899
|
@router.get("/deduplication/stats", response_model=DeduplicationStats)
|
|
@@ -1094,11 +1096,11 @@ async def update_throttling_config(
|
|
|
1094
1096
|
return _throttle_config_to_response(config)
|
|
1095
1097
|
|
|
1096
1098
|
|
|
1097
|
-
@router.delete("/throttling/configs/{config_id}")
|
|
1099
|
+
@router.delete("/throttling/configs/{config_id}", response_model=MessageResponse)
|
|
1098
1100
|
async def delete_throttling_config(
|
|
1099
1101
|
config_id: str,
|
|
1100
1102
|
session: AsyncSession = Depends(get_session),
|
|
1101
|
-
) ->
|
|
1103
|
+
) -> MessageResponse:
|
|
1102
1104
|
"""Delete a throttling config."""
|
|
1103
1105
|
result = await session.execute(
|
|
1104
1106
|
select(ThrottlingConfig).where(ThrottlingConfig.id == config_id)
|
|
@@ -1111,7 +1113,7 @@ async def delete_throttling_config(
|
|
|
1111
1113
|
await session.delete(config)
|
|
1112
1114
|
await session.commit()
|
|
1113
1115
|
|
|
1114
|
-
return
|
|
1116
|
+
return MessageResponse(message="Throttling config deleted")
|
|
1115
1117
|
|
|
1116
1118
|
|
|
1117
1119
|
@router.get("/throttling/stats", response_model=ThrottlingStats)
|
|
@@ -1314,11 +1316,11 @@ async def update_escalation_policy(
|
|
|
1314
1316
|
return _escalation_policy_to_response(policy)
|
|
1315
1317
|
|
|
1316
1318
|
|
|
1317
|
-
@router.delete("/escalation/policies/{policy_id}")
|
|
1319
|
+
@router.delete("/escalation/policies/{policy_id}", response_model=MessageResponse)
|
|
1318
1320
|
async def delete_escalation_policy(
|
|
1319
1321
|
policy_id: str,
|
|
1320
1322
|
session: AsyncSession = Depends(get_session),
|
|
1321
|
-
) ->
|
|
1323
|
+
) -> MessageResponse:
|
|
1322
1324
|
"""Delete an escalation policy."""
|
|
1323
1325
|
result = await session.execute(
|
|
1324
1326
|
select(EscalationPolicyModel).where(EscalationPolicyModel.id == policy_id)
|
|
@@ -1331,7 +1333,7 @@ async def delete_escalation_policy(
|
|
|
1331
1333
|
await session.delete(policy)
|
|
1332
1334
|
await session.commit()
|
|
1333
1335
|
|
|
1334
|
-
return
|
|
1336
|
+
return MessageResponse(message="Escalation policy deleted")
|
|
1335
1337
|
|
|
1336
1338
|
|
|
1337
1339
|
# =============================================================================
|
|
@@ -2310,14 +2312,14 @@ async def get_stats_cache_status() -> StatsCacheStatus:
|
|
|
2310
2312
|
)
|
|
2311
2313
|
|
|
2312
2314
|
|
|
2313
|
-
@router.post("/stats/cache/invalidate")
|
|
2315
|
+
@router.post("/stats/cache/invalidate", response_model=CacheInvalidateResponse)
|
|
2314
2316
|
async def invalidate_stats_cache(
|
|
2315
2317
|
target: str = Query(
|
|
2316
2318
|
default="all",
|
|
2317
2319
|
description="Cache target to invalidate: all, escalation, deduplication, throttling",
|
|
2318
2320
|
),
|
|
2319
2321
|
session: AsyncSession = Depends(get_session),
|
|
2320
|
-
) ->
|
|
2322
|
+
) -> CacheInvalidateResponse:
|
|
2321
2323
|
"""Invalidate stats cache entries.
|
|
2322
2324
|
|
|
2323
2325
|
Use this endpoint to force fresh database queries on the next stats request.
|
|
@@ -2349,12 +2351,11 @@ async def invalidate_stats_cache(
|
|
|
2349
2351
|
detail=f"Invalid target: {target}. Must be one of: all, escalation, deduplication, throttling",
|
|
2350
2352
|
)
|
|
2351
2353
|
|
|
2352
|
-
return
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
|
|
2357
|
-
}
|
|
2354
|
+
return CacheInvalidateResponse(
|
|
2355
|
+
message=message,
|
|
2356
|
+
target=target,
|
|
2357
|
+
timestamp=datetime.utcnow().isoformat(),
|
|
2358
|
+
)
|
|
2358
2359
|
|
|
2359
2360
|
|
|
2360
2361
|
# =============================================================================
|