cluster

Infrastructure files for Nordgedanken and Midnightthoughts.
git clone git://archive.git.mtrnord.blog/MTRNord/cluster.git
Log | Files | Refs | README

commit 71d008ce0c1278e828acb167a003dd51cd0d188d
parent 097a2b0da30415f0ac0be1e500dc4d2635c42d43
Author: MTRNord <MTRNord@users.noreply.github.com>
Date:   Sat, 28 Mar 2026 01:36:52 +0100

ensure we dont spam external servers

Signed-off-by: MTRNord <MTRNord@users.noreply.github.com>

Diffstat:
Mapps/talos_cluster/k6-operator/cronjobs.yaml | 2+-
Mapps/talos_cluster/k6-operator/kustomization.yaml | 2+-
Mapps/talos_cluster/k6-operator/scripts/config.js | 10+++++-----
Mapps/talos_cluster/k6-operator/scripts/federation.js | 43++++++++++++++++++++++++-------------------
4 files changed, 31 insertions(+), 26 deletions(-)

diff --git a/apps/talos_cluster/k6-operator/cronjobs.yaml b/apps/talos_cluster/k6-operator/cronjobs.yaml @@ -3,7 +3,7 @@ # K6_PROMETHEUS_RW_STALE_MARKERS — marks stale series when the test ends # BASE_URL — connectivity-tester-stage internal cluster address # -# SERVER_NAMES is intentionally NOT set; config.js default (matrix.org,maunium.net,mtrnord.blog) is used. +# SERVER_NAMES is intentionally NOT set; config.js default (mtrnord.blog) is used. # # cleanup: "post" on every TestRun tells the operator to delete the TestRun object # after all pods complete, so stale objects don't accumulate even if the CronJob diff --git a/apps/talos_cluster/k6-operator/kustomization.yaml b/apps/talos_cluster/k6-operator/kustomization.yaml @@ -5,7 +5,7 @@ resources: - repository.yaml - release.yaml - rbac.yaml - #- cronjobs.yaml + - cronjobs.yaml # k6 test scripts — mounted by k6 runner pods in the matrix namespace configMapGenerator: - name: k6-scripts diff --git a/apps/talos_cluster/k6-operator/scripts/config.js b/apps/talos_cluster/k6-operator/scripts/config.js @@ -3,13 +3,13 @@ * * Override via environment variables: * BASE_URL=http://prod:8080 k6 run federation.js - * SERVER_NAMES=matrix.org,maunium.net k6 run federation.js + * SERVER_NAMES=mtrnord.blog k6 run federation.js */ -export const BASE_URL = __ENV.BASE_URL || 'http://localhost:8080'; +export const BASE_URL = __ENV.BASE_URL || "http://localhost:8080"; // Comma-separated list of Matrix server names to test against -export const SERVER_NAMES = (__ENV.SERVER_NAMES || 'matrix.org,maunium.net,mtrnord.blog').split(','); +export const SERVER_NAMES = (__ENV.SERVER_NAMES || "mtrnord.blog").split(","); /** Pick a random entry from an array */ export function randomItem(arr) { @@ -24,6 +24,6 @@ export function randomItem(arr) { * Adjust per-test as needed. */ export const DEFAULT_THRESHOLDS = { - http_req_failed: ['rate<0.05'], // fewer than 5% errors - http_req_duration: ['p(95)<10000'], // 95th percentile under 10s + http_req_failed: ["rate<0.05"], // fewer than 5% errors + http_req_duration: ["p(95)<10000"], // 95th percentile under 10s }; diff --git a/apps/talos_cluster/k6-operator/scripts/federation.js b/apps/talos_cluster/k6-operator/scripts/federation.js @@ -7,35 +7,40 @@ * * Run: * k6 run k6/federation.js - * BASE_URL=http://prod:8080 SERVER_NAMES=matrix.org,maunium.net k6 run k6/federation.js + * BASE_URL=http://prod:8080 SERVER_NAMES=mtrnord.blog k6 run k6/federation.js * * Tune VU counts and duration via env vars: * REPORT_VUS=3 OK_VUS=10 DURATION=120s k6 run k6/federation.js */ -import http from 'k6/http'; -import { check, sleep } from 'k6'; -import { BASE_URL, SERVER_NAMES, DEFAULT_THRESHOLDS, randomItem } from './config.js'; +import http from "k6/http"; +import { check, sleep } from "k6"; +import { + BASE_URL, + SERVER_NAMES, + DEFAULT_THRESHOLDS, + randomItem, +} from "./config.js"; -const REPORT_VUS = parseInt(__ENV.REPORT_VUS || '3', 10); -const OK_VUS = parseInt(__ENV.OK_VUS || '5', 10); -const DURATION = __ENV.DURATION || '60s'; +const REPORT_VUS = parseInt(__ENV.REPORT_VUS || "3", 10); +const OK_VUS = parseInt(__ENV.OK_VUS || "5", 10); +const DURATION = __ENV.DURATION || "60s"; export const options = { scenarios: { // Full federation report — expensive (does DNS + TLS + HTTP to external servers) federation_report: { - executor: 'constant-vus', + executor: "constant-vus", vus: REPORT_VUS, duration: DURATION, - exec: 'fullReport', + exec: "fullReport", }, // Lightweight status check — much cheaper federation_ok: { - executor: 'constant-vus', + executor: "constant-vus", vus: OK_VUS, duration: DURATION, - exec: 'federationOk', + exec: "federationOk", }, }, thresholds: DEFAULT_THRESHOLDS, @@ -45,13 +50,13 @@ export function fullReport() { const server = randomItem(SERVER_NAMES); const res = http.get( `${BASE_URL}/api/federation/report?server_name=${encodeURIComponent(server)}&stats_opt_in=false`, - { timeout: '30s' }, + { timeout: "30s" }, ); check(res, { - 'report: status 200': (r) => r.status === 200, - 'report: has FederationOK': (r) => { + "report: status 200": (r) => r.status === 200, + "report: has FederationOK": (r) => { try { - return typeof JSON.parse(r.body).FederationOK === 'boolean'; + return typeof JSON.parse(r.body).FederationOK === "boolean"; } catch { return false; } @@ -65,12 +70,12 @@ export function federationOk() { const server = randomItem(SERVER_NAMES); const res = http.get( `${BASE_URL}/api/federation/federation-ok?server_name=${encodeURIComponent(server)}`, - { timeout: '15s' }, + { timeout: "15s" }, ); check(res, { - 'federation-ok: status 200': (r) => r.status === 200, - 'federation-ok: GOOD or BAD': (r) => - r.body.trim() === 'GOOD' || r.body.trim() === 'BAD', + "federation-ok: status 200": (r) => r.status === 200, + "federation-ok: GOOD or BAD": (r) => + r.body.trim() === "GOOD" || r.body.trim() === "BAD", }); sleep(0.5); }