Server Dashboard Guide

A complete walkthrough of every feature in the JobDistributor server dashboard — from creating your first jobs to downloading results and managing settings.

? Overview

The server dashboard is a web interface built into the job server container. It gives you a real-time view of everything happening in your experiment:

  • How many jobs are pending, running, done, or failed
  • Which workers are currently connected and what they are doing
  • Remote drain, stop, and resume for workers without SSH
  • Individual job parameters, status, and output files
  • Tools to create, edit, and manage the job queue
  • Configuration such as the dashboard PIN

The dashboard is served by the same Docker container as the job API. It is accessible through a public URL managed by the Hub — no VPN or special network setup is required.

1 Accessing the Dashboard

Finding the URL

Every experiment has a dedicated server dashboard URL. You can find it in two places:

  1. Hub Dashboard: Sign in to the Hub, click your experiment, and click Open Server Dashboard. The Hub will take you directly to the dashboard URL.
  2. Email notification: When your server comes online, JobDistributor sends an email containing a direct link to the dashboard.
ℹ️ The dashboard URL is only accessible while the server container is running. If the container is stopped, the URL returns a connection error. Start it with JD_API_KEY=jd_xxx ./run.sh <experiment-name>.

PIN authentication

The dashboard is protected by a 6-digit PIN to prevent unauthorized access. You will be prompted to enter it every time you open the dashboard in a new browser session.

There are three ways to manage the PIN:

🔢 View or reset PIN from the Hub

Go to Hub Dashboard → your experiment → Details. The current PIN is shown here. You can also set a new PIN from this page at any time without needing to know the old one. This is the easiest option if you have forgotten your PIN.

🔧 Update PIN from the server dashboard

While logged into the server dashboard, go to Settings → PIN. You can change the PIN here by entering your current PIN and choosing a new one. This option requires knowing the current PIN.

2 Statistics Bar

At the top of the dashboard, a row of summary cards gives you an instant overview of the current experiment state:

CardWhat it shows
Total Jobs Total number of jobs ever created for this experiment.
Pending Jobs waiting to be picked up by a worker. A high number here means workers are needed.
Running Jobs currently being executed by a worker. Each running job is held by one worker.
Done Jobs that completed successfully (your script exited with code 0).
Aborted Jobs where your script exited with a non-zero code, crashed, or timed out.

The statistics bar refreshes automatically every few seconds. You can use the Done / Total ratio to estimate progress at a glance.

Below job status, the sidebar also shows Workers (idle / busy counts) for processes that have polled the server recently. This is separate from the Running job count — see Worker Management.

3 Job Management

The Add Jobs section lets you populate the queue. The Job List section below it lets you inspect, filter, edit, and manage individual jobs.

Create jobs — Form mode

📋 Form-based job creation

The Form tab provides a graphical interface for defining a parameter grid. Each row represents one hyperparameter:

  1. Enter a parameter name (e.g., learning_rate).
  2. Add the values you want to test, separated by commas or one per field.
  3. Click + Add Parameter to add more rows.

The dashboard computes the total number of combinations (Cartesian product of all values) and shows a live preview of a few example jobs before you submit.

The Replace existing jobs checkbox determines behaviour on submission:

  • Checked: All existing PENDING jobs are deleted and replaced with the new set. Running and Done jobs are unaffected.
  • Unchecked (default): New jobs are appended to the existing queue.

Create jobs — JSON mode

{ } JSON-based job creation

The JSON tab accepts a plain JSON object where each key is a parameter name and each value is an array of options. The server generates all combinations automatically.

JSON
{
  "learning_rate": [0.001, 0.01, 0.1],
  "hidden_units":  [64, 128, 256],
  "dropout":       [0.0, 0.3, 0.5]
}

This creates 3 × 3 × 3 = 27 jobs, one per combination.

Format button: Automatically pretty-prints and re-indents your JSON.

Validate button: Checks the JSON for syntax errors and confirms the number of jobs that will be created before you submit.

Live preview: A sample of the first few generated jobs is shown below the editor so you can verify the combinations look correct.

The JSON tab is the most efficient method for large grids — you can paste a grid directly from your experiment notes or a script without clicking through individual form fields.

Viewing the job list

📄 Job list table

Below the Add Jobs section, every job is listed in a table with the following columns:

ColumnDescription
IDAuto-assigned integer job identifier. Jobs within the same experiment are numbered sequentially.
ParametersThe key-value pairs passed to your script as CLI arguments.
StatusPENDING, RUNNING, DONE, or ABORTED — colour-coded for easy scanning.
WorkerThe machine type and process ID of the worker currently handling (or last handled) this job.
Started / FinishedTimestamps for when the job was picked up and when it completed.
ActionsButtons to view details, edit (PENDING only), or delete the job.

Click on any row to expand the job detail view, which shows the full parameter list, stdout/stderr output, and any uploaded files.

Filtering and search

🔍 Filter bar

Use the filter bar above the job list to narrow the view:

  • Status filter: Buttons to show All, Pending, Running, Done, or Aborted jobs only.
  • Search: Type any text to filter jobs by parameter name or value. For example, typing 0.01 shows only jobs where any parameter equals 0.01.

Editing a pending job

✏️ Edit job parameters

Only PENDING jobs can be edited — jobs that have not yet been assigned to a worker. Once a worker picks up a job, it moves to RUNNING and can no longer be modified.

To edit a job:

  1. Find the job in the job list (use the filter to show PENDING jobs).
  2. Click the Edit button in the Actions column.
  3. Modify the parameter values in the edit form.
  4. Click Save. The change takes effect immediately.

Use this to correct a typo in a parameter value or adjust a combination before it runs — without having to delete and recreate the entire job set.

Deleting jobs

🗑️ Delete jobs

Only unassigned (PENDING) jobs can be deleted. Jobs that are currently RUNNING, DONE, or ABORTED cannot be deleted.

4 Results and File Downloads

📁 Per-job file storage

When your entry script calls jd_upload(file_path), the file is stored on the server and associated with that job. The server dashboard provides a direct interface for browsing and downloading these files.

To access uploaded files:

  1. Click on a job row in the job list to expand its detail view.
  2. Scroll to the Uploaded Files section.
  3. Click any filename to download it directly to your browser.
📋 Script output (stdout / stderr)

The last portion of your script's standard output and error output is captured and stored per job. It is visible in the job detail view under Output. This is particularly useful for diagnosing ABORTED jobs without needing to SSH into the worker machine.

For the full output of any job, check the worker log file on the machine where the job ran:

bash
~/jd_data/<exp_id>/jd_worker_logs/jd_worker_<process_id>.log

5 Worker Management

Use the top navigation bar to switch between Jobs (the job list and charts) and Workers Management. The sidebar on the Jobs view still shows live Idle and Busy counts for workers that polled within the last ~10 minutes.

🖥️ Workers Management tab

Open the Workers Management nav tab. Two sub-tabs:

  • Active Workers — currently polling; drain, stop, and resume are available.
  • Disabled / Stopped — workers that stopped polling (shutdown, crash, or network loss). Read-only: view details and history only.

Filter the table with three dropdowns at the top: Host, Instance, and Slot (parsed from each worker_id like gpunode_A3f9X2_0). Select a host to browse all workers on that machine; add instance and slot to narrow further.

Click Details on any row to open:

  • Info — host, instance, slot, job, poll times
  • History — audit trail (newest first): registration, jobs, dashboard commands, disable events
  • Metrics — latest system metrics (same view as jobs), plus snapshots from history when captured
🛑 Disabled workers (machine shutdown)

When a worker stops polling for ~10 minutes (machine powered off, process killed, network loss), the server moves it to Disabled / Stopped. A history entry records why. Disabled workers cannot receive dashboard commands; use Details to review their full audit trail and last known metrics. Restart workers on a live machine with jd_worker_cli — they register as new active workers.

⏸️ Resume, Drain, and Stop (active tab only)

Commands are queued on the server and delivered on each worker’s next poll (about every 3 minutes, or right after the current job finishes). They do not kill processes instantly from the browser.

ActionEffect
Resume Clear drain/stop — worker accepts new jobs again on next poll.
Drain Finish the current job, then exit — no new jobs assigned.
Stop Same as drain when busy; exit immediately when idle.

Use toolbar buttons for all workers, or per-worker buttons in the table. Precedence is stop > drain > run.

↩️ Cancel pending commands

After you queue drain or stop, the status badge shows queued … until the worker polls. If you clicked the wrong button, use Cancel (per worker, per host, or “Cancel all pending”) to revert before the command is applied.

Once applied, the worker must be started again from the cluster (jd_worker_cli) — the dashboard cannot restart processes on remote machines.

💡 For immediate local control on the worker machine, use jd_worker_cli expId=<id> stop … or drain. Dashboard control is best when you cannot SSH to every node.

6 Settings

The Settings page is accessible from the navigation bar inside the server dashboard. It provides configuration options for the running server instance.

🔑 Change dashboard PIN

You can update the 6-digit dashboard PIN from the Settings page. This requires entering your current PIN to authorize the change.

If you have forgotten the current PIN, go to the Hub Dashboard → experiment details to view and reset it from there (no current PIN required).

  1. Navigate to Settings in the dashboard nav.
  2. Enter your current PIN in the first field.
  3. Enter the new PIN twice to confirm.
  4. Click Update PIN.

The new PIN takes effect immediately. You will be asked to enter it the next time you open the dashboard in a new browser session.

⚠️ The server dashboard is publicly accessible via its Hub-provided URL. Always set a strong, unique PIN — especially if your experiment involves sensitive data or you are running the server on a shared network.