Analyse: alle Beendigungswege schalten den Messdienst ab (Kunde/Projekt weg, Domain, Löschfrist, Widerruf Wechsel)
Messdienst: POST /a/admin/sites/:key/off setzt active=0 und offSince einmalig; Portal-Client stopSite. analyse.js: endAnalyse als gemeinsamer Kern, endAnalyseForCustomer, analyseOnProjectChanged, analyseDisabled (Sperre/Löschfrist) und täglicher Abgleich runAnalyseReconcile (Projekt/Kunde weg, Domains nachziehen, K18-Wiederholung, Messdienst für off/disabled, fehlende Entfernen-Tickets nachholen). Entfernen-Ticket je Abschaltung gekennzeichnet (kein Doppelticket, auch wenn das Speichern der ID scheiterte). Hooks: Kunde löschen, updateWebsiteProject, withdrawOrder (Wechsel), siteFeatures.disable. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
fbc40252a3
commit
78170567b4
17 files changed
+616
-70
No files matched your search
@@ -60,3 +60,15 @@ test('Vertrag: putSite -> Ereignisse -> getStats -> heatToken -> deleteSite', as
|
||||
await assert.rejects(client.getStats(SITE, '7'), (e) => e.status === 404)
|
||||
assert.equal(db.prepare('SELECT COUNT(*) AS n FROM events_raw').get().n, 0)
|
||||
})
|
||||
|
||||
test('Vertrag: stopSite setzt active=0 und offSince, unbekannt zaehlt als erledigt', async () => {
|
||||
const KEY2 = 'fedcba9876543210fedc'
|
||||
await client.putSite(KEY2, { projectId: 'p2', domains: [DOMAIN], active: true })
|
||||
await client.stopSite(KEY2)
|
||||
const row = db.prepare('SELECT active, offSince FROM sites WHERE siteKey = ?').get(KEY2)
|
||||
assert.equal(row.active, 0)
|
||||
assert.ok(row.offSince)
|
||||
await client.stopSite(KEY2) // zweiter Aufruf aendert nichts
|
||||
assert.equal(db.prepare('SELECT offSince FROM sites WHERE siteKey = ?').get(KEY2).offSince, row.offSince)
|
||||
assert.deepEqual(await client.stopSite('00000000000000000000'), { ok: true, missing: true })
|
||||
})
|
||||
Reference in new issue
Block a user