Commit graph

12 commits

Author SHA1 Message Date
a7d558f5c5
Publish a no-unsolicited-messages policy
All checks were successful
Build and Deploy to Production / test (push) Successful in 1m12s
Build and Deploy to Production / build (push) Successful in 1m8s
Build and Deploy to Production / deploy (push) Successful in 52s
The .xyz registry put the domain on serverHold after SURBL listed it in
its ABUSE list. SURBL only delists a site that links to a published
policy against advertising it by unsolicited messages, and a privacy
policy does not count.

Add the policy at /:locale/policy in all three languages, linked from
the footer and listed in the sitemap, and the same text in the README
so it can be read on GitHub while the domain does not resolve. Reports
go to the asxp.io contact form; the site itself has no email.

Assisted-by: Claude:opus-5-5
2026-10-20 23:35:09 +04:00
5e36cc6a95
Rank by operational sites; show what each status check probes
All checks were successful
Build and Deploy to Production / test (push) Successful in 16s
Build and Deploy to Production / build (push) Successful in 47s
Build and Deploy to Production / deploy (push) Successful in 32s
The datacenter text said "No. 33 by power" for a site that is 25th
on the default card, because it counted construction projects. Rank
among operational datacenters only, matching the card, and leave the
rank out for sites not yet in service. data.json and status.json gain
an operational_rank next to the list position.

The status page now lists, under each site, the hosts it probes with
their label, last result and the source that ties them to the site,
folded away behind a click; the control hosts in Russia get the same
list, and datacenter pages show it under their reachability block.
status.json carries the same targets.

For search: a keyword title tagline and meta description, WebPage and
Dataset structured data (pointing at status.json), x-default, and the
status pages in the sitemap.

Assisted-by: Claude:opus-5-5
2026-10-18 11:12:47 +04:00
7fb11211d7
status: don't call a site down if it never answered
All checks were successful
Build and Deploy to Production / test (push) Successful in 17s
Build and Deploy to Production / build (push) Successful in 48s
Build and Deploy to Production / deploy (push) Successful in 33s
DataLine NORD showed "not answering" from its first round. Its only
target, JustHost's "Moscow, DataLine" test IP, is listed but doesn't
answer from abroad at all, like most of JustHost's Russian test IPs
(only St Petersburg does). The control hosts sit on other networks, so
they couldn't flag it.

Mark a site down only if its targets answered at some point in the
24-hour window; one that never answered reads as unknown.

Assisted-by: Claude:opus-5-5
2026-10-18 10:43:20 +04:00
1a5506c77d
Add a public reachability status page
All checks were successful
Build and Deploy to Production / test (push) Successful in 18s
Build and Deploy to Production / build (push) Successful in 49s
Build and Deploy to Production / deploy (push) Successful in 33s
asxpio now probes public hosts tied to each datacenter once a minute
and stores 5-minute rows (bingo_monitor_* tables, granted to the
read-only bingo role). Show them: /:locale/status lists every monitored
site with its current state and a 24-hour bar, /status.json has the
same data, and monitored datacenter pages get a small block.

A site is down only when nothing answered for two buckets. Everything
reads as unknown when the worker is stale or fewer than half of the
control hosts in Russia answer, since probes run from Finland and
filtering can look like an outage. The page says plainly that this is
not an incident record.

Refresh test/schema.sql for asxpio's migration 017.

Assisted-by: Claude:opus-5-5
2026-10-18 10:33:52 +04:00
2fe297fce1
Rerun CI after the runner's nix image was pinned
All checks were successful
Build and Deploy to Production / test (push) Successful in 36s
Build and Deploy to Production / build (push) Successful in 1m1s
Build and Deploy to Production / deploy (push) Successful in 48s
The previous runs died on the runner, not in the code: its nix-store
volume no longer matched nixos/nix:latest. The runner now uses
nixos/nix:2.35.3 with a volume seeded from that image.

Assisted-by: Claude:opus-5-5
2026-10-18 09:40:52 +04:00
caaccfc3a4
Set nix options through NIX_CONFIG in CI
Some checks failed
Build and Deploy to Production / test (push) Failing after 11s
Build and Deploy to Production / build (push) Has been skipped
Build and Deploy to Production / deploy (push) Has been skipped
The runner mounts a persistent nix-store volume over /nix. The current
nixos/nix image makes /etc/nix/nix.conf a symlink into /nix/store, and
the volume does not hold that path, so the link dangles and appending
to it fails before checkout: "/etc/nix/nix.conf: No such file or
directory".

Pass the settings in NIX_CONFIG instead. Without a config file Nix also
falls back to build-users-group = nixbld, which the container lacks, so
set it empty and turn the sandbox off, as the image config does.

Assisted-by: Claude:opus-5-5
2026-10-18 09:34:38 +04:00
d5b8f77e5c
Add VK to the providers
Some checks failed
Build and Deploy to Production / test (push) Failing after 1m0s
Build and Deploy to Production / build (push) Has been skipped
Build and Deploy to Production / deploy (push) Has been skipped
Keep PROVIDERS in step with asxpio, which now has a vk slug for VK's
datacenter ИЦВА.

Assisted-by: Claude:opus-5-5
2026-10-18 09:31:27 +04:00
03355983b4
Add RSS and JSON feeds of incidents and an open dataset
All checks were successful
Build and Deploy to Production / test (push) Successful in 21s
Build and Deploy to Production / build (push) Successful in 49s
Build and Deploy to Production / deploy (push) Successful in 37s
Let readers and bots follow new incidents without polling the card:
/:locale/feed.xml (RSS 2.0) and /:locale/feed.json (JSON Feed 1.1),
the latest 50 incidents with stable IDs, advertised in the page head
and footer.

/data.json publishes every datacenter with its specs and sourced
incidents under CC BY 4.0, for journalists and OSINT reuse.

Assisted-by: Claude:opus-5
2026-10-12 05:31:26 +04:00
9c8606fbac
Read photos from the datacenterbingo-photos bucket
All checks were successful
Build and Deploy to Production / test (push) Successful in 17s
Build and Deploy to Production / build (push) Successful in 50s
Build and Deploy to Production / deploy (push) Successful in 36s
The photos moved out of asxpio's invoice bucket into their own (storage
repo); keys are unchanged.

Assisted-by: Claude:opus-5
2026-10-12 04:09:01 +04:00
9336a8a7d2
Link the source code on GitHub from the footer
All checks were successful
Build and Deploy to Production / test (push) Successful in 19s
Build and Deploy to Production / build (push) Successful in 49s
Build and Deploy to Production / deploy (push) Successful in 35s
The site now lives in a public repo; point readers at it in all three
languages. Both pages had the same footer, so it becomes one partial
(absorbing the credits partial).

Assisted-by: Claude:opus-5
2026-10-12 04:02:07 +04:00
5d082ba27a
Lock with bundler 2.7.2
All checks were successful
Build and Deploy to Production / test (push) Successful in 35s
Build and Deploy to Production / build (push) Successful in 52s
Build and Deploy to Production / deploy (push) Successful in 36s
The lockfile was generated with Ruby's bundled 2.6.9, so the CI shell's
bundler 2.7.2 refused to install and every gem was missing. Match the
version asxpio locks with.

Assisted-by: Claude:opus-5
2026-10-12 03:49:56 +04:00
062611fa21
Initial import of the public datacenter bingo site
Some checks failed
Build and Deploy to Production / test (push) Failing after 21s
Build and Deploy to Production / build (push) Has been skipped
Build and Deploy to Production / deploy (push) Has been skipped
The bingo card ran inside the asxpio container, dispatched by Host.
Give the public site its own repo, image and deploy so it can be
released and mirrored independently of asxp.io.

Editing stays in the asxp.io admin, which keeps owning the schema and
the photo pipeline; this app only reads the shared bingo tables and the
bingo/ photos, through a read-only DB role and MinIO user. Tests load a
snapshot of the asxpio-built schema (test/schema.sql).

Assisted-by: Claude:opus-5
2026-10-12 03:48:06 +04:00