(store, project_name, repo)
| 431 | |
| 432 | |
| 433 | def _submit_baseline_jobs(store, project_name, repo): |
| 434 | try: |
| 435 | from feast.monitoring.monitoring_service import MonitoringService |
| 436 | |
| 437 | svc = MonitoringService(store) |
| 438 | feature_views = list(repo.feature_views) |
| 439 | if not feature_views: |
| 440 | return |
| 441 | |
| 442 | job_ids = svc.submit_baseline_for_new_features( |
| 443 | project=project_name, feature_views=feature_views |
| 444 | ) |
| 445 | if not job_ids: |
| 446 | return |
| 447 | |
| 448 | import threading |
| 449 | |
| 450 | def _run_baseline_jobs(): |
| 451 | for job_id in job_ids: |
| 452 | try: |
| 453 | svc.execute_job(job_id) |
| 454 | click.echo(f" ✓ Baseline computed (job: {job_id})") |
| 455 | except Exception: |
| 456 | logging.getLogger(__name__).debug( |
| 457 | "Baseline job %s execution failed (non-critical)", |
| 458 | job_id, |
| 459 | exc_info=True, |
| 460 | ) |
| 461 | |
| 462 | click.echo( |
| 463 | f" → Computing baseline metrics in background ({len(job_ids)} job(s))..." |
| 464 | ) |
| 465 | thread = threading.Thread(target=_run_baseline_jobs) |
| 466 | thread.start() |
| 467 | except Exception: |
| 468 | logging.getLogger(__name__).debug( |
| 469 | "Monitoring baseline submission skipped (non-critical)", exc_info=True |
| 470 | ) |
| 471 | |
| 472 | |
| 473 | def log_infra_changes( |
no test coverage detected