{% extends "base.html" %} {% import "macros.html" as m %} {% block title %}Operations - {{ pack.pack }}{% endblock %} {% block content %}

Operations

Over stdio the server runs inside the client and its stderr is not collected, so the traffic panels stay empty until the streamable HTTP transport writes a log file. Point the console at one with --server-log or import a file below. Calls made in the sandbox are counted here too.

Health of the release on disk

{% if not health.available %}

No release built.

{% else %}
Release{{ health.release_id }}
Counts {{ health.topics }} topics, {{ health.concepts }} concepts, {{ health.facts }} facts, {{ health.evidence }} evidence, {{ health.documents }} documents
Scope {{ health.jurisdictions | length }} jurisdictions, languages {{ health.languages | join(', ') }}
Freshness snapshot {{ health.snapshot_date }}, stale from {{ health.stale_from }}, {{ health.days_to_stale }} days
Review{{ m.stacked(health.review_statuses, health.facts) }}
{% if mismatch %}
Mismatch the log reports {{ mismatch | join(', ') }}; a running server serves an older release than the one on disk
{% endif %}
{% endif %}

Traffic ({{ calls }} call(s))

{% for row in summary.per_tool %} {% else %} {% endfor %}
ToolCallsStatus mixms p50/p95/p99 bytes p50/p95/p99Tool errors
{{ row.tool }} {{ row.calls }} {% for status, count in row.statuses.items() %}{{ status }} {{ count }}{% if not loop.last %}, {% endif %}{% endfor %} {{ row.ms.p50 }}/{{ row.ms.p95 }}/{{ row.ms.p99 }} {{ row.bytes.p50 }}/{{ row.bytes.p95 }}/{{ row.bytes.p99 }} {{ row.errors }}
No call recorded yet.
{% if summary.traffic %} {% for row in summary.traffic %} {% endfor %}
{{ by }}CallsPer tool
{{ row.bucket }}{{ row.total }} {% for tool, count in row.counts.items() %}{{ tool }} {{ count }}{% if not loop.last %}, {% endif %}{% endfor %}
{% endif %} {% if summary.error_codes %}

Tool errors by code: {{ summary.error_codes }}

{% endif %}

Gap feed

The curation backlog as callers report it. It needs the server to log the gap fields: one more key on the line, gap= when the status is not SUPPORTED and hits= on a search. Request payloads are never logged; a query only when it produced no hit, truncated to 80 characters.

Most frequent OUT_OF_COVERAGE gaps

{% for name, count in summary.gap_feed.out_of_coverage %} {% else %}{% endfor %}
GapCallsAction
{{ name }}{{ count }} create a concept
None recorded.

Most frequent NEEDS_CONTEXT fields

{% for name, count in summary.gap_feed.needs_context %} {% else %}{% endfor %}
FieldCalls
{{ name }}{{ count }}
None recorded.

Searches without a hit

{% for query, count in summary.gap_feed.searches_without_hit %} {% else %}{% endfor %}
QueryCallsAction
{{ query }}{{ count }} add an alias
None recorded.

Freshness of the cited documents

{% for row in freshness %} {% else %}{% endfor %}
Accessed onDocumentsDays old
{{ row.accessed_on }}{{ row.documents }} {{ row.age }}
No release.
{% if not read_only %}

Import a server log

Refresh the pack

Acquire with the download flag, then extract, validate-text and build with update_curation, then the relocation review. This is the only action of this screen that makes network requests.

{% endif %} {% endblock %}