The Manager is the operator control plane for the SAGRIS Open Data Cube. It is the single place to publish new Sentinel-1 imagery, keep the data layers consistent, and inspect the health of the platform. It does not reimplement the pipeline β it wraps the existing pipeline scripts (symlinks β metadata β index β catalog) behind a dashboard with a reconciliation engine, so every step is one click and every run is streamed live.
What this panel shows
The Overview is the landing page and a dashboard of the whole platform for the active profile (see Storage):
Essential tasks β shortcut cards to the most common workflows.
Pipeline stages β image counts β how many scenes exist at each stage of the chain (symlinks, previews, YAMLs, indexed). Gaps between stages tell you what still needs processing.
Service health β a quick status line for the platform's services.
The publishing pipeline at a glance
Data moves through the platform in a fixed order. Each stage has its own panel:
Storage β choose which disks and region you are working on (the profile).
Symlinks β link newly-arrived GeoTIFFs into the regional tree.
Previews β check which scenes still need PNG previews.
Metadata β generate the EO3 YAML file for each scene.
Indexing β register the YAMLs in the ODC STAC index and refresh the catalog.
Tip: If you just want to publish a day's worth of fresh data, you don't need to run those five panels by hand β use Operations β Publish new data, which chains them into a single run.
Choosing the region
The region selector in the top bar (europe / africa) and the active profile picker on the Storage panel together scope everything you do. Set them first β almost every other panel operates only on the active profile's disks, years, and base folder.
Reading the top bar
Element
Meaning
Region selector
The regional collection you are operating on.
Profile pill
The active storage profile (disks + base folder).
Connection badge
live = talking to the real backend; demo data = sample data only.
Identity pill
Who you are signed in as, your role, and sign-out.
Storage
The starting point for any session. This panel maps every NFS server and disk the platform can see, and lets you define profiles β the named selection of disks + region + base folder that scopes everything else you do in the Manager.
What this panel shows
The panel lists every disk on the configured NFS servers β including disks that aren't currently mounted β together with the number of symlinks pointing there. Disks are discovered live with showmount against each server, and the list always falls back to the canonical disk template, so it can never come up empty (the way it used to when nothing was mounted).
NFS servers to scan
The NFS servers to scan card lists the servers probed for shares. Add a server by name (e.g. x113, used in the /nfs/<name>/diskN paths) and an optional host (IP or hostname for showmount; defaults to the name). Save list & rescan persists it and re-probes. If the list is empty, it falls back to the SERVERS=() array in x101_links_v5.sh.
Profiles β the key concept
A profile ties together:
a selection of disks (which storage to scan),
a region (europe or africa),
a base folder β the regional collection root that holds the incoming/ and processed/ queues and the YAML tree.
Every other panel (Symlinks, Metadata, Indexing, Operationsβ¦) operates on the active profile only. The symlink manager scans just the profile's disks and enqueues newly-linked scenes into <base_folder>/incoming/ so the metadata step can pick them up.
Set the active profile
Pick a profile from Active profile. Its disks, region, and base folder become the scope for the whole app.
The profile summary appears next to the picker so you can confirm you're on the right collection.
Create or edit a profile
Click Refresh inventory to list the disks (mounted or not).
Tick the disks this profile should cover. Disks already claimed by another profile are shown greyed-out and labelled βin profile β¦β β a disk can belong to only one profile, so they can't be ticked.
Click Save selection as new⦠to create a profile from the ticked disks, or edit the active profile inline.
In the editor set the Region, Base folder (e.g. /opt/sagris_europe), and an optional Description.
Click Save changes.
Note: The profile Name is read-only in the editor. To rename, use Save selection as newβ¦ β this preserves the old profile rather than overwriting it.
Unmounted disks can be selected β they'll be mounted when the pipeline runs. Only disks owned by another profile are locked.
Controls
Control
What it does
Refresh inventory
Scans the NFS mount points and counts symlink targets.
Check all / Uncheck all
Bulk-toggle the disk checkboxes.
Active profile
Selects the profile that scopes the rest of the app.
Save selection as newβ¦
Creates a new profile from the ticked disks.
Save changes / Revert / Delete profile
Manage the active profile's region, base folder, and description.
Symlinks
Step 1 of the pipeline. This panel runs the symlink synchronisation (x101_links_v5.sh) for the active profile: it scans the NFS shares declared in the profile, refreshes or creates symlinks under the regional repository folder, and writes any newly-added scene names to <base_folder>/incoming/ so the Metadata step picks them up next.
Run this whenever new Sentinel-1 GeoTIFFs have landed on the NFS shares.
Step by step
Confirm the active profile is correct (set it on Storage). Its summary card appears at the top.
Leave Dry-run ticked for the first attempt β it counts what would change without touching the tree.
Under Years to process, pick one or more years. Use All, None, or Recent only as shortcuts. Each unchecked year is skipped entirely; symlinks already in place are left alone.
Click β³ Synchronise symlinks to run, or β‘ Fast scan for a quick current-year pass (see below).
Watch the streamed output in the console. The progress bar and status line update live.
When the dry-run looks right, untick Dry-run and run again for real.
Fast scan vs full synchronise
Button
When to use
β³ Synchronise symlinks
A full pass over the selected years β compares every scene. Use after a large or first-time ingest.
β‘ Fast scan
Current year only. Compares per-month TIF vs symlink totals and re-links only the months that differ, skipping the full-year stat walk. Ideal after a routine daily Sentinel-1 update.
Reading the results
The console streams the script output line by line; βΉ Stop halts a running job.
Years are discovered from /opt/sagris/S1/GRD/images/gtif/.
New scene base names are queued into <base_folder>/incoming/ for the metadata step.
Tip: Symlinks is the prerequisite for every later stage. The Previews, Metadata, and Indexing panels will refuse a year that has not been symlink-synced and send you back here with that year pre-selected.
Previews
Step 3 of the pipeline (read-only). This panel compares the symlinks in /opt/sagris/S1/GRD/images/gtif/ against the PNG previews and thumbnails in /opt/sagris/S1/GRD/images/pics/, and reports a year-by-month breakdown of how many scenes are still missing their pictures. Nothing on disk is modified.
Use it to find out exactly which calendar blocks an external preview-generation step needs to target.
Step by step
Confirm the active profile at the top.
Under Years to check, pick the years to scan (All / None / Recent only).
Click β³ Scan for missing pictures.
Read the per-month gap report that appears below the console.
Optionally click Export work order to save the list of missing scenes for the preview generator.
Reading the results
The output is a grid of year Γ month counts of scenes that have no preview yet.
The scan is read-only β it never creates or deletes pictures.
Dry-run here only controls whether the run is recorded in the Manager's memory; the comparison itself always runs.
Year chip markers
Marker
Meaning
β
This year has been preview-checked before in a real (recorded) run.
β
Only dry-runs have been recorded for this year.
Note: A year must be symlink-synced first (Symlinks). If it isn't, the preview scan is cancelled and the Symlinks tab opens with the missing year already checked.
Metadata (YAML generation)
Step 4 of the pipeline. This panel generates the EO3 YAML metadata file for each symlinked scene in the selected years (odc_s1_region_img_yaml.py). Each YAML references the symlink as its path and embeds the deterministic preview / thumbnail PNG URLs. The files land under <base_folder>/S1/GRD/images/yaml/{year}/{month}/.
A scene must have a YAML before it can be added to the index β this is what makes it a real ODC dataset.
Step by step
Confirm the active profile.
Keep Dry-run ticked first β the script counts the work without writing YAMLs.
Under Years to generate, choose the years (All / None / Recent only).
Click β³ Generate YAMLs, or click Verify consistency first for a fast, read-only comparison of symlinks vs existing YAMLs.
When the dry-run looks right, untick Dry-run and run for real.
Options
Option
Effect
Dry-run
Counts work, writes nothing.
Force regenerate
Rewrites existing YAMLs too (not just missing ones).
Workers
Number of parallel generation processes.
Verify consistency
Read-only: reports how many symlinks have no YAML, without running the generator.
Reading the results
The console streams progress per scene; the Verify consistency report shows the symlink-vs-YAML drift.
Behind the scenes the Manager queues each selected year into <base_folder>/incoming/manager_yaml_<year>_*.txt, then moves it to processed/ on success.
Note: Every selected year must be symlink-synced first (Symlinks).
Indexing
Step 5 β the final pipeline stage. This panel reconciles the on-disk YAML repository for the active profile with the ODC STAC index (odc_s1_img_index.py) and refreshes the Explorer catalog so the data goes live.
The sync runs in three phases:
Inject β adds new YAMLs to the index, and with Force re-indexes updated ones.
Cleanup β archives index rows whose YAML has been deleted from disk (stale-index drift).
Refresh β runs cubedash-gen --force-refresh so the changes surface in the STAC catalog immediately.
Step by step
Confirm the active profile.
Click Verify consistency first β a read-only count of what's missing, what's stale, and what's already in sync.
Keep Dry-run ticked, choose the Years to index, then click β³ Run all 3 steps to preview the work.
When it looks right, untick Dry-run and run again for real.
Per-phase buttons
For diagnosis or to re-run a single phase, use the individual buttons instead of Run all 3 steps:
Button
Phase
1. Analyze & clean index
Archives index rows whose YAML was removed from disk.
2. Validate & inject YAMLs
Adds new YAMLs (with Force, re-indexes updated ones).
3. Publish (refresh Explorer)
cubedash-gen --force-refresh --all β surfaces index changes in the catalog.
Options
Option
Effect
Dry-run
Counts work without touching the index.
Force re-index updated YAMLs
Re-indexes YAMLs that changed (inject phase only).
Verify consistency
Read-only drift report β run this before any real index change.
Year chip markers
Marker
Meaning
β
Indexed before in a real, recorded run.
β
Only dry-runs recorded.
Note: Each selected year must have YAML history (Metadata) first; otherwise the run is cancelled and the Metadata tab opens with the years pre-selected.
Operations
Composite workflows that chain several pipeline panels into a single button, so you don't have to run Symlinks β Metadata β Indexing by hand. Each preset uses the active profile and is scoped to the years you select.
Choose the years first
The Years to process selector at the top applies to all presets below. Restricting to the year(s) you care about (current year by default) keeps a run from re-validating the entire multi-year tree β that's the difference between a quick pass and a long one.
The presets
Publish new data Β· ~5β15 min
The full ingestion chain for fresh imagery. Use it after new data lands on the NFS shares.
Keep Dry-run ticked to preview, then run for real.
Validate consistency Β· ~1β2 min Β· read-only
A health check across every data layer for the active profile. Reports drift at the storage, preview, YAML, and index levels. Safe to run any time β it writes nothing.
Periodic cleanup of accumulated cruft. Deletes only β never creates. Removes malformed/broken symlinks, orphan YAMLs (no matching symlink), and stale index rows (no YAML on disk), then refreshes Explorer.
Restore / Ingest region Β· un-archive ~instant Β· ingest ~5β15 min
Brings a region's data back online. Un-archives any soft-deleted datasets (recovers an accidental mass-archive β dc.load and the data API see them again immediately), then refreshes Explorer/STAC. Tick Also ingest new TIFs to additionally run the full ingestion chain for unprocessed imagery. Use it after an accidental archive, or to publish a freshly-staged region (e.g. North Africa).
Keep Dry-run ticked to preview the counts first. Un-archiving is fully reversible.
One run at a time
Only one workflow can run per profile at a time. Clicking a preset while another mutation is in progress for the same profile returns immediately (HTTP 409) rather than risking a conflicting change. Watch the shared console for streamed output; βΉ Stop halts the run.
Downloads
Find Sentinel-1 acquisitions that exist on the Alaska Satellite Facility (ASF) archive but are missing locally, and export their download URLs as a work order. This panel is read-only β it discovers and compares, but never touches the ODC index or downloads anything itself.
The "processed" rule
A granule counts as processed only when both polarisations (VV and VH) are present as symlinks under /opt/sagris/S1/GRD/images/gtif/. If either is missing, the granule's download URL is added to the work-order list.
Step by step
Build a discovery batch: each row is one query scope β a saved region polygon (from Regions) plus a date range.
Click + Add region + period to add more rows.
Optionally tune the memory settings (see below).
Click β³ Discover & compare. Each ASF query auto-subdivides if it saturates; results are merged and diffed against the local tree.
When the run finishes, πΎ Save missing-URL listβ¦ becomes available β save it via the browser's Save As dialog and feed it to the downloader.
Memory layer
To avoid re-querying ASF for periods already confirmed complete:
Control
Effect
Use memory
Skips months recorded as in_sync within the freshness window. Drift cells are always re-checked.
freshness (h)
How recent an in_sync mark must be to be auto-skipped (default 24 h).
π Memory
View the memory layer's current cell state across all regions.
Note: The discovery walks each row's range month-by-month. Months that only partially intersect a row's range are queried but not written to memory.
Reading the results
The console streams the ASF discovery output.
The outcome is the count of granules found, how many are already local (both-pol), and the missing-URL list ready to save.
Coverage
Check how evenly imagery is distributed over time for a region. The panel produces a daily image-count grid for the selected year β one column per month, January through the latest month β so you can compare time-series consistency month-over-month and spot supply gaps (for example, an ASF outage).
Step by step
In Countries (multi-select), pick one or more country boundaries to count over.
Choose the Polarisation (VV / VH / HH / HV) β one polarisation is counted per acquisition.
Set the Year.
Click RUN.
Read the daily-coverage grid below. The summary line reports the totals.
What the counts mean
Each cell is the number of acquisitions on that day whose footprint intersects the selected country boundaries.
Counting one polarisation per acquisition avoids double-counting VV+VH pairs.
Sparse columns or empty stretches highlight gaps in the supply for that region.
Exporting
Button
Output
SAVE RESULTS
The coverage grid as a CSV file.
SAVE PICTURE
The grid rendered as a PNG image.
Regions
Build a region polygon (an area of interest) by selecting countries on a map. The selection is unioned, simplified, and saved as a region YAML that the Downloads panel can use immediately for ASF discovery.
Step by step
Under Build new region, click a country on the map to add it to the selection. Click again to remove it.
To pick a single piece of a country (an exclave or island such as Kaliningrad or Crimea), tick select individual parts first, then click the piece.
Adjust simplify tolerance (degrees) to trade detail for a smaller, faster polygon. The preview and stats update as you change it.
Give the region a name (and optional description).
Click πΎ Save region. Tick overwrite if exists if you are replacing one.
Existing regions
The Existing regions list at the top shows the regions already defined. Builder-made regions can be previewed on the map and edited (including refining an _asf outline's detail there) or deleted.
Note: Hand-drawn regions are protected β they appear in the list but are read-only here. The source YAML stays the source of truth; edit or delete those by touching the YAML files directly.
Controls
Control
What it does
Map click
Add / remove a country (or part, in part-mode) from the selection.
simplify tolerance
Polygon simplification in degrees β higher = coarser, smaller file.
select individual parts
Click selects a single polygon piece instead of the whole country.
Clear selection
Empties the current selection.
πΎ Save region
Saves the unioned, simplified polygon as a region YAML.
Maintenance & index operations
Direct ODC-index operations that sit outside the normal pipeline β for fixing index drift, archiving wrongly-indexed datasets, and restoring archived ones. Use this panel when the standard Indexing flow can't express what you need.
Why it's safe: Writes use a targeted SQL update paired with a cubedash force-refresh, and never go through ODC's add(), which would silently un-archive datasets.
Index health (read-only)
The top card is a read-only report of the current index state. Click β» Refresh to recompute it. Start here to understand what needs fixing before making any change.
Safe archive
Marks datasets in the index as archived (hidden from the catalog without deleting the files).
Choose the polarisation.
Optionally add an extra predicate to narrow the target β e.g. archive African footprints accidentally indexed into a Europe collection.
Click Plan archive to preview the generated SQL and the number of affected datasets β nothing is changed yet.
Review the impact line. When you're sure, tick commit and click Execute + force-refresh.
The mass-archive guard
The system refuses an archive that has no filter, or one that would touch more than 25% of active datasets. This guard exists because an over-broad archive previously took a whole product offline. Only tick allow mass-archive (override guard) when a large archive is genuinely intended.
Restore (un-archive)
The safe inverse of archive β brings archived datasets back into the catalog. Use it to recover from an archive that went too far.
Controls
Control
What it does
Plan archive
Previews the SQL + impact count. No write.
commit
Must be ticked for an archive to actually run.
allow mass-archive
Overrides the safety guard. Use with care.
Execute + force-refresh
Applies the change and refreshes the catalog.
Log Analyst
A read-only operations view over /opt/odcube/logs β service health, crash-loop detection, HTTP error rates, restart history, and pipeline run outcomes. It surfaces problems without you needing shell access to the server. Output is refreshed on demand (cached for up to 60 seconds) and access-log lines are redacted.
What each section shows
Service health
A status tile per platform service, with advisories below it flagging anything notable (a crash loop, a spike in errors, a recent restart). Click β» Refresh to re-scan.
Service detail
Pick a service from the dropdown to see its detail β recent activity, restart history, and error signal for that one service.
Pipeline runs
The outcomes of recent pipeline runs (the symlink / YAML / index jobs launched from the other panels), so you can confirm a publish actually succeeded.
Tail
View the most recent log lines for a chosen service:
Pick the service from the first dropdown.
Optionally filter by level (ERROR, CRITICAL, INFO, or all).
Click View.
How to use it
Start at Service health β green across the board means nothing needs attention.
If an advisory appears, open that service in Service detail, then use Tail filtered to ERROR to read the actual messages.
After running a publish from Operations or Indexing, check Pipeline runs to confirm the outcome.
Note: This panel only reads logs β it never restarts services or changes anything. It's safe to open at any time.