ucs_monitor_run_status.pl
Usage Guide — UCS PnR Run Status Monitor
| Script | ucs_monitor_run_status.pl |
| Version | UCS-1.0.0 |
| Modified | 2026-04-14 |
| Purpose | Monitor PnR run status, extract QoR metrics, and generate HTML status reports |
| Support | tech@universalchipstudio.com |
Key Features
- Run Status Monitoring — Track EDA PnR and ECO flow stage completion, detect running/finished/hang/crash states
- QoR Extraction — Parse timing (WNS/TNS/Violations), routing (DRC/shorts/congestion), utilization, and clock QoR data from reports
- PnR + ECO Flow Support — Auto-detect PERSONALITY from tile.params; PnR uses FxSynthesize→FxReRoute, ECO uses FxApplyEco/FxEcoRoute/PtEcoRoute
- HTML + Excel Reporting — Outlook-optimized HTML (8 themes, flat/merge/split layouts) and XLSX with autofilter
- Multi-Run Comparison — Compare metrics across runs with color-coded diff, scenario name auto-simplification, hierarchical path group shortening
Quick Start
# Minimal — scan current directory, show run time summary
ucs_monitor_run_status.pl --monitor_item summary
# Full report with timing details, emailed to yourself
ucs_monitor_run_status.pl --base_dir /path/to/runs \
--metrics time timing routing \
--monitor_item summary timing \
--to your_userid
# Outlook-optimized with flat tables + Excel export
ucs_monitor_run_status.pl --base_dir /path/to/runs \
--monitor_item summary timing clock_qor \
--flat_table --excel
Input Sources
At least one input source is required. If none is specified, defaults to scanning the current working directory.
| Option | Type | Default | Description |
|---|---|---|---|
--base_dir | string | cwd (fallback) | Base directory to scan for run subdirectories. Each subdirectory containing a tile.params file is treated as a run. |
--run_list | string | — | Path to a text file listing run directories, one per line. |
--run | string | — | Explicit run directory path. repeatable |
--config_dir | string | — | Directory containing .conf config files. Each .conf file defines a separate monitoring job. Files with a corresponding .conf.done are skipped. |
--config_file | string | — | Path to a specific config file. repeatable |
base_dir, run_list, run, interval, config_dir, and config_file, which are always taken from the config file when present.
Filtering Options
| Option | Type | Default | Description |
|---|---|---|---|
--tiles | string | — | Include only these tile names. repeatable |
--skip_tiles | string | — | Exclude these tile names. repeatable |
--owner | string | — | Filter runs by PD_OWNER from tile.params. repeatable |
--stage | string | all stages | Limit detail timing/clock_qor to specific stages. Values: synthesize, place, cts, preoptcts, optcts, route, optroute, reroute, pretiming, routetiming, reroutetiming. repeatable |
--scenario | string | all | Include only scenarios matching this pattern (regex, case-insensitive). repeatable |
--no_scenario | string | _si |
Exclude scenarios matching this pattern (regex, case-insensitive). SI scenarios are excluded by default. Use --no_scenario "" to include them. repeatable |
--check | string | both |
Timing check type filter: setup, hold, or both. |
--select_group | string | all | Include only these timing path groups (regex). repeatable |
--ignore_groups | string | Design, DESIGN |
Exclude these timing path groups (regex). repeatable |
--ignore_io / --noignore_io | boolean | on |
Ignore IO path groups (io_to_flop, flop_to_io, io_to_io, etc.). |
--clocks | string | all | Filter clock QoR to specific clocks (regex). repeatable |
--slack_less_than | float | 0 |
Only show timing groups with WNS below this threshold. |
Metrics & Monitor Items
--metrics (Summary Table Columns)
Controls which metrics appear in the summary table. repeatable
| Value | What It Shows | Per Step |
|---|---|---|
time | Elapsed run time (hours), color-coded by status | FxSynthesize → FxReRoute + Total |
timing | Summary WNS values (setup_wns/hold_wns/total_wns) | Per applicable step |
routing | DRC violations/shorts/overflow or congestion % | Per applicable step |
utilization | Logic cell utilization % | Per applicable step |
clock_qor | Clock skew/latency summary (from clock_display file) | Per applicable step |
--monitor_item (Report Sections)
Controls which sections appear in the report. repeatable
| Value | What It Generates |
|---|---|
summary | Summary table with per-step metrics, disk usage, owner, run directory |
timing | Detail timing table with WNS/TNS/Violations per scenario/group, with optional diff |
clock_qor | Clock QoR table with skew, latency per scenario/clock |
notice | Notice/comment section from notice and comment files in run directories |
| Option | Type | Default | Description |
|---|---|---|---|
--qor | boolean | off | Enable QoR comparison using fc_shell compare_qor_data. Requires Fusion Compiler in PATH. |
--consider_hang | float | 2 |
Hours since last log modification before marking a running job as "hang". |
Output & Display Options
| Option | Type | Default | Description |
|---|---|---|---|
--merge_table | boolean | off | Merge all tiles into a single table instead of separate per-tile tables. |
--flat_table | boolean | off | Use flat table layout with no colspan/rowspan. Significantly faster Outlook rendering. Repeats all dimension values (tile, scenario, group) in every row. |
--compare | boolean | off | Show differences from the base run. Color-coded: green = improved, red = degraded. Base run is auto-detected or marked by a base_run file in the run directory. |
--excel | boolean | off | Export to Excel (.xlsx) with Summary, Detail Timing, and Clock QoR sheets. Flat layout with autofilter. Requires Excel::Writer::XLSX. |
--use_link | boolean | off | Use symbolic link names as run nicknames instead of NICKNAME from tile.params or qor_name. |
--color_scheme | string | default |
HTML color theme. Available: default, dark, minimalist, high_contrast, pastel, corporate, retro, monochrome. |
--logviewer_url | string | https://logviewer-atl.amd.com |
Base URL for log viewer hyperlinks in reports. |
Table Layout Options (Detail Timing & Clock QoR)
| Option | Default | Description |
|---|---|---|
--timing_style | run_stage_scenario_group |
Dimension order for timing table. Four tokens from: run, stage, scenario, group. |
--timing_mode | 2x2 |
Table pivot mode: NxM where N = column dimensions, M = row dimensions. E.g., 2x2 means first 2 tokens become column headers, last 2 become row labels. |
--clock_style | scenario_clock_stage_run |
Dimension order for clock QoR table. Four tokens from: scenario, clock, stage, run. |
--clock_mode | 2x2 |
Table pivot mode for clock QoR table. |
--timing_style run_stage_scenario_group --timing_mode 2x2, columns are run × stage and rows are scenario × group. With --timing_mode 1x3, columns would be run only, rows would be stage × scenario × group.
Path Group & Clock Name Display
Timing path groups and clock names can contain hierarchical instance paths with / separators (e.g., from Fusion Compiler instance-based grouping). To keep tables readable, only the last segment is displayed while the full path is preserved internally.
| Context | Behavior | Example |
|---|---|---|
| Internal processing | Full path preserved for filtering, sorting, comparison, hyperlinks | U_acp_core/U_dbg_client_ssb__aon_steer/I_dbg_client_v2_bc_steer/dbg_steer_muxf0_..._SSB_balance_INT_CLK |
| HTML & Excel display | Last segment after final / |
dbg_steer_muxf0_..._SSB_balance_INT_CLK |
Simple names (no /) |
Displayed as-is | ACLK, VDDCR_SOC_SMNCLK |
# Real example from acp_t tile: # Full internal path (used for data keys, filtering, link resolution): U_acp_core/U_dbg_client_ssb__aon_steer/I_dbg_client_v2_bc_steer/dbg_steer_muxf0_I_dbg_v2_client_ssb__aon_mux_lane0_SSB_balance_INT_CLK U_acp_core/U_dbg_client_ssb__aon_steer/I_dbg_client_v2_bc_steer/dbg_steer_muxf1_I_dbg_v2_client_ssb__aon_mux_lane1_SSB_balance_INT_CLK # Displayed in HTML table cell and Excel: dbg_steer_muxf0_I_dbg_v2_client_ssb__aon_mux_lane0_SSB_balance_INT_CLK dbg_steer_muxf1_I_dbg_v2_client_ssb__aon_mux_lane1_SSB_balance_INT_CLK # Simple groups (no hierarchy) — unchanged: ACLK VDDCR_SOC_SMNCLK
group and clock dimensions across all table formats (split, merge, flat) and Excel sheets (Detail_Timing, Clock_QoR). Filtering options (--select_group, --clocks, --ignore_groups) still match against the full internal path, so you can filter by any hierarchy level.
Email Options
| Option | Type | Default | Description |
|---|---|---|---|
--from | string | $USER |
Email sender address. |
--to | string | $USER |
Email recipient(s). repeatable |
--subject | string | — | Email subject line. "Run->Status" is appended automatically. |
--send_owner | boolean | off | Also send report to the PD_OWNER of each run. |
--interval | float | — | Continuous monitoring interval in hours. Script loops: generate report → send email → sleep → repeat. |
bgcolor attributes (no CSS <style> blocks) for faster Outlook rendering. Combined with --flat_table, this eliminates colspan/rowspan entirely.
Mirror Options
| Option | Type | Default | Description |
|---|---|---|---|
--mirror_dir | string | — | Root directory for mirrored artifacts. When set, selected files from each run directory are synced to a structured mirror layout, and all hyperlinks in HTML/email reports are automatically rewritten to point to the mirror paths. |
--mirror_slim | boolean | off | Enable slim mirror mode. For rpts/ and logs/, only files that are referenced as hyperlinks in the generated HTML report are synced. All other entries (tune/, tile.params, target.controls, override.params, override.controls, comment, notice, clock_display) are always synced in full. Requires --mirror_dir. |
Mirror Directory Layout
Each run is mirrored under mirror_dir/tile_name/nickname/, where the tile name comes from TILES_TO_RUN in tile.params and the nickname comes from qor_name or NICKNAME in tile.params.
mirror_dir/ ├── tile_A/ │ ├── baseline/ ← nickname from tile.params/qor_name │ │ ├── rpts/ │ │ │ ├── FxPixPlace/ │ │ │ ├── FxPixCts/ │ │ │ └── ... │ │ ├── logs/ │ │ │ ├── FxPlace.log.gz │ │ │ └── ... │ │ ├── tile.params │ │ ├── target.controls │ │ ├── comment │ │ └── notice │ └── exp_v2/ │ ├── rpts/ │ ├── logs/ │ └── ... ├── tile_B/ │ └── run1/ │ ├── rpts/ │ └── logs/ └── _map.json ← original ↔ mirror path mapping
Mirrored Entries Per Run
The following files and directories are synced from each original run directory to its mirror:
| Entry | Type | Content |
|---|---|---|
rpts/ | directory | QoR reports, timing reports, routing reports, PNGs |
logs/ | directory | Step log files (FxPlace.log.gz, FxCts.log.gz, etc.) |
tune/ | directory | Tuning data |
tile.params | file | Tile configuration (TILES_TO_RUN, NICKNAME, PD_OWNER) |
target.controls | file | Target control parameters |
override.params | file | Parameter overrides |
override.controls | file | Control overrides |
comment | file | Run comment text |
notice | file | Run notice text |
clock_display | file | Clock display configuration for summary |
Path Map (_map.json)
A JSON file at the mirror root records the mapping between mirror subdirectories and original run directories:
{
"tile_A/baseline": "/nfs/proj1/magnus/runs/run_v1",
"tile_A/exp_v2": "/nfs/proj2/runs/experiment_v2",
"tile_B/run1": "/scratch/user/tile_b_run1"
}
This file is updated on every run and is used internally for stale directory cleanup.
URL Rewriting
When --mirror_dir is active, all hyperlinks in the generated HTML report (log viewer links, report links, PNG links) are automatically rewritten to point to the mirror paths instead of the original run directories. This is a post-extraction pass — no changes to individual extract functions are needed.
# Without --mirror_dir: # link → https://logviewer-atl.amd.com/nfs/proj1/magnus/runs/run_v1/logs/FxPlace.log.gz # With --mirror_dir /web/status: # link → https://logviewer-atl.amd.com/web/status/tile_A/baseline/logs/FxPlace.log.gz
Incremental Sync
Mirror sync is incremental and efficient. Two strategies are used depending on availability:
Fast path — rsync delegation (preferred): At startup, the script probes for the rsync binary via which rsync. If found, each managed directory sync is delegated to rsync -a --delete src/ dst/, which transfers only changed files and removes stale ones. This is O(changed files) and handles all corner cases natively.
Fallback — Perl mtime guard: If rsync is not available, the script uses a per-directory mtime comparison before descending. On Linux, a directory's mtime advances only when entries are added or removed (not when file contents change in-place). If the source directory mtime matches the mirror directory mtime, the entire subtree is skipped without stat-ing individual files. After a sync pass, the mirror directory mtime is stamped to match the source.
- Unchanged files are skipped — per-file mtime + size comparison; only new/changed files are copied
- Original timestamps preserved — via
utime()after copy - Deleted source files and directories are removed from the mirror
logs/always fully rescanned — log files are appended in-place without updating the parent directory mtime; the mtime guard is bypassed forlogs/so every cycle checks each log file individually
Slim Mirror Mode (--mirror_slim)
By default, the full contents of rpts/ and logs/ are synced to the mirror. In projects with many report files or large compressed logs, this can copy far more data than the HTML report actually links to. Slim mirror mode addresses this by syncing only the files that are referenced as hyperlinks in the report.
Which entries are affected
| Entry | Slim mode behavior |
|---|---|
rpts/ | Only files whose paths appear as href links in the HTML report are synced |
logs/ | Only files whose paths appear as href links in the HTML report are synced |
tune/ | Always synced in full (same as full mode) |
tile.params, target.controls | Always synced |
override.params, override.controls | Always synced |
comment, notice, clock_display | Always synced |
Two-pass execution flow
Because the set of referenced files can only be determined after the HTML is generated, slim mode uses a different execution order compared to full mode:
| Step | Full mode | Slim mode |
|---|---|---|
| 1 | Sync mirror (full rpts/ + logs/) | Generate HTML using original run-dir paths |
| 2 | Rewrite tile_info URLs to mirror paths | Extract all href paths from HTML |
| 3 | Generate HTML using rewritten paths | Sync only referenced files to mirror |
| 4 | — | Rewrite HTML URL strings to mirror paths |
URL rewriting in slim mode is done as a string replacement pass over the final HTML: original run-directory path prefixes are replaced with their corresponding mirror paths (longest match first to avoid partial substitutions).
Enabling slim mode
Pass --mirror_slim on the CLI, or add mirror_slim = 1 to the config file:
# Example: slim mirror config base_dir = /path/to/project/runs mirror_dir = /web/status/myproject mirror_slim = 1 monitor_item = summary, timing metrics = time, timing
--mirror_slim has no effect unless --mirror_dir is also set. Files that are in the run directories but not linked in the HTML (e.g., intermediate debug reports, unused log steps) are not copied to the mirror in slim mode.
Stale Directory Cleanup
When a run is removed from monitoring (e.g., run directory deleted or no longer matched by filters), its mirror directory is automatically cleaned up:
- Previous
_map.jsonis read to identify previously mirrored runs - Any mirror subdirectory not in the current active set is removed
- Empty tile-level directories are cleaned up
Run 1: 3 runs monitored → mirror creates
tileA/baseline/, tileA/exp_v2/, tileB/run1/Run 2:
exp_v2 removed from monitoring → mirror deletes tileA/exp_v2/, updates remaining dirs (only changed files), writes new _map.jsonRun 3: New run
exp_v3 added → mirror creates tileA/exp_v3/, everything else unchanged
Nickname Collision Handling
If two runs for the same tile have identical nicknames (e.g., both called "baseline"), a numeric suffix is appended automatically: baseline, baseline_2, baseline_3, etc. Nicknames are also sanitized for filesystem safety (only a-z A-Z 0-9 . _ - allowed; other characters are replaced with _).
Mirror Usage Examples
# Mirror to a web-accessible directory
ucs_monitor_run_status.pl \
--base_dir /nfs/proj/runs \
--mirror_dir /web/status/myproject \
--monitor_item summary timing \
--metrics time timing
# Mirror with continuous monitoring (re-syncs every 8 hours)
ucs_monitor_run_status.pl \
--config_file project.conf \
--mirror_dir /web/status/daily \
--interval 8
# Mirror specific runs from different locations
ucs_monitor_run_status.pl \
--run /nfs/proj1/run_v1 --run /nfs/proj2/run_v2 \
--mirror_dir /web/mirror \
--monitor_item summary timing
Debug & Diagnostics
| Option | Type | Default | Description |
|---|---|---|---|
--debug | integer (0-4) | 0 (off) |
Debug verbosity level, gated by license authorization:1 = Flow-level (stage entry/exit, I/O summary)2 = Decision-level (branch decisions, filtering rationale)3 = Data-level (intermediate data dumps, fuller traces)4 = Deep-diagnosis (raw state snapshots, Dumper output)
|
--help / -h | flag | — | Show help and exit. |
Log file: Automatically created as ucs_monitor_run_status_<YYYYMMDD_HHMMSS>.log in the current directory. Contains timestamped entries with level, script name, stage, PID, user, and run ID.
ECO Flow Support
The script automatically detects the flow type from the PERSONALITY field in each run's tile.params and selects the appropriate stages.
| PERSONALITY | Flow | Summary Steps | Detail Timing Stages |
|---|---|---|---|
placenroute (default) |
PnR | FxSynthesize, FxPostFloorPlan, FxPlace, FxCts, FxOptCts, FxRoute, FxOptRoute, FxReRoute | PtPreTiming, FxSynthesize, FxPlace, FxCts, FxPreOptCts, FxOptCts, FxRoute, PtRoute, FxOptRoute, FxReRoute, PtReRoute |
eco |
ECO | FxApplyEco, FxEcoRoute | PtEcoRoute |
fcpnr or any other |
PnR | Treated as placenroute |
|
ECO Summary Metrics
| Step | run_time | timing | routing | utilization | clock_qor |
|---|---|---|---|---|---|
| FxApplyEco | shown | ignored | ignored | ignored | ignored |
| FxEcoRoute | shown | ignored | shown | ignored | ignored |
Mixed PnR + ECO Reports
When monitoring both PnR and ECO runs together, the summary table shows columns for both flow types. PnR runs display ---- under ECO columns and vice versa. The detail timing table only shows stages applicable to each run's personality.
# Mixed PnR + ECO monitoring
ucs_monitor_run_status.pl \
--run /proj/tiles/rel_NLD/tile_a/latest \
--run /proj/tiles/rel_ECO/tile_b/latest \
--metrics time routing --monitor_item summary timing
Scenario Name Simplification
Scenario names from Fusion Compiler and PrimeTime reports are automatically simplified for display. The full name is used internally for filtering and data processing.
| Source Format | Example Input | Simplified Display |
|---|---|---|
| Fusion setup | setup_tt0p9v100c_typrc100c_FuncTT0p9v |
setup_FuncTT0p9v |
| Fusion hold | hold_ffgnp1p05vm40c_rcworst_rcworstCCworst100c_FuncFFG1p05v |
hold_rcworstCCworst100c_FuncFFG1p05v |
| Fusion SI | hold_..._FuncFFG1p05v_si |
hold_rcworstCCworst100c_FuncFFG1p05v_si |
| PT setup (nosi) | FuncTT0p9vReRouteTyprc100cTT0P9V100CStp |
setup_FuncTT0p9v |
| PT setup (si) | FuncTT0p9vReRouteSxTyprc100cTT0P9V100CStp |
setup_FuncTT0p9v_si |
| PT hold (nosi) | FuncFFG1p05vReRouteRcworstCCworst100cFFGNP1P05VM40CHld |
hold_rcworstCCworst100c_FuncFFG1p05v |
| PT hold (si) | FuncFFG1p05vReRouteSxRcworstCCworst100cFFGNP1P05VM40CHld |
hold_rcworstCCworst100c_FuncFFG1p05v_si |
| ECO PT | FuncFFG1p05vEcoRouteTyprc100cFFGNP1P05VM40CStp |
setup_FuncFFG1p05v |
Sx between the stage name and RC corner indicate SI analysis. Fusion scenarios ending with _si are the same. Both produce a _si suffix in the simplified name, so SI and NOSI results appear as separate entries in the tables.
Config File Format (.conf)
Config files use key = value format. Lines starting with # are comments.
Array fields (comma or space separated): run, tiles, skip_tiles, owner, stage, ignore_groups, select_group, scenario, no_scenario, clocks, metrics, monitor_item, to
Scalar fields: all others (base_dir, check, subject, flat_table, etc.)
# Example: PnR monitoring config base_dir = /path/to/project/runs tiles = tile_a, tile_b metrics = time, timing, routing monitor_item = summary, timing, notice check = setup scenario = FuncTT, FuncFF to = johndoe teamlead subject = [MyProject] Daily Status flat_table = 1 excel = 1 compare = 1 # Mirror options (optional) mirror_dir = /web/status/myproject mirror_slim = 1 # sync only HTML-referenced files from rpts/ and logs/
# Example: Multiple explicit runs (space-separated) run = /proj/tiles/rel_NLD/tile_a/latest /proj/tiles/rel_NLD/tile_b/latest metrics = time, timing, routing monitor_item = summary, timing flat_table = 1
# Example: ECO monitoring run = /proj/tiles/rel_ECO/tile_a/latest /proj/tiles/rel_ECO/tile_b/latest metrics = time, routing monitor_item = summary, timing subject = [ECO] Daily Status
--config_dir /path/configs/, every .conf file in the directory is processed as a separate monitoring job. Create a .conf.done file next to a config to skip it.
Usage Examples
Basic Summary
ucs_monitor_run_status.pl --monitor_item summary
Scans current directory for runs, shows run time per step.
Full Report with Email
ucs_monitor_run_status.pl \
--base_dir /proj/magnus/runs \
--metrics time timing routing utilization \
--monitor_item summary timing notice \
--to pd_team \
--subject "[Magnus] Daily Status"
Outlook-Optimized with Excel
ucs_monitor_run_status.pl \
--base_dir /proj/runs \
--metrics time timing clock_qor \
--monitor_item summary timing clock_qor \
--flat_table --excel \
--to userid
Continuous Monitoring (every 8 hours)
ucs_monitor_run_status.pl \
--config_file /proj/configs/daily_check.conf \
--interval 8
Filtered Timing: Setup Only, Specific Scenarios
ucs_monitor_run_status.pl \
--base_dir /proj/runs \
--monitor_item timing \
--check setup \
--scenario FuncTT FuncFF \
--slack_less_than -0.01 \
--compare
Multi-Config Directory
ucs_monitor_run_status.pl \
--config_dir /proj/status_configs/ \
--flat_table --excel --debug 1
Specific Runs with Merge Table
ucs_monitor_run_status.pl \
--run /proj/run_v1 --run /proj/run_v2 --run /proj/run_v3 \
--metrics time timing \
--monitor_item summary timing \
--merge_table --compare \
--use_link
ECO Run Monitoring
ucs_monitor_run_status.pl \
--run /proj/tiles/rel_PRE_BTO_SOC/usbadp0_s0_t/latest \
--run /proj/tiles/rel_PRE_BTO_SOC/acp_t/latest \
--metrics time routing --monitor_item summary timing \
--flat_table --excel
Auto-detects PERSONALITY=eco from tile.params. Summary shows FxApplyEco (time) and FxEcoRoute (time+routing). Detail timing shows PtEcoRoute only.
Mixed PnR + ECO Comparison
ucs_monitor_run_status.pl \
--run /proj/tiles/rel_NLD/df_tcdxg_t/latest \
--run /proj/tiles/rel_ECO/usbadp0_s0_t/latest \
--metrics time timing routing \
--monitor_item summary timing \
--merge_table --flat_table --compare
Both PnR and ECO columns appear in the merged summary. Each run shows data only under its applicable stages.
Mirror Mode (Full Sync)
ucs_monitor_run_status.pl \
--base_dir /proj/runs \
--mirror_dir /web/mirror/proj \
--monitor_item summary timing \
--metrics time timing
Slim Mirror Mode (Referenced Files Only)
# Sync only the rpts/ and logs/ files actually linked in the HTML report.
# All other entries (tune/, tile.params, comment, notice, etc.) sync in full.
ucs_monitor_run_status.pl \
--base_dir /proj/runs \
--mirror_dir /web/mirror/proj \
--mirror_slim \
--monitor_item summary timing \
--metrics time timing
# Equivalent config file usage:
# mirror_dir = /web/mirror/proj
# mirror_slim = 1
# monitor_item = summary, timing
# metrics = time, timing
Slim mode is especially useful for projects with large rpts/ trees where only a fraction of reports are linked in the status HTML (e.g., only the final routing and timing summary reports).
Workflow Diagram
CLI / Config File
|
v
+------------------+
| Parse Arguments |
+------------------+
|
v
+------------------+
| License Check |
+------------------+
|
v
+------------------+ +-------------------+
| Load Configs |------>| Config Dir Scan |
| (CLI / files) | | (.conf files) |
+------------------+ +-------------------+
|
v (per config)
+------------------+
| Find Run Dirs | <-- base_dir / run_list / --run
+------------------+
|
v
+------------------+
| Extract Tile | <-- summary metrics, timing, clock_qor, notices
| Information |
+------------------+
|
+-- if --mirror_dir ----------------------------------------+
| |
| Full mode (default) Slim mode (--mirror_slim) |
| +------------------+ +------------------+ |
| | Mirror Sync | | Generate HTML | |
| | (full rpts/logs) | | (original paths) | |
| +------------------+ +------------------+ |
| | | |
| +------------------+ +------------------+ |
| | Rewrite URLs | | Extract href | |
| | in tile_info | | referenced files | |
| +------------------+ +------------------+ |
| | | |
| | +------------------+ |
| | | Mirror Sync | |
| | | (refs only + | |
| | | always entries) | |
| | +------------------+ |
| | | |
| v +------------------+ |
| +------------------+ | Rewrite HTML | |
| | Generate HTML | | URL strings | |
| +------------------+ +------------------+ |
| | | |
+----------+--------------+---------------+------------------+
|
v
Stale mirror cleanup (both modes)
|
v
+------------------+ +------------------+ +------------------+
| HTML Report | | Excel Report | | QoR via fc_shell |
| (web + email) | | (.xlsx) | | (if --qor) |
+------------------+ +------------------+ +------------------+
|
v
+------------------+
| Send Email | <-- if --to is set
+------------------+
|
v
+------------------+
| Sleep / Repeat | <-- if --interval
+------------------+
Output Files
| File | Location | Generated When |
|---|---|---|
run_time_report_<timestamp>.html |
$base_dir/status/run_time/ |
Always (web version with full CSS) |
ucs_monitor_run_status_<timestamp>.xlsx |
$base_dir/status/run_time/ |
When --excel is set |
ucs_monitor_run_status_<timestamp>.log |
Current working directory | Always |
$base_dir/status/<timestamp>/total_extract.tcl |
$base_dir/status/ |
When --qor is set |
_map.json |
$mirror_dir/ |
When --mirror_dir is set — maps mirror paths to original run directories |