Theme tokens for the slate surfaces and borders, the logo with the green Y, chart boxes at 16 px with the card shadow. Full figures with the unit in the subheader; every layer of the tabs transparent, so the site's charts sit as boxes in Firefox and Safari too. The Overview gets a Sites filter and the period's scope returns to the time charts (PD-25). The embedded frame can shrink again. A change to the image's inputs: Superset rebuilds on the next deploy. Bands: Superset. Rules: 2. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dashboards/
Superset dashboards as code and the operator scripts that import them. Not baked into the image, so changes here do not rebuild or restart Superset.
-
atoma/: ATOMA's two dashboards for the Petrolyst app (PD-12, PD-13; SPEC.md §10):overview(fleet totals) andsite(one site, its four sections as tabs), namedatoma-overviewandatoma-siteuntil 30 Oct. The app embeds them; admins open them in Superset, with the filter column.SPEC.mdis the design;build_bundle.pygenerates the import bundle andimport_bundle.pyimports it (overwriting the objects the bundle defines).Build and import:
docker cp atoma/import_bundle.py petrolyst-superset-1:/tmp/ docker exec petrolyst-superset-1 /app/.venv/bin/python /tmp/import_bundle.py --show-database python3 atoma/build_bundle.py --database-uuid <printed uuid> --out atoma-dashboards.zip docker cp atoma-dashboards.zip petrolyst-superset-1:/tmp/ docker exec petrolyst-superset-1 /app/.venv/bin/python /tmp/import_bundle.py /tmp/atoma-dashboards.zip --user <username>Exit status 2 means a dataset's columns differ from its view: regenerate
atoma/columns.tsv(command in its header), rebuild and import again.An import never deletes. Where they exist, delete these by hand after importing: the dashboards from before 28 Oct ("ATOMA - Sites", "ATOMA - Site Detail") and their charts M1, M3, M4 and M5; the ATOMA dashboard (slug
atoma, retired 29 Oct with PD-13) and its chart D0 "Site"; the one-tab dashboardsatoma-site-summary,-fuel,-runtimeand-baseline(replaced byatoma-siteon 29 Oct); and the role "ATOMA Reader".The dashboards get no role; the app shows them with guest passes (see "Embedding" in the parent README; local stack only). Add
--embedded-out FILE --embed-domain <app origin>to the import to make them embeddable from the app's origin; FILE then receives{slug: embedding id}for the Petrolyst server. The ids stay the same across imports. Local stack:docker exec fmdb-scratch-superset /app/.venv/bin/python /tmp/import_bundle.py /tmp/atoma-dashboards.zip \ --user admin --embedded-out /tmp/embedded-dashboards.json --embed-domain http://127.0.0.1:8098 docker cp fmdb-scratch-superset:/tmp/embedded-dashboards.json <Petrolyst>/.local/fmdb-scratch/
Export from a running instance (inside the container, as the server's deploy user):
docker exec petrolyst-superset-1 superset export-dashboards -f /tmp/dashboards.zip
docker cp petrolyst-superset-1:/tmp/dashboards.zip .
Import is the reverse with superset import-dashboards -p <zip> -u <username>. The
username must be an existing Superset user, which here means someone who has signed in
through Keycloak at least once.