{% extends "base.html" %} {% import "repo_tabs.html" as m %} {% block title %}Insights · {{ scope }}{% endblock %} {% block bodyattrs %}{% if wall %} class="wall"{% endif %}{% endblock %} {% block tabs %}{% if !wall %}{% if let Some(r) = repo %}{% call m::tabs(r, "insights") %}{% endif %}{% endif %}{% endblock %} {% block content %}

Insights {{ scope }} · OxygenFlow, the last {% if range_on("1h") %}hour{% else if range_on("7d") %}7 days{% else %}24 hours{% endif %}

1 hour 24 hours 7 days {% if !repo_choices.is_empty() || !runner_choices.is_empty() %}
{% if wall %}{% endif %}
{% endif %} {% if let Some((label, url)) = wider %}{{ label }}{% endif %} {% if wall %}leave the wall view{% else %}wall view ↗{% endif %} {% if !grafana.is_empty() %}open in Grafana ↗{% endif %}
{{ secs(i.pickup_median) }}time to pickup, median95th percentile {{ secs(i.pickup_p95) }}
{{ i.ended }}jobs finished{{ pass_rate() }} passed of those that passed or failed
{{ secs(i.duration_median) }}job duration, medianstarted to finished
{{ i.queued_now }}queued now{{ i.running_now }} running
{{ i.runners_online }}/{{ i.runners_total }}runners online{{ i.slots_busy }} of {{ i.slots_total }} slots busy
Time to pickup ready to started
{{ charts.pickup|safe }}
{% for s in i.pickup %}{{ s.name }}{% endfor %}
Jobs finished per {% if range_on("1h") %}minute{% else if range_on("7d") %}3 hours{% else %}30 minutes{% endif %}
{{ charts.results|safe }}
{% for s in i.results %}{{ s.name }}{% endfor %}
Queued and running
{{ charts.load|safe }}
{% for s in i.load %}{{ s.name }}{% endfor %}
Job duration started to finished
{{ charts.durations|safe }}
{% for s in i.durations %}{{ s.name }}{% endfor %}
Runner utilisation running jobs over the slots of the runners online now
{{ charts.utilisation|safe }}
{% for s in i.utilisation %}{{ s.name }}{% endfor %}
{% if !i.runners.is_empty() %}

Runners

{% for r in i.runners %}{% endfor %}
RunnerStatusBusyJobsFailedPickup, medianDuration, medianLast heard from
{{ r.name }}{{ r.status }}{{ r.running }}/{{ r.max_jobs }}{{ r.jobs }}{% if r.failed > 0 %}{{ r.failed }}{% else %}0{% endif %}{{ secs(r.pickup_median) }}{{ secs(r.duration_median) }}{% if let Some(t) = r.last_seen_ms %}{% else %}never{% endif %}
{% endif %} {% if i.repos.len() > 1 %}

Repositories busiest first

{% for r in i.repos %}{% endfor %}
RepositoryJobsFailedQueued nowPickup, medianPickup, 95th percentile
{{ r.slug }}{{ r.jobs }}{% if r.failed > 0 %}{{ r.failed }}{% else %}0{% endif %}{{ r.queued }}{{ secs(r.pickup_median) }}{{ secs(r.pickup_p95) }}
{% endif %}

Updated ; this page refreshes itself every 30 seconds. Pickup is from when a job could run (queued, its dependencies passed, approved) to when a runner took it.

{% endblock %}