Submit a DQM job to compute and store metrics. Returns job_id. When set_baseline is True and no date range is provided, computes baseline from all available source data.
(request: ComputeMetricsRequest)
| 83 | |
| 84 | @router.post("/monitoring/compute", tags=["Monitoring"]) |
| 85 | async def compute_metrics(request: ComputeMetricsRequest): |
| 86 | """Submit a DQM job to compute and store metrics. Returns job_id. |
| 87 | |
| 88 | When set_baseline is True and no date range is provided, computes |
| 89 | baseline from all available source data. |
| 90 | """ |
| 91 | store = _get_store() |
| 92 | if request.feature_view_name: |
| 93 | fv = store.registry.get_feature_view( |
| 94 | name=request.feature_view_name, project=request.project |
| 95 | ) |
| 96 | assert_permissions(fv, actions=[AuthzedAction.UPDATE]) |
| 97 | |
| 98 | svc = _get_monitoring_service() |
| 99 | |
| 100 | if request.set_baseline and not request.start_date and not request.end_date: |
| 101 | try: |
| 102 | result = svc.compute_baseline( |
| 103 | project=request.project, |
| 104 | feature_view_name=request.feature_view_name, |
| 105 | feature_names=request.feature_names, |
| 106 | ) |
| 107 | return result |
| 108 | except Exception as e: |
| 109 | raise HTTPException(status_code=500, detail=str(e)) |
| 110 | |
| 111 | if request.granularity not in VALID_GRANULARITIES: |
| 112 | raise HTTPException( |
| 113 | status_code=400, |
| 114 | detail=f"Invalid granularity '{request.granularity}'. " |
| 115 | f"Must be one of {VALID_GRANULARITIES}", |
| 116 | ) |
| 117 | |
| 118 | params: Dict[str, Any] = {} |
| 119 | if request.start_date: |
| 120 | params["start_date"] = request.start_date |
| 121 | if request.end_date: |
| 122 | params["end_date"] = request.end_date |
| 123 | if request.feature_names: |
| 124 | params["feature_names"] = request.feature_names |
| 125 | params["granularity"] = request.granularity |
| 126 | params["set_baseline"] = request.set_baseline |
| 127 | |
| 128 | job_id = svc.submit_job( |
| 129 | project=request.project, |
| 130 | job_type="compute", |
| 131 | feature_view_name=request.feature_view_name, |
| 132 | parameters=params, |
| 133 | ) |
| 134 | |
| 135 | try: |
| 136 | result = svc.execute_job(job_id) |
| 137 | return {"job_id": job_id, **result} |
| 138 | except Exception as e: |
| 139 | raise HTTPException(status_code=500, detail=str(e)) |
| 140 | |
| 141 | @router.post("/monitoring/auto_compute", tags=["Monitoring"]) |
| 142 | async def auto_compute(request: AutoComputeRequest): |
nothing calls this directly
no test coverage detected