runs-manager.exe is a local UI + API service (ASP.NET / Kestrel) for browsing run artifacts, coordinating local orchestration helpers, importing run datasets into your database, and exporting CI/CD aggregates from the same report tree.
Runs-Manager is local-only. Even if you bind a non-loopback URL via --urls, it rejects any request that does not originate from the local machine (loopback) with 403. Runs-Manager reports are available only on localhost. If you need report access on your network, contact us for a network-accessible deployment.
1. Local UI + Control API
Runs-Manager serves a browser UI and local APIs for inspecting results and managing local workflows. You can control its binding via standard ASP.NET hosting arguments:
- Default Binding:
http://127.0.0.1:5057
- Port Override:
runs-manager.exe --urls "http://127.0.0.1:8080"
- Main UI:
http://127.0.0.1:5057/UX/index.html
- Reports:
http://127.0.0.1:5057/UX/reports.html?WebLoadDir=<folder>
- Open UI: navigating to
/ redirects into the UX pages.
One report at a time: Runs-Manager handles one load result set at a time. Opening another report from a different browser tab or browser window may show inconsistent information in the UX, so keep one report session open per results folder.
2. Database Import Engine (The DevOps "One-Shot")
Designed for CI/CD pipelines, this mode ingests run datasets (TSV and snapshot metadata) into your database with a single command. Supported databases: mysql, mssql, oracle.
runs-manager.exe --noUX --ImportToDatabase `
--Database mysql `
--ConnectionString "server=localhost;user=root;password=...;database=fwl_results" `
--WebLoadDir "C:\Runs\run-001" `
--TableConflictPolicy FailAllOnAnyBlockedTable `
--RuntimeErrorPolicy StopOnFirstDatasetError
Import CLI Flags (Implemented)
| Flag |
Description |
--noUX | Runs the import in non-interactive mode (recommended for CI). |
--ImportToDatabase | Enables database import mode. |
--WebLoadDir <path> | Root folder of a run (the importer searches datasets recursively under this directory). |
--Database <mysql|mssql|oracle> | Selects the database provider. |
--ConnectionString <value> | Connection string for the target database. |
--TableConflictPolicy <value> | FailAllOnAnyBlockedTable or ContinueWithValidTables. |
--RuntimeErrorPolicy <value> | StopOnFirstDatasetError or ContinueOnDatasetError. |
--TableMappingsJSON <json> | Inline JSON object mapping dataset filename to table name (see example below). |
--SelectedDatasetsJSON <json> | Inline JSON array of dataset filenames to import (see example below). |
TableMappingsJSON Example
Map specific dataset filenames to your own table names. Any dataset not mapped uses a default FWL_<dataset> table name.
runs-manager.exe --noUX --ImportToDatabase `
--Database mysql `
--ConnectionString "server=localhost;user=root;password=...;database=fwl_results" `
--WebLoadDir "C:\Runs\run-001" `
--TableMappingsJSON "{\"http_report.tsv\":\"Production_Traffic_Logs\",\"steps_report.tsv\":\"QA_Test_Steps_Historical\"}"
SelectedDatasetsJSON Example
Import only a subset of datasets:
runs-manager.exe --noUX --ImportToDatabase `
--Database mysql `
--ConnectionString "server=localhost;user=root;password=...;database=fwl_results" `
--WebLoadDir "C:\Runs\run-001" `
--SelectedDatasetsJSON "[\"http_report.tsv\",\"steps_report.tsv\",\"js_errors.tsv\"]"
Default Tables Created (Expandable)
When you do not pass --SelectedDatasetsJSON, Runs-Manager attempts a default dataset set. For each dataset, it creates (or expects) a table named FWL_<dataset> unless overridden by --TableMappingsJSON.
UTC step timestamps: steps_report.tsv uses startUtc, an ISO-8601 UTC value (for example 2026-08-05T14:02:31.1230000Z). A newly created import table uses the normalized text column startutc. If you mapped this dataset to an existing table created from the former startTime schema, rename or recreate that empty table before importing; the importer intentionally blocks the schema mismatch.
Show default dataset tables
Note: Snapshot .meta datasets are imported as snapshot metadata tables (still prefixed with FWL_ by default).
FWL_http_report (from http_report.tsv)
FWL_http_grouped (from http_grouped.tsv)
FWL_steps_report (from steps_report.tsv)
FWL_sync_users_report (from sync_users_report.tsv)
FWL_step_execution_diagnostics (from step_execution_diagnostics.tsv)
FWL_http_timing_report (from http_timing_report.tsv)
FWL_step_vitals (from step_vitals.tsv)
FWL_navigation_vitals (from navigation_vitals.tsv)
FWL_browser_runtime_metrics (from browser_runtime_metrics.tsv)
FWL_host_runtime_metrics (from host_runtime_metrics.tsv)
FWL_js_errors (from js_errors.tsv)
FWL_file_uploads (from file_uploads.tsv)
FWL_downloads (from downloads.tsv)
FWL_url_alignment_report (from url_alignment_report.tsv)
FWL_snapshot_master (from snapshot_master.meta)
FWL_snapshot_tsv (from snapshot_tsv.meta)
FWL_snapshot_json (from snapshot_json.meta)
FWL_snapshot_txt (from snapshot_txt.meta)
FWL_snapshot_html (from snapshot_html.meta)
FWL_snapshot_image (from snapshot_image.meta)
FWL_snapshot_zip (from snapshot_zip.meta)
FWL_snapshot_other (from snapshot_other.meta)
Advanced Import Logic
| Option |
Description |
-TableConflictPolicy |
FailAllOnAnyBlockedTable: Aborts the entire import if any target table already exists or is locked. Safest for automated pipelines. |
-SelectedDatasetsJSON |
A JSON array of filenames (e.g., ["http_report.tsv", "js_errors.tsv"]) to limit the import scope. |
-RuntimeErrorPolicy |
StopOnFirstDatasetError: Ensures data integrity by halting the batch if any file fails to parse or insert. |
3. Auditability & Correlation
Every row imported into your database is enriched with metadata for easy correlation with CI/CD build IDs:
import_batch_id: A high-precision timestamp (yyyyMMddHHmmssfff) representing the ingestion session.
source_file_rel: Tracks exactly which shard or worker produced the data.
source_row_no: Enables deep-diving back to the original local TSV log for debugging.
User preferences: Runs-Manager user preferences are written under %LocalAppData%\FuturisticWebLoad\runs-manager\UserPreferences\.
4. Headless CICD Aggregate Export
Runs-Manager also exposes a headless CI/CD path that reads the existing report tree, computes aggregates, and emits machine-readable results for scripted checks.
- Primary switch:
--EmitAggregates
- Report root:
--ReportsRoot <path>
- Rules file:
--RulesFile <rules.json>
- Formats:
console, json, or tsv
- Optional outputs:
--OutFile, --Datasets, --MaxRows, --FailOnMatch, --FailOnViolation
If you do not pass --Format, Runs-Manager defaults to json.
The rules JSON is a small, versioned criteria file that tells Runs-Manager what to inspect and what to report. It is not a free-form query language. Each rule describes:
- Which dataset to inspect, such as
calls, steps, syncpoints, users, summary, or customReports.
- How to match rows, using patterns like URL, path, step name, run id, or custom field filters.
- Which aggregate to compute, such as
count, sum, avg, min, max, std, p50, p90, p95, or p99.
- How to compare the computed value against a threshold, using operators like
gt, gte, lt, lte, eq, neq, or between.
- What severity to use when a rule matches, such as
info, warn, or fail.
customReports rules are discovery rules with a few extra fields: reportNamePattern, scope (snapshot, run, runUser), mode (count, missing, histogram), expected (allUsers, allRuns, allSnapshots, count), valueSource (content, line, field), valueTransform (raw, normalize, hash), plus optional filters like matchRunIdPattern, matchSnapshotIdPattern, matchUserPattern, and optional flags like emitMissingUsers and emitHistogram. When valueSource is field, the rule can also set valueFieldName. expected controls the coverage shape: allUsers counts distinct run/user pairs, allRuns counts distinct runs, allSnapshots counts distinct snapshot instances, and count uses expectedCount when supplied or falls back to the number of matching candidates.
If the rules file is missing, the exporter can still run and emit a plain summary. If the rules file exists, the exporter evaluates the criteria and emits matching rule rows plus the summary envelope.
{
"version": 1,
"defaultAction": "allow",
"rules": [
{
"id": "invoice-p95-high",
"dataset": "calls",
"match": {
"urlPattern": ".*/invoice/.*"
},
"aggregate": {
"fn": "p95",
"field": "TotalMs"
},
"compare": {
"op": "gt",
"value": 1000
},
"severity": "fail",
"emit": true
}
]
}
Dataset mapping: calls comes from http_timing_report.tsv, steps comes from step-level reports such as step_execution_diagnostics.tsv and steps_report.tsv, syncpoints comes from sync_users_report.tsv, summary comes from summary report files such as http_report.tsv and steps_report.tsv, and customReports is used for snapshot-emitted custom report discovery.
runs-manager.exe --EmitAggregates `
--ReportsRoot "C:\Build\Run-42" `
--RulesFile "C:\Build\run-rules.json" `
--Format json `
--OutFile "C:\Build\run-42-aggregates.json"
This path does not start the UI and does not open a browser. It is meant for CI checks, scripted regression gates, and small machine-readable summaries from existing run artifacts.