Oxana Dashboard

{% include "_tabs.html" %}

Active Processes ({{ stats.processes.len() }})

{% if stats.processes.is_empty() %}
No active processes
{% else %}
{% for process in &stats.processes %} {% endfor %}
Hostname PID Busy Started Last Heartbeat
{{ process.hostname }} {{ process.pid }} {{ self.busy_for_process(process) }} {{ process.started_at|relative_time }} {{ process.heartbeat_at|relative_time }}
{% endif %}

Active Queues

{% if stats.queues.is_empty() %}
No active queues
{% else %}
{% for queue in &stats.queues %} {% let busy = self.busy_for(&queue.key) %} {% if queue.enqueued > 0 || busy > 0 %} {% for dq in &queue.queues %} {% if dq.enqueued > 0 %} {% let dq_key = self.dynamic_queue_key(&queue.key, &dq.suffix) %} {% endif %} {% endfor %} {% endif %} {% endfor %}
Queue Concurrency State Busy Enqueued Latency
{% if queue.queues.is_empty() %}{{ queue.key }}{% else %}{{ queue.key }}{% endif %} {{ self.concurrency_for(&queue.key) }}{% if self.has_concurrency_override_for(&queue.key) %} ({{ self.default_concurrency_for(&queue.key) }}){% endif %} {{ self.state_for(&queue.key) }} {{ busy }} {{ queue.enqueued }} {{ queue.latency_s|format_latency }}
{{ dq.suffix }} {{ self.concurrency_for(&dq_key) }}{% if self.has_concurrency_override_for(&dq_key) %} ({{ self.default_concurrency_for(&dq_key) }}){% endif %} {{ self.state_for(&dq_key) }} {{ dq.enqueued }} {{ dq.latency_s|format_latency }}
{% endif %}

Currently Processing ({{ stats.processing.len() }})

{% if stats.processing.is_empty() %}
No jobs currently being processed
{% else %}
{% for item in &stats.processing %}
{{ item.job_envelope.job.name }}
{{ item.job_envelope.id }}
Process: {{ item.process_id }}
Started: {{ item.job_envelope.meta.started_at|relative_time_micros_opt }}
Scheduled: {{ item.job_envelope.meta.scheduled_at|relative_time_micros }}
Retries: {{ item.job_envelope.meta.retries }}
{% let arg_pills = item.job_envelope.job.args|simple_args %} {% include "_arg_pills.html" %} {% if item.job_envelope.job.args|show_args_json %}
Arguments
{{ item.job_envelope.job.args|pretty_json }}
{% endif %} {% match item.job_envelope.meta.state %} {% when Some with (state) %} {% if state|has_args %} {% if state|show_job_progress %} {% let progress_started_at = item.job_envelope.meta.started_at %} {% include "_job_progress.html" %} {% else %}
State
{{ state|pretty_json }}
{% endif %} {% endif %} {% when None %} {% endmatch %}
{% endfor %}
{% endif %}