Page MenuHomeSoftware Heritage

D4889.diff
No OneTemporary

D4889.diff

diff --git a/swh/scheduler/cli/origin.py b/swh/scheduler/cli/origin.py
--- a/swh/scheduler/cli/origin.py
+++ b/swh/scheduler/cli/origin.py
@@ -12,6 +12,9 @@
from . import cli
if TYPE_CHECKING:
+ from uuid import UUID
+
+ from ..interface import SchedulerInterface
from ..model import ListedOrigin
@@ -140,3 +143,40 @@
output.append(pretty_print_task(task))
click.echo_via_pager("\n".join(output))
+
+
+@origin.command("update-metrics")
+@click.option("--lister", default=None, help="Only update metrics for this lister")
+@click.option(
+ "--instance", default=None, help="Only update metrics for this lister instance"
+)
+@click.pass_context
+def update_metrics(ctx, lister: Optional[str], instance: Optional[str]):
+ """Update the scheduler metrics on listed origins.
+
+ Examples:
+ swh scheduler origin update-metrics
+ swh scheduler origin update-metrics --lister github
+ swh scheduler origin update-metrics --lister phabricator --instance llvm
+ """
+ import json
+
+ import attr
+
+ scheduler: SchedulerInterface = ctx.obj["scheduler"]
+
+ lister_id: Optional[UUID] = None
+ if lister is not None:
+ lister_instance = scheduler.get_lister(name=lister, instance_name=instance)
+ if not lister_instance:
+ click.echo(f"Lister not found: {lister} instance={instance}")
+ ctx.exit(2)
+ assert False # for mypy
+
+ lister_id = lister_instance.id
+
+ def dictify_metrics(d):
+ return {k: str(v) for (k, v) in attr.asdict(d).items()}
+
+ ret = scheduler.update_metrics(lister_id=lister_id)
+ click.echo(json.dumps(list(map(dictify_metrics, ret)), indent=4, sort_keys=True))
diff --git a/swh/scheduler/tests/test_cli_origin.py b/swh/scheduler/tests/test_cli_origin.py
--- a/swh/scheduler/tests/test_cli_origin.py
+++ b/swh/scheduler/tests/test_cli_origin.py
@@ -110,3 +110,14 @@
}
assert scheduled_tasks <= all_possible_tasks
+
+
+def test_update_metrics(swh_scheduler, listed_origins):
+ swh_scheduler.record_listed_origins(listed_origins)
+
+ assert swh_scheduler.get_metrics() == []
+
+ result = invoke(swh_scheduler, args=("update-metrics",))
+
+ assert result.exit_code == 0
+ assert swh_scheduler.get_metrics() != []

File Metadata

Mime Type
text/plain
Expires
Sun, Aug 17, 6:47 PM (2 w, 1 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3218609

Event Timeline