openapi: 3.0.3 info: title: HPCPerfStats API version: '3.0' description: REST API for the HPCPerfStats machine SPA and public dashboards. paths: /api/admin_monitor/: get: operationId: admin_monitor_retrieve description: |- Staff-only: HPCPerfStats Monitor data (host timestamps, cache/Redis, RabbitMQ, TimescaleDB stats). Supports a lightweight, per-section API via the optional 'section' query param: - ?section=hosts -> {"host_stats": [...]} - ?section=rabbitmq_hosts -> {"rabbitmq_host_stats": [...]} - ?section=cache -> {"cache_stats": {...}} - ?section=rabbitmq -> {"rabbitmq_stats": {...}} - ?section=timescaledb -> {"timescaledb_stats": {...}} - ?section=xalt -> {"xalt_stats": {...}} - omitted/other -> {"host_stats": [...], "rabbitmq_host_stats": [...], "cache_stats": {...}, "rabbitmq_stats": {...}, "timescaledb_stats": {...}, "xalt_stats": {...}} parameters: - in: query name: refresh schema: type: string - in: query name: section schema: type: string required: true tags: - admin security: - cookieAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/AdminMonitorResponse' description: '' '401': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Authentication required '403': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Forbidden '404': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Not found '409': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Conflict '413': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Payload too large '429': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Too many requests '500': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Server error /api/cache/invalidate-page/: post: operationId: cache_invalidate_page_create description: |- Invalidate cache entries associated with the provided page path. Deletes Django ``@cache_page`` / ``dynamic_cache_page`` rows via ``cache.delete`` (correct key prefix/versioning), then raw Redis ``SCAN`` for keys whose names embed the same URL MD5 as Django's cache layer (covers ``Vary`` variants). For any ``/machine`` or ``/machine/...`` path, also targets ``/api/home/`` and drops ``home_options`` ORM cache keys (dates, metrics list, queues, states, site newest job end). Works without a raw Redis client (LocMem): ORM + Django cache deletes still run. tags: - admin requestBody: content: application/json: schema: $ref: '#/components/schemas/InvalidateCacheRequestRequest' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/InvalidateCacheRequestRequest' multipart/form-data: schema: $ref: '#/components/schemas/InvalidateCacheRequestRequest' required: true security: - cookieAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/InvalidateCacheResponse' description: '' '400': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: '' '401': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Authentication required '403': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Forbidden /api/home/: get: operationId: home_retrieve description: 'Return options for search form: date_list, metrics, queues, states, machine_name.' tags: - home security: - cookieAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/HomeOptions' description: '' '401': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Authentication required '403': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Forbidden /api/host_plot/: get: operationId: host_plot_retrieve description: Return Bokeh plot_item for a single host and time range (GET host, end_time__gte, end_time__lte). summary: Host utilization plot parameters: - in: query name: end_time__gte schema: type: string required: true - in: query name: end_time__lte schema: type: string - in: query name: host schema: type: string required: true tags: - hosts security: - cookieAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/HostPlotResponse' description: '' '401': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Authentication required '403': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Forbidden /api/job_monitor/: get: operationId: job_monitor_retrieve description: |- Staff-only: aggregate job failure statistics per user over a recent window. The window is controlled by the optional ?days=N query parameter (integer). N is clamped to [1, 365]. If missing or invalid, defaults to 30 days. Returns rows of: - username - total_jobs: number of jobs run - failed_jobs: number of jobs with state OUT_OF_MEMORY or FAILED - failed_rate: percentage of failed jobs (0–100), sorted descending. GPU fields are intentionally omitted from this initial endpoint so the page can render quickly; per-user GPU stats are fetched asynchronously from job_monitor_gpu_for_user. parameters: - in: query name: days schema: type: integer tags: - monitor security: - cookieAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/JobMonitorResponse' description: '' '401': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Authentication required '403': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Forbidden /api/job_monitor/gpu/: get: operationId: job_monitor_gpu_retrieve description: Staff-only GPU rollup for Job Monitor (single ``username`` or batch ``usernames``). parameters: - in: query name: days schema: type: integer - in: query name: username schema: type: string - in: query name: usernames schema: type: string description: Comma-separated usernames for batch GPU rollup tags: - monitor security: - cookieAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/JobMonitorGpuResponse' description: '' '401': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Authentication required '403': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Forbidden /api/jobs/: get: operationId: jobs_retrieve description: Paginated job list only (histograms via separate job_list_histograms endpoint). parameters: - in: query name: account schema: type: string description: Comma-separated project/account names (exact match, OR). - in: query name: end_time__date schema: type: string - in: query name: host schema: type: string - in: query name: include_filter_options schema: type: integer description: When 0, omit filter_options from the response (SPA loads them via GET /api/jobs/filter_options/). Default 1. - in: query name: order_by schema: type: string - in: query name: page schema: type: integer - in: query name: performance_sort_rank schema: type: string description: Comma-separated performance status ranks 0–5 (OR). - in: query name: queue schema: type: string description: Comma-separated queue names (OR). - in: query name: state schema: type: string description: Comma-separated major terminal status group keys (OR) — completed, failed, canceled, preempted, timeout. - in: query name: username schema: type: string description: Comma-separated usernames (OR within dimension). tags: - jobs security: - cookieAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/JobListResponse' description: '' '401': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Authentication required '403': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Forbidden '404': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Not found '409': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Conflict '413': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Payload too large '429': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Too many requests '500': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Server error /api/jobs/{jid}/{type_name}/: get: operationId: jobs_retrieve_3 description: 'Type detail: Bokeh json_item (tplot_item), stats_data, schema.' parameters: - in: path name: jid schema: type: string required: true - in: path name: type_name schema: type: string required: true tags: - jobs security: - cookieAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/TypeDetailResponse' description: '' '401': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Authentication required '403': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Forbidden '404': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Not found '409': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Conflict '413': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Payload too large '429': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Too many requests '500': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Server error /api/jobs/{id}/: get: operationId: jobs_retrieve_2 description: 'Single job detail: metadata, host_list, fsio, xalt, schema, URLs (plots via separate job_plots endpoint).' parameters: - in: query name: defer schema: type: string description: 'Comma-separated: xalt, proc, multiprecision' - in: path name: id schema: type: string required: true - in: query name: light schema: type: integer tags: - jobs security: - cookieAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/JobDetailResponse' description: '' '401': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Authentication required '403': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Forbidden '404': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Not found '409': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Conflict '413': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Payload too large '429': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Too many requests '500': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Server error /api/jobs/{id}/plots/: get: operationId: jobs_plots_retrieve description: |- Job-level plots grouped by shared jid_table input. Returns Bokeh json_items and availability reasons for: - Summary plot - Roofline - GPU roofline Query params: - plot: omit or ``all`` for all three; or one of summary_plot, roofline, gpu_roofline. - zoom: ``1`` for zoom layout (single-plot requests only). - progressive: ``1`` with plot=all (no zoom): HTTP 200 with ``status`` partial/ready and only completed plot fields included while others are listed in ``loading_plots``; avoids 202 while still using one endpoint and shared background tasks. parameters: - in: path name: id schema: type: string required: true - in: query name: plot schema: type: string - in: query name: progressive schema: type: string - in: query name: zoom schema: type: string tags: - jobs security: - cookieAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/JobPlotsResponse' description: '' '401': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Authentication required '403': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Forbidden '404': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Not found '409': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Conflict '413': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Payload too large '429': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Too many requests '500': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Server error '202': content: application/json: schema: $ref: '#/components/schemas/JobPlotsResponse' description: Plots still generating; retry after retry_after_seconds /api/jobs/filter_options/: get: operationId: jobs_filter_options_retrieve description: Faceted header-filter option values for the current job-list selection. parameters: - in: query name: account schema: type: string description: Comma-separated project/account names (exact match, OR). - in: query name: end_time__date schema: type: string - in: query name: host schema: type: string - in: query name: order_by schema: type: string - in: query name: page schema: type: integer - in: query name: performance_sort_rank schema: type: string description: Comma-separated performance status ranks 0–5 (OR). - in: query name: queue schema: type: string description: Comma-separated queue names (OR). - in: query name: state schema: type: string description: Comma-separated major terminal status group keys (OR). - in: query name: username schema: type: string description: Comma-separated usernames (OR within dimension). tags: - jobs security: - cookieAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/JobListFilterOptionsResponse' description: '' '401': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Authentication required '403': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Forbidden '404': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Not found '409': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Conflict '413': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Payload too large '429': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Too many requests '500': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Server error /api/jobs/histograms/: get: operationId: jobs_histograms_retrieve description: |- Return Bokeh histograms for the job list, loaded incrementally. This endpoint supports per-plot loading for metric histograms. The caller must provide a 'group' query parameter: - group=metric&metric=: return a single metric histogram (thumb and full) for the given metric name. Example: /api/jobs/histograms/?end_time__date=2024-01-01&group=metric&metric=runtime parameters: - in: query name: group schema: type: string required: true - in: query name: metric schema: type: string tags: - jobs security: - cookieAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/JobListHistogramResponse' description: '' '401': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Authentication required '403': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Forbidden '404': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Not found '409': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Conflict '413': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Payload too large '429': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Too many requests '500': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Server error /api/jobs/histograms/batch/: get: operationId: jobs_histograms_batch_retrieve description: |- Return multiple metric histograms in one response (single dataframe build). Query param ``metrics`` is comma-separated (default: runtime,nhosts,queue_wait). parameters: - in: query name: account schema: type: string - in: query name: end_time__date schema: type: string - in: query name: end_time__date__gte schema: type: string - in: query name: end_time__date__lte schema: type: string - in: query name: host schema: type: string - in: query name: metrics schema: type: string description: 'Comma-separated metric names (default: runtime,nhosts,queue_wait)' - in: query name: performance_sort_rank schema: type: string - in: query name: queue schema: type: string - in: query name: state schema: type: string - in: query name: username schema: type: string tags: - jobs security: - cookieAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/JobListHistogramBatchResponse' description: '' '401': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Authentication required '403': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Forbidden '404': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Not found '409': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Conflict '413': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Payload too large '429': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Too many requests '500': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Server error /api/pub/cluster-dashboard/: get: operationId: pub_cluster_dashboard_retrieve description: 'Public cluster dashboard: meta by default; lazy period or full bundle via query params.' parameters: - in: query name: full schema: type: integer description: 1 to return legacy full bundle - in: query name: grouping schema: type: string - in: query name: period schema: type: string - in: query name: section schema: type: string description: Lazy section (expansion_factor) tags: - public responses: '200': content: application/json: schema: $ref: '#/components/schemas/PublicClusterDashboard' description: '' /api/sacct/ingest/: post: operationId: sacct_ingest_create description: |- Ingest pipe-delimited sacct output into job_data using sync_acct logic. Requires authentication (API key or session) and staff. Request body must be raw pipe-delimited sacct output (same format as sacct -P -o ...). Query param date=YYYY-MM-DD is required (the date of the data being ingested) to compute which jobs are already in the DB. parameters: - in: query name: date schema: type: string tags: - admin security: - cookieAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/SacctIngestResponse' description: '' '401': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Authentication required '403': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Forbidden '404': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Not found '409': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Conflict '413': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Payload too large '429': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Too many requests '500': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Server error /api/session/: get: operationId: session_retrieve description: Return current session state for SPA (logged_in, username, is_staff). tags: - session security: - cookieAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/SessionInfo' description: '' '401': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Authentication required '403': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Forbidden /api/session/drop-staff/: post: operationId: session_drop_staff_create description: Remove staff access for the current authenticated session only. tags: - session security: - cookieAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/DropStaffResponse' description: '' '401': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Authentication required '403': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Forbidden /api/user-api-key/: get: operationId: user_api_key_retrieve description: Return API key visibility for the OAuth session (create key if none exists). tags: - session security: - cookieAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/UserApiKey' description: '' '401': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Authentication required '403': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Forbidden /api/user-api-key/rotate/: post: operationId: user_api_key_rotate_create description: Revoke active keys for this user and return a newly minted raw key. tags: - session security: - cookieAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/UserApiKey' description: '' '401': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Authentication required '403': content: application/json: schema: $ref: '#/components/schemas/ErrorDetail' description: Forbidden components: schemas: AdminMonitorHostStat: type: object properties: host: type: string last_time: type: string nullable: true age_bucket: type: string AdminMonitorResponse: type: object description: Section keys at top level; only one or a combined bundle is present per request. properties: host_stats: type: array items: $ref: '#/components/schemas/AdminMonitorHostStat' rabbitmq_host_stats: type: array items: $ref: '#/components/schemas/AdminMonitorHostStat' cache_stats: type: object additionalProperties: {} rabbitmq_stats: type: object additionalProperties: {} timescaledb_stats: type: object additionalProperties: {} xalt_stats: type: object additionalProperties: {} DropStaffResponse: type: object properties: ok: type: boolean message: type: string is_staff: type: boolean required: - is_staff - message - ok ErrorDetail: type: object properties: detail: type: string error: type: string login_url: type: string HomeMetricOption: type: object properties: type: type: string metric: type: string units: type: string required: - metric - type - units HomeOptions: type: object properties: machine_name: type: string year_list: type: array items: type: integer date_list: type: array items: type: array items: {} maxItems: 2 minItems: 2 metrics: type: array items: $ref: '#/components/schemas/HomeMetricOption' queues: type: array items: type: string states: type: array items: type: string required: - date_list - machine_name - metrics - queues - states - year_list HostPlotResponse: type: object properties: host: type: string plot_item: nullable: true plot_unavailable_reason: type: string nullable: true end_time__gte: type: string end_time__lte: type: string required: - end_time__gte - end_time__lte - host - plot_item InvalidateCacheRequestRequest: type: object properties: page_path: type: string minLength: 1 required: - page_path InvalidateCacheResponse: type: object properties: ok: type: boolean page_path: type: string deleted_keys: type: integer scanned_keys: type: integer matched_sample: type: array items: type: string truncated_scan: type: boolean required: - deleted_keys - ok - page_path JobDetailJob: type: object description: Job detail primary job_data row (extends list entry fields). properties: jid: type: string submit_time: type: string format: date-time nullable: true start_time: type: string format: date-time nullable: true end_time: type: string format: date-time nullable: true runtime: type: number format: double nullable: true timelimit: type: number format: double nullable: true node_hrs: type: number format: double nullable: true nhosts: type: integer nullable: true ncores: type: integer nullable: true username: type: string account: type: string nullable: true sample_count: type: integer nullable: true queue: type: string nullable: true state: type: string nullable: true QOS: type: string nullable: true jobname: type: string nullable: true host_list: type: array items: type: string performance: $ref: '#/components/schemas/JobPerformance' color: type: string derived_data_status: type: string client_url: type: string nullable: true server_url: type: string nullable: true required: - jid JobDetailResponse: type: object properties: job_data: $ref: '#/components/schemas/JobDetailJob' host_list: type: array items: type: string metrics_list: type: array items: $ref: '#/components/schemas/JobMetricRow' metrics: {} gpu: {} fsio: {} xalt_data: type: object additionalProperties: {} schema: type: object additionalProperties: {} proc_list: type: array items: type: string derived_data_status: type: string client_url: type: string nullable: true server_url: type: string nullable: true gpu_active: type: integer nullable: true gpu_utilization_max: type: number format: double nullable: true gpu_utilization_mean: type: number format: double nullable: true gpu_count: type: integer nullable: true multiprecision_cpu_plot_item: nullable: true multiprecision_cpu_unavailable_reason: type: string nullable: true multiprecision_gpu_plot_item: nullable: true multiprecision_gpu_unavailable_reason: type: string nullable: true staff_metrics_distinct_time_count: type: integer nullable: true staff_artifact_contract: $ref: '#/components/schemas/StaffArtifactContract' JobListAggregates: type: object properties: total_node_hours: type: number format: double queue_wait_mean_hours: type: number format: double JobListEntry: type: object properties: jid: type: string submit_time: type: string format: date-time nullable: true start_time: type: string format: date-time nullable: true end_time: type: string format: date-time nullable: true runtime: type: number format: double nullable: true timelimit: type: number format: double nullable: true node_hrs: type: number format: double nullable: true nhosts: type: integer nullable: true ncores: type: integer nullable: true username: type: string account: type: string nullable: true sample_count: type: integer nullable: true queue: type: string nullable: true state: type: string nullable: true QOS: type: string nullable: true jobname: type: string nullable: true host_list: type: array items: type: string performance: $ref: '#/components/schemas/JobPerformance' color: type: string required: - jid JobListFilterOptions: type: object properties: usernames: type: array items: type: string accounts: type: array items: type: string queues: type: array items: type: string states: type: array items: type: string performance_statuses: type: array items: $ref: '#/components/schemas/JobListPerformanceStatusOption' truncated: $ref: '#/components/schemas/JobListFilterOptionsTruncated' JobListFilterOptionsResponse: type: object properties: filter_options: allOf: - $ref: '#/components/schemas/JobListFilterOptions' nullable: true JobListFilterOptionsTruncated: type: object properties: usernames: type: boolean accounts: type: boolean queues: type: boolean states: type: boolean JobListHistogramBatchResponse: type: object description: Batch histogram envelope from job_list_histograms_batch. properties: nj: type: integer histogram_nj: type: integer histogram_sampled: type: boolean histograms: type: array items: $ref: '#/components/schemas/JobListHistogramResponse' JobListHistogramEnvelope: type: object description: Histogram metadata without embedded Bokeh plot_item payloads. properties: title: type: string metric: type: string queue: type: string unavailable_reason: type: string nullable: true JobListHistogramResponse: type: object description: Per-metric histogram envelope from job_list_histograms. properties: group: type: string metric: type: string nullable: true nj: type: integer histogram_nj: type: integer histogram_sampled: type: boolean title: type: string plot_item_thumb: nullable: true plot_item_full: nullable: true plot_unavailable_reason: type: string nullable: true JobListPagination: type: object properties: page: type: integer num_pages: type: integer has_previous: type: boolean has_next: type: boolean previous_page_number: type: integer nullable: true next_page_number: type: integer nullable: true JobListPerformanceStatusOption: type: object properties: sort_rank: type: integer label: type: string required: - label - sort_rank JobListResponse: type: object properties: nj: type: integer job_list: type: array items: $ref: '#/components/schemas/JobListEntry' filter_summary: type: array items: type: string filter_options: allOf: - $ref: '#/components/schemas/JobListFilterOptions' nullable: true histograms: type: object additionalProperties: $ref: '#/components/schemas/JobListHistogramEnvelope' aggregates: $ref: '#/components/schemas/JobListAggregates' pagination: $ref: '#/components/schemas/JobListPagination' qname: type: string order_by: type: string current_path: type: string nullable: true JobMetricRow: type: object description: One row from build_job_metrics_display_list (metrics_data catalog + value). properties: type: type: string metric: type: string units: type: string nullable: true value: type: number format: double nullable: true no_data_reason: type: string nullable: true JobMonitorGpuResponse: type: object description: Single-user GPU rollup or batch wrapper with ``results``. properties: username: type: string gpu_count_total: type: integer nullable: true gpu_active_total: type: integer nullable: true gpu_active_percentage: type: number format: double nullable: true has_data: type: boolean results: type: array items: $ref: '#/components/schemas/JobMonitorGpuRow' JobMonitorGpuRow: type: object properties: username: type: string gpu_count_total: type: integer nullable: true gpu_active_total: type: integer nullable: true gpu_active_percentage: type: number format: double nullable: true has_data: type: boolean JobMonitorResponse: type: object properties: window_days: type: integer start_time: type: string end_time: type: string results: type: array items: $ref: '#/components/schemas/JobMonitorRow' JobMonitorRow: type: object properties: username: type: string total_jobs: type: integer failed_jobs: type: integer failed_rate: type: number format: double timedout_jobs: type: integer timedout_rate: type: number format: double JobPerformance: type: object description: Job list performance column from job_list_performance.summarize_performance. properties: label: type: string tone: type: string aria_label: type: string sort_rank: type: integer JobPlotsResponse: type: object description: Legacy plot keys returned by job_plots (summary, roofline, GPU roofline). properties: mscript: type: string mdiv: type: string mplot_item: nullable: true mplot_unavailable_reason: type: string nullable: true rscript: type: string rdiv: type: string rplot_item: nullable: true rplot_unavailable_reason: type: string nullable: true grscript: type: string grdiv: type: string grplot_item: nullable: true grplot_unavailable_reason: type: string nullable: true status: type: string detail: type: string retry_after_seconds: type: integer loading_plots: type: array items: type: string progressive: type: boolean plot: type: string plot_item: nullable: true unavailable_reason: type: string nullable: true PublicClusterDashboard: type: object properties: status: type: string machine_name: type: string detail: type: string nullable: true retry_hint: type: string nullable: true schema_version: type: integer sections: $ref: '#/components/schemas/PublicDashboardSections' section: type: string grouping: type: string period_key: type: string block: $ref: '#/components/schemas/PublicExpansionFactorHistogramBlock' expansion_factors: type: object additionalProperties: {} monthly_metrics: type: array items: $ref: '#/components/schemas/PublicClusterMetricBlock' PublicClusterMetricBlock: type: object properties: title: type: string bokeh_histogram_json_item: nullable: true PublicDashboardExpansionFactorSection: type: object properties: monthly_period_keys: type: array items: type: string yearly_period_keys: type: array items: type: string monthly_daily_histograms: type: object additionalProperties: {} yearly_weekly_histograms: type: object additionalProperties: {} PublicDashboardSections: type: object properties: expansion_factor: $ref: '#/components/schemas/PublicDashboardExpansionFactorSection' PublicExpansionFactorHistogramBlock: type: object properties: scheduler_expansion_factor_daily_means_in_month_count: type: integer scheduler_expansion_factor_weekly_means_in_year_count: type: integer histogram_bin_edges: type: array items: {} histogram_counts: type: array items: {} expansion_factor_definition: type: string bokeh_histogram_json_item: nullable: true SacctIngestResponse: type: object properties: ok: type: boolean message: type: string detail: type: string SessionInfo: type: object properties: logged_in: type: boolean username: type: string is_staff: type: boolean machine_name: type: string required: - is_staff - logged_in - username StaffArtifactContract: type: object description: 'Staff Job Detail: runtime vs stored plot/detail artifact schema versions.' properties: current_plot: type: integer current_detail: type: integer db_plot: type: array items: type: integer db_detail: type: array items: type: integer required: - current_detail - current_plot - db_detail - db_plot TypeDetailResponse: type: object properties: type_name: type: string jobid: type: string tplot_item: nullable: true tplot_unavailable_reason: type: string nullable: true stats_data: type: array items: {} schema: type: array items: {} status: type: string UserApiKey: type: object properties: username: type: string raw_key: type: string nullable: true key_prefix: type: string required: - key_prefix - username securitySchemes: cookieAuth: type: apiKey in: cookie name: sessionid