From 457319e62716a3a4deab03796affaceee1f5fb85 Mon Sep 17 00:00:00 2001 From: hectorzhao Date: Sun, 6 Sep 2026 19:22:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=9E=E7=8E=B0=E5=8F=91=E9=80=81?= =?UTF-8?q?=E8=B4=A8=E9=87=8F=E7=9B=91=E6=8E=A7=E4=B8=8E=E6=8A=A5=E5=A4=87?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=B6=88=E6=81=AF=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migration.sql | 110 +++++ .../migration.sql | 73 +++ api/prisma/schema.prisma | 186 ++++++++ api/src/app.module.ts | 8 +- .../operations/admin-operations.controller.ts | 109 ++++- api/src/operations/operations.contracts.ts | 1 + .../operations/queries/messages.queries.ts | 81 +++- .../report-notifications.module.ts | 133 ++++++ .../report-notifications.spec.ts | 35 ++ .../send-chain/gateway-wire-timing.spec.ts | 23 + api/src/send-chain/send-chain.contracts.ts | 9 + .../send-chain/send-gateway-result.service.ts | 352 ++++++++------ api/src/send-chain/send-receipt.service.ts | 191 ++++---- api/src/sending-monitor-worker.ts | 201 ++++++++ api/src/sending-monitor/monitor-evaluation.ts | 333 ++++++++++++++ .../sending-monitor/monitor-metrics.spec.ts | 88 ++++ api/src/sending-monitor/monitor-metrics.ts | 147 ++++++ api/src/sending-monitor/monitor-projection.ts | 198 ++++++++ .../sending-monitor/sending-monitor.module.ts | 397 ++++++++++++++++ .../gateway-queue-messages.schema.json | 8 +- docs/production-deployment.md | 10 + .../01-industry-monitor.png | Bin 0 -> 181910 bytes .../01-industry-monitor.svg | 184 ++++++++ .../02-verification-monitor.png | Bin 0 -> 187503 bytes .../02-verification-monitor.svg | 180 ++++++++ .../03-overall-monitor.png | Bin 0 -> 194540 bytes .../03-overall-monitor.svg | 181 ++++++++ .../04-threshold-rules.png | Bin 0 -> 160216 bytes .../04-threshold-rules.svg | 137 ++++++ .../05-channel-enrollment.png | Bin 0 -> 128901 bytes .../05-channel-enrollment.svg | 82 ++++ .../06-alert-center-detail.png | Bin 0 -> 160825 bytes .../06-alert-center-detail.svg | 198 ++++++++ .../07-mobile-monitor.png | Bin 0 -> 63757 bytes .../07-mobile-monitor.svg | 60 +++ .../sending-monitor-20260906/README.md | 74 +++ .../render-prototypes.py | 318 +++++++++++++ ...report-readiness-notifications-20260906.md | 27 ++ .../sending-monitor-redesign-plan-20260906.md | 313 +++++++++++++ docs/system-functional-test-cases.md | 19 + docs/testing-progress.md | 13 + gateway/internal/queue/messages.go | 38 +- gateway/internal/upstream/submit.go | 42 +- gateway/internal/upstream/wire_timing_test.go | 36 ++ src/api/admin/operations.api.ts | 376 ++++++++++++--- src/apps/admin/AdminChannelsPage.tsx | 109 ++++- src/apps/admin/AdminMonitorPage.css | 123 +++++ src/apps/admin/AdminMonitorPage.tsx | 368 ++++++++++++--- src/apps/admin/AdminReportRecordsPage.tsx | 66 ++- src/apps/admin/AdminSmsRecordsPage.tsx | 77 +++- src/apps/admin/MonitorRuntimeOverview.tsx | 143 ++++++ .../MonitorConfiguration.test.tsx | 55 +++ .../sending-monitor/MonitorConfiguration.tsx | 430 ++++++++++++++++++ .../admin/sending-monitor/MonitorDetails.tsx | 337 ++++++++++++++ src/apps/admin/sending-monitor/monitorApi.ts | 138 ++++++ .../ReportNotificationsPage.test.tsx | 59 +++ .../ReportNotificationsPage.tsx | 216 +++++++++ .../report-notifications.css | 15 + src/layouts/AdminLayout.test.tsx | 10 +- src/layouts/AdminLayout.tsx | 33 +- src/layouts/AppShell.tsx | 15 + src/layouts/ClientLayout.tsx | 16 +- src/routes/AppRoutes.tsx | 5 + tools/deploy/production-deploy.sh | 31 +- tools/quality/css-ownership.json | 12 + tools/testing/verify-monitor-postgres.mjs | 252 ++++++++++ 66 files changed, 6992 insertions(+), 489 deletions(-) create mode 100644 api/prisma/migrations/20260906170000_report_readiness_notifications/migration.sql create mode 100644 api/prisma/migrations/20260906171000_sending_monitor/migration.sql create mode 100644 api/src/report-notifications/report-notifications.module.ts create mode 100644 api/src/report-notifications/report-notifications.spec.ts create mode 100644 api/src/send-chain/gateway-wire-timing.spec.ts create mode 100644 api/src/sending-monitor-worker.ts create mode 100644 api/src/sending-monitor/monitor-evaluation.ts create mode 100644 api/src/sending-monitor/monitor-metrics.spec.ts create mode 100644 api/src/sending-monitor/monitor-metrics.ts create mode 100644 api/src/sending-monitor/monitor-projection.ts create mode 100644 api/src/sending-monitor/sending-monitor.module.ts create mode 100644 docs/prototypes/sending-monitor-20260906/01-industry-monitor.png create mode 100644 docs/prototypes/sending-monitor-20260906/01-industry-monitor.svg create mode 100644 docs/prototypes/sending-monitor-20260906/02-verification-monitor.png create mode 100644 docs/prototypes/sending-monitor-20260906/02-verification-monitor.svg create mode 100644 docs/prototypes/sending-monitor-20260906/03-overall-monitor.png create mode 100644 docs/prototypes/sending-monitor-20260906/03-overall-monitor.svg create mode 100644 docs/prototypes/sending-monitor-20260906/04-threshold-rules.png create mode 100644 docs/prototypes/sending-monitor-20260906/04-threshold-rules.svg create mode 100644 docs/prototypes/sending-monitor-20260906/05-channel-enrollment.png create mode 100644 docs/prototypes/sending-monitor-20260906/05-channel-enrollment.svg create mode 100644 docs/prototypes/sending-monitor-20260906/06-alert-center-detail.png create mode 100644 docs/prototypes/sending-monitor-20260906/06-alert-center-detail.svg create mode 100644 docs/prototypes/sending-monitor-20260906/07-mobile-monitor.png create mode 100644 docs/prototypes/sending-monitor-20260906/07-mobile-monitor.svg create mode 100644 docs/prototypes/sending-monitor-20260906/README.md create mode 100644 docs/prototypes/sending-monitor-20260906/render-prototypes.py create mode 100644 docs/report-readiness-notifications-20260906.md create mode 100644 docs/sending-monitor-redesign-plan-20260906.md create mode 100644 gateway/internal/upstream/wire_timing_test.go create mode 100644 src/apps/admin/AdminMonitorPage.css create mode 100644 src/apps/admin/MonitorRuntimeOverview.tsx create mode 100644 src/apps/admin/sending-monitor/MonitorConfiguration.test.tsx create mode 100644 src/apps/admin/sending-monitor/MonitorConfiguration.tsx create mode 100644 src/apps/admin/sending-monitor/MonitorDetails.tsx create mode 100644 src/apps/admin/sending-monitor/monitorApi.ts create mode 100644 src/apps/report-notifications/ReportNotificationsPage.test.tsx create mode 100644 src/apps/report-notifications/ReportNotificationsPage.tsx create mode 100644 src/apps/report-notifications/report-notifications.css create mode 100644 tools/testing/verify-monitor-postgres.mjs diff --git a/api/prisma/migrations/20260906170000_report_readiness_notifications/migration.sql b/api/prisma/migrations/20260906170000_report_readiness_notifications/migration.sql new file mode 100644 index 0000000..59726d5 --- /dev/null +++ b/api/prisma/migrations/20260906170000_report_readiness_notifications/migration.sql @@ -0,0 +1,110 @@ +CREATE TABLE "ReportReadinessState" ( + "objectKey" TEXT PRIMARY KEY, "mask" INTEGER NOT NULL, "armed" BOOLEAN NOT NULL, + "cycle" INTEGER NOT NULL DEFAULT 0, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC') +); +CREATE TABLE "ReportNotificationHour" ( + "id" TEXT PRIMARY KEY, "tenantId" TEXT NOT NULL, "tenantName" TEXT NOT NULL, + "hour" TIMESTAMP(3) NOT NULL, "revision" INTEGER NOT NULL DEFAULT 1, + "signatureCount" INTEGER NOT NULL DEFAULT 0, "drainageCount" INTEGER NOT NULL DEFAULT 0, + "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC'), + UNIQUE ("tenantId", "hour") +); +CREATE INDEX "ReportNotificationHour_hour_idx" ON "ReportNotificationHour" ("hour" DESC); +CREATE TABLE "ReportReadinessEvent" ( + "id" TEXT PRIMARY KEY, "hourId" TEXT NOT NULL REFERENCES "ReportNotificationHour"("id"), + "objectKey" TEXT NOT NULL, "cycle" INTEGER NOT NULL, "tenantId" TEXT NOT NULL, + "reportType" TEXT NOT NULL, "signatureId" TEXT NOT NULL, "drainageItemId" TEXT, + "applicationId" TEXT, "applicationName" TEXT, "signatureName" TEXT NOT NULL, + "targetName" TEXT NOT NULL, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC'), + UNIQUE ("objectKey", "cycle") +); +CREATE INDEX "ReportReadinessEvent_hour_idx" ON "ReportReadinessEvent" ("hourId", "createdAt", "id"); +CREATE TABLE "ReportNotificationRead" ( + "userId" TEXT NOT NULL, "hourId" TEXT NOT NULL REFERENCES "ReportNotificationHour"("id"), + "revision" INTEGER NOT NULL, PRIMARY KEY ("userId", "hourId") +); + +CREATE FUNCTION cmpp_report_ready_mask(kind TEXT, signature_id TEXT, drainage_id TEXT) RETURNS INTEGER +LANGUAGE sql STABLE AS $$ + SELECT COALESCE(sum(bit),0)::integer FROM (VALUES ('mobile',1),('unicom',2),('telecom',4)) AS carriers(name,bit) + WHERE EXISTS ( + SELECT 1 FROM "SmsChannel" c + WHERE c.status='active' AND c."sendRegion"='全国' + AND (CASE WHEN cardinality(c.carriers)>0 THEN carriers.name=ANY(c.carriers) + ELSE c.carrier IN (carriers.name,'all') END) + AND (SELECT t.status FROM "ChannelSignatureReportTask" t + WHERE t."channelId"=c.id AND t."signatureId"=signature_id AND t."reportType"=kind + AND (kind='signature' OR t."drainageItemId"=drainage_id) + AND (t.carrier=carriers.name OR (t.carrier IS NULL AND t."approvalScope"='legacy_channel')) + ORDER BY (t.carrier=carriers.name) DESC NULLS LAST, t."updatedAt" DESC, t.id DESC LIMIT 1)='approved' + ); +$$; + +-- Seed only state. Existing successes must never become historical unread notices. +INSERT INTO "ReportReadinessState" ("objectKey",mask,armed) +SELECT 'signature:'||id, mask, mask=0 FROM "SmsSignature" s +CROSS JOIN LATERAL (SELECT cmpp_report_ready_mask('signature',s.id,NULL) AS mask) m; +INSERT INTO "ReportReadinessState" ("objectKey",mask,armed) +SELECT 'drainage:'||id, mask, mask=0 FROM "SmsDrainageInfo" d +CROSS JOIN LATERAL (SELECT cmpp_report_ready_mask('drainage',d."signatureId",d.id) AS mask) m; + +CREATE FUNCTION cmpp_report_readiness_before() RETURNS trigger LANGUAGE plpgsql AS $$ +DECLARE r "ChannelSignatureReportTask"; k TEXT; m INTEGER; +BEGIN + r := CASE WHEN TG_OP='DELETE' THEN OLD ELSE NEW END; + IF TG_OP='UPDATE' AND (OLD."signatureId",OLD."drainageItemId",OLD."reportType") IS DISTINCT FROM + (NEW."signatureId",NEW."drainageItemId",NEW."reportType") THEN + RAISE EXCEPTION 'Reporting task identity is immutable'; + END IF; + k := r."reportType"||':'||CASE WHEN r."reportType"='drainage' THEN r."drainageItemId" ELSE r."signatureId" END; + IF k IS NULL THEN RETURN r; END IF; + PERFORM pg_advisory_xact_lock(hashtextextended(k, 20260906)); + m := cmpp_report_ready_mask(r."reportType",r."signatureId",r."drainageItemId"); + INSERT INTO "ReportReadinessState" ("objectKey",mask,armed) VALUES(k,m,m=0) ON CONFLICT DO NOTHING; + -- A configuration change can remove eligibility without changing a reporting task. + UPDATE "ReportReadinessState" SET mask=m, armed=armed OR m=0 WHERE "objectKey"=k; + RETURN r; +END; +$$; +CREATE FUNCTION cmpp_report_readiness_after() RETURNS trigger LANGUAGE plpgsql AS $$ +DECLARE r "ChannelSignatureReportTask"; k TEXT; m INTEGER; st "ReportReadinessState"; + sig "SmsSignature"; tenant_name TEXT; app_name TEXT; target_name TEXT; + app_id TEXT; hour_value TIMESTAMP(3); hour_id TEXT; next_cycle INTEGER; +BEGIN + r := CASE WHEN TG_OP='DELETE' THEN OLD ELSE NEW END; + k := r."reportType"||':'||CASE WHEN r."reportType"='drainage' THEN r."drainageItemId" ELSE r."signatureId" END; + IF k IS NULL THEN RETURN r; END IF; + SELECT * INTO st FROM "ReportReadinessState" WHERE "objectKey"=k FOR UPDATE; + m := cmpp_report_ready_mask(r."reportType",r."signatureId",r."drainageItemId"); + IF m=7 AND st.armed THEN + SELECT * INTO sig FROM "SmsSignature" WHERE id=r."signatureId"; + IF sig.id IS NOT NULL THEN + SELECT name INTO tenant_name FROM "Tenant" WHERE id=sig."tenantId"; + app_id:=sig."applicationId"; target_name:=sig.name; + IF r."reportType"='drainage' THEN + SELECT COALESCE(d."applicationId",sig."applicationId"), d.url INTO app_id,target_name + FROM "SmsDrainageInfo" d WHERE id=r."drainageItemId"; + END IF; + SELECT name INTO app_name FROM "SmsApplication" WHERE id=app_id; + hour_value:=date_trunc('hour',timezone('UTC',statement_timestamp())); + hour_id:=md5(sig."tenantId"||':'||hour_value::text); + next_cycle:=st.cycle+1; + INSERT INTO "ReportNotificationHour" (id,"tenantId","tenantName",hour,"signatureCount","drainageCount") + VALUES(hour_id,sig."tenantId",tenant_name,hour_value,(r."reportType"='signature')::integer,(r."reportType"='drainage')::integer) + ON CONFLICT ("tenantId",hour) DO UPDATE SET revision="ReportNotificationHour".revision+1, + "signatureCount"="ReportNotificationHour"."signatureCount"+EXCLUDED."signatureCount", + "drainageCount"="ReportNotificationHour"."drainageCount"+EXCLUDED."drainageCount", + "updatedAt"=timezone('UTC',statement_timestamp()) RETURNING id INTO hour_id; + INSERT INTO "ReportReadinessEvent" (id,"hourId","objectKey",cycle,"tenantId","reportType","signatureId","drainageItemId","applicationId","applicationName","signatureName","targetName") + VALUES(md5(k||':'||next_cycle),hour_id,k,next_cycle,sig."tenantId",r."reportType",sig.id,r."drainageItemId",app_id,app_name,sig.name,target_name); + UPDATE "ReportReadinessState" SET cycle=next_cycle,armed=false WHERE "objectKey"=k; + END IF; + END IF; + UPDATE "ReportReadinessState" SET mask=m,armed=armed OR m=0,"updatedAt"=timezone('UTC',statement_timestamp()) WHERE "objectKey"=k; + RETURN r; +END; +$$; +CREATE TRIGGER report_readiness_before BEFORE INSERT OR UPDATE OR DELETE ON "ChannelSignatureReportTask" +FOR EACH ROW EXECUTE FUNCTION cmpp_report_readiness_before(); +CREATE TRIGGER report_readiness_after AFTER INSERT OR UPDATE OR DELETE ON "ChannelSignatureReportTask" +FOR EACH ROW EXECUTE FUNCTION cmpp_report_readiness_after(); diff --git a/api/prisma/migrations/20260906171000_sending_monitor/migration.sql b/api/prisma/migrations/20260906171000_sending_monitor/migration.sql new file mode 100644 index 0000000..7fd114c --- /dev/null +++ b/api/prisma/migrations/20260906171000_sending_monitor/migration.sql @@ -0,0 +1,73 @@ +ALTER TABLE "SmsSubmitRecord" ADD COLUMN "firstWireSubmitAt" TIMESTAMP(3), ADD COLUMN "wireTimeSource" TEXT; +ALTER TABLE "SmsMessageSegmentAudit" ADD COLUMN "firstWireSubmitAt" TIMESTAMP(3), ADD COLUMN "wireTimeSource" TEXT; +ALTER TABLE "UpstreamReceiptInbox" ADD COLUMN "gatewayReceivedAt" TIMESTAMP(3); +ALTER TABLE "SmsSubmitRecord" ADD COLUMN "receiptRequested" BOOLEAN; +ALTER TABLE "SmsMessageSegmentAudit" ADD COLUMN "receiptRequested" BOOLEAN; +CREATE INDEX "SmsSubmitRecord_monitor_updated_idx" ON "SmsSubmitRecord" ("updatedAt",id); +CREATE INDEX "SmsSubmitRecord_monitor_created_idx" ON "SmsSubmitRecord" ("createdAt",id); +CREATE INDEX "UpstreamReceiptInbox_monitor_updated_idx" ON "UpstreamReceiptInbox" ("updatedAt",id); +CREATE INDEX "UpstreamReceiptInbox_monitor_message_idx" ON "UpstreamReceiptInbox" ("matchedMessageRecordId","gatewayMessageId"); + +CREATE TABLE "SendingMonitorTarget" ( + "channelId" TEXT PRIMARY KEY, enabled BOOLEAN NOT NULL, version INTEGER NOT NULL, + "effectiveFrom" TIMESTAMP(3) NOT NULL, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC'), + "updatedBy" TEXT NOT NULL +); +CREATE TABLE "SendingMonitorTargetVersion" ( + "channelId" TEXT NOT NULL, version INTEGER NOT NULL, enabled BOOLEAN NOT NULL, + "effectiveFrom" TIMESTAMP(3) NOT NULL, "updatedBy" TEXT NOT NULL, + PRIMARY KEY("channelId",version) +); +CREATE TABLE "SendingMonitorRule" ( + id TEXT PRIMARY KEY, type TEXT NOT NULL, "scopeKey" TEXT NOT NULL, scope JSONB NOT NULL, + config JSONB NOT NULL, version INTEGER NOT NULL, "effectiveAt" TIMESTAMP(3) NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC'), "updatedBy" TEXT NOT NULL, + UNIQUE(type,"scopeKey") +); +CREATE TABLE "SendingMonitorRuleVersion" ( + "ruleId" TEXT NOT NULL, version INTEGER NOT NULL, type TEXT NOT NULL, scope JSONB NOT NULL, + config JSONB NOT NULL, "effectiveAt" TIMESTAMP(3) NOT NULL, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC'), + "createdBy" TEXT NOT NULL, PRIMARY KEY("ruleId",version) +); +CREATE INDEX "SendingMonitorRuleVersion_effective_idx" ON "SendingMonitorRuleVersion" (type,"effectiveAt"); +CREATE TABLE "SendingMonitorFact" ( + id TEXT PRIMARY KEY, kind TEXT NOT NULL, "sourceId" TEXT NOT NULL, "dimensionKey" TEXT NOT NULL, + "messageRecordId" TEXT REFERENCES "SmsMessageRecord"(id) ON DELETE SET NULL ON UPDATE CASCADE, + dimensions JSONB NOT NULL, "submittedAt" TIMESTAMP(3) NOT NULL, "successAt" TIMESTAMP(3), + verification BOOLEAN NOT NULL, reason TEXT, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC'), + UNIQUE(kind,"sourceId") +); +CREATE INDEX "SendingMonitorFact_window_idx" ON "SendingMonitorFact" (kind,"submittedAt","dimensionKey"); +CREATE INDEX "SendingMonitorFact_message_idx" ON "SendingMonitorFact" ("messageRecordId"); +CREATE TABLE "SendingMonitorMinute" ( + kind TEXT NOT NULL, "dimensionKey" TEXT NOT NULL, minute TIMESTAMP(3) NOT NULL, + verification BOOLEAN NOT NULL, dimensions JSONB NOT NULL, metrics JSONB NOT NULL, + "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC'), + PRIMARY KEY(kind,"dimensionKey",minute,verification) +); +CREATE INDEX "SendingMonitorMinute_window_idx" ON "SendingMonitorMinute" (kind,minute); +CREATE TABLE "SendingMonitorSnapshot" ( + id TEXT PRIMARY KEY, type TEXT NOT NULL, "dimensionKey" TEXT NOT NULL, dimensions JSONB NOT NULL, + "evaluationAt" TIMESTAMP(3) NOT NULL, "windowFrom" TIMESTAMP(3) NOT NULL, + "observedUntil" TIMESTAMP(3) NOT NULL, stage TEXT NOT NULL, revision INTEGER NOT NULL DEFAULT 1, + metrics JSONB NOT NULL, rule JSONB, status TEXT NOT NULL, completeness JSONB NOT NULL, + "computedAt" TIMESTAMP(3) NOT NULL DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC'), + UNIQUE(type,"dimensionKey","evaluationAt") +); +CREATE INDEX "SendingMonitorSnapshot_latest_idx" ON "SendingMonitorSnapshot" (type,"evaluationAt" DESC,status); +CREATE INDEX "SendingMonitorSnapshot_history_idx" ON "SendingMonitorSnapshot" (type,"dimensionKey","evaluationAt"); +CREATE TABLE "SendingMonitorAlert" ( + id TEXT PRIMARY KEY, type TEXT NOT NULL, "dimensionKey" TEXT NOT NULL, dimensions JSONB NOT NULL, + state TEXT NOT NULL, "openedAt" TIMESTAMP(3) NOT NULL, "lastEvaluatedAt" TIMESTAMP(3) NOT NULL, + "closedAt" TIMESTAMP(3), "closeReason" TEXT, "ruleKey" TEXT NOT NULL, + latest JSONB NOT NULL, worst JSONB NOT NULL, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC') +); +CREATE UNIQUE INDEX "SendingMonitorAlert_one_active_idx" ON "SendingMonitorAlert" (type,"dimensionKey") WHERE state='active'; +CREATE INDEX "SendingMonitorAlert_state_idx" ON "SendingMonitorAlert" (state,"openedAt" DESC); +CREATE TABLE "SendingMonitorAlertRead" ( + "alertId" TEXT NOT NULL, "userId" TEXT NOT NULL, "readAt" TIMESTAMP(3) NOT NULL DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC'), + PRIMARY KEY("alertId","userId") +); +CREATE TABLE "SendingMonitorCheckpoint" ( + id TEXT PRIMARY KEY, data JSONB NOT NULL, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC') +); diff --git a/api/prisma/schema.prisma b/api/prisma/schema.prisma index 2fe8558..6c3b65d 100644 --- a/api/prisma/schema.prisma +++ b/api/prisma/schema.prisma @@ -696,6 +696,56 @@ model HttpWebhookAttempt { @@unique([deliveryId, attemptNo]) } +model ReportReadinessState { + objectKey String @id + mask Int + armed Boolean + cycle Int @default(0) + updatedAt DateTime @default(dbgenerated("(CURRENT_TIMESTAMP AT TIME ZONE 'UTC')")) +} + +model ReportNotificationHour { + id String @id + tenantId String + tenantName String + hour DateTime + revision Int @default(1) + signatureCount Int @default(0) + drainageCount Int @default(0) + updatedAt DateTime @default(dbgenerated("(CURRENT_TIMESTAMP AT TIME ZONE 'UTC')")) + events ReportReadinessEvent[] + reads ReportNotificationRead[] + @@unique([tenantId, hour]) + @@index([hour(sort: Desc)], map: "ReportNotificationHour_hour_idx") +} + +model ReportReadinessEvent { + id String @id + hourId String + objectKey String + cycle Int + tenantId String + reportType String + signatureId String + drainageItemId String? + applicationId String? + applicationName String? + signatureName String + targetName String + createdAt DateTime @default(dbgenerated("(CURRENT_TIMESTAMP AT TIME ZONE 'UTC')")) + hour ReportNotificationHour @relation(fields: [hourId], references: [id], onDelete: NoAction, onUpdate: NoAction) + @@unique([objectKey, cycle]) + @@index([hourId, createdAt, id], map: "ReportReadinessEvent_hour_idx") +} + +model ReportNotificationRead { + userId String + hourId String + revision Int + hour ReportNotificationHour @relation(fields: [hourId], references: [id], onDelete: NoAction, onUpdate: NoAction) + @@id([userId, hourId]) +} + model SmsSignature { id String @id @default(cuid()) tenantId String @@ -1705,6 +1755,7 @@ model SmsApiRequest { } model SmsMessageRecord { + monitorFacts SendingMonitorFact[] id String @id @default(cuid()) tenantId String? batchTaskId String? @@ -1813,6 +1864,9 @@ model SmsSubmitRecord { errorCode String? errorMessage String? submittedAt DateTime? + firstWireSubmitAt DateTime? + wireTimeSource String? + receiptRequested Boolean? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@ -1832,6 +1886,8 @@ model SmsSubmitRecord { @@index([gatewayMessageId]) @@index([channelId, gatewayMessageId]) @@index([channelGroupId]) + @@index([updatedAt,id], map: "SmsSubmitRecord_monitor_updated_idx") + @@index([createdAt,id], map: "SmsSubmitRecord_monitor_created_idx") } model GatewaySubmitOutbox { @@ -1958,6 +2014,9 @@ model SmsMessageSegmentAudit { errorCode String? errorMessage String? submittedAt DateTime? + firstWireSubmitAt DateTime? + wireTimeSource String? + receiptRequested Boolean? deliveredAt DateTime? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@ -2339,6 +2398,7 @@ model UpstreamReceiptInbox { errorCode String? errorMessage String? deliveredAt DateTime + gatewayReceivedAt DateTime? receivedAt DateTime @default(now()) status String @default("pending") matchedMessageRecordId String? @@ -2355,6 +2415,8 @@ model UpstreamReceiptInbox { @@index([gatewayMessageId, phoneNumber]) @@index([incomingChannelId, receivedAt]) @@index([matchedMessageRecordId]) + @@index([updatedAt,id], map: "UpstreamReceiptInbox_monitor_updated_idx") + @@index([matchedMessageRecordId,gatewayMessageId], map: "UpstreamReceiptInbox_monitor_message_idx") } model GatewaySubmitDeadLetter { @@ -2563,3 +2625,127 @@ model InfrastructureAlertRead { @@unique([fingerprint, userId]) @@index([userId, readAt]) } + +model SendingMonitorTarget { + channelId String @id + enabled Boolean + version Int + effectiveFrom DateTime + updatedAt DateTime @default(dbgenerated("(CURRENT_TIMESTAMP AT TIME ZONE 'UTC')")) + updatedBy String +} + +model SendingMonitorRule { + id String @id + type String + scopeKey String + scope Json + config Json + version Int + effectiveAt DateTime + updatedAt DateTime @default(dbgenerated("(CURRENT_TIMESTAMP AT TIME ZONE 'UTC')")) + updatedBy String + @@unique([type,scopeKey]) +} + +model SendingMonitorRuleVersion { + ruleId String + version Int + type String + scope Json + config Json + effectiveAt DateTime + createdAt DateTime @default(dbgenerated("(CURRENT_TIMESTAMP AT TIME ZONE 'UTC')")) + createdBy String + @@id([ruleId,version]) + @@index([type,effectiveAt], map: "SendingMonitorRuleVersion_effective_idx") +} + +model SendingMonitorFact { + id String @id + kind String + sourceId String + messageRecordId String? + messageRecord SmsMessageRecord? @relation(fields: [messageRecordId], references: [id], onDelete: SetNull) + dimensionKey String + dimensions Json + submittedAt DateTime + successAt DateTime? + verification Boolean + reason String? + updatedAt DateTime @default(dbgenerated("(CURRENT_TIMESTAMP AT TIME ZONE 'UTC')")) + @@unique([kind,sourceId]) + @@index([messageRecordId], map: "SendingMonitorFact_message_idx") + @@index([kind,submittedAt,dimensionKey], map: "SendingMonitorFact_window_idx") +} + +model SendingMonitorMinute { + kind String + dimensionKey String + minute DateTime + verification Boolean + dimensions Json + metrics Json + updatedAt DateTime @default(dbgenerated("(CURRENT_TIMESTAMP AT TIME ZONE 'UTC')")) + @@id([kind,dimensionKey,minute,verification]) + @@index([kind,minute], map: "SendingMonitorMinute_window_idx") +} + +model SendingMonitorSnapshot { + id String @id + type String + dimensionKey String + dimensions Json + evaluationAt DateTime + windowFrom DateTime + observedUntil DateTime + stage String + revision Int @default(1) + metrics Json + rule Json? + status String + completeness Json + computedAt DateTime @default(dbgenerated("(CURRENT_TIMESTAMP AT TIME ZONE 'UTC')")) + @@unique([type,dimensionKey,evaluationAt]) + @@index([type,evaluationAt(sort: Desc),status], map: "SendingMonitorSnapshot_latest_idx") + @@index([type,dimensionKey,evaluationAt], map: "SendingMonitorSnapshot_history_idx") +} + +model SendingMonitorAlert { + id String @id + type String + dimensionKey String + dimensions Json + state String + openedAt DateTime + lastEvaluatedAt DateTime + closedAt DateTime? + closeReason String? + ruleKey String + latest Json + worst Json + updatedAt DateTime @default(dbgenerated("(CURRENT_TIMESTAMP AT TIME ZONE 'UTC')")) + @@index([state,openedAt(sort: Desc)], map: "SendingMonitorAlert_state_idx") +} + +model SendingMonitorAlertRead { + alertId String + userId String + readAt DateTime @default(dbgenerated("(CURRENT_TIMESTAMP AT TIME ZONE 'UTC')")) + @@id([alertId,userId]) +} + +model SendingMonitorCheckpoint { + id String @id + data Json + updatedAt DateTime @default(dbgenerated("(CURRENT_TIMESTAMP AT TIME ZONE 'UTC')")) +} + +model SendingMonitorTargetVersion { + channelId String + version Int + enabled Boolean + effectiveFrom DateTime @db.Timestamp(3) + updatedBy String + @@id([channelId,version]) +} diff --git a/api/src/app.module.ts b/api/src/app.module.ts index 4a54923..3c1287f 100644 --- a/api/src/app.module.ts +++ b/api/src/app.module.ts @@ -27,6 +27,8 @@ import { UsersModule } from './users/users.module'; import { SignatureRetirementModule } from './signature-retirement/signature-retirement.module'; import { SecurityDetectionModule } from './security-detection/security-detection.module'; import { MetricsModule } from './metrics/metrics.module'; +import { ReportNotificationsModule } from './report-notifications/report-notifications.module'; +import { SendingMonitorModule } from './sending-monitor/sending-monitor.module'; @Module({ imports: [ @@ -57,12 +59,16 @@ import { MetricsModule } from './metrics/metrics.module'; SignatureRetirementModule, SecurityDetectionModule, MetricsModule, + ReportNotificationsModule, + SendingMonitorModule, ], controllers: [HealthController], providers: [RequestContextMiddleware, SessionValidationMiddleware, ManualOperationAuditMiddleware], }) export class AppModule implements NestModule { configure(consumer: MiddlewareConsumer) { - consumer.apply(RequestContextMiddleware, SessionValidationMiddleware, ManualOperationAuditMiddleware).forRoutes('*'); + consumer + .apply(RequestContextMiddleware, SessionValidationMiddleware, ManualOperationAuditMiddleware) + .forRoutes('*'); } } diff --git a/api/src/operations/admin-operations.controller.ts b/api/src/operations/admin-operations.controller.ts index fece270..9899cba 100644 --- a/api/src/operations/admin-operations.controller.ts +++ b/api/src/operations/admin-operations.controller.ts @@ -46,8 +46,10 @@ export class AdminOperationsController { @Query('hasDrainage') hasDrainage?: string, @Query('page') page?: string, @Query('pageSize') pageSize?: string, + @Query('monitorSnapshotId') monitorSnapshotId?: string, ) { return this.operations.listMessagesPage({ + monitorSnapshotId, tenantId, applicationId, channelId, @@ -80,8 +82,10 @@ export class AdminOperationsController { @Query('status') status: string | undefined, @Query('hasDrainage') hasDrainage: string | undefined, @Res() response: DownloadResponse, + @Query('monitorSnapshotId') monitorSnapshotId?: string, ) { const exported = await this.operations.exportMessages({ + monitorSnapshotId, tenantId, applicationId, channelId, @@ -105,25 +109,37 @@ export class AdminOperationsController { } @Get('message-segment-audits') - messageSegmentAudits( - @Query('messageId') messageId?: string, - @Query('messageRecordId') messageRecordId?: string, - ) { + messageSegmentAudits(@Query('messageId') messageId?: string, @Query('messageRecordId') messageRecordId?: string) { return this.operations.listMessageSegmentAudits({ messageId, messageRecordId }); } @Get('uplink-messages') - listUplinkMessages(@Query('tenantId') tenantId?: string, @Query('channelId') channelId?: string, @Query('phoneNumber') phoneNumber?: string, @Query('keyword') keyword?: string, @Query('startTime') startTime?: string, @Query('endTime') endTime?: string, @Query('page') page?: string, @Query('pageSize') pageSize?: string) { + listUplinkMessages( + @Query('tenantId') tenantId?: string, + @Query('channelId') channelId?: string, + @Query('phoneNumber') phoneNumber?: string, + @Query('keyword') keyword?: string, + @Query('startTime') startTime?: string, + @Query('endTime') endTime?: string, + @Query('page') page?: string, + @Query('pageSize') pageSize?: string, + ) { return page || pageSize - ? this.operations.listUplinkMessagesPage({ tenantId, channelId, phoneNumber, keyword, startTime, endTime, page: Number(page), pageSize: Number(pageSize) }) + ? this.operations.listUplinkMessagesPage({ + tenantId, + channelId, + phoneNumber, + keyword, + startTime, + endTime, + page: Number(page), + pageSize: Number(pageSize), + }) : this.operations.listUplinkMessages({ tenantId, channelId, phoneNumber, keyword, startTime, endTime }); } @Post('uplink-messages/:id/claim') - claimUplinkMatchCandidate( - @Param('id') id: string, - @Body() body: { candidateId?: string; operatorId?: string }, - ) { + claimUplinkMatchCandidate(@Param('id') id: string, @Body() body: { candidateId?: string; operatorId?: string }) { return this.sendChain.claimUplinkMatchCandidate(id, String(body.candidateId ?? ''), body.operatorId); } @@ -231,10 +247,7 @@ export class AdminOperationsController { } @Post('gateway-submit-dead-letters/:id/resolve') - resolveGatewaySubmitDeadLetter( - @Param('id') id: string, - @CurrentSessionUserId() operatorId?: string, - ) { + resolveGatewaySubmitDeadLetter(@Param('id') id: string, @CurrentSessionUserId() operatorId?: string) { return this.sendChain.resolveGatewaySubmitDeadLetter(id, operatorId); } @@ -381,16 +394,23 @@ export class AdminOperationsController { @Body() body: { previewToken?: string; reason?: string; ratePerSecond?: number; consecutiveFailureLimit?: number }, @CurrentSessionUserId() operatorId?: string, ) { - return this.sendChain.createDownstreamRequeueTask({ - previewToken: body.previewToken ?? '', - reason: body.reason ?? '', - ratePerSecond: body.ratePerSecond, - consecutiveFailureLimit: body.consecutiveFailureLimit, - }, operatorId); + return this.sendChain.createDownstreamRequeueTask( + { + previewToken: body.previewToken ?? '', + reason: body.reason ?? '', + ratePerSecond: body.ratePerSecond, + consecutiveFailureLimit: body.consecutiveFailureLimit, + }, + operatorId, + ); } @Get('downstream-requeue-tasks') - listDownstreamRequeueTasks(@Query('status') status?: string, @Query('page') page?: string, @Query('pageSize') pageSize?: string) { + listDownstreamRequeueTasks( + @Query('status') status?: string, + @Query('page') page?: string, + @Query('pageSize') pageSize?: string, + ) { return this.sendChain.listDownstreamRequeueTasks({ status, page: Number(page), pageSize: Number(pageSize) }); } @@ -407,7 +427,12 @@ export class AdminOperationsController { @Query('page') page?: string, @Query('pageSize') pageSize?: string, ) { - return this.sendChain.listDownstreamRequeueTaskItems(id, { status, keyword, page: Number(page), pageSize: Number(pageSize) }); + return this.sendChain.listDownstreamRequeueTaskItems(id, { + status, + keyword, + page: Number(page), + pageSize: Number(pageSize), + }); } @Post('downstream-requeue-tasks/:id/:action') @@ -441,7 +466,18 @@ export class AdminSystemLogsController { @Query('page') page?: string, @Query('pageSize') pageSize?: string, ) { - return this.protocolLogs.list({ protocol, direction, eventType, status, keyword, range, createdAtFrom, createdAtTo, page: Number(page), pageSize: Number(pageSize) }); + return this.protocolLogs.list({ + protocol, + direction, + eventType, + status, + keyword, + range, + createdAtFrom, + createdAtTo, + page: Number(page), + pageSize: Number(pageSize), + }); } @Get() @@ -457,11 +493,34 @@ export class AdminSystemLogsController { @Query('page') page?: string, @Query('pageSize') pageSize?: string, ) { - return this.operations.systemLogs({ tenantId, userId, keyword, level, module, range, createdAtFrom, createdAtTo, page: Number(page), pageSize: Number(pageSize) }); + return this.operations.systemLogs({ + tenantId, + userId, + keyword, + level, + module, + range, + createdAtFrom, + createdAtTo, + page: Number(page), + pageSize: Number(pageSize), + }); } @Post('exports') - export(@Body() body: { tenantId?: string; userId?: string; keyword?: string; level?: string; module?: string; range?: string; createdAtFrom?: string; createdAtTo?: string }) { + export( + @Body() + body: { + tenantId?: string; + userId?: string; + keyword?: string; + level?: string; + module?: string; + range?: string; + createdAtFrom?: string; + createdAtTo?: string; + }, + ) { return this.operations.exportSystemLogs(body); } } diff --git a/api/src/operations/operations.contracts.ts b/api/src/operations/operations.contracts.ts index 6199232..831de63 100644 --- a/api/src/operations/operations.contracts.ts +++ b/api/src/operations/operations.contracts.ts @@ -1,6 +1,7 @@ // Stable controller/query contracts extracted in R2. export interface MessageQuery { + monitorSnapshotId?: string; tenantId?: string; applicationId?: string; channelId?: string; diff --git a/api/src/operations/queries/messages.queries.ts b/api/src/operations/queries/messages.queries.ts index add4f59..948c818 100644 --- a/api/src/operations/queries/messages.queries.ts +++ b/api/src/operations/queries/messages.queries.ts @@ -1,27 +1,32 @@ import { BadRequestException, NotFoundException } from '@nestjs/common'; -import { Prisma } from '@prisma/client'; -import { randomUUID } from 'node:crypto'; + import { moneyToNumber } from '../../common/money'; import { PrismaService } from '../../prisma/prisma.service'; -import type { MessageQuery, TraceQuery, OperationLogQuery, GatewaySubmitDeadLetterQuery, DownstreamDeliveryQuery, DownstreamDeliveryDashboardQuery, DownstreamRecoveryStatusQuery, MessageSegmentAuditQuery, SignatureQualityQuery } from '../operations.contracts'; -import { messageWhere, recognizedCarrierValues, carrierWhere, startOfShanghaiDay, endOfShanghaiDay, qualityBusinessDay, shanghaiDateKey, normalizeGroupBy, returnedTransactionWhere, createdAtRange, downstreamAlertPendingMinutes, downstreamAlertRecentFailedHours, downstreamAlertWindows, downstreamAlertWhere, stalledPendingWhere, downstreamDeliveryScopedWhere, parseDateBoundary, downstreamRecoveryStatusWhere, escapeCsvCell, formatCsvDate, formatExportTimestamp, clientApplicationView, clientReceiptView, clientMessageView, clientBatchTaskView, clientUplinkView, clientAccountView, clientRechargeView, summarizeMessageGroups, groupDownstreamByType, groupDownstreamByApplication, positiveInteger, operationLogLevelWhere, normalizeOperationLog, sanitizeGatewaySubmitException, redactGatewayCommandValue } from '../operations.helpers'; +import type { MessageQuery } from '../operations.contracts'; +import { + messageWhere, + escapeCsvCell, + formatExportTimestamp, + clientMessageView, + clientBatchTaskView, +} from '../operations.helpers'; -// R2 messages query domain. Method bodies are preserved byte-for-byte from the facade baseline. +// Message queries share the same bounded monitor sample filter for lists and exports. export class OperationsMessageQueries { constructor(private readonly prisma: PrismaService) {} -listBatchTasks(query: { tenantId?: string; status?: string }) { + listBatchTasks(query: { tenantId?: string; status?: string }) { return this.prisma.smsBatchTask.findMany({ where: { tenantId: query.tenantId, status: query.status, sourceType: 'client' }, include: { apiRequests: true }, orderBy: { createdAt: 'desc' }, }); } -async listClientBatchTasks(query: { tenantId?: string; status?: string }) { + async listClientBatchTasks(query: { tenantId?: string; status?: string }) { const items = await this.listBatchTasks(query); return items.map(clientBatchTaskView); } -listMessages(query: MessageQuery) { + listMessages(query: MessageQuery) { return this.prisma.smsMessageRecord.findMany({ where: messageWhere(query), include: { @@ -38,10 +43,34 @@ listMessages(query: MessageQuery) { orderBy: { queuedAt: 'desc' }, }); } -async listMessagesPage(query: MessageQuery) { + private async messageFilter(query: MessageQuery) { + const where = messageWhere(query); + if (query.monitorSnapshotId) { + const snapshot = await this.prisma.sendingMonitorSnapshot.findUnique({ where: { id: query.monitorSnapshotId } }); + if ( + !snapshot || + (query.tenantId && + (snapshot.dimensions as { tenantId?: string }).tenantId && + (snapshot.dimensions as { tenantId?: string }).tenantId !== query.tenantId) + ) + throw new NotFoundException('监控快照不存在'); + if (snapshot.windowFrom.getTime() < Date.now() - 72 * 3600000) + throw new BadRequestException('该窗口已超过72小时样本保留期,历史快照仍可查询'); + where.monitorFacts = { + some: { + kind: snapshot.type === 'industry' ? 'attempt' : 'business', + dimensionKey: snapshot.dimensionKey, + submittedAt: { gte: snapshot.windowFrom, lt: snapshot.evaluationAt }, + ...(snapshot.type === 'verification' ? { verification: true } : {}), + }, + }; + } + return where; + } + async listMessagesPage(query: MessageQuery) { const page = Math.max(1, Math.floor(Number(query.page) || 1)); const pageSize = Math.min(100, Math.max(1, Math.floor(Number(query.pageSize) || 25))); - const where = messageWhere(query); + const where = await this.messageFilter(query); const [items, total] = await Promise.all([ this.prisma.smsMessageRecord.findMany({ where, @@ -75,7 +104,7 @@ async listMessagesPage(query: MessageQuery) { return { items, total, page, pageSize }; } -async getMessage(id: string) { + async getMessage(id: string) { const item = await this.prisma.smsMessageRecord.findUnique({ where: { id }, include: { @@ -121,9 +150,10 @@ async getMessage(id: string) { if (!item) throw new NotFoundException('Message record not found'); return item; } -async exportMessages(query: MessageQuery) { + async exportMessages(query: MessageQuery) { + const where = await this.messageFilter(query); const items = await this.prisma.smsMessageRecord.findMany({ - where: messageWhere(query), + where, select: { messageId: true, queuedAt: true, @@ -144,7 +174,22 @@ async exportMessages(query: MessageQuery) { orderBy: [{ queuedAt: 'desc' }, { id: 'desc' }], }); const rows = [ - ['消息编号', '企业', '应用', '提交时间', '手机号', '地区', '运营商', '计费条数', '金额', '通道', '状态', '是否含引流', '回执时间', '短信内容'], + [ + '消息编号', + '企业', + '应用', + '提交时间', + '手机号', + '地区', + '运营商', + '计费条数', + '金额', + '通道', + '状态', + '是否含引流', + '回执时间', + '短信内容', + ], ...items.map((item) => [ item.messageId, item.tenant?.name ?? '', @@ -156,7 +201,9 @@ async exportMessages(query: MessageQuery) { String(item.billingUnits), String(moneyToNumber(item.amountCents)), item.channel?.name ?? '', - item.status === 'submit_failed' || ['rejected', 'timeout'].includes(item.submitStatus ?? '') ? 'submit_failed' : item.status, + item.status === 'submit_failed' || ['rejected', 'timeout'].includes(item.submitStatus ?? '') + ? 'submit_failed' + : item.status, item.hasDrainageContent === true ? '是' : item.hasDrainageContent === false ? '否' : '未检测', item.deliveredAt?.toISOString() ?? '', item.content, @@ -167,11 +214,11 @@ async exportMessages(query: MessageQuery) { content: rows.map((row) => row.map((cell) => escapeCsvCell(String(cell))).join(',')).join('\n'), }; } -async listClientMessages(query: MessageQuery) { + async listClientMessages(query: MessageQuery) { const items = await this.listMessages(query); return items.map(clientMessageView); } -async listClientMessagesPage(query: MessageQuery) { + async listClientMessagesPage(query: MessageQuery) { const result = await this.listMessagesPage(query); return { ...result, items: result.items.map(clientMessageView) }; } diff --git a/api/src/report-notifications/report-notifications.module.ts b/api/src/report-notifications/report-notifications.module.ts new file mode 100644 index 0000000..4fe65d3 --- /dev/null +++ b/api/src/report-notifications/report-notifications.module.ts @@ -0,0 +1,133 @@ +import { + BadRequestException, + Body, + Controller, + ForbiddenException, + Get, + Injectable, + Module, + NotFoundException, + Param, + Post, + Query, + Req, +} from '@nestjs/common'; +import { Prisma } from '@prisma/client'; +import { PrismaService } from '../prisma/prisma.service'; +import { PrismaModule } from '../prisma/prisma.module'; +import type { SessionRequest } from '../auth/session-validation.middleware'; + +export function positivePage(value: unknown, fallback: number, max = 100000) { + if (value === undefined) return fallback; + const n = Number(value); + if (!Number.isSafeInteger(n) || n < 1 || n > max) throw new BadRequestException('页码、条数或版本无效'); + return n; +} + +@Injectable() +export class ReportNotificationsService { + constructor(private readonly prisma: PrismaService) {} + + async scope(req: SessionRequest) { + if (!req.sessionUserId) throw new ForbiddenException('请先登录'); + if (req.authSession?.portal === 'client' && req.sessionTenantId) return req.sessionTenantId; + const admin = + req.authSession?.portal === 'admin' && + (await this.prisma.user.findFirst({ + where: { + id: req.sessionUserId, + status: 'active', + deletedAt: null, + roles: { some: { role: { code: 'platform_admin' } } }, + }, + select: { id: true }, + })); + if (!admin) throw new ForbiddenException('无消息查看权限'); + return null; + } + + async list(req: SessionRequest, query: { page?: string; pageSize?: string; unread?: string }) { + const tenant = await this.scope(req); + const page = positivePage(query.page, 1); + const pageSize = positivePage(query.pageSize, 20, 100); + const filter = Prisma.sql`WHERE (${tenant}::text IS NULL OR h."tenantId"=${tenant}) + AND (${query.unread === 'true'}=false OR COALESCE(r.revision,0) { + const items = await tx.$queryRaw>>(Prisma.sql` + SELECT h.*,COALESCE(r.revision,0)>(Prisma.sql` + SELECT count(*)::integer AS total FROM "ReportNotificationHour" h + LEFT JOIN "ReportNotificationRead" r ON r."hourId"=h.id AND r."userId"=${req.sessionUserId!} ${filter}`); + return { items, total: counts[0].total, page, pageSize }; + }, + { isolationLevel: 'RepeatableRead' }, + ); + } + + async hour(req: SessionRequest, id: string) { + const tenantId = await this.scope(req); + const item = await this.prisma.reportNotificationHour.findFirst({ + where: { id, ...(tenantId ? { tenantId } : {}) }, + }); + if (!item) throw new NotFoundException('消息不存在'); + return item; + } + + async detail(req: SessionRequest, id: string, query: { page?: string; pageSize?: string }) { + const hour = await this.hour(req, id); + const page = positivePage(query.page, 1), + pageSize = positivePage(query.pageSize, 20, 100); + const [items, total] = await this.prisma.$transaction([ + this.prisma.reportReadinessEvent.findMany({ + where: { hourId: id }, + orderBy: [{ createdAt: 'desc' }, { id: 'desc' }], + skip: (page - 1) * pageSize, + take: pageSize, + }), + this.prisma.reportReadinessEvent.count({ where: { hourId: id } }), + ]); + return { hour, items, total, page, pageSize }; + } + + async read(req: SessionRequest, id: string, revision: unknown) { + const hour = await this.hour(req, id); + const version = positivePage(revision, 0, 2147483647); + if (!version || version > hour.revision) throw new BadRequestException('消息版本无效,请刷新'); + await this.prisma.$executeRaw`INSERT INTO "ReportNotificationRead" ("userId","hourId",revision) + VALUES (${req.sessionUserId!},${id},${version}) ON CONFLICT ("userId","hourId") + DO UPDATE SET revision=GREATEST("ReportNotificationRead".revision,EXCLUDED.revision)`; + return { success: true }; + } +} + +@Controller(['admin/report-notifications', 'client/report-notifications']) +class ReportNotificationsController { + constructor(private readonly service: ReportNotificationsService) {} + @Get() list(@Req() req: SessionRequest, @Query() query: { page?: string; pageSize?: string; unread?: string }) { + return this.service.list(req, query); + } + @Get('summary') async summary(@Req() req: SessionRequest) { + const result = await this.service.list(req, { pageSize: '1', unread: 'true' }); + return { count: result.total }; + } + @Get(':id') detail( + @Req() req: SessionRequest, + @Param('id') id: string, + @Query() query: { page?: string; pageSize?: string }, + ) { + return this.service.detail(req, id, query); + } + @Post(':id/read') read(@Req() req: SessionRequest, @Param('id') id: string, @Body() body: { revision?: unknown }) { + return this.service.read(req, id, body?.revision); + } +} + +@Module({ + imports: [PrismaModule], + controllers: [ReportNotificationsController], + providers: [ReportNotificationsService], +}) +export class ReportNotificationsModule {} diff --git a/api/src/report-notifications/report-notifications.spec.ts b/api/src/report-notifications/report-notifications.spec.ts new file mode 100644 index 0000000..4c7f37d --- /dev/null +++ b/api/src/report-notifications/report-notifications.spec.ts @@ -0,0 +1,35 @@ +import { ReportNotificationsService, positivePage } from './report-notifications.module'; +import type { PrismaService } from '../prisma/prisma.service'; +import type { SessionRequest } from '../auth/session-validation.middleware'; + +describe('report notification access and read versions', () => { + const db = { reportNotificationHour: { findFirst: jest.fn() }, $executeRaw: jest.fn() }; + const service = new ReportNotificationsService(db as unknown as PrismaService); + const req = { + sessionUserId: 'reader', + sessionTenantId: 'tenant-a', + authSession: { portal: 'client' }, + } as SessionRequest; + beforeEach(() => jest.clearAllMocks()); + it('rejects anonymous access', async () => { + await expect(service.scope({} as SessionRequest)).rejects.toThrow('请先登录'); + }); + it('uses the session tenant and hides inaccessible hours', async () => { + db.reportNotificationHour.findFirst.mockResolvedValue(null); + await expect(service.hour(req, 'tenant-b-hour')).rejects.toThrow('消息不存在'); + expect(db.reportNotificationHour.findFirst).toHaveBeenCalledWith({ + where: { id: 'tenant-b-hour', tenantId: 'tenant-a' }, + }); + }); + it('rejects future read revisions without writing and accepts a displayed older revision', async () => { + db.reportNotificationHour.findFirst.mockResolvedValue({ id: 'hour', revision: 4 }); + await expect(service.read(req, 'hour', 5)).rejects.toThrow('消息版本无效'); + expect(db.$executeRaw).not.toHaveBeenCalled(); + await expect(service.read(req, 'hour', 3)).resolves.toEqual({ success: true }); + expect(db.$executeRaw).toHaveBeenCalledTimes(1); + }); + it('bounds pages and rejects fractional or zero values', () => { + for (const value of ['0', '-1', '1.5', '101', 'NaN']) expect(() => positivePage(value, 20, 100)).toThrow(); + expect(positivePage(undefined, 20, 100)).toBe(20); + }); +}); diff --git a/api/src/send-chain/gateway-wire-timing.spec.ts b/api/src/send-chain/gateway-wire-timing.spec.ts new file mode 100644 index 0000000..627052a --- /dev/null +++ b/api/src/send-chain/gateway-wire-timing.spec.ts @@ -0,0 +1,23 @@ +import { wireTiming } from './send-gateway-result.service'; +describe('Gateway wire timing compatibility', () => { + it('does not invent timestamps for old events or pre-write failures', () => { + expect(wireTiming({})).toEqual({}); + expect(wireTiming({ wireTimeSource: 'not_written', receiptRequested: true })).toEqual({ + wireTimeSource: 'not_written', + receiptRequested: true, + }); + }); + it('preserves the earliest actual time when replaying aggregate results', () => { + const prior = new Date('2026-09-06T04:00:00Z'); + expect( + wireTiming( + { firstWireSubmitAt: '2026-09-06T04:00:05Z', wireTimeSource: 'gateway_write_complete', receiptRequested: true }, + prior, + ).firstWireSubmitAt, + ).toEqual(prior); + }); + it('rejects invalid dates and unverified sources', () => { + expect(() => wireTiming({ firstWireSubmitAt: 'invalid', wireTimeSource: 'gateway_write_complete' })).toThrow(); + expect(() => wireTiming({ firstWireSubmitAt: '2026-09-06T04:00:00Z', wireTimeSource: 'response_time' })).toThrow(); + }); +}); diff --git a/api/src/send-chain/send-chain.contracts.ts b/api/src/send-chain/send-chain.contracts.ts index 0c163d5..155309d 100644 --- a/api/src/send-chain/send-chain.contracts.ts +++ b/api/src/send-chain/send-chain.contracts.ts @@ -70,6 +70,9 @@ export interface GatewaySubmitResultDto { errorCode?: string; errorMessage?: string; submittedAt?: string; + firstWireSubmitAt?: string; + wireTimeSource?: string; + receiptRequested?: boolean; segments?: Array<{ segmentTotal?: number; segmentIndex?: number; @@ -79,6 +82,9 @@ export interface GatewaySubmitResultDto { errorCode?: string; errorMessage?: string; submittedAt?: string; + firstWireSubmitAt?: string; + wireTimeSource?: string; + receiptRequested?: boolean; }>; } @@ -96,6 +102,9 @@ export interface GatewaySubmitSegmentResultDto { errorCode?: string; errorMessage?: string; submittedAt?: string; + firstWireSubmitAt?: string; + wireTimeSource?: string; + receiptRequested?: boolean; } export interface GatewayReceiptEventDto { diff --git a/api/src/send-chain/send-gateway-result.service.ts b/api/src/send-chain/send-gateway-result.service.ts index c8b9763..e825bb2 100644 --- a/api/src/send-chain/send-gateway-result.service.ts +++ b/api/src/send-chain/send-gateway-result.service.ts @@ -1,20 +1,36 @@ -import { BadRequestException, HttpException, HttpStatus, Logger, NotFoundException } from '@nestjs/common'; -import { Prisma } from '@prisma/client'; -import { createHash } from 'node:crypto'; +import { BadRequestException, Logger, NotFoundException } from '@nestjs/common'; + import { BillingService } from '../billing/billing.service'; -import { moneyToNumber } from '../common/money'; + import type { OpenApiService } from '../open-api/open-api.service'; import { PrismaService } from '../prisma/prisma.service'; -import type { GatewaySubmitResultDto, GatewaySubmitSegmentResultDto, GatewayReceiptEventDto, GatewayUplinkEventDto, GatewayPendingDeliveryQueryDto, GatewayDownstreamSentDto, GatewayDownstreamAcknowledgedDto, GatewayDownstreamFailureType, GatewayControlDeliveryResult, GatewaySubmitDeadLetterDto, RequeueGatewaySubmitExceptionDto, GatewayDownstreamRecoveryStatusDto, TimeoutUnknownDto } from './send-chain.contracts'; -import { positiveInteger, normalizeReceiptStatus, normalizeCarrier, DEFAULT_DOWNSTREAM_RETRY_DELAY_MS, DEFAULT_DOWNSTREAM_RETRY_MAX_DELAY_MS, DEFAULT_DOWNSTREAM_MAX_RETRIES, DEFAULT_DOWNSTREAM_PENDING_TIMEOUT_HOURS, DEFAULT_RECEIPT_TIMEOUT_HOURS, DEFAULT_GATEWAY_SUBMIT_REQUEUE_STALE_MS, DEFAULT_DOWNSTREAM_MANUAL_REQUEUE_STALE_MS, DEFAULT_UPSTREAM_RECEIPT_INBOX_PROCESSING_STALE_MS, DEFAULT_UPSTREAM_RECEIPT_INBOX_MAX_ATTEMPTS, DEFAULT_UPSTREAM_RECEIPT_INBOX_MAX_AGE_HOURS, gatewaySubmitRequeueKey, isObjectRecord, asDateOrNull, downstreamRetryDelayMs, downstreamAckTimeoutMs, downstreamRetryBaseDelayMs, downstreamRetryMaxDelayMs, downstreamMaxRetries, downstreamPendingTimeoutHours, downstreamControlFailureMessage, normalizeSubmitStatus, downstreamDeliveryAttemptKey, hasRecoveryAuditStateChanged, normalizeRecoveryFailureCategory, aggregateReceiptSegmentState, isSameUpstreamEndpointIdentity, receiptEventKey } from './send-chain.helpers'; -import type { SendSubmissionService } from './send-submission.service'; -import type { SendCompletionCallbacks, SendCompletionFacade } from './send-completion.service'; +import type { GatewaySubmitResultDto, GatewaySubmitSegmentResultDto } from './send-chain.contracts'; +import { normalizeSubmitStatus } from './send-chain.helpers'; +import type { SendCompletionCallbacks, SendCompletionFacade } from './send-completion.service'; /** * R10 gatewayResult implementation. * Cross-domain calls return through the stable SendChainService seam to preserve locking and test observability. */ +export function wireTiming( + data: { firstWireSubmitAt?: string; wireTimeSource?: string; receiptRequested?: boolean }, + previous?: Date | null, +): { firstWireSubmitAt?: Date; wireTimeSource?: string; receiptRequested?: boolean } { + const receipt = typeof data.receiptRequested === 'boolean' ? { receiptRequested: data.receiptRequested } : {}; + if (!data.firstWireSubmitAt) + return data.wireTimeSource ? { ...receipt, wireTimeSource: data.wireTimeSource } : receipt; + const at = new Date(data.firstWireSubmitAt); + if (!Number.isFinite(at.getTime()) || data.wireTimeSource !== 'gateway_write_complete') { + throw new BadRequestException('Invalid Gateway wire timestamp'); + } + return { + ...receipt, + firstWireSubmitAt: previous && previous < at ? previous : at, + wireTimeSource: data.wireTimeSource, + }; +} + export class SendGatewayResultService { private readonly logger = new Logger('SendChainService'); @@ -31,27 +47,39 @@ export class SendGatewayResultService { const submitRecord = await this.facade.resolveSubmitRecordForGatewaySegmentResult(message.id, data); const effectiveSubmitId = submitRecord.submitId; const submittedAt = data.submittedAt ? new Date(data.submittedAt) : new Date(); - await this.facade.recordSubmitSegments(message, { - messageId: data.messageId, - channelId: data.channelId, - submitId: effectiveSubmitId, - sequenceId: data.sequenceId, - gatewayMessageId: data.gatewayMessageId ?? '', - submitStatus: normalizeSubmitStatus(data.submitStatus), - errorCode: data.errorCode, - errorMessage: data.errorMessage, - submittedAt: submittedAt.toISOString(), - segments: [{ - segmentTotal: data.segmentTotal, - segmentIndex: data.segmentIndex, + await this.facade.recordSubmitSegments( + message, + { + messageId: data.messageId, + channelId: data.channelId, + submitId: effectiveSubmitId, sequenceId: data.sequenceId, - gatewayMessageId: data.gatewayMessageId, - submitStatus: data.submitStatus, + gatewayMessageId: data.gatewayMessageId ?? '', + submitStatus: normalizeSubmitStatus(data.submitStatus), errorCode: data.errorCode, errorMessage: data.errorMessage, submittedAt: submittedAt.toISOString(), - }], - }, submittedAt); + firstWireSubmitAt: data.firstWireSubmitAt, + wireTimeSource: data.wireTimeSource, + receiptRequested: data.receiptRequested, + segments: [ + { + segmentTotal: data.segmentTotal, + segmentIndex: data.segmentIndex, + sequenceId: data.sequenceId, + gatewayMessageId: data.gatewayMessageId, + submitStatus: data.submitStatus, + errorCode: data.errorCode, + errorMessage: data.errorMessage, + submittedAt: submittedAt.toISOString(), + firstWireSubmitAt: data.firstWireSubmitAt, + wireTimeSource: data.wireTimeSource, + receiptRequested: data.receiptRequested, + }, + ], + }, + submittedAt, + ); if (data.gatewayMessageId) { await this.prisma.smsSubmitRecord.updateMany({ where: { @@ -68,10 +96,7 @@ export class SendGatewayResultService { return { accepted: true }; } - async resolveSubmitRecordForGatewaySegmentResult( - messageRecordId: string, - data: GatewaySubmitSegmentResultDto, - ) { + async resolveSubmitRecordForGatewaySegmentResult(messageRecordId: string, data: GatewaySubmitSegmentResultDto) { if (data.submitId) { const exact = await this.prisma.smsSubmitRecord.findUnique({ where: { submitId: data.submitId }, @@ -81,13 +106,15 @@ export class SendGatewayResultService { (exact.messageRecordId && exact.messageRecordId !== messageRecordId) || (exact.channelId && exact.channelId !== data.channelId) ) { - this.logger.error(`gateway_submit_segment_result_unmatched ${JSON.stringify({ - messageId: data.messageId, - messageRecordId, - submitId: data.submitId, - channelId: data.channelId, - segmentIndex: data.segmentIndex, - })}`); + this.logger.error( + `gateway_submit_segment_result_unmatched ${JSON.stringify({ + messageId: data.messageId, + messageRecordId, + submitId: data.submitId, + channelId: data.channelId, + segmentIndex: data.segmentIndex, + })}`, + ); throw new BadRequestException( 'Gateway SubmitSegmentResult submitId does not match the SMS message and channel', ); @@ -104,24 +131,26 @@ export class SendGatewayResultService { take: 2, }); if (candidates.length !== 1) { - this.logger.error(`gateway_submit_segment_result_unmatched ${JSON.stringify({ + this.logger.error( + `gateway_submit_segment_result_unmatched ${JSON.stringify({ + messageId: data.messageId, + messageRecordId, + channelId: data.channelId, + segmentIndex: data.segmentIndex, + candidateCount: candidates.length, + })}`, + ); + throw new BadRequestException('Gateway SubmitSegmentResult without submitId cannot be matched uniquely'); + } + this.logger.warn( + `gateway_submit_segment_result_legacy_match ${JSON.stringify({ messageId: data.messageId, messageRecordId, channelId: data.channelId, segmentIndex: data.segmentIndex, - candidateCount: candidates.length, - })}`); - throw new BadRequestException( - 'Gateway SubmitSegmentResult without submitId cannot be matched uniquely', - ); - } - this.logger.warn(`gateway_submit_segment_result_legacy_match ${JSON.stringify({ - messageId: data.messageId, - messageRecordId, - channelId: data.channelId, - segmentIndex: data.segmentIndex, - submitId: candidates[0].submitId, - })}`); + submitId: candidates[0].submitId, + })}`, + ); return candidates[0]; } @@ -148,6 +177,7 @@ export class SendGatewayResultService { errorCode: data.errorCode, errorMessage: data.errorMessage, submittedAt, + ...wireTiming(data, submitRecord.firstWireSubmitAt), }, }); await this.facade.recordSubmitSegments(message, effectiveData, submittedAt); @@ -156,7 +186,8 @@ export class SendGatewayResultService { await this.markSubmitResultProcessed(submitRecord.id, data.eventId, submittedAt); return this.prisma.smsMessageRecord.findUnique({ where: { id: message.id } }); } - const status = data.submitStatus === 'accepted' ? 'submitted' : data.submitStatus === 'timeout' ? 'timeout' : 'submit_failed'; + const status = + data.submitStatus === 'accepted' ? 'submitted' : data.submitStatus === 'timeout' ? 'timeout' : 'submit_failed'; if (data.submitStatus === 'accepted' && !isStandaloneChannelTest && message.tenantId && message.batchTaskId) { const businessMessage = message as typeof message & { tenantId: string; batchTaskId: string }; await this.facade.chargeAcceptedMessage(businessMessage); @@ -164,7 +195,12 @@ export class SendGatewayResultService { if (latest?.status === 'failed') { await this.facade.refundMessage(businessMessage, '先到失败回执补偿退款'); } - } else if (data.submitStatus !== 'accepted' && !isStandaloneChannelTest && message.tenantId && message.batchTaskId) { + } else if ( + data.submitStatus !== 'accepted' && + !isStandaloneChannelTest && + message.tenantId && + message.batchTaskId + ) { const businessMessage = message as typeof message & { tenantId: string; batchTaskId: string }; const retried = await this.facade.retryMessageIfAllowed( businessMessage, @@ -176,13 +212,17 @@ export class SendGatewayResultService { await this.markSubmitResultProcessed(submitRecord.id, data.eventId, submittedAt); return retried; } - await this.facade.releaseMessageReservation(businessMessage, data.submitStatus === 'timeout' ? '提交超时释放冻结' : '提交失败释放冻结'); + await this.facade.releaseMessageReservation( + businessMessage, + data.submitStatus === 'timeout' ? '提交超时释放冻结' : '提交失败释放冻结', + ); } const protectedTerminalStatuses = ['delivered', 'failed', 'unknown']; const updated = await this.prisma.smsMessageRecord.updateMany({ - where: data.submitStatus === 'accepted' - ? { id: message.id, status: { notIn: protectedTerminalStatuses } } - : { id: message.id, status: { not: 'delivered' } }, + where: + data.submitStatus === 'accepted' + ? { id: message.id, status: { notIn: protectedTerminalStatuses } } + : { id: message.id, status: { not: 'delivered' } }, data: { gatewayMessageId: data.gatewayMessageId, submitStatus: data.submitStatus, @@ -202,7 +242,12 @@ export class SendGatewayResultService { }, }); } - if (data.submitStatus !== 'accepted' && batchTask?.sourceType === 'cmpp' && message.tenantId && message.applicationId) { + if ( + data.submitStatus !== 'accepted' && + batchTask?.sourceType === 'cmpp' && + message.tenantId && + message.applicationId + ) { await this.facade.recordCmppFailureReceipt( message as typeof message & { tenantId: string; applicationId: string; batchTaskId: string }, data.errorCode || 'SUBMIT', @@ -212,10 +257,9 @@ export class SendGatewayResultService { await this.prisma.gatewaySubmitDeadLetter.updateMany({ where: { status: { in: ['pending', 'requeueing', 'requeue_recovering', 'requeued'] }, - OR: [ - { submitId: effectiveData.submitId }, - data.messageId ? { messageId: data.messageId } : undefined, - ].filter(Boolean) as Array<{ submitId?: string; messageId?: string }>, + OR: [{ submitId: effectiveData.submitId }, data.messageId ? { messageId: data.messageId } : undefined].filter( + Boolean, + ) as Array<{ submitId?: string; messageId?: string }>, }, data: { status: 'resolved', @@ -252,9 +296,11 @@ export class SendGatewayResultService { async resolveSubmitRecordForGatewayResult(messageRecordId: string, data: GatewaySubmitResultDto) { if (data.submitId) { const exact = await this.prisma.smsSubmitRecord.findUnique({ where: { submitId: data.submitId } }); - if (!exact - || (exact.messageRecordId && exact.messageRecordId !== messageRecordId) - || (exact.channelId && exact.channelId !== data.channelId)) { + if ( + !exact || + (exact.messageRecordId && exact.messageRecordId !== messageRecordId) || + (exact.channelId && exact.channelId !== data.channelId) + ) { throw new BadRequestException('Gateway SubmitResult submitId does not match the SMS message and channel'); } return exact; @@ -272,34 +318,40 @@ export class SendGatewayResultService { take: 2, }); if (candidates.length !== 1) { - this.logger.error(`gateway_submit_result_unmatched ${JSON.stringify({ + this.logger.error( + `gateway_submit_result_unmatched ${JSON.stringify({ + messageId: data.messageId, + messageRecordId, + channelId: data.channelId, + gatewayMessageId: data.gatewayMessageId, + candidateCount: candidates.length, + })}`, + ); + throw new BadRequestException('Gateway SubmitResult without submitId cannot be matched uniquely'); + } + this.logger.warn( + `gateway_submit_result_legacy_match ${JSON.stringify({ messageId: data.messageId, messageRecordId, channelId: data.channelId, gatewayMessageId: data.gatewayMessageId, - candidateCount: candidates.length, - })}`); - throw new BadRequestException('Gateway SubmitResult without submitId cannot be matched uniquely'); - } - this.logger.warn(`gateway_submit_result_legacy_match ${JSON.stringify({ - messageId: data.messageId, - messageRecordId, - channelId: data.channelId, - gatewayMessageId: data.gatewayMessageId, - submitId: candidates[0].submitId, - })}`); + submitId: candidates[0].submitId, + })}`, + ); return candidates[0]; } smsMessageSegmentAuditDelegate() { - return (this.prisma as PrismaService & { - smsMessageSegmentAudit: { - upsert: (args: Record) => Promise; - updateMany: (args: Record) => Promise<{ count: number }>; - findFirst: (args: Record) => Promise; - findMany: (args: Record) => Promise; - }; - }).smsMessageSegmentAudit; + return ( + this.prisma as PrismaService & { + smsMessageSegmentAudit: { + upsert: (args: Record) => Promise; + updateMany: (args: Record) => Promise<{ count: number }>; + findFirst: (args: Record) => Promise; + findMany: (args: Record) => Promise; + }; + } + ).smsMessageSegmentAudit; } async recordSubmitSegments( @@ -327,74 +379,84 @@ export class SendGatewayResultService { }); const submitId = data.submitId ?? submitRecord?.submitId ?? message.submitId ?? `SUB-AUDIT-${message.id}`; const attempt = submitRecord - ? Math.max(0, await this.prisma.smsSubmitRecord.count({ - where: { - messageRecordId: message.id, - createdAt: { lte: submitRecord.createdAt }, - }, - }) - 1) + ? Math.max( + 0, + (await this.prisma.smsSubmitRecord.count({ + where: { + messageRecordId: message.id, + createdAt: { lte: submitRecord.createdAt }, + }, + })) - 1, + ) : 0; - const fallbackSegments = [{ - segmentTotal: Math.max(1, Number(message.billingUnits ?? 1)), - segmentIndex: 1, - sequenceId: data.sequenceId, - gatewayMessageId: data.gatewayMessageId, - submitStatus: data.submitStatus, - errorCode: data.errorCode, - errorMessage: data.errorMessage, - submittedAt: data.submittedAt, - }]; + const fallbackSegments = [ + { + firstWireSubmitAt: data.firstWireSubmitAt, + wireTimeSource: data.wireTimeSource, + receiptRequested: data.receiptRequested, + segmentTotal: Math.max(1, Number(message.billingUnits ?? 1)), + segmentIndex: 1, + sequenceId: data.sequenceId, + gatewayMessageId: data.gatewayMessageId, + submitStatus: data.submitStatus, + errorCode: data.errorCode, + errorMessage: data.errorMessage, + submittedAt: data.submittedAt, + }, + ]; const segments = data.segments && data.segments.length > 0 ? data.segments : fallbackSegments; const segmentTotal = Math.max(1, ...segments.map((item) => Number(item.segmentTotal ?? segments.length ?? 1))); - await Promise.all(segments.map((segment, index) => { - const segmentIndex = Math.max(1, Number(segment.segmentIndex ?? index + 1)); - const status = segment.submitStatus ?? data.submitStatus; - return segmentAudits.upsert({ - where: { - messageRecordId_submitId_segmentIndex: { - messageRecordId: message.id, - submitId, - segmentIndex, + await Promise.all( + segments.map((segment, index) => { + const segmentIndex = Math.max(1, Number(segment.segmentIndex ?? index + 1)); + const status = segment.submitStatus ?? data.submitStatus; + return segmentAudits.upsert({ + where: { + messageRecordId_submitId_segmentIndex: { + messageRecordId: message.id, + submitId, + segmentIndex, + }, }, - }, - update: { - submitRecordId: submitRecord?.id ?? null, - channelId: data.channelId ?? message.channelId ?? null, - attempt, - segmentTotal, - sequenceId: segment.sequenceId ?? data.sequenceId ?? null, - gatewayMessageId: segment.gatewayMessageId ?? data.gatewayMessageId ?? null, - submitStatus: status, - errorCode: segment.errorCode ?? data.errorCode ?? null, - errorMessage: segment.errorMessage ?? data.errorMessage ?? null, - submittedAt: segment.submittedAt ? new Date(segment.submittedAt) : submittedAt, - }, - create: { - tenantId: message.tenantId, - batchTaskId: message.batchTaskId, - messageRecordId: message.id, - submitRecordId: submitRecord?.id ?? null, - channelId: data.channelId ?? message.channelId ?? null, - submitId, - attempt, - segmentTotal, - segmentIndex, - sequenceId: segment.sequenceId ?? data.sequenceId ?? null, - gatewayMessageId: segment.gatewayMessageId ?? data.gatewayMessageId ?? null, - submitStatus: status, - compensationType: submitRecord && submitRecord.submitId !== message.submitId ? 'retry_submit' : null, - errorCode: segment.errorCode ?? data.errorCode ?? null, - errorMessage: segment.errorMessage ?? data.errorMessage ?? null, - submittedAt: segment.submittedAt ? new Date(segment.submittedAt) : submittedAt, - }, - }); - })); + update: { + ...wireTiming(segment), + submitRecordId: submitRecord?.id ?? null, + channelId: data.channelId ?? message.channelId ?? null, + attempt, + segmentTotal, + sequenceId: segment.sequenceId ?? data.sequenceId ?? null, + gatewayMessageId: segment.gatewayMessageId ?? data.gatewayMessageId ?? null, + submitStatus: status, + errorCode: segment.errorCode ?? data.errorCode ?? null, + errorMessage: segment.errorMessage ?? data.errorMessage ?? null, + submittedAt: segment.submittedAt ? new Date(segment.submittedAt) : submittedAt, + }, + create: { + ...wireTiming(segment), + tenantId: message.tenantId, + batchTaskId: message.batchTaskId, + messageRecordId: message.id, + submitRecordId: submitRecord?.id ?? null, + channelId: data.channelId ?? message.channelId ?? null, + submitId, + attempt, + segmentTotal, + segmentIndex, + sequenceId: segment.sequenceId ?? data.sequenceId ?? null, + gatewayMessageId: segment.gatewayMessageId ?? data.gatewayMessageId ?? null, + submitStatus: status, + compensationType: submitRecord && submitRecord.submitId !== message.submitId ? 'retry_submit' : null, + errorCode: segment.errorCode ?? data.errorCode ?? null, + errorMessage: segment.errorMessage ?? data.errorMessage ?? null, + submittedAt: segment.submittedAt ? new Date(segment.submittedAt) : submittedAt, + }, + }); + }), + ); } async findMessageByGatewayEvent(messageId?: string, gatewayMessageId?: string) { - const conditions = [{ messageId }, gatewayMessageId ? { gatewayMessageId } : undefined].filter( - Boolean, - ) as Array<{ + const conditions = [{ messageId }, gatewayMessageId ? { gatewayMessageId } : undefined].filter(Boolean) as Array<{ messageId?: string; gatewayMessageId?: string; }>; diff --git a/api/src/send-chain/send-receipt.service.ts b/api/src/send-chain/send-receipt.service.ts index 104b423..7a4d82e 100644 --- a/api/src/send-chain/send-receipt.service.ts +++ b/api/src/send-chain/send-receipt.service.ts @@ -1,17 +1,26 @@ -import { BadRequestException, HttpException, HttpStatus, Logger, NotFoundException } from '@nestjs/common'; +import { Logger, NotFoundException } from '@nestjs/common'; import { Prisma } from '@prisma/client'; -import { createHash } from 'node:crypto'; + import { BillingService } from '../billing/billing.service'; -import { moneyToNumber } from '../common/money'; + import type { OpenApiService } from '../open-api/open-api.service'; import { PrismaService } from '../prisma/prisma.service'; -import type { GatewaySubmitResultDto, GatewaySubmitSegmentResultDto, GatewayReceiptEventDto, GatewayUplinkEventDto, GatewayPendingDeliveryQueryDto, GatewayDownstreamSentDto, GatewayDownstreamAcknowledgedDto, GatewayDownstreamFailureType, GatewayControlDeliveryResult, GatewaySubmitDeadLetterDto, RequeueGatewaySubmitExceptionDto, GatewayDownstreamRecoveryStatusDto, TimeoutUnknownDto } from './send-chain.contracts'; -import { positiveInteger, normalizeReceiptStatus, normalizeCarrier, DEFAULT_DOWNSTREAM_RETRY_DELAY_MS, DEFAULT_DOWNSTREAM_RETRY_MAX_DELAY_MS, DEFAULT_DOWNSTREAM_MAX_RETRIES, DEFAULT_DOWNSTREAM_PENDING_TIMEOUT_HOURS, DEFAULT_RECEIPT_TIMEOUT_HOURS, DEFAULT_GATEWAY_SUBMIT_REQUEUE_STALE_MS, DEFAULT_DOWNSTREAM_MANUAL_REQUEUE_STALE_MS, DEFAULT_UPSTREAM_RECEIPT_INBOX_PROCESSING_STALE_MS, DEFAULT_UPSTREAM_RECEIPT_INBOX_MAX_ATTEMPTS, DEFAULT_UPSTREAM_RECEIPT_INBOX_MAX_AGE_HOURS, gatewaySubmitRequeueKey, isObjectRecord, asDateOrNull, downstreamRetryDelayMs, downstreamAckTimeoutMs, downstreamRetryBaseDelayMs, downstreamRetryMaxDelayMs, downstreamMaxRetries, downstreamPendingTimeoutHours, downstreamControlFailureMessage, normalizeSubmitStatus, downstreamDeliveryAttemptKey, hasRecoveryAuditStateChanged, normalizeRecoveryFailureCategory, aggregateReceiptSegmentState, isSameUpstreamEndpointIdentity, receiptEventKey, longMessageReceiptMode } from './send-chain.helpers'; -import type { SendSubmissionService } from './send-submission.service'; +import type { GatewayReceiptEventDto } from './send-chain.contracts'; +import { + positiveInteger, + normalizeReceiptStatus, + DEFAULT_UPSTREAM_RECEIPT_INBOX_PROCESSING_STALE_MS, + DEFAULT_UPSTREAM_RECEIPT_INBOX_MAX_ATTEMPTS, + DEFAULT_UPSTREAM_RECEIPT_INBOX_MAX_AGE_HOURS, + aggregateReceiptSegmentState, + isSameUpstreamEndpointIdentity, + receiptEventKey, + longMessageReceiptMode, +} from './send-chain.helpers'; + import type { SendCompletionCallbacks, SendCompletionFacade } from './send-completion.service'; import { queueFinalReceiptDeliveries } from './downstream-receipt-targets'; - /** * R10 receipt implementation. * Cross-domain calls return through the stable SendChainService seam to preserve locking and test observability. @@ -68,6 +77,7 @@ export class SendReceiptService { errorCode: data.errorCode, errorMessage: data.errorMessage, deliveredAt, + gatewayReceivedAt: data.deliveredAt ? new Date(data.deliveredAt) : null, status: 'pending', nextRetryAt: new Date(), }, @@ -81,8 +91,8 @@ export class SendReceiptService { async processPendingUpstreamReceiptInbox(limit = 100) { const now = new Date(); const staleBefore = new Date( - now.getTime() - - positiveInteger( + now.getTime() - + positiveInteger( process.env.UPSTREAM_RECEIPT_INBOX_PROCESSING_STALE_MS, DEFAULT_UPSTREAM_RECEIPT_INBOX_PROCESSING_STALE_MS, ), @@ -110,8 +120,8 @@ export class SendReceiptService { async processUpstreamReceiptInboxRecord(id: string) { const staleBefore = new Date( - Date.now() - - positiveInteger( + Date.now() - + positiveInteger( process.env.UPSTREAM_RECEIPT_INBOX_PROCESSING_STALE_MS, DEFAULT_UPSTREAM_RECEIPT_INBOX_PROCESSING_STALE_MS, ), @@ -119,10 +129,7 @@ export class SendReceiptService { const claimed = await this.prisma.upstreamReceiptInbox.updateMany({ where: { id, - OR: [ - { status: { in: ['pending', 'retrying'] } }, - { status: 'processing', updatedAt: { lte: staleBefore } }, - ], + OR: [{ status: { in: ['pending', 'retrying'] } }, { status: 'processing', updatedAt: { lte: staleBefore } }], }, data: { status: 'processing', attemptCount: { increment: 1 }, nextRetryAt: null }, }); @@ -130,25 +137,28 @@ export class SendReceiptService { const inbox = await this.prisma.upstreamReceiptInbox.findUnique({ where: { id } }); if (!inbox) return false; try { - const message = await this.facade.handleReceipt({ - messageId: inbox.provisionalMessageId ?? undefined, - channelId: inbox.incomingChannelId, - connectionId: inbox.incomingConnectionId ?? undefined, - sequenceId: inbox.sequenceId ?? undefined, - gatewayMessageId: inbox.gatewayMessageId, - phoneNumber: inbox.phoneNumber ?? undefined, - receiptStatus: normalizeReceiptStatus(inbox.receiptStatus), - rawStatus: inbox.rawStatus, - errorCode: inbox.errorCode ?? undefined, - errorMessage: inbox.errorMessage ?? undefined, - deliveredAt: inbox.deliveredAt.toISOString(), - }, { - account: inbox.upstreamAccount, - gatewayHost: inbox.upstreamHost, - gatewayPort: inbox.upstreamPort, - protocol: inbox.protocol, - cmppVersion: inbox.protocolVersion, - }); + const message = await this.facade.handleReceipt( + { + messageId: inbox.provisionalMessageId ?? undefined, + channelId: inbox.incomingChannelId, + connectionId: inbox.incomingConnectionId ?? undefined, + sequenceId: inbox.sequenceId ?? undefined, + gatewayMessageId: inbox.gatewayMessageId, + phoneNumber: inbox.phoneNumber ?? undefined, + receiptStatus: normalizeReceiptStatus(inbox.receiptStatus), + rawStatus: inbox.rawStatus, + errorCode: inbox.errorCode ?? undefined, + errorMessage: inbox.errorMessage ?? undefined, + deliveredAt: inbox.deliveredAt.toISOString(), + }, + { + account: inbox.upstreamAccount, + gatewayHost: inbox.upstreamHost, + gatewayPort: inbox.upstreamPort, + protocol: inbox.protocol, + cmppVersion: inbox.protocolVersion, + }, + ); const matchedMessageRecordId = message && 'id' in message ? message.id : message?.messageRecordId; const matchedChannelId = message && 'channelId' in message ? message.channelId : undefined; await this.prisma.upstreamReceiptInbox.update({ @@ -171,8 +181,8 @@ export class SendReceiptService { process.env.UPSTREAM_RECEIPT_INBOX_MAX_AGE_HOURS, DEFAULT_UPSTREAM_RECEIPT_INBOX_MAX_AGE_HOURS, ); - const exhausted = inbox.attemptCount >= maxAttempts - || inbox.receivedAt.getTime() <= Date.now() - maxAgeHours * 60 * 60_000; + const exhausted = + inbox.attemptCount >= maxAttempts || inbox.receivedAt.getTime() <= Date.now() - maxAgeHours * 60 * 60_000; const retryDelayMs = Math.min(30 * 60_000, 5_000 * 2 ** Math.min(Math.max(inbox.attemptCount - 1, 0), 8)); await this.prisma.upstreamReceiptInbox.update({ where: { id }, @@ -204,7 +214,13 @@ export class SendReceiptService { async handleReceipt( data: GatewayReceiptEventDto, - incomingIdentity?: { account: string; gatewayHost: string; gatewayPort: number; protocol: string; cmppVersion: string }, + incomingIdentity?: { + account: string; + gatewayHost: string; + gatewayPort: number; + protocol: string; + cmppVersion: string; + }, ) { const resolved = await this.facade.resolveReceiptMessage(data, incomingIdentity); const logicalChannelId = resolved.channelId ?? data.channelId; @@ -263,9 +279,8 @@ export class SendReceiptService { } const logicalReceipt = { ...data, channelId: logicalChannelId }; await this.facade.recordReceiptSegment(message, logicalReceipt, deliveredAt, resolved.submitRecordId); - const receiptMode = Number(message.billingUnits ?? 1) > 1 - ? await this.getLongMessageReceiptMode(logicalChannelId) - : 'per_segment'; + const receiptMode = + Number(message.billingUnits ?? 1) > 1 ? await this.getLongMessageReceiptMode(logicalChannelId) : 'per_segment'; if (receiptMode === 'message_level' && data.receiptStatus === 'delivered') { await this.applyMessageLevelSuccess( message, @@ -287,12 +302,10 @@ export class SendReceiptService { } const status = aggregate.status; const isCurrentAttempt = - (!message.channelId || message.channelId === logicalChannelId) - && ( - !message.gatewayMessageId - || message.gatewayMessageId === data.gatewayMessageId - || (aggregate.segmentTotal > 1 && (!message.submitId || message.submitId === resolved.submitId)) - ); + (!message.channelId || message.channelId === logicalChannelId) && + (!message.gatewayMessageId || + message.gatewayMessageId === data.gatewayMessageId || + (aggregate.segmentTotal > 1 && (!message.submitId || message.submitId === resolved.submitId))); if (!isCurrentAttempt) { return this.prisma.smsMessageRecord.findUnique({ where: { id: message.id } }); } @@ -314,11 +327,7 @@ export class SendReceiptService { const isStandaloneChannelTest = !message.tenantId && !message.batchTaskId; if (status === 'failed' && !isStandaloneChannelTest && message.tenantId && message.batchTaskId) { const businessMessage = message as typeof message & { tenantId: string; batchTaskId: string }; - const retried = await this.facade.retryMessageIfAllowed( - businessMessage, - '回执失败补发', - resolved.submitRecordId, - ); + const retried = await this.facade.retryMessageIfAllowed(businessMessage, '回执失败补发', resolved.submitRecordId); if (retried) { await this.facade.refreshTaskProgress(businessMessage.batchTaskId); return retried; @@ -339,32 +348,31 @@ export class SendReceiptService { }, }); if (!isStandaloneChannelTest && message.tenantId && message.applicationId) { - await queueFinalReceiptDeliveries( - this.prisma, - (request) => this.facade.queueAndTryDownstreamDelivery(request), - { - message, - payload: { - messageId: message.messageId, - gatewayMessageId: data.gatewayMessageId, - phoneNumber: message.phoneNumber, - receiptStatus: aggregate.receiptStatus, - rawStatus: aggregate.rawStatus, - errorCode: aggregate.errorCode, - deliveredAt: aggregate.deliveredAt.toISOString(), - }, - segmentPayloads: Object.fromEntries( - aggregate.segments - .filter((segment) => segment.receiptStatus) - .map((segment) => [segment.segmentIndex, { + await queueFinalReceiptDeliveries(this.prisma, (request) => this.facade.queueAndTryDownstreamDelivery(request), { + message, + payload: { + messageId: message.messageId, + gatewayMessageId: data.gatewayMessageId, + phoneNumber: message.phoneNumber, + receiptStatus: aggregate.receiptStatus, + rawStatus: aggregate.rawStatus, + errorCode: aggregate.errorCode, + deliveredAt: aggregate.deliveredAt.toISOString(), + }, + segmentPayloads: Object.fromEntries( + aggregate.segments + .filter((segment) => segment.receiptStatus) + .map((segment) => [ + segment.segmentIndex, + { receiptStatus: segment.receiptStatus, rawStatus: segment.rawStatus, errorCode: segment.errorCode, deliveredAt: segment.deliveredAt?.toISOString() ?? aggregate.deliveredAt.toISOString(), - }]), - ), - }, - ); + }, + ]), + ), + }); } if (message.batchTaskId) { await this.facade.refreshTaskProgress(message.batchTaskId); @@ -388,8 +396,9 @@ export class SendReceiptService { submitRecordId?: string, submitId?: string, ) { - const belongsToCurrentAttempt = (!message.channelId || message.channelId === data.channelId) - && (!message.submitId || message.submitId === submitId); + const belongsToCurrentAttempt = + (!message.channelId || message.channelId === data.channelId) && + (!message.submitId || message.submitId === submitId); if (!belongsToCurrentAttempt) return; const attemptWhere = submitRecordId ? { messageRecordId: message.id, submitRecordId } @@ -402,7 +411,9 @@ export class SendReceiptService { select: { id: true, receiptStatus: true }, }); if (segments.length <= 1) return; - if (segments.some((segment) => segment.receiptStatus && !['delivered', 'unknown'].includes(segment.receiptStatus))) { + if ( + segments.some((segment) => segment.receiptStatus && !['delivered', 'unknown'].includes(segment.receiptStatus)) + ) { return; } // This supplier contract reports one message-level success for a multipart SMS. @@ -506,9 +517,9 @@ export class SendReceiptService { const submitRecord = submitRecordId ? await this.prisma.smsSubmitRecord.findUnique({ where: { id: submitRecordId } }) : await this.prisma.smsSubmitRecord.findFirst({ - where: { messageRecordId: message.id, gatewayMessageId: data.gatewayMessageId }, - orderBy: { createdAt: 'desc' }, - }); + where: { messageRecordId: message.id, gatewayMessageId: data.gatewayMessageId }, + orderBy: { createdAt: 'desc' }, + }); await segmentAudits.upsert({ where: { messageRecordId_submitId_segmentIndex: { @@ -575,7 +586,13 @@ export class SendReceiptService { async resolveReceiptMessage( data: GatewayReceiptEventDto, - incomingIdentity?: { account: string; gatewayHost: string; gatewayPort: number; protocol: string; cmppVersion: string }, + incomingIdentity?: { + account: string; + gatewayHost: string; + gatewayPort: number; + protocol: string; + cmppVersion: string; + }, ) { const exactMessage = data.messageId ? await this.prisma.smsMessageRecord.findUnique({ where: { messageId: data.messageId } }) @@ -641,8 +658,8 @@ export class SendReceiptService { throw new NotFoundException('SMS message record not found'); } - const incomingChannel = incomingIdentity - ?? await this.prisma.smsChannel.findUnique({ where: { id: data.channelId } }); + const incomingChannel = + incomingIdentity ?? (await this.prisma.smsChannel.findUnique({ where: { id: data.channelId } })); if (!incomingChannel) { throw new NotFoundException('SMS message record not found'); } @@ -665,8 +682,9 @@ export class SendReceiptService { channelId: exactSegmentMatches[0].channelId, }; } - const sameSupplierSegments = segmentMatches.filter((candidate) => - candidate.channel && isSameUpstreamEndpointIdentity(incomingChannel, candidate.channel)); + const sameSupplierSegments = segmentMatches.filter( + (candidate) => candidate.channel && isSameUpstreamEndpointIdentity(incomingChannel, candidate.channel), + ); if (sameSupplierSegments.length === 1 && sameSupplierSegments[0]?.messageRecord) { return { message: sameSupplierSegments[0].messageRecord, @@ -685,8 +703,9 @@ export class SendReceiptService { orderBy: { createdAt: 'desc' }, take: 10, }); - const sameSupplierSubmits = crossConnectionSubmits.filter((candidate) => - candidate.channel && isSameUpstreamEndpointIdentity(incomingChannel, candidate.channel)); + const sameSupplierSubmits = crossConnectionSubmits.filter( + (candidate) => candidate.channel && isSameUpstreamEndpointIdentity(incomingChannel, candidate.channel), + ); if (sameSupplierSubmits.length === 1 && sameSupplierSubmits[0]?.messageRecord) { return { message: sameSupplierSubmits[0].messageRecord, diff --git a/api/src/sending-monitor-worker.ts b/api/src/sending-monitor-worker.ts new file mode 100644 index 0000000..ff5b319 --- /dev/null +++ b/api/src/sending-monitor-worker.ts @@ -0,0 +1,201 @@ +import { Pool, PoolClient } from 'pg'; +import { projectMessages } from './sending-monitor/monitor-projection'; +import { evaluateWindow } from './sending-monitor/monitor-evaluation'; +import type { MonitorType } from './sending-monitor/monitor-metrics'; + +process.env.TZ = 'UTC'; +type Cursor = { from: string; to: string; at: string; id: string; completeAt?: string }; +async function checkpoint(db: PoolClient, id: string, data: unknown) { + await db.query( + `INSERT INTO "SendingMonitorCheckpoint" (id,data) VALUES($1,$2::jsonb) ON CONFLICT(id) DO UPDATE SET data=EXCLUDED.data,"updatedAt"=(CURRENT_TIMESTAMP AT TIME ZONE 'UTC')`, + [id, JSON.stringify(data)], + ); +} + +export async function monitorTick(db: PoolClient, now = new Date()) { + await db.query(`SET TIME ZONE 'UTC'`); + const locked = (await db.query(`SELECT pg_try_advisory_lock(20260906,710) locked`)).rows[0].locked; + if (!locked) return; + try { + await db.query('BEGIN'); + await db.query(`SET LOCAL statement_timeout='20s'`); + const dirtyMinutes = new Set(); + const cursors: Cursor[] = []; + for (const source of ['submit', 'receipt'] as const) { + const stored = (await db.query(`SELECT data FROM "SendingMonitorCheckpoint" WHERE id=$1`, [source])).rows[0] + ?.data as Cursor | undefined; + const from = stored?.completeAt + ? new Date(new Date(stored.completeAt).getTime() - 120000).toISOString() + : new Date(now.getTime() - 7200000).toISOString(); + const cursor: Cursor = + stored && stored.id + ? stored + : { + from, + to: new Date(now.getTime() - 2000).toISOString(), + at: from, + id: '', + completeAt: stored?.completeAt, + }; + const table = source === 'submit' ? 'SmsSubmitRecord' : 'UpstreamReceiptInbox'; + const field = source === 'submit' ? 'messageRecordId' : 'matchedMessageRecordId'; + const batch = ( + await db.query( + `SELECT id,"updatedAt","${field}" "messageId" FROM "${table}" WHERE ("updatedAt",id)>($1::timestamp,$2) AND "updatedAt"<$3::timestamp ORDER BY "updatedAt",id LIMIT 1000`, + [cursor.at, cursor.id, cursor.to], + ) + ).rows; + for (const minute of (await projectMessages(db, [ + ...new Set(batch.map((b) => b.messageId).filter(Boolean)), + ] as string[])) ?? []) + dirtyMinutes.add(minute); + if (batch.length === 1000) { + const last = batch[batch.length - 1]; + cursor.at = last.updatedAt.toISOString(); + cursor.id = last.id; + } else { + cursor.completeAt = cursor.to; + cursor.id = ''; + } + await checkpoint(db, source, cursor); + cursors.push(cursor); + } + // A bounded, independent 72-hour reconciliation cursor recovers transactions older than the overlap. + const recon = (await db.query(`SELECT data FROM "SendingMonitorCheckpoint" WHERE id='reconcile'`)).rows[0]?.data; + if (!recon?.nextAt || new Date(recon.nextAt) <= now) { + const start = recon?.id ? recon.at : new Date(now.getTime() - 72 * 3600000).toISOString(); + const batch = ( + await db.query( + `SELECT id,"createdAt","messageRecordId" FROM "SmsSubmitRecord" WHERE ("createdAt",id)>($1::timestamp,$2) AND "createdAt"<$3 ORDER BY "createdAt",id LIMIT 500`, + [start, recon?.id ?? '', new Date(now.getTime() - 120000)], + ) + ).rows; + for (const minute of (await projectMessages(db, [...new Set(batch.map((b) => b.messageRecordId))] as string[])) ?? + []) + dirtyMinutes.add(minute); + const last = batch[batch.length - 1]; + await checkpoint( + db, + 'reconcile', + batch.length === 500 + ? { at: last.createdAt.toISOString(), id: last.id } + : { id: '', nextAt: new Date(now.getTime() + 1800000).toISOString() }, + ); + } + const pending = ( + await db.query( + `SELECT count(*)::int count,min("receivedAt") oldest FROM "UpstreamReceiptInbox" WHERE status IN ('pending','processing','retrying') AND "receivedAt">$1`, + [new Date(now.getTime() - 72 * 3600000)], + ) + ).rows[0]; + const complete = + cursors.every((c) => c.completeAt && now.getTime() - new Date(c.completeAt).getTime() < 30000) && + pending.count === 0; + await checkpoint(db, 'health', { + complete, + pendingReceipts: pending.count, + oldestPending: pending.oldest, + submitCompleteAt: cursors[0].completeAt, + receiptCompleteAt: cursors[1].completeAt, + checkedAt: now.toISOString(), + poolMax: 2, + }); + // Persist dirty windows with the projection transaction. Reconciliation and late matching revise only affected windows. + const pendingWindows = new Map( + (await db.query(`SELECT data FROM "SendingMonitorCheckpoint" WHERE id='dirty-windows'`)).rows[0]?.data?.windows ?? + [], + ); + const schedule = + (await db.query(`SELECT data FROM "SendingMonitorCheckpoint" WHERE id='schedule'`)).rows[0]?.data ?? {}; + for (const type of ['industry', 'verification', 'overall'] as MonitorType[]) { + const period = type === 'overall' ? 600000 : 300000; + const t = new Date(Math.floor(now.getTime() / period) * period); + for (let back = 1; back >= 0; back--) { + const boundary = new Date(t.getTime() - back * period); + const final = type === 'overall' || now.getTime() >= boundary.getTime() + 90000; + const key = `${type}:${boundary.toISOString()}`; + const phase = `${final}:${complete}`; + if (schedule[key] !== phase) pendingWindows.set(key, { type, at: boundary.toISOString() }); + } + for (const minute of dirtyMinutes) { + const first = (Math.floor(new Date(minute).getTime() / period) + 1) * period; + for (let n = 0; n < (type === 'overall' ? 3 : 1); n++) { + const at = new Date(first + n * period).toISOString(); + if (new Date(at) <= now) pendingWindows.set(`${type}:${at}`, { type, at }); + } + } + } + // Newer windows first; older revisions must not replace current alert state. Work stays bounded per tick. + for (const [key, window] of [...pendingWindows.entries()] + .sort((a, b) => b[1].at.localeCompare(a[1].at)) + .slice(0, 12) + .sort((a, b) => a[1].at.localeCompare(b[1].at))) { + const final = window.type === 'overall' || now.getTime() >= new Date(window.at).getTime() + 90000; + await evaluateWindow(db, window.type, new Date(window.at), final, complete); + schedule[key] = `${final}:${complete}`; + pendingWindows.delete(key); + } + for (const key of Object.keys(schedule)) { + if (new Date(key.slice(key.indexOf(':') + 1)).getTime() < now.getTime() - 1200000) delete schedule[key]; + } + await checkpoint(db, 'schedule', schedule); + await checkpoint(db, 'dirty-windows', { windows: [...pendingWindows.entries()] }); + await db.query('COMMIT'); + // Retention only touches monitor-owned tables. Never delete SMS, receipt, queue or audit business data. + await db.query( + `DELETE FROM "SendingMonitorFact" WHERE id IN (SELECT id FROM "SendingMonitorFact" WHERE "submittedAt"<(CURRENT_TIMESTAMP AT TIME ZONE 'UTC')-interval '72 hours' LIMIT 1000)`, + ); + await db.query( + `DELETE FROM "SendingMonitorMinute" WHERE (kind,"dimensionKey",minute,verification) IN (SELECT kind,"dimensionKey",minute,verification FROM "SendingMonitorMinute" WHERE minute<(CURRENT_TIMESTAMP AT TIME ZONE 'UTC')-interval '7 days' LIMIT 1000)`, + ); + await db.query( + `DELETE FROM "SendingMonitorSnapshot" WHERE id IN (SELECT id FROM "SendingMonitorSnapshot" WHERE "evaluationAt"<(CURRENT_TIMESTAMP AT TIME ZONE 'UTC')-interval '30 days' LIMIT 1000)`, + ); + await db.query( + `DELETE FROM "SendingMonitorAlertRead" WHERE "alertId" IN (SELECT id FROM "SendingMonitorAlert" WHERE state<>'active' AND "closedAt"<(CURRENT_TIMESTAMP AT TIME ZONE 'UTC')-interval '90 days' LIMIT 1000)`, + ); + await db.query( + `DELETE FROM "SendingMonitorAlert" WHERE id IN (SELECT id FROM "SendingMonitorAlert" WHERE state<>'active' AND "closedAt"<(CURRENT_TIMESTAMP AT TIME ZONE 'UTC')-interval '90 days' LIMIT 1000)`, + ); + } catch (error) { + await db.query('ROLLBACK'); + throw error; + } finally { + await db.query('SELECT pg_advisory_unlock(20260906,710)'); + } +} + +async function main() { + const connectionString = process.env.SENDING_MONITOR_DATABASE_URL || process.env.DATABASE_URL; + if (!connectionString) throw new Error('SENDING_MONITOR_DATABASE_URL or DATABASE_URL is required'); + const pool = new Pool({ + connectionString, + max: 2, + application_name: 'cmpp-sending-monitor', + statement_timeout: 25000, + }); + let stopping = false; + process.on('SIGTERM', () => { + stopping = true; + }); + process.on('SIGINT', () => { + stopping = true; + }); + while (!stopping) { + const db = await pool.connect(); + try { + await monitorTick(db); + } catch (error) { + console.error('sending_monitor_tick_failed', error instanceof Error ? error.message : 'unknown'); + } finally { + db.release(); + } + if (!stopping) await new Promise((resolve) => setTimeout(resolve, 5000)); + } + await pool.end(); +} +if (require.main === module) + void main().catch((error) => { + console.error('sending_monitor_start_failed', error instanceof Error ? error.message : 'unknown'); + process.exitCode = 1; + }); diff --git a/api/src/sending-monitor/monitor-evaluation.ts b/api/src/sending-monitor/monitor-evaluation.ts new file mode 100644 index 0000000..e1aae82 --- /dev/null +++ b/api/src/sending-monitor/monitor-evaluation.ts @@ -0,0 +1,333 @@ +import { randomUUID } from 'node:crypto'; +import { PoolClient } from 'pg'; +import { + horizons, + matchRules, + metric, + type Dimensions, + type Metric, + type MonitorType, + type Rule, +} from './monitor-metrics'; +import { keyOf } from './monitor-projection'; + +type Aggregate = { + dimensionKey: string; + dimensions: Dimensions; + total: number; + eligible: number; + unassessable: number; + seconds: number; + mature: number; + success: number; +}; +type Measurements = { total: number; unassessable: number; metrics: Metric[] }; +type Evaluation = { + id: string; + type: MonitorType; + dimensionKey: string; + dimensions: Dimensions; + evaluationAt: string; + windowFrom: string; + observedUntil: string; + stage: string; + metrics: Measurements; + rule: Rule | null; + status: string; + completeness: { complete: boolean; reason?: string }; + computedAt: string; +}; + +type CounterState = { bad: number; good: number; t: string; ruleKey: string }; +type StoredAlert = { + id: string; + dimensionKey: string; + ruleKey: string; + openedAt: Date; + worst: Evaluation & { revision: number }; +}; +export async function evaluateWindow(db: PoolClient, type: MonitorType, t: Date, final: boolean, complete: boolean) { + const observed = new Date(t.getTime() + (final && type !== 'overall' ? 60000 : 0)); + const from = new Date(t.getTime() - (type === 'overall' ? 1800000 : 300000)); + const kind = type === 'industry' ? 'attempt' : 'business'; + // Whole mature minutes come from sparse buckets. Only the maturity minute uses exact millisecond facts. + const data: Aggregate[] = ( + await db.query( + `WITH buckets AS ( + SELECT b.* FROM "SendingMonitorMinute" b LEFT JOIN LATERAL (SELECT * FROM "SendingMonitorTargetVersion" v WHERE v."channelId"=b.dimensions->>'channelId' AND v."effectiveFrom"<=$3::timestamp ORDER BY version DESC LIMIT 1) target ON true + WHERE b.kind=$1 AND b.minute >= $2::timestamp AND b.minute < $3::timestamp AND ($4<>'verification' OR b.verification) + AND ($4<>'industry' OR (target.enabled AND b.minute>=target."effectiveFrom")) + ), totals AS (SELECT "dimensionKey",(jsonb_agg(dimensions ORDER BY minute DESC))->0 dimensions, + sum((metrics->>'total')::int)::int total,sum((metrics->>'eligible')::int)::int eligible, + sum((metrics->>'unassessable')::int)::int unassessable FROM buckets GROUP BY "dimensionKey"), + hs AS (SELECT unnest($6::int[]) seconds), full_minutes AS ( + SELECT b."dimensionKey",h.seconds,sum((b.metrics->>'eligible')::int)::int mature, + sum((b.metrics->>('s'||h.seconds))::int)::int success FROM buckets b CROSS JOIN hs h + WHERE b.minute>'channelId' AND v."effectiveFrom"<=$3::timestamp ORDER BY version DESC LIMIT 1) target ON true + WHERE f.kind=$1 AND f."submittedAt">=$2::timestamp AND f."submittedAt"<$3::timestamp AND f.reason IS NULL + AND ($4<>'verification' OR f.verification) AND ($4<>'industry' OR (target.enabled AND f."submittedAt">=target."effectiveFrom")) + AND f."submittedAt">=date_trunc('minute',$5::timestamp-h.seconds*interval '1 second') AND f."submittedAt"<=$5::timestamp-h.seconds*interval '1 second' + GROUP BY f."dimensionKey",h.seconds) + SELECT totals.*,hs.seconds,COALESCE(m.mature,0)+COALESCE(b.mature,0) mature,COALESCE(m.success,0)+COALESCE(b.success,0) success + FROM totals CROSS JOIN hs LEFT JOIN full_minutes m USING("dimensionKey",seconds) LEFT JOIN boundary b USING("dimensionKey",seconds)`, + [kind, from, t, type, observed, [...horizons[type]]], + ) + ).rows; + const rules: Rule[] = ( + await db.query( + `SELECT DISTINCT ON ("ruleId") * FROM "SendingMonitorRuleVersion" WHERE type=$1 AND "effectiveAt"<=$2 ORDER BY "ruleId",version DESC`, + [type, t], + ) + ).rows; + const groups = new Map(); + for (const row of data) { + const list = groups.get(row.dimensionKey) ?? []; + list.push(row); + groups.set(row.dimensionKey, list); + } + if (type === 'industry') { + const targets = ( + await db.query( + `SELECT c.id,c.name,CASE WHEN cardinality(c.carriers)>0 THEN c.carriers WHEN c.carrier='all' THEN ARRAY['mobile','unicom','telecom'] ELSE ARRAY[COALESCE(c.carrier,'unknown')] END carriers + FROM (SELECT DISTINCT ON ("channelId") * FROM "SendingMonitorTargetVersion" WHERE "effectiveFrom"<=$1 ORDER BY "channelId",version DESC) t JOIN "SmsChannel" c ON c.id=t."channelId" WHERE t.enabled AND t."effectiveFrom"<=$1 AND c.status<>'deleted'`, + [t], + ) + ).rows; + for (const c of targets) + for (const carrier of c.carriers) { + const key = keyOf([c.id, carrier]); + if (!groups.has(key)) + groups.set( + key, + horizons[type].map((seconds) => ({ + dimensionKey: key, + dimensions: { channelId: c.id, channelName: c.name, carrier }, + total: 0, + eligible: 0, + unassessable: 0, + seconds, + mature: 0, + success: 0, + })), + ); + } + } + if (type !== 'industry') { + const previousDimensions = ( + await db.query( + `SELECT "dimensionKey",dimensions FROM "SendingMonitorSnapshot" WHERE type=$1 AND "evaluationAt"=(SELECT max("evaluationAt") FROM "SendingMonitorSnapshot" WHERE type=$1)`, + [type], + ) + ).rows; + for (const item of previousDimensions) + if (!groups.has(item.dimensionKey)) + groups.set( + item.dimensionKey, + horizons[type].map((seconds) => ({ + dimensionKey: item.dimensionKey, + dimensions: item.dimensions, + total: 0, + eligible: 0, + unassessable: 0, + seconds, + mature: 0, + success: 0, + })), + ); + } + const activeDimensions = ( + await db.query(`SELECT "dimensionKey",dimensions FROM "SendingMonitorAlert" WHERE type=$1 AND state='active'`, [ + type, + ]) + ).rows; + for (const item of activeDimensions) { + if (!groups.has(item.dimensionKey)) + groups.set( + item.dimensionKey, + horizons[type].map((seconds) => ({ + dimensionKey: item.dimensionKey, + dimensions: item.dimensions, + total: 0, + eligible: 0, + unassessable: 0, + seconds, + mature: 0, + success: 0, + })), + ); + } + const activeAlerts = new Map( + ( + await db.query(`SELECT * FROM "SendingMonitorAlert" WHERE type=$1 AND state='active'`, [type]) + ).rows.map((a) => [a.dimensionKey, a]), + ); + const counters = new Map( + ( + await db.query<{ id: string; data: CounterState }>( + `SELECT id,data FROM "SendingMonitorCheckpoint" WHERE id=ANY($1::text[])`, + [[...groups.keys()].map((key) => `alert-state:${type}:${key}`)], + ) + ).rows.map((c) => [c.id, c.data]), + ); + for (const [key, rows] of groups) { + const first = rows[0], + rule = matchRules(rules, type, first.dimensions)[0] ?? null; + const values = horizons[type].map((seconds, i) => { + const row = rows.find((r) => r.seconds === seconds)!; + return metric( + seconds, + row.success, + row.mature, + Math.max(0, row.eligible - row.mature), + rule?.config.thresholds[i] ?? null, + rule?.config.minSamples ?? 1, + ); + }); + const metrics = { total: first.total, unassessable: first.unassessable, metrics: values }; + const status = !complete + ? 'stale' + : first.unassessable + ? 'unassessable' + : !rule + ? 'unconfigured' + : !rule.config.enabled + ? 'disabled' + : !first.total + ? 'no_data' + : values.some((m) => m.bad) + ? 'abnormal' + : values.some((m) => m.threshold !== null && m.insufficient) + ? 'sample_insufficient' + : 'normal'; + const snapshot: Evaluation = { + id: keyOf([type, key, t.toISOString()]), + type, + dimensionKey: key, + dimensions: first.dimensions, + evaluationAt: t.toISOString(), + windowFrom: from.toISOString(), + observedUntil: observed.toISOString(), + stage: final ? 'final' : 'initial', + metrics, + rule, + status, + completeness: { complete, reason: complete ? undefined : '采集未完成或回执待匹配,暂停告警判断' }, + computedAt: new Date().toISOString(), + }; + const saved = await db.query( + `INSERT INTO "SendingMonitorSnapshot" (id,type,"dimensionKey",dimensions,"evaluationAt","windowFrom","observedUntil",stage,metrics,rule,status,completeness) + VALUES($1,$2,$3,$4::jsonb,$5,$6,$7,$8,$9::jsonb,$10::jsonb,$11,$12::jsonb) + ON CONFLICT(id) DO UPDATE SET "observedUntil"=EXCLUDED."observedUntil",stage=EXCLUDED.stage,metrics=EXCLUDED.metrics,rule=EXCLUDED.rule,status=EXCLUDED.status,completeness=EXCLUDED.completeness, + revision="SendingMonitorSnapshot".revision+1,"computedAt"=(CURRENT_TIMESTAMP AT TIME ZONE 'UTC') + WHERE ("SendingMonitorSnapshot".metrics,"SendingMonitorSnapshot".stage,"SendingMonitorSnapshot".status,"SendingMonitorSnapshot".rule,"SendingMonitorSnapshot".completeness) + IS DISTINCT FROM (EXCLUDED.metrics,EXCLUDED.stage,EXCLUDED.status,EXCLUDED.rule,EXCLUDED.completeness) RETURNING revision`, + [ + snapshot.id, + type, + key, + JSON.stringify(snapshot.dimensions), + t, + from, + observed, + snapshot.stage, + JSON.stringify(metrics), + JSON.stringify(rule), + status, + JSON.stringify(snapshot.completeness), + ], + ); + if (saved.rows.length) + await updateAlert( + db, + snapshot, + Number(saved.rows[0].revision), + counters.get(`alert-state:${type}:${key}`), + activeAlerts.get(key), + ); + } +} + +async function updateAlert( + db: PoolClient, + s: Evaluation, + revision: number, + stored?: CounterState, + active?: StoredAlert, +) { + const id = `alert-state:${s.type}:${s.dimensionKey}`; + const previous = stored ?? { bad: 0, good: 0, t: '', ruleKey: '' }; + if (previous.t > s.evaluationAt) return; + const ruleKey = s.rule ? `${s.rule.ruleId}:${s.rule.version}` : 'none'; + if (active && active.ruleKey !== ruleKey) { + await db.query( + `UPDATE "SendingMonitorAlert" SET state='closed',"closedAt"=(CURRENT_TIMESTAMP AT TIME ZONE 'UTC'),"closeReason"=$2 WHERE id=$1`, + [active.id, s.rule?.config.enabled ? 'rule_changed' : 'disabled'], + ); + active = undefined; + } + if (previous.ruleKey !== ruleKey) { + previous.bad = 0; + previous.good = 0; + previous.ruleKey = ruleKey; + previous.t = ''; + } + const config = s.rule?.config; + const usable = s.completeness.complete && s.metrics.unassessable === 0 && config?.enabled && s.metrics.total > 0; + const bad = usable && s.metrics.metrics.some((m) => m.bad); + const good = usable && s.metrics.metrics.filter((m) => m.threshold !== null).every((m) => !m.bad && !m.insufficient); + const final = s.stage === 'final'; + if (final && previous.t !== s.evaluationAt && usable) { + if (bad) { + previous.bad++; + previous.good = 0; + } else if (good) { + previous.good++; + previous.bad = 0; + } + } + if (bad && !active && ((final && previous.bad >= config!.consecutiveBad) || config!.consecutiveBad === 1)) { + const alertId = randomUUID(); + await db.query( + `INSERT INTO "SendingMonitorAlert" (id,type,"dimensionKey",dimensions,state,"openedAt","lastEvaluatedAt","ruleKey",latest,worst) + VALUES($1,$2,$3,$4::jsonb,'active',$5,$5,$6,$7::jsonb,$7::jsonb)`, + [ + alertId, + s.type, + s.dimensionKey, + JSON.stringify(s.dimensions), + s.evaluationAt, + ruleKey, + JSON.stringify({ ...s, revision }), + ], + ); + } else if (active) { + const corrected = revision > 1 && good && active.openedAt.toISOString() === s.evaluationAt; + const recovered = final && good && previous.good >= config!.consecutiveGood; + const worst = + bad && + s.metrics.metrics.some((m, i) => m.rate !== null && (active.worst.metrics.metrics[i]?.rate ?? 101) > m.rate) + ? { ...s, revision } + : active.worst; + await db.query( + `UPDATE "SendingMonitorAlert" SET latest=$2::jsonb,worst=$3::jsonb,"lastEvaluatedAt"=$4,"updatedAt"=(CURRENT_TIMESTAMP AT TIME ZONE 'UTC'), + state=$5,"closedAt"=CASE WHEN $5<>'active' THEN (CURRENT_TIMESTAMP AT TIME ZONE 'UTC') ELSE NULL END,"closeReason"=$6 WHERE id=$1`, + [ + active.id, + JSON.stringify({ ...s, revision }), + JSON.stringify(worst), + s.evaluationAt, + corrected ? 'closed' : recovered ? 'recovered' : 'active', + corrected ? 'data_corrected' : recovered ? 'recovered' : null, + ], + ); + } + if (final && usable) previous.t = s.evaluationAt; + await db.query( + `INSERT INTO "SendingMonitorCheckpoint" (id,data) VALUES($1,$2::jsonb) ON CONFLICT(id) DO UPDATE SET data=EXCLUDED.data,"updatedAt"=(CURRENT_TIMESTAMP AT TIME ZONE 'UTC')`, + [id, JSON.stringify(previous)], + ); +} diff --git a/api/src/sending-monitor/monitor-metrics.spec.ts b/api/src/sending-monitor/monitor-metrics.spec.ts new file mode 100644 index 0000000..3938a38 --- /dev/null +++ b/api/src/sending-monitor/monitor-metrics.spec.ts @@ -0,0 +1,88 @@ +import { completeAttempt, evaluateSamples, matchRules, validateRule, type Rule } from './monitor-metrics'; +const base = Date.parse('2026-09-06T04:30:00Z'); +const rule: Rule = { + ruleId: 'r', + version: 1, + type: 'industry', + scope: {}, + effectiveAt: new Date(base).toISOString(), + config: { enabled: true, minSamples: 1, thresholds: [90, 95, 98], consecutiveBad: 1, consecutiveGood: 2 }, +}; +describe('sending monitor business metrics', () => { + it('uses exact milliseconds and does not count early successes before maturity', () => { + const samples = [4999, 5000, 5001].map((ms) => ({ + submittedAt: new Date(base - 60000), + successAt: new Date(base - 60000 + ms), + })); + const result = evaluateSamples( + [...samples, { submittedAt: new Date(base - 1000), successAt: new Date(base - 500) }], + 'industry', + new Date(base), + rule, + ); + expect(result.metrics[0]).toMatchObject({ success: 2, mature: 3, observing: 1, bad: true }); + expect(result.metrics[2]).toMatchObject({ success: 3, mature: 3, observing: 1, bad: false }); + }); + it('finalizes the last second of a fixed five-minute window once mature', () => { + const samples = [{ submittedAt: new Date(base - 1000), successAt: new Date(base + 49000) }]; + expect(evaluateSamples(samples, 'industry', new Date(base), rule).metrics[2].mature).toBe(0); + expect(evaluateSamples(samples, 'industry', new Date(base + 60000), rule).metrics[2]).toMatchObject({ + mature: 1, + success: 1, + }); + }); + it('keeps unknown times out of denominator and null for no mature samples', () => { + const result = evaluateSamples( + [{ submittedAt: new Date(base - 60000), successAt: null, reason: 'missing_wire_time' }], + 'industry', + new Date(base), + rule, + ); + expect(result.unassessable).toBe(1); + expect(result.metrics[0].rate).toBeNull(); + expect(result.metrics[0].bad).toBe(false); + }); + it('only matures the first ten minutes for the 20-minute overall metric', () => { + const samples = Array.from({ length: 30 }, (_, i) => ({ + submittedAt: new Date(base - 1800000 + i * 60000 + 1), + successAt: null, + })); + expect(evaluateSamples(samples, 'overall', new Date(base)).metrics[2]).toMatchObject({ mature: 10, observing: 20 }); + }); + it('requires every unique fragment of the same attempt', () => { + expect(completeAttempt([{ index: 1, total: 2, firstSuccess: new Date(base) }])).toBeNull(); + expect( + completeAttempt([ + { index: 1, total: 2, firstSuccess: new Date(base) }, + { index: 2, total: 2, firstSuccess: new Date(base + 5000) }, + ])?.getTime(), + ).toBe(base + 5000); + expect( + completeAttempt([ + { index: 1, total: 2, firstSuccess: new Date(base) }, + { index: 1, total: 2, firstSuccess: new Date(base) }, + ]), + ).toBeNull(); + }); + it('matches full rule precedence without crossing tenants', () => { + const scopes = [ + {}, + { tenantId: 't', applicationId: 'a' }, + { tenantId: 't', signatureId: 's' }, + { tenantId: 't', applicationId: 'a', signatureId: 's' }, + { tenantId: 'other', signatureId: 's' }, + ]; + const rules = scopes.map((scope, i) => ({ ...rule, ruleId: String(i), type: 'overall' as const, scope })); + expect( + matchRules(rules, 'overall', { tenantId: 't', applicationId: 'a', signatureId: 's' }).map((r) => r.ruleId), + ).toEqual(['3', '2', '1', '0']); + }); + it('validates sample count, threshold order, scope and consecutive counts', () => { + expect(validateRule('industry', {}, rule.config)).toBeNull(); + expect(validateRule('industry', {}, { ...rule.config, minSamples: 0 })).toBeTruthy(); + expect(validateRule('industry', {}, { ...rule.config, thresholds: [99, 95, null] })).toBeTruthy(); + expect(validateRule('industry', {}, { ...rule.config, thresholds: [null, null, null] })).toBeTruthy(); + expect(validateRule('overall', { applicationId: 'a' }, rule.config)).toBeTruthy(); + expect(validateRule('overall', {}, { ...rule.config, consecutiveGood: 6 })).toBeTruthy(); + }); +}); diff --git a/api/src/sending-monitor/monitor-metrics.ts b/api/src/sending-monitor/monitor-metrics.ts new file mode 100644 index 0000000..1556183 --- /dev/null +++ b/api/src/sending-monitor/monitor-metrics.ts @@ -0,0 +1,147 @@ +export const horizons = { industry: [5, 20, 60], verification: [5, 20, 60], overall: [60, 300, 1200] } as const; +export type MonitorType = keyof typeof horizons; +export type Dimensions = { + tenantId?: string; + tenantName?: string; + applicationId?: string; + applicationName?: string; + signatureId?: string; + signatureName?: string; + channelId?: string; + channelName?: string; + carrier?: string; +}; +export type MonitorScope = { tenantId?: string; applicationId?: string; signatureId?: string }; +export type RuleConfig = { + enabled: boolean; + minSamples: number; + thresholds: (number | null)[]; + consecutiveBad: number; + consecutiveGood: number; + deleted?: boolean; +}; +export type Rule = { + ruleId: string; + version: number; + type: MonitorType; + scope: MonitorScope; + config: RuleConfig; + effectiveAt: string; +}; +export type Metric = { + seconds: number; + success: number; + mature: number; + observing: number; + rate: number | null; + threshold: number | null; + insufficient: boolean; + bad: boolean; +}; +export type Sample = { submittedAt: Date; successAt: Date | null; reason?: string | null }; + +export function evaluateSamples(samples: Sample[], type: MonitorType, observedUntil: Date, rule?: Rule | null) { + const eligible = samples.filter((s) => !s.reason); + const metrics: Metric[] = horizons[type].map((seconds, i) => { + const mature = eligible.filter((s) => s.submittedAt.getTime() + seconds * 1000 <= observedUntil.getTime()); + const success = mature.filter( + (s) => + s.successAt && + s.successAt >= s.submittedAt && + s.successAt.getTime() - s.submittedAt.getTime() <= seconds * 1000, + ).length; + return metric( + seconds, + success, + mature.length, + eligible.length - mature.length, + rule?.config.thresholds[i] ?? null, + rule?.config.minSamples ?? 1, + ); + }); + return { total: samples.length, unassessable: samples.length - eligible.length, metrics }; +} + +export function metric( + seconds: number, + success: number, + mature: number, + observing: number, + threshold: number | null, + min: number, +): Metric { + return { + seconds, + success, + mature, + observing, + threshold, + rate: mature ? (100 * success) / mature : null, + insufficient: mature < min, + bad: threshold !== null && mature >= min && success * 10000 < Math.round(threshold * 100) * mature, + }; +} + +export function matchRules(rules: Rule[], type: MonitorType, dimension: Dimensions) { + return rules + .filter( + (r) => + r.type === type && + !r.config.deleted && + Object.entries(r.scope).every(([key, value]) => !value || dimension[key as keyof Dimensions] === value), + ) + .sort((a, b) => score(b.scope) - score(a.scope)); +} +const score = (scope: MonitorScope) => (scope.signatureId ? 2 : 0) + (scope.applicationId ? 1 : 0); + +export function validateRule(type: string, scope: MonitorScope, input: RuleConfig): string | null { + if (!Object.hasOwn(horizons, type)) return '监控类型无效'; + if (!scope || Object.keys(scope).some((k) => !['tenantId', 'applicationId', 'signatureId'].includes(k))) + return '规则范围无效'; + if (Object.values(scope).some((v) => typeof v !== 'string' || !v.trim() || v.length > 200)) return '规则范围ID无效'; + if (type !== 'overall' && Object.keys(scope).length) return '仅整体兜底支持个性规则'; + if (Object.keys(scope).length && (!scope.tenantId || (!scope.applicationId && !scope.signatureId))) + return '个性规则须指定企业和应用或签名'; + if ( + !input || + typeof input.enabled !== 'boolean' || + !Number.isSafeInteger(input.minSamples) || + input.minSamples < 1 || + input.minSamples > 100000000 + ) + return '最低样本量须为正整数'; + if (![input.consecutiveBad, input.consecutiveGood].every((n) => Number.isInteger(n) && n >= 1 && n <= 5)) + return '连续次数须为1至5'; + if (!Array.isArray(input.thresholds) || input.thresholds.length !== 3 || input.thresholds.every((n) => n === null)) + return '至少设置一项时效指标'; + if (input.deleted !== undefined && typeof input.deleted !== 'boolean') return '删除标记无效'; + let previous = -1; + for (const n of input.thresholds) { + if (n === null) continue; + if ( + typeof n !== 'number' || + !Number.isFinite(n) || + n < 0 || + n > 100 || + Math.abs(n * 100 - Math.round(n * 100)) > 0.000001 || + n < previous + ) + return '下限须为0至100,最多两位小数,按时限递增'; + previous = n; + } + return null; +} + +// Success fragments from different attempts must never be combined. +export function completeAttempt(segments: { index: number; total: number; firstSuccess: Date | null }[]): Date | null { + const total = Math.max(1, ...segments.map((s) => s.total)); + const unique = new Map(segments.map((s) => [s.index, s])); + if (unique.size !== total) return null; + let last = 0; + for (let i = 1; i <= total; i++) { + const at = unique.get(i)?.firstSuccess; + if (!at) return null; + last = Math.max(last, at.getTime()); + } + return new Date(last); +} diff --git a/api/src/sending-monitor/monitor-projection.ts b/api/src/sending-monitor/monitor-projection.ts new file mode 100644 index 0000000..e9ee87d --- /dev/null +++ b/api/src/sending-monitor/monitor-projection.ts @@ -0,0 +1,198 @@ +import { createHash } from 'node:crypto'; +import { PoolClient } from 'pg'; +import { completeAttempt, type Dimensions } from './monitor-metrics'; + +type Attempt = { + id: string; + messageRecordId: string; + channelId: string; + createdAt: Date; + firstWireSubmitAt: Date | null; + wireTimeSource: string | null; + submitStatus: string; + tenantId: string | null; + applicationId: string | null; + signatureId: string | null; + tenantName: string | null; + applicationName: string | null; + signatureName: string | null; + channelName: string; + carrier: string | null; + content: string; + receiptRequested: boolean | null; +}; +type Segment = { + submitRecordId: string; + segmentIndex: number; + segmentTotal: number; + firstWireSubmitAt: Date | null; + wireTimeSource: string | null; + firstSuccess: Date | null; + missingReceiptTime: boolean; + ambiguousReceipt: boolean; + receiptRequested: boolean | null; +}; +type Fact = { + id: string; + kind: string; + sourceId: string; + messageRecordId: string; + dimensionKey: string; + dimensions: Dimensions; + submittedAt: string; + successAt: string | null; + verification: boolean; + reason: string | null; +}; +export const keyOf = (parts: unknown[]) => createHash('sha256').update(JSON.stringify(parts)).digest('hex'); + +export async function projectMessages(db: PoolClient, ids: string[]) { + if (!ids.length) return; + const attempts: Attempt[] = ( + await db.query( + `SELECT s.id,s."messageRecordId",s."channelId",s."createdAt",s."firstWireSubmitAt",s."wireTimeSource",s."submitStatus",s."receiptRequested", + m."tenantId",m."applicationId",m."signatureId",m.carrier,m.content,m."cmppRegisteredDelivery",t.name "tenantName",a.name "applicationName",g.name "signatureName",c.name "channelName" + FROM "SmsSubmitRecord" s JOIN "SmsMessageRecord" m ON m.id=s."messageRecordId" LEFT JOIN "Tenant" t ON t.id=m."tenantId" + LEFT JOIN "SmsApplication" a ON a.id=m."applicationId" LEFT JOIN "SmsSignature" g ON g.id=m."signatureId" JOIN "SmsChannel" c ON c.id=s."channelId" + WHERE s."messageRecordId"=ANY($1::text[])`, + [ids], + ) + ).rows; + const segments: Segment[] = ( + await db.query( + `SELECT a."submitRecordId",a."segmentIndex",a."segmentTotal",a."firstWireSubmitAt",a."wireTimeSource",a."receiptRequested", + EXISTS (SELECT 1 FROM "SmsMessageSegmentAudit" other WHERE other."messageRecordId"=a."messageRecordId" AND other."gatewayMessageId"=a."gatewayMessageId" AND other."channelId"=a."channelId" AND other."submitId"<>a."submitId") "ambiguousReceipt", + min(i."gatewayReceivedAt") FILTER(WHERE i."receiptStatus"='delivered' AND i.status='matched') "firstSuccess", + bool_or(i."receiptStatus"='delivered' AND i."gatewayReceivedAt" IS NULL) "missingReceiptTime" + FROM "SmsMessageSegmentAudit" a LEFT JOIN "UpstreamReceiptInbox" i ON i."matchedMessageRecordId"=a."messageRecordId" AND i."gatewayMessageId"=a."gatewayMessageId" + AND (i."incomingChannelId"=a."channelId" OR i."matchedChannelId"=a."channelId") + AND NOT EXISTS (SELECT 1 FROM "SmsMessageSegmentAudit" other WHERE other."messageRecordId"=a."messageRecordId" AND other."gatewayMessageId"=a."gatewayMessageId" AND other."channelId"=a."channelId" AND other."submitId"<>a."submitId") + WHERE a."messageRecordId"=ANY($1::text[]) GROUP BY a.id`, + [ids], + ) + ).rows; + const previous: Fact[] = ( + await db.query(`SELECT * FROM "SendingMonitorFact" WHERE "sourceId"=ANY($1::text[]) AND kind='business'`, [ids]) + ).rows; + const existing = new Map(previous.map((p) => [p.sourceId, p])); + const facts: Fact[] = [], + byMessage = new Map(); + for (const a of attempts) { + const parts = segments.filter((s) => s.submitRecordId === a.id); + const times = [a.firstWireSubmitAt, ...parts.map((p) => p.firstWireSubmitAt)].filter((t): t is Date => Boolean(t)); + const at = times.length ? new Date(Math.min(...times.map((t) => t.getTime()))) : a.createdAt; + const source = times.length ? 'gateway_write_complete' : a.wireTimeSource; + // A queued attempt with no result may have crashed after write. Keep it visible as unassessable. + if (source === 'not_written' && !times.length) continue; + const successAt = completeAttempt( + parts.map((p) => ({ index: p.segmentIndex, total: p.segmentTotal, firstSuccess: p.firstSuccess })), + ); + const receiptRequested = a.receiptRequested ?? parts.find((p) => p.receiptRequested !== null)?.receiptRequested; + const reason = + source !== 'gateway_write_complete' + ? source === 'write_uncertain' + ? 'write_uncertain' + : 'missing_wire_time' + : receiptRequested === false + ? 'receipt_not_requested' + : receiptRequested !== true + ? 'missing_receipt_configuration' + : !parts.length + ? 'missing_segment_snapshot' + : parts.some((p) => p.ambiguousReceipt) + ? 'ambiguous_receipt' + : parts.some((p) => p.firstSuccess && p.firstWireSubmitAt && p.firstSuccess < p.firstWireSubmitAt) + ? 'negative_latency' + : parts.some((p) => p.missingReceiptTime && !p.firstSuccess) + ? 'missing_receipt_time' + : successAt && successAt < at + ? 'negative_latency' + : null; + const dim: Dimensions = { channelId: a.channelId, channelName: a.channelName, carrier: a.carrier ?? 'unknown' }; + const fact: Fact = { + id: `attempt:${a.id}`, + kind: 'attempt', + sourceId: a.id, + messageRecordId: a.messageRecordId, + dimensionKey: keyOf([a.channelId, dim.carrier]), + dimensions: dim, + submittedAt: at.toISOString(), + successAt: successAt?.toISOString() ?? null, + verification: existing.get(a.messageRecordId)?.verification ?? a.content.includes('验证码'), + reason, + }; + facts.push(fact); + const group = byMessage.get(a.messageRecordId) ?? { attempt: a, facts: [] }; + group.facts.push(fact); + byMessage.set(a.messageRecordId, group); + } + for (const [id, { attempt: a, facts: tries }] of byMessage) { + const prev = existing.get(id); + const dimensions = prev?.dimensions ?? { + tenantId: a.tenantId ?? '', + tenantName: a.tenantName ?? '未识别企业', + applicationId: a.applicationId ?? '', + applicationName: a.applicationName ?? '未识别应用', + signatureId: a.signatureId ?? '', + signatureName: a.signatureName ?? '未识别签名', + }; + const at = new Date(Math.min(...tries.map((f) => new Date(f.submittedAt).getTime()))); + const successes = tries.filter((f) => !f.reason && f.successAt).map((f) => new Date(f.successAt!).getTime()); + const successAt = successes.length ? new Date(Math.min(...successes)) : null; + const reason = + !a.tenantId || !a.applicationId || !a.signatureId + ? 'missing_dimension' + : (tries.find((f) => f.reason === 'missing_wire_time' || f.reason === 'write_uncertain')?.reason ?? + (tries.every((f) => f.reason) ? tries[0].reason : successAt && successAt < at ? 'negative_latency' : null)); + facts.push({ + id: `business:${id}`, + kind: 'business', + sourceId: id, + messageRecordId: id, + dimensionKey: keyOf([a.tenantId, a.applicationId, a.signatureId]), + dimensions, + submittedAt: at.toISOString(), + successAt: successAt?.toISOString() ?? null, + verification: prev?.verification ?? a.content.includes('验证码'), + reason, + }); + } + if (!facts.length) return; + const old = ( + await db.query(`SELECT id,"submittedAt" FROM "SendingMonitorFact" WHERE id=ANY($1::text[])`, [ + facts.map((f) => f.id), + ]) + ).rows; + const changed = await db.query( + `INSERT INTO "SendingMonitorFact" (id,kind,"sourceId","messageRecordId","dimensionKey",dimensions,"submittedAt","successAt",verification,reason) + SELECT id,kind,"sourceId","messageRecordId","dimensionKey",dimensions,"submittedAt","successAt",verification,reason FROM jsonb_to_recordset($1::jsonb) + AS f(id text,kind text,"sourceId" text,"messageRecordId" text,"dimensionKey" text,dimensions jsonb,"submittedAt" timestamp,"successAt" timestamp,verification boolean,reason text) + ON CONFLICT(id) DO UPDATE SET "submittedAt"=EXCLUDED."submittedAt","successAt"=EXCLUDED."successAt",reason=EXCLUDED.reason,"updatedAt"=(CURRENT_TIMESTAMP AT TIME ZONE 'UTC') + WHERE ("SendingMonitorFact"."submittedAt","SendingMonitorFact"."successAt","SendingMonitorFact".reason) IS DISTINCT FROM (EXCLUDED."submittedAt",EXCLUDED."successAt",EXCLUDED.reason) RETURNING id,"submittedAt"`, + [JSON.stringify(facts)], + ); + if (!changed.rows.length) return []; + const changedIds = new Set(changed.rows.map((f) => f.id)); + const minutes = [ + ...new Set( + [...changed.rows, ...old.filter((f) => changedIds.has(f.id))].map((f) => + new Date(Math.floor(new Date(f.submittedAt).getTime() / 60000) * 60000).toISOString(), + ), + ), + ]; + await db.query(`DELETE FROM "SendingMonitorMinute" WHERE minute=ANY($1::timestamp[])`, [minutes]); + await db.query( + `INSERT INTO "SendingMonitorMinute" (kind,"dimensionKey",minute,verification,dimensions,metrics) + SELECT kind,"dimensionKey",date_trunc('minute',"submittedAt"),verification,(jsonb_agg(dimensions ORDER BY "updatedAt" DESC))->0, + jsonb_build_object('total',count(*),'eligible',count(*) FILTER(WHERE reason IS NULL),'unassessable',count(*) FILTER(WHERE reason IS NOT NULL), + 's5',count(*) FILTER(WHERE reason IS NULL AND "successAt"-"submittedAt" BETWEEN interval '0 seconds' AND interval '5 seconds'), + 's20',count(*) FILTER(WHERE reason IS NULL AND "successAt"-"submittedAt" BETWEEN interval '0 seconds' AND interval '20 seconds'), + 's60',count(*) FILTER(WHERE reason IS NULL AND "successAt"-"submittedAt" BETWEEN interval '0 seconds' AND interval '60 seconds'), + 's300',count(*) FILTER(WHERE reason IS NULL AND "successAt"-"submittedAt" BETWEEN interval '0 seconds' AND interval '300 seconds'), + 's1200',count(*) FILTER(WHERE reason IS NULL AND "successAt"-"submittedAt" BETWEEN interval '0 seconds' AND interval '1200 seconds')) + FROM "SendingMonitorFact" WHERE "submittedAt">=ANY($1::timestamp[]) AND date_trunc('minute',"submittedAt")=ANY($1::timestamp[]) + GROUP BY kind,"dimensionKey",date_trunc('minute',"submittedAt"),verification`, + [minutes], + ); + return minutes; +} diff --git a/api/src/sending-monitor/sending-monitor.module.ts b/api/src/sending-monitor/sending-monitor.module.ts new file mode 100644 index 0000000..8c350c1 --- /dev/null +++ b/api/src/sending-monitor/sending-monitor.module.ts @@ -0,0 +1,397 @@ +import { + BadRequestException, + Body, + ConflictException, + Controller, + ForbiddenException, + Get, + Injectable, + Module, + NotFoundException, + Param, + Post, + Put, + Query, + Req, +} from '@nestjs/common'; +import { randomUUID } from 'node:crypto'; +import { PrismaService } from '../prisma/prisma.service'; +import { PrismaModule } from '../prisma/prisma.module'; +import type { SessionRequest } from '../auth/session-validation.middleware'; +import { + horizons, + matchRules, + validateRule, + type MonitorScope, + type MonitorType, + type Rule, + type RuleConfig, +} from './monitor-metrics'; + +type QueryParams = Record; +const pageNumber = (value: string | undefined, fallback: number, max = 100000) => { + const n = value === undefined ? fallback : Number(value); + if (!Number.isSafeInteger(n) || n < 1 || n > max) throw new BadRequestException('分页参数无效'); + return n; +}; +const healthy = `EXISTS(SELECT 1 FROM "SendingMonitorCheckpoint" WHERE id='health' AND "updatedAt">(CURRENT_TIMESTAMP AT TIME ZONE 'UTC')-interval '30 seconds' AND data->>'complete'='true')`; +const monitorType = (value = 'industry'): MonitorType => { + if (!Object.hasOwn(horizons, value)) throw new BadRequestException('监控类型无效'); + return value as MonitorType; +}; + +@Injectable() +export class SendingMonitorService { + constructor(private readonly prisma: PrismaService) {} + async authorize(req: SessionRequest, permission: 'view' | 'rules' | 'targets' = 'view') { + const user = + req.authSession?.portal === 'admin' && + req.sessionUserId && + (await this.prisma.user.findFirst({ + where: { + id: req.sessionUserId, + status: 'active', + deletedAt: null, + roles: { some: { role: { code: 'platform_admin' } } }, + }, + select: { id: true }, + })); + if (!user) throw new ForbiddenException(`无发送监控${permission === 'view' ? '查看' : '配置'}权限`); + return user.id; + } + async rows(query: QueryParams) { + const type = monitorType(query.type), + page = pageNumber(query.page, 1), + pageSize = pageNumber(query.pageSize, 20, 100); + const filter = `s.type=$1 AND s."evaluationAt"=(SELECT max("evaluationAt") FROM "SendingMonitorSnapshot" WHERE type=$1) + AND ($2='' OR (CASE WHEN ${healthy} THEN s.status ELSE 'stale' END)=$2) AND ($3='' OR s.dimensions::text ILIKE '%'||$3||'%') + AND ($4='' OR s.dimensions->>'tenantId'=$4) AND ($5='' OR s.dimensions->>'applicationId'=$5) AND ($6='' OR s.dimensions->>'signatureId'=$6)`; + const args = [ + type, + query.status ?? '', + query.keyword?.trim() ?? '', + query.tenantId ?? '', + query.applicationId ?? '', + query.signatureId ?? '', + ]; + const [items, count, checkpoint] = await Promise.all([ + this.prisma.$queryRawUnsafe( + `SELECT s.*,CASE WHEN ${healthy} THEN s.status ELSE 'stale' END status FROM "SendingMonitorSnapshot" s WHERE ${filter} ORDER BY (s.status='abnormal') DESC,s."dimensionKey" LIMIT $7 OFFSET $8`, + ...args, + pageSize, + (page - 1) * pageSize, + ), + this.prisma.$queryRawUnsafe>( + `SELECT count(*)::int total FROM "SendingMonitorSnapshot" s WHERE ${filter}`, + ...args, + ), + this.prisma.$queryRawUnsafe>( + `SELECT data,"updatedAt" FROM "SendingMonitorCheckpoint" WHERE id='health'`, + ), + ]); + return { items, total: count[0].total, page, pageSize, health: checkpoint[0] ?? null }; + } + async overview(query: QueryParams) { + const type = monitorType(query.type); + const rows = await this.prisma.$queryRawUnsafe( + `SELECT CASE WHEN ${healthy} THEN status ELSE 'stale' END status,count(*)::int dimensions,sum((metrics->>'total')::bigint)::text total,max("evaluationAt") "evaluationAt",max("computedAt") "computedAt" + FROM "SendingMonitorSnapshot" WHERE type=$1 AND "evaluationAt"=(SELECT max("evaluationAt") FROM "SendingMonitorSnapshot" WHERE type=$1) GROUP BY 1`, + type, + ); + return { type, rows, permissions: { view: true, rules: true, targets: true } }; + } + async history(query: QueryParams) { + const type = monitorType(query.type); + if (!query.dimensionId || query.dimensionId.length > 500) throw new BadRequestException('维度无效'); + const hours = query.range === '24h' ? 24 : 2; + return this.prisma.$queryRawUnsafe( + `SELECT * FROM "SendingMonitorSnapshot" WHERE type=$1 AND "dimensionKey"=$2 AND "evaluationAt">(CURRENT_TIMESTAMP AT TIME ZONE 'UTC')-($3::int*interval '1 hour') ORDER BY "evaluationAt" LIMIT 300`, + type, + query.dimensionId, + hours, + ); + } + async targets() { + return this.prisma.$queryRawUnsafe( + `SELECT c.id,c.name,c.carrier,c.carriers,c.status,COALESCE(t.enabled,false) enabled,COALESCE(t.version,0) version,t."effectiveFrom" FROM "SmsChannel" c LEFT JOIN "SendingMonitorTarget" t ON t."channelId"=c.id WHERE c.status<>'deleted' ORDER BY c.name,c.id`, + ); + } + async target(id: string, body: { enabled?: boolean; version?: number }, actor: string) { + if (!body || typeof body.enabled !== 'boolean' || !Number.isSafeInteger(body.version) || body.version! < 0) + throw new BadRequestException('监控配置参数无效'); + return this.prisma.$transaction(async (tx) => { + const channel = await tx.smsChannel.findFirst({ + where: { id, status: { not: 'deleted' } }, + select: { id: true }, + }); + if (!channel) throw new NotFoundException('通道不存在'); + await tx.$queryRaw`SELECT pg_advisory_xact_lock(hashtextextended(${`monitor-target:${id}`},0))`; + const old = await tx.$queryRawUnsafe>( + `SELECT * FROM "SendingMonitorTarget" WHERE "channelId"=$1`, + id, + ); + if ((old[0]?.version ?? 0) !== body.version) throw new ConflictException('监控范围已被修改,请刷新'); + const result = await tx.$queryRawUnsafe( + `INSERT INTO "SendingMonitorTarget" ("channelId",enabled,version,"effectiveFrom","updatedBy") VALUES($1,$2,1,to_timestamp((floor(extract(epoch FROM (CURRENT_TIMESTAMP AT TIME ZONE 'UTC'))/300)+1)*300) AT TIME ZONE 'UTC',$3) + ON CONFLICT("channelId") DO UPDATE SET enabled=EXCLUDED.enabled,version="SendingMonitorTarget".version+1,"effectiveFrom"=EXCLUDED."effectiveFrom","updatedAt"=(CURRENT_TIMESTAMP AT TIME ZONE 'UTC'),"updatedBy"=$3 RETURNING *`, + id, + body.enabled, + actor, + ); + await tx.$executeRawUnsafe( + `INSERT INTO "SendingMonitorTargetVersion" ("channelId",version,enabled,"effectiveFrom","updatedBy") SELECT "channelId",version,enabled,"effectiveFrom","updatedBy" FROM "SendingMonitorTarget" WHERE "channelId"=$1`, + id, + ); + await tx.operationLog.create({ + data: { + userId: actor, + action: 'sending_monitor.target', + resource: 'sending_monitor', + resourceId: id, + detail: { before: old[0] ?? null, after: { enabled: body.enabled, version: body.version! + 1 } }, + }, + }); + if (!body.enabled) + await tx.$executeRawUnsafe( + `UPDATE "SendingMonitorAlert" SET state='closed',"closedAt"=(CURRENT_TIMESTAMP AT TIME ZONE 'UTC'),"closeReason"='enrollment_removed' WHERE type='industry' AND dimensions->>'channelId'=$1 AND state='active'`, + id, + ); + return result; + }); + } + async rules() { + return this.prisma.$queryRawUnsafe(`SELECT * FROM "SendingMonitorRule" ORDER BY type,"scopeKey"`); + } + async options(q: QueryParams) { + const page = pageNumber(q.page, 1), + take = 20, + skip = (page - 1) * take, + keyword = q.keyword?.trim() ?? ''; + if (q.kind === 'tenant') + return this.prisma.tenant.findMany({ + where: { name: { contains: keyword } }, + select: { id: true, name: true }, + take, + skip, + orderBy: { name: 'asc' }, + }); + if (!q.tenantId) throw new BadRequestException('请先选择企业'); + if (q.kind === 'application') + return this.prisma.smsApplication.findMany({ + where: { tenantId: q.tenantId, name: { contains: keyword } }, + select: { id: true, name: true }, + take, + skip, + orderBy: { name: 'asc' }, + }); + if (q.kind === 'signature') + return this.prisma.smsSignature.findMany({ + where: { tenantId: q.tenantId, applicationId: q.applicationId || undefined, name: { contains: keyword } }, + select: { id: true, name: true }, + take, + skip, + orderBy: { name: 'asc' }, + }); + throw new BadRequestException('选项类型无效'); + } + async effective(query: QueryParams) { + const type = monitorType(query.type); + const rows = await this.prisma.$queryRawUnsafe( + `SELECT DISTINCT ON ("ruleId") * FROM "SendingMonitorRuleVersion" WHERE type=$1 AND "effectiveAt"<=(CURRENT_TIMESTAMP AT TIME ZONE 'UTC') ORDER BY "ruleId",version DESC`, + type, + ); + return matchRules(rows, type, { + tenantId: query.tenantId, + applicationId: query.applicationId, + signatureId: query.signatureId, + }); + } + async saveRule(body: { type: string; scope: MonitorScope; config: RuleConfig; version: number }, actor: string) { + if (!body) throw new BadRequestException('规则参数无效'); + const error = validateRule(body.type, body.scope, body.config); + if (error) throw new BadRequestException(error); + if (!Number.isInteger(body.version) || body.version < 0) throw new BadRequestException('版本无效'); + const scope = Object.fromEntries( + Object.entries(body.scope) + .filter(([, v]) => Boolean(v)) + .sort(), + ) as MonitorScope; + if ( + scope.applicationId && + !(await this.prisma.smsApplication.findFirst({ + where: { id: scope.applicationId, tenantId: scope.tenantId }, + select: { id: true }, + })) + ) + throw new BadRequestException('应用不属于该企业'); + if ( + scope.signatureId && + !(await this.prisma.smsSignature.findFirst({ + where: { + id: scope.signatureId, + tenantId: scope.tenantId, + ...(scope.applicationId ? { applicationId: scope.applicationId } : {}), + }, + select: { id: true }, + })) + ) + throw new BadRequestException('签名不属于该企业或应用'); + const scopeKey = JSON.stringify(scope), + type = monitorType(body.type); + return this.prisma.$transaction(async (tx) => { + await tx.$queryRaw`SELECT pg_advisory_xact_lock(hashtextextended(${`monitor-rule:${type}:${scopeKey}`},0))`; + const old = await tx.$queryRawUnsafe>( + `SELECT * FROM "SendingMonitorRule" WHERE type=$1 AND "scopeKey"=$2`, + type, + scopeKey, + ); + if ((old[0]?.version ?? 0) !== body.version) throw new ConflictException('规则已被修改,请刷新后重试'); + const id = old[0]?.id ?? randomUUID(), + period = type === 'overall' ? 600 : 300; + const config = { + enabled: body.config.enabled, + minSamples: body.config.minSamples, + thresholds: body.config.thresholds, + consecutiveBad: body.config.consecutiveBad, + consecutiveGood: body.config.consecutiveGood, + deleted: Boolean(body.config.deleted), + }; + const result = await tx.$queryRawUnsafe( + `INSERT INTO "SendingMonitorRule" (id,type,"scopeKey",scope,config,version,"effectiveAt","updatedBy") + VALUES($1,$2,$3,$4::jsonb,$5::jsonb,$6,to_timestamp((floor(extract(epoch FROM (CURRENT_TIMESTAMP AT TIME ZONE 'UTC'))/$7::int)+1)*$7::int) AT TIME ZONE 'UTC',$8) + ON CONFLICT(type,"scopeKey") DO UPDATE SET config=EXCLUDED.config,version=EXCLUDED.version,"effectiveAt"=EXCLUDED."effectiveAt","updatedAt"=(CURRENT_TIMESTAMP AT TIME ZONE 'UTC'),"updatedBy"=$8 RETURNING *`, + id, + type, + scopeKey, + JSON.stringify(scope), + JSON.stringify(config), + body.version + 1, + period, + actor, + ); + await tx.$executeRawUnsafe( + `INSERT INTO "SendingMonitorRuleVersion" ("ruleId",version,type,scope,config,"effectiveAt","createdBy") SELECT id,version,type,scope,config,"effectiveAt","updatedBy" FROM "SendingMonitorRule" WHERE id=$1`, + id, + ); + await tx.operationLog.create({ + data: { + userId: actor, + action: 'sending_monitor.rule', + resource: 'sending_monitor', + resourceId: id, + detail: { before: old[0] ?? null, after: { scope, config, version: body.version + 1 } }, + }, + }); + return result; + }); + } + async alerts(query: QueryParams, user: string) { + const page = pageNumber(query.page, 1), + size = pageNumber(query.pageSize, 20, 100); + const state = query.state ?? ''; + if (state && !['active', 'recovered', 'closed'].includes(state)) throw new BadRequestException('告警状态无效'); + const [items, total] = await Promise.all([ + this.prisma.$queryRawUnsafe( + `SELECT a.*,r."readAt" IS NULL unread FROM "SendingMonitorAlert" a LEFT JOIN "SendingMonitorAlertRead" r ON r."alertId"=a.id AND r."userId"=$1 WHERE ($2='' OR a.state=$2) ORDER BY a."openedAt" DESC,a.id LIMIT $3 OFFSET $4`, + user, + state, + size, + (page - 1) * size, + ), + this.prisma.$queryRawUnsafe>( + `SELECT count(*)::int total FROM "SendingMonitorAlert" WHERE ($1='' OR state=$1)`, + state, + ), + ]); + return { items, total: total[0].total, page, pageSize: size }; + } + async summary(user: string) { + const rows = await this.prisma.$queryRawUnsafe( + `SELECT count(*) FILTER(WHERE r."readAt" IS NULL)::int count,count(*)::int "activeCount",NOT (${healthy}) unavailable FROM "SendingMonitorAlert" a LEFT JOIN "SendingMonitorAlertRead" r ON r."alertId"=a.id AND r."userId"=$1 WHERE a.state='active'`, + user, + ); + return (rows as object[])[0]; + } + async alert(id: string, user: string) { + const rows = await this.prisma.$queryRawUnsafe( + `SELECT a.*,r."readAt" IS NULL unread FROM "SendingMonitorAlert" a LEFT JOIN "SendingMonitorAlertRead" r ON r."alertId"=a.id AND r."userId"=$2 WHERE a.id=$1`, + id, + user, + ); + if (!rows.length) throw new NotFoundException('告警不存在'); + return rows[0]; + } + async read(id: string, user: string) { + const rows = await this.prisma.$queryRawUnsafe>( + `SELECT id FROM "SendingMonitorAlert" WHERE id=$1`, + id, + ); + if (!rows.length) throw new NotFoundException('告警不存在'); + await this.prisma.$executeRawUnsafe( + `INSERT INTO "SendingMonitorAlertRead" ("alertId","userId") VALUES($1,$2) ON CONFLICT DO NOTHING`, + id, + user, + ); + return { success: true }; + } +} + +@Controller('admin/sending-monitor') +class SendingMonitorController { + constructor(private readonly service: SendingMonitorService) {} + @Get('rows') async rows(@Req() req: SessionRequest, @Query() q: QueryParams) { + await this.service.authorize(req); + return this.service.rows(q); + } + @Get('overview') async overview(@Req() req: SessionRequest, @Query() q: QueryParams) { + await this.service.authorize(req); + return this.service.overview(q); + } + @Get('history') async history(@Req() req: SessionRequest, @Query() q: QueryParams) { + await this.service.authorize(req); + return this.service.history(q); + } + @Get('targets') async targets(@Req() req: SessionRequest) { + await this.service.authorize(req); + return this.service.targets(); + } + @Put('targets/:id') async target( + @Req() req: SessionRequest, + @Param('id') id: string, + @Body() body: { enabled?: boolean; version?: number }, + ) { + return this.service.target(id, body, await this.service.authorize(req, 'targets')); + } + @Get('rules') async rules(@Req() req: SessionRequest) { + await this.service.authorize(req); + return this.service.rules(); + } + @Get('options') async options(@Req() req: SessionRequest, @Query() q: QueryParams) { + await this.service.authorize(req); + return this.service.options(q); + } + @Post('rules') async save( + @Req() req: SessionRequest, + @Body() body: { type: string; scope: MonitorScope; config: RuleConfig; version: number }, + ) { + return this.service.saveRule(body, await this.service.authorize(req, 'rules')); + } + @Get('effective-rule') async effective(@Req() req: SessionRequest, @Query() q: QueryParams) { + await this.service.authorize(req); + return this.service.effective(q); + } + @Get('alerts') async alerts(@Req() req: SessionRequest, @Query() q: QueryParams) { + return this.service.alerts(q, await this.service.authorize(req)); + } + @Get('notification-summary') async summary(@Req() req: SessionRequest) { + return this.service.summary(await this.service.authorize(req)); + } + @Get('alerts/:id') async alert(@Req() req: SessionRequest, @Param('id') id: string) { + return this.service.alert(id, await this.service.authorize(req)); + } + @Post('alerts/:id/read') async read(@Req() req: SessionRequest, @Param('id') id: string) { + return this.service.read(id, await this.service.authorize(req)); + } +} +@Module({ imports: [PrismaModule], controllers: [SendingMonitorController], providers: [SendingMonitorService] }) +export class SendingMonitorModule {} diff --git a/docs/contracts/gateway-queue-messages.schema.json b/docs/contracts/gateway-queue-messages.schema.json index 1f9bdee..f9124c1 100644 --- a/docs/contracts/gateway-queue-messages.schema.json +++ b/docs/contracts/gateway-queue-messages.schema.json @@ -130,6 +130,9 @@ "submitStatus": { "enum": ["accepted", "rejected", "timeout"] }, "errorCode": { "type": "string" }, "errorMessage": { "type": "string" }, + "firstWireSubmitAt": { "type": "string", "format": "date-time" }, + "wireTimeSource": { "enum": ["not_written", "write_uncertain", "gateway_write_complete"] }, + "receiptRequested": { "type": "boolean" }, "submittedAt": { "type": "string", "format": "date-time" }, "segments": { "type": "array", @@ -144,7 +147,10 @@ "submitStatus": { "enum": ["accepted", "rejected", "timeout"] }, "errorCode": { "type": "string" }, "errorMessage": { "type": "string" }, - "submittedAt": { "type": "string", "format": "date-time" } + "firstWireSubmitAt": { "type": "string", "format": "date-time" }, + "wireTimeSource": { "enum": ["not_written", "write_uncertain", "gateway_write_complete"] }, + "receiptRequested": { "type": "boolean" }, + "submittedAt": { "type": "string", "format": "date-time" } } } } diff --git a/docs/production-deployment.md b/docs/production-deployment.md index da4594e..6f1f4d5 100644 --- a/docs/production-deployment.md +++ b/docs/production-deployment.md @@ -264,3 +264,13 @@ bash tools/deploy/production-deploy.sh 用户明确授权创建并保留后续复用的专用测试管理员。2026-09-06在测试环境100.93.204.60创建`codex_qa_admin`,显示名“自动化验收管理员”,用户ID`cmtphgp340000yrle7v11jemc`,角色`platform_admin`、状态`active`;正常验证码登录和退出已验证。该账号仅在测试环境创建,预生产不适用。 安全认证入口:工作站`C:\Users\hectorzhao\.config\cmpp-qa\test-admin.json`,仅当前Windows用户及SYSTEM可访问;测试机备份入口`/home/hector/.config/cmpp-qa/test-admin.json`,目录0700、文件0600、所有者hector。文件保存随机生成密码和登录地址,禁止打印内容、提交Git或将密码写进命令、截图和报告。后续通过既有SSH安全入口读取到内存或使用本机受限文件完成正常登录;账号和凭据按用户要求保留,测试结束退出会话即可。使用前重新核验账号有效性,不覆盖已有账号、不因认证失败重置其他管理员;账号存在不构成发送短信、改余额或通道/客户配置的授权。 + +## 发送质量监控与报备消息发布(2026-09-06) + +本轮仅授权测试环境。候选版本新增20260906170000_report_readiness_notifications及20260906171000_sending_monitor两项兼容迁移;新增表/索引/报备触发器、Gateway可选时间元数据,以及独立cmpp-sending-monitor服务。默认规则和行业纳管均为空,不能套用原型阈值。 + +cmpp-sending-monitor以cmpp-api:cmpp-security运行,TZ=UTC,PostgreSQL池上限2、单实例排他锁、5秒采集;读取已有持久事实,不发送短信、不新增发送链路同步依赖。工作目录api,入口dist/sending-monitor-worker.js,日志logs/sending-monitor,目录0750。标准发布脚本已安装并启用该服务;存量部署按本轮范围建立相同单元,保留已有存储及安全drop-in,不为本功能运行初始化/账号重置/存储配置脚本。 + +发布前分别核对迁移、存储、DB连接余量、近72小时尝试量和磁盘预算,备份新触发器上线前的数据库。事实72小时、分钟7天、快照30天、关闭告警90天;当前测试机零近期发送、24GB可用空间适用于此次测试准入,不证明500TPS或预生产容量达标。后续高峰上线须按方案容量和CPU/IO/延迟预算实测。 + +发布顺序:独立候选归档构建→迁移→切换受保护的原运行目录→callback(已启用时)→Gateway健康→API健康→既有Worker→新监控Worker。日志、队列、对象存储和环境沿用;不重启无关存储、不清理历史恢复点、不手工ACK/补发。验证健康检查点更新、规则为空、真实分页API、双端消息页、三尺寸、匿名/越权拒绝及队列基线。应用回退时先停止新Worker,旧代码忽略新增字段;兼容新增表/触发器可保留,数据回退另行评估,不直接覆盖库。 diff --git a/docs/prototypes/sending-monitor-20260906/01-industry-monitor.png b/docs/prototypes/sending-monitor-20260906/01-industry-monitor.png new file mode 100644 index 0000000000000000000000000000000000000000..ac77ad99cf7b93bd52ccc6a3d88f91f589eb2362 GIT binary patch literal 181910 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 +发送监控页面重做 · 静态设计原型(全部为示例数据) + + + + + +聆界短信管理平台 +平台运营工作区 +运营概览 + +运营看板 + + + +发送监控 + +网关异常 + +签名质量检测 +客户管理 + +企业管理 + +企业应用管理 + +企业签名管理 + +企业模板管理 +短信业务 + +短信通道 + +短信记录 + +任务进度 +系统管理 + +用户管理 + +系统监控 +设计原型 · 非真实业务数据 + + +运营概览 / 发送监控 + +预警中心 6 + +待审核任务 + +报备任务提醒 +管理员 +发送监控 +监测时效变化,定位异常通道与应用签名 + +静态示例 · 待实施 +行业通道 + +验证码 +整体兜底 +告警记录 + + +以平台收到成功回执为准;未满观察时长的短信不参与该指标评估。 + +刷新 + +阈值设置 + +监控通道 + +监控维度 +16 +通道 × 运营商 + +异常维度 +2 +点击仅看异常 + +样本不足 +3 +不足最低成熟条数 + +窗口提交量 +3,458 +次发送尝试 + +统计窗口 +12:25 – 12:30 +评估时刻 12:30:00 +初评 · 12:31补齐 +更新于 12:30:18 +查看最近2小时趋势 + +搜索通道 / 编号 + +运营商:全部 + +状态:全部 + + +通道 / 运营商 +窗口提交 +5秒到达率 +20秒到达率 +1分钟到达率 +状态 / 规则 +操作 + +行业通道 A +CH-001 · 移动 +1,280 +83.97% +1,058 / 1,260 成熟 +94.00% +1,128 / 1,200 成熟 +97.00% +1,067 / 1,100 成熟 + +异常 +通用规则 +趋势 / 详情 + +行业通道 A +CH-001 · 联通 +920 +97.11% +874 / 900 成熟 +97.27% +856 / 880 成熟 +99.15% +813 / 820 成熟 + +正常 +通用规则 +趋势 / 详情 + +行业通道 B +CH-002 · 电信 +760 +91.89% +680 / 740 成熟 +95.14% +666 / 700 成熟 +98.46% +640 / 650 成熟 + +正常 +通用规则 +趋势 / 详情 + +行业通道 C +CH-003 · 移动 +68 +93.33% +56 / 60 成熟 +96.36% +53 / 55 成熟 +97.83% +45 / 46 成熟 + +样本不足 +通用规则 +趋势 / 详情 + + +行业通道 D +CH-004 · 联通 +430 +73.81% +310 / 420 成熟 +90.50% +362 / 400 成熟 +96.67% +348 / 360 成熟 + +异常 +通用规则 +趋势 / 详情 + +每个指标独立校验成熟样本;百分比下方为成功数 / 可评估数。 +展示5行 ‹ 1 2 3 › +行业通道监控 · 图中所有数值仅用于需求评审 + \ No newline at end of file diff --git a/docs/prototypes/sending-monitor-20260906/02-verification-monitor.png b/docs/prototypes/sending-monitor-20260906/02-verification-monitor.png new file mode 100644 index 0000000000000000000000000000000000000000..668d0465ee2e7b7c49d263677490eb95770b2473 GIT binary patch literal 187503 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

xxcheN&#nE5p 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 DHoQnl literal 0 HcmV?d00001 diff --git a/docs/prototypes/sending-monitor-20260906/02-verification-monitor.svg b/docs/prototypes/sending-monitor-20260906/02-verification-monitor.svg new file mode 100644 index 0000000..0fc0c34 --- /dev/null +++ b/docs/prototypes/sending-monitor-20260906/02-verification-monitor.svg @@ -0,0 +1,180 @@ + +发送监控页面重做 · 静态设计原型(全部为示例数据) + + + + + +聆界短信管理平台 +平台运营工作区 +运营概览 + +运营看板 + + + +发送监控 + +网关异常 + +签名质量检测 +客户管理 + +企业管理 + +企业应用管理 + +企业签名管理 + +企业模板管理 +短信业务 + +短信通道 + +短信记录 + +任务进度 +系统管理 + +用户管理 + +系统监控 +设计原型 · 非真实业务数据 + + +运营概览 / 发送监控 + +预警中心 6 + +待审核任务 + +报备任务提醒 +管理员 +发送监控 +监测时效变化,定位异常通道与应用签名 + +静态示例 · 待实施 +行业通道 +验证码 + +整体兜底 +告警记录 + + +仅统计最终正文包含“验证码”的业务短信;补发不重复计数,以成功回执为准。 + +刷新 + +阈值设置 + +运行概况 + +监控维度 +48 +企业应用 × 签名 + +异常维度 +1 +点击仅看异常 + +样本不足 +3 +不足最低成熟条数 + +窗口提交量 +3,028 +条业务短信 + +统计窗口 +12:25 – 12:30 +评估时刻 12:30:00 +初评 · 12:31补齐 +更新于 12:30:18 +查看最近2小时趋势 + +企业 / 应用 + +搜索签名 + +状态:全部 + + +企业应用 / 签名 +窗口提交 +5秒到达率 +20秒到达率 +1分钟到达率 +状态 / 规则 +操作 + +示例零售 · 登录应用 +【示例商城】 +1,280 +83.97% +1,058 / 1,260 成熟 +94.00% +1,128 / 1,200 成熟 +97.00% +1,067 / 1,100 成熟 + +异常 +验证码通用 +趋势 / 详情 + +示例服务 · 用户中心 +【示例服务】 +920 +97.11% +874 / 900 成熟 +97.27% +856 / 880 成熟 +99.15% +813 / 820 成熟 + +正常 +验证码通用 +趋势 / 详情 + +示例物流 · 商户应用 +【示例物流】 +760 +91.89% +680 / 740 成熟 +95.14% +666 / 700 成熟 +98.46% +640 / 650 成熟 + +正常 +验证码通用 +趋势 / 详情 + +示例教育 · 学员登录 +【示例学堂】 +68 +93.33% +56 / 60 成熟 +96.36% +53 / 55 成熟 +97.83% +45 / 46 成熟 + +样本不足 +验证码通用 +趋势 / 详情 + +示例平台 · 会员应用 +【示例会员】 + +— 待更新 +— 待更新 +— 待更新 + +数据延迟 +验证码通用 +趋势 / 详情 + +每个指标独立校验成熟样本;百分比下方为成功数 / 可评估数。 +展示5行 ‹ 1 2 3 › +验证码监控 · 图中所有数值仅用于需求评审 + \ No newline at end of file diff --git a/docs/prototypes/sending-monitor-20260906/03-overall-monitor.png b/docs/prototypes/sending-monitor-20260906/03-overall-monitor.png new file mode 100644 index 0000000000000000000000000000000000000000..2138c09831b8c1bc8c48196c577c02436506a6f7 GIT binary patch literal 194540 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

oYy8hA$$ETBz~?!I!Qj~j5J*5- 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 literal 0 HcmV?d00001 diff --git a/docs/prototypes/sending-monitor-20260906/03-overall-monitor.svg b/docs/prototypes/sending-monitor-20260906/03-overall-monitor.svg new file mode 100644 index 0000000..fef311c --- /dev/null +++ b/docs/prototypes/sending-monitor-20260906/03-overall-monitor.svg @@ -0,0 +1,181 @@ + +发送监控页面重做 · 静态设计原型(全部为示例数据) + + + + + +聆界短信管理平台 +平台运营工作区 +运营概览 + +运营看板 + + + +发送监控 + +网关异常 + +签名质量检测 +客户管理 + +企业管理 + +企业应用管理 + +企业签名管理 + +企业模板管理 +短信业务 + +短信通道 + +短信记录 + +任务进度 +系统管理 + +用户管理 + +系统监控 +设计原型 · 非真实业务数据 + + +运营概览 / 发送监控 + +预警中心 6 + +待审核任务 + +报备任务提醒 +管理员 +发送监控 +监测时效变化,定位异常通道与应用签名 + +静态示例 · 待实施 +行业通道 +验证码 +整体兜底 + +告警记录 + + +近30分钟整体监控;1 / 5 / 20分钟分别使用成熟分母,不将新提交短信计作失败。 + +刷新 + +阈值设置 + +运行概况 + +监控维度 +48 +企业应用 × 签名 + +异常维度 +1 +点击仅看异常 + +样本不足 +3 +不足最低成熟条数 + +窗口提交量 +5,230 +条业务短信 + +统计窗口 +12:00 – 12:30 +评估时刻 12:30:00 +每10分钟评估 +更新于 12:30:18 +查看最近2小时趋势 + +企业 / 应用 + +搜索签名 + +状态:全部 + + +企业应用 / 签名 +窗口提交 +1分钟到达率 +5分钟到达率 +20分钟到达率 +状态 / 规则 +操作 +示例零售 · 通知应用 +【示例商城】 +300 +88.62% +257 / 290 成熟 +92.17% +212 / 230 成熟 +94.44% +85 / 90 成熟 + +样本不足 +应用×签名 +趋势 / 详情 + + +示例服务 · 业务应用 +【示例服务】 +2,500 +90.00% +2,115 / 2,350 成熟 +97.00% +1,940 / 2,000 成熟 +95.00% +950 / 1,000 成熟 + +异常 +签名规则 +趋势 / 详情 + +示例物流 · 商户应用 +【示例物流】 +1,800 +98.00% +1,666 / 1,700 成熟 +99.00% +1,485 / 1,500 成熟 +99.44% +895 / 900 成熟 + +正常 +应用规则 +趋势 / 详情 + +示例教育 · 通知应用 +【示例学堂】 +630 +93.00% +558 / 600 成熟 +95.60% +478 / 500 成熟 +99.17% +238 / 240 成熟 + +正常 +通用规则 +趋势 / 详情 + +示例平台 · 消息应用 +【示例会员】 + +— 待更新 +— 待更新 +— 待更新 + +数据延迟 +通用规则 +趋势 / 详情 + +每个指标独立校验成熟样本;百分比下方为成功数 / 可评估数。 +展示5行 ‹ 1 2 3 › +整体兜底监控 · 图中所有数值仅用于需求评审 +示例首行:20分钟指标85/90,最低100条,尚不触发告警;另有210条观察中。 + \ No newline at end of file diff --git a/docs/prototypes/sending-monitor-20260906/04-threshold-rules.png b/docs/prototypes/sending-monitor-20260906/04-threshold-rules.png new file mode 100644 index 0000000000000000000000000000000000000000..6be874657e17cb4704308c1d1eb4166a3cda2191 GIT binary patch literal 160216 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

Y^ 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

mYrD z5hw`L6sS1&a&eWT$V{M+ST6QTFfSbpc9lrRfyy8TPeiOQJ_B z7bl|oyd}OQfwIJ}sY9hL+$6{RCzIP^W|NJz{YQPwn`Ft#vi?tlZ*tmU0^A(HiW{O5V6`7Vhd0Ab-MPlhLa_Tu3Cz3&GxdPPha^;Kf{{R#^26ld#0p`%38<2>4v6l3b7}@3T~P zThy^ipIZr_i_Bp#w9K%O2D9)kne*#1=v9}0D&bC(b{LoLrBfxRNr3= zX{g$pRThTqN$b@`cmD*C$N=4m%`SlAgT>C!;Z;&9Fz@gBg%{a%kO}+d4yc3D7Bc1p ztadC$8t6ca@#iZ_Z zjC+n0H(6$=Dlad;5!#)5YkJ0MafiwB>KDCWuM&8IuLJMA$uKVH^z_b%{f^Oi4F}wV zvV7hZi34C;-`FB*24d6w0%&o#obt<)zirTc>V))Qo9%4;>8RZl!;a+y($@4z3r${{ z1fPIqAxaJM!-VB03^arOK7KgR0`$x^33`jiuv_cOaX)k6TrnvdYz3A~s+K0u=)k50 zcXtqyhmei7v6|NC&$+;@w8>Qv7^Wq5Okb5lM%X36EEn$6RSf9;t=>aX;FPnH;x*4H zZ|3)?Ynd%bHDE{Cx$|y!hc{87aAp%qkXXSh>cmI<$X}k?ZJ3Oo^U*M;P-PlbjlB_o z94&t(r8KIAEp|#|dUQJP{GB7iaOGBz`O6vlD&(0g_-0+eZAR_a6Ny0xlx>bb*iLaCvs-&c(1fd}y`lytdZQZs8@E=S^@@fwf{lGm#@zkJg z(Os&+nD5Mk+wpkTH8g2o(9H}Gwj9p1!Ip~Qc_0YPm!{zRBDne95FQKq{(yk){f2Dx z1I%5|$^q90%};Oz1ym@|Vw8YD=-z}O8aIX{;FU8_P_P42U?M@0sy0P6rK3hSgZ;E9 zV8%uH{xOh(q#PIfp>KC4i*ZphF2P)qS0mrh;?Myf4-j*e%W=k1dW2;{e;*n5Ds&!j zEK5^YrGJ9jv9A}0I5ukD)ofUHarm)Kn;rM16K6m(Z{tde_CzV`*qGx7!Y zex-eXn#)MeHBGkhnMvsWd?~!ELc;JLc>f@kITna3u{V3aJ}xOCnUhPKon=(9r+Vb6 zZ)o&3`f9GB{&V{!U=9PoVXSvuDIO5wz)=TIBAHkjUHz2xZL6JWVLdfhz#6%(2No9~ zv=l_f9D??#i}Z%q>6OXyr;)siZm$`1LVf`5aBcush{G8oeut&$e&BJJ*7^iq|M}v* zf=#KET_?x~QzPzv?R|Cxbg#q1`>?KeS0gL0k&*yEm!2S|2 zc)lMCJOV;5<=fMYSd^0!6p-`=9Uz>oJ82nG!o#K4(o$9B0ASblBG6$gU1ZXa;ye`6 zVcX1P;|g4!1(QrF1q? z7!TUS4wv@lOw&8=D6u$5Us1#H)-|J##46vh;`S;p!?nb{Ld;}zOnG1X##lG#1vM?m z=jch`trGjx2yDA6Pd-|{O4c#VZ*`@`w7K9Y*5R>cvAYmvm5C{HTe3KC&;r73VEoEc z>14Sy3fm6m1vpeDB|l${dAg^rsO-IoY9pQtgANt}QSX{QBgdo6>!vE2l+31SzrL2bX21aTuXGT)lYX>z`!9;Gs2oOet3sD zqeuTmh)#VX#mgejMCf;V3=I)o))+<35`t=3>9;atRnxZ`?B?Zr=9M+C;*WL^t+y+P zaz>)v$_qnsJ9n3Z-euKPNE))HJodQv%e^C@j4(Bm<`5|61;z*04gEG=(x-FpK#L&wgjJc;jLH!p)rJ4)wu1y98VP7002asyp` zipt+NtTSH-H_T^=2v{w;3|iLaI>^n}OWe;euS}t#*S$40(fDZ$7uI@s+9t_5}>>+?oHy|qmwH8cC zQ!{*zYJVWg;R3?=%wt^F)^Jew53-8$_ht*a0ef>)=l2#2h!O6(pCBU0OZ7L%%A>G% zMr~sYX1!n)@jS@Cs8lN;>H)BnD@bT&2mdPDMviNT~7^dF&|Vy z@~GBb3)nP(83$;4d^B*B&>taOGdn&`s^Ix~-Rtf;-fj&vrYUcM)h6gh-QBB}zhVG8 zeZ&U^Jip!{1Y*br|2K&wNA15HsB;omrw8N8GaV1Eryir!&9n%;Yr%c=NGl9OOF`PA zeP4BVU; z9_&Er`uDM@S74uy|5=4@mezaE@~YAO2EPzabFDDf85HG>5&Xr(eW#rI?m^`zcYw=LpJPP%_r+V9#br?vOM1>B!agV;o(sFl5?>D^(}0c64zD|@+LW7)z1*2J;&_sZ^D(4Tu{k0r-^{Q>(mOfD}R$Z%GI11vt;6<%h(7|JGPDNbf^YEGzL3SOI-EG;B=js{luBO za~JucQe7|YOn*%+$GvP$S;*DU%S58bYwPPobIpY=a z2X1zoxHtR^)QK!K2NSAii(IKf)3YJd4n)ir*CE0C1O&06$sIw&`}Bz%miuKRcjyc{ z%?@gg=wfp6ES0i*GrLn&zQq2nH{-wZR$?TdHpk{rj1_Jy9tb}F`(l9H)B2#`z+d;d zZ~_P-mPZ92p5^)XTP0%#mlMV&!1rcanFsuDDTT0&*=D@J(_GS%;Zu6hW zuOHp`8~RC!t*X;QygFC%@^f|Jf~k3F+Q(bAC&zQfj3AWs?Ho@f5-B@tn0CTFksx< z>zHA{j8BNBrQoS%Yt0^q;egxycVxMdL1jh9$hKbd^eTc(eP<3tOu{RXW)5YyICHs{bSX;`Lkv>(3ww0%c-6tY*LZ(Dn)feKO-X@ zvVJ1{ka1gp+g|^i>rbh5nL>re?Jc|8E4~KYKF5)Xu~=5uZr>=BEpA(qp_vP}+hLWL zI)3PiipmLxif&}nmM40;6EP~a%~`?y8Iq5o0|g{RsSF#;Rq zLM;uOngm0t1|nB`QtvmWA1}^LrAxbub(<48OiZ7xP- zAiu^PdN+eht?af(i?%r2S0~s?cq*;SEpLv)3DhzDKd#kT0<37w?Myz_XmJo2!t_LF z(liR)lP+k3zy;A{wKhxljfOdvcRY(@w-U0p)~JV7R3|5B4^4lSOKKznbpK?A)aO&<6Ln(1N*(ofPQGqXH% zwLYdmC2x=CX=q5lbQ?vDef^6=>t$k+E1$3vepb??<#`4Xl^LP1K&!Dn|^2*BR zmrCf{8*g%wmAa48pHxK+b^jDZz7L-`w>;qbL+KPkZ2vA!zE-;M?|xyDwPBO|d|G^ z8%QDs>!&{X8+WCQ@J;st!ZnYj%ouW9PXNN-pI+}_G(JQ)?=-wO8Tk7GfS39|q~LSE z_?kyT+%CsiEi01lF!QiZX?BOq<*-dd&STD`?wd>Eim@N=y>FUMw#E~>xE=fsW<5E( z6~c(S`=Yq$C0EJ_OmK7QKI6BqOObzEpD(zQdnY?SOCu|ae!)-sJN5P_9_(rjiF{^o zBg;qv7hPf6gXXR!vq3SN<_Ldc;?wPv2)JhVR}vMBl8`0*J8N)BUwLaI;lM0==^R1` z13ynGH)NH3Uqzvirc7<+G+@DrI=|h3M5#NUF(zXyyD%)AXbOa9 zwt~>|7b?9T2+;4b7ymSNl%R#~W6!lR`D~lCEQ^ZXd4CWTBGIHfHUKb9(;s`@`PlU9rd`v##_B4Q#z_@&krhFG$JvMf4Ze zwiYfLem(3a3*8lF!9jwY6}1ej&x^+c+QR_iF}uo-N>uf?a-y`zsOEN6q7JlaVTnu{ zyJ1i&&73~NO;b1A(XOuNR3-sPq=XmCrt%cv(o&RX()Op`=HkJq&{V{NYYo$SW*<#G znmH-xpX!%h^C7c6W7G@l&B>y3qLBWePd`!2P+WS*$&~ACbgUe>xqsLqS z!tG}OJMVfwA#e%`=y$=tu|G(SAmli86ngsnsi>_jJ#IPm1CC^-$r?yfgZ9wIs#@_v zBHxOjT>u@_uC?mMac+8|NTYGH^dV@3^TE&OBbCu z`Gse~hN39^Wf5#`r+M8|nl?;+$kC_@!*|Z&)#=_+{N+fb9H&!f3{5wrO@qfU8h#vJ zj%DQ@ksBqZ%|W8PRNS54sI=GilwX>+ozeL5VanLB$hs<0mbCBq&qMobDwAkI0N(iu zF@H#*>ezP-Ox)*|DaA^x5K*>#CA+>ZPuSVG4l&Vm@SMiQk!QEDrB5r8hPpA)lbcQ{Llcy};%x2UCSU|i(}+Dm zILK`m)9lQwawmFIW$~&Sl7ZX^g}uM^aCb?!#39tQ)uY5Et`8Hmw_Fb=m8^UgcuS$6 zWU%k3lv(X0tLQKji*qDgan2mouPo!oUf-;^5*i%Q)Hx-(eZ{z*jMPQ4n6y8upzn+~ z&zXM#w!UaMil(n$kCBo?r5BL+LA(a{_!a{k#M-vyG!Ix= zncW#7-~NXgg%^!v-qMN84XY>Pxt0wd#=RBUN*2+31~=e#1TlvKN8{~E0RejSC$L6m z%LOoK4c(*go;)Su0EJ^{5m8gwOv$&+XF$t0S*ferbe`=)HE6JR6@83H)^6M@2>G0N z{Z(cL4n&>wKiD;R%J!PQ4zL74IiEjzfu5cWN?!8~V<(Ds!7BA<2tu)-4NEad5tQoe zz>~dU>TRf-J!C{?=%0)cLF5$d;3d=jHcyFXydDtclDzzs=tY^)6~-9rxdBPq*)y*4 zO9@rT+CPF=O_KD4^P;J)<%7tK?|eRv#3n>kUleYa`Z=Wv+{xI>2ZdmXHl|_5)UmIi z?iI-I-4XE9Xe@vEwAB9OYgdf2e{2=4-6s>oPF3v-5(!yFB?H-=!pUYLr)=x_pS>=4 zBu}&83Ko{P8tIveDv=@#6L=M<=nh98)+i~jGm}I;X@$Q*?X2oAcVADOh!~2VJfShA zX2Em89&EWh1t-=yH|PFrcHph7i{9=?`OB4Fg-eKojJDtDl_U}=={q3m60)v0%y#od z-?xLcT~r^;_d*K@GkCPt)`RW0%&m;c=I+zP+YCxA9;-IiQOcer9x2|^kcD+wjvI&~ zCaFaD0*Gd&$;Ri+^8-AM(fo*{Fqfkqnfm=i$$8*i_5AZ1Y9kRgX6Yof)rXB3)(<*L zD_Jj(wOkT@|EYte_Vtp%E4@@P%3y-3h1Ng{DyNG}B1ncvy=s1RUuv~sQZu2TgRYg8 zZv233vcOmGNMvyFMbsyTY9{A?KOf~?=U0;!PG6>^;+hYA zFnY}}ek&W885gTc{t zR<2#NY@!nOPKG=4OE!z)$+THI+Se;|sp2cjdrz38?FxiDvabrBD&|_4mi~{HgZOGDR1F)WsN- zZ_23L7s?H-6#)rQyCSDo9>Ct^>s#fw+I{t3zvB-jh8~4fMT_RXNqg8GdPX|!Ov%Yu zTA~9z+oN8(RN`j4T|nR248CTVudOpH;8#*^JUC`M5r_(ZE{t6pL?avE8R}Dia{_k3 z*LvSFNJ$yv^;0yiod!nfZH)I#T+cB}e|WbAF#0{UdWUR#9zMRlOPc7c=OGTxg@wbf z(MzegC#R?dWjx9VUy>JHmmr;v404I}IYmVv%stzF)^hf@0fjeN*rxvINO25CRi%~V zitKOhX7fjvFzO3!wU03(Nn#m`CQ z@Y(Ve;?Y(0N)@XisG|M1mTTIC8RLhB3#jMA;$)!5s*B9nE(>FRo7eoe{#qAayvLM0 z)Vj~G=wV&psg4Hsf)}iwp#ww(yiO(2#vcHCYv}~>Wz}Bi&Ut)e zphvUO#%(_5eji}j%E{3lJFn0BjBMP5?#|SKRVP=>_Q+4hesjpB@7qsE-E;tQgObV3 z`)72TL1jPe++(;2Ifxq5nDK#Cdh;cDcE+<80!zQ9TJ7JD9hQy&d~~R={28=3spu@R zcNp{6A!6^ij)0SQ6G8I#$*ELW_DjAL_-bq*?qK3@M(SD#%Sarjx$;PjW+^utWoRmA zpR_srz*6w@xpx@jqZ-1H!2Fr@N~tWF%hBAuUr{gh!-kTsst;>sbsQLg0aJu{l z-d1d^)&%ez9lE`cLPa>-06IYV2TxJRi!pPZ#c(X6^T^Uo=&WqB)YXMLrWG`n#fp_| zqE(G8_V0RY<|&mTz-NX(9Si4&eoLalJ~M4i+!PWm;Ne*QJgIy`1XXj;8LvXh!y|sm zSG3wskn+)#{*E%2nWL$NQ~Y--sY#5Um19zd^-P*H;QDm*JH&z0_XJ&W?ze}J5H-Q4 z)|Zn>+39DEd$j-ERcU2#(-rdtiiD}n7uv!0dJZ=4ma~R3{`)2UdnhYY{aQ!iIC2!0 zr-IsKvK|;?Z8eYdVrkf~$z}d-I#>&?VOxN*4gQ4kaGS!0c zknio&TKoNPRnf-Xu8CK?mF9B>W5DFS39mBh__xmjZdXoRSFz8lrc2nFvt~{V5d+Q>!lcTvd3RNK` zLYPMhW)iw8*|1mb<<*Fzz=Sd^w^6|SWOO<~r=Ya@q2CdQhTEp??X<%2BTMI84Fgd| zLqBvJ%#I1^S0A5T@DW!x`DlC=fA^>tLb`+w z7?}P2+rQZWT(-k`;GX9FT{lHuS6BBH#`+paXS@|)>0X)4-Kl;^ROeLp`NDVPOIi*= zp=05TIS5+S-gv6m1RCJ?xu0+dEY5oYocJFf??9B?}EhQrw;?<`%;nkXdb#K}%Ox z$*TvIfo2IB{*Em5k#48lm1$0XmDN<__KJP2`?zH z0BLOzn(S{z$M*ku?6CiPydlZ-BMeJeeDUV{I71xk9SNySZ@#XV+7af>nasomT@|DdZ3p-xg%hi@P%-;UCvRUdojS_c-`CUHI z`%Pjr6BNPpUD{Szx?7RUA)bVYs;4Uo8&?vU;vE^K0aE2|$~!U|Y$X(pIMuK#ultHG zalS!jb2gPafpllMl2_n%f&g{6#GRiqA~rGNij>9(ge(PxTEAc@e35wE^m(a=0mAC_ z6FAQi@U?^mcu~_7X!G4j$#HsYJ#Kj8p;}J)EM#{^b6ZFDY%YXQP|M=`;06^%HYx#^ z9M3WRS*Aqc3*~4?uW|K(;)8-|_Ta$_T{7=~W>JU*GMeqz^J_Re#`165-V*cJ+TQda z+G9Btd(BV{YF=L(5#D4d+Q;N`2daXhbCZLVnX&c8Q2YcV%V;((fp)oRc9!oYm`@B} z_>f=~13>nf@4I6in#Tw@0O1R$i<6w%XS)X>56UTm-IY5+{lvTxF=+{Ifd6er4BLqR zJK=Xem@c?pxAbTpv&|=8RZ~O|&+&3@4j*Q$ozGwH9Ar1|uWac1z9VC#2NX3H}tOuqhV2cn}zSPEHxRB9S^m{er=iq+UGv9oZJpPVEQzb69F7ozyqj z>?FnG$q58Pxos}L&S|MRIpEtLbhwxXjC@I55vxJn{A73&g<2qnUUc`%=vDQ@{dzEm zb=pozNSHll*8+MGF*Kq>`m;4~CO0&mnVOr5n}86UI1V#-CTan(4sV(_#-d(yLYzj? zLG#)X5g`Epi;%STV+0i0@SE$NP;1={plEuc;UL_;wf~&>^8;@F;VSP#GW%V8sDsmK2 zT>1|B0)84u1Aj_bhEIz-oZd0W1 zV}3|IUm#SX@X?2vi|oPuTd$JmD**v2*7Hb_A$oNXDRRuxs=%%{_n^@7n)~A;6ZlZ>{0_@?EY~+bMvY8Q~Kq47@X0=NI19B6AUcu z&y;f8p#a$zk^eWi`H)?jQt53feY79|c9VVHNB#NF;LD-f|JX_2f_Uod2Y?A&ON5b; zpRZ%VM?uk_mb3+?g1u*z{{gGN1mLwympC{%Iu4}ODrLR~>H^o~bN#X5VK1>Tg-|ui z$tIJX7ZeojOnc=iDMHkkNIq$^v%pQa0C+xTtVY5~!ZGJPoR5wjb_3OR=I|=4j6~&# z+3i0ZBvrMaEqYvB7V^T4#C&V&WC+;`Ow%ui!@^dw{lo<7?AC%F7UwwMiYWF}a7$HL z+lNA6qwNl?e*L80;^derDr;AqZkybWP~Re5j)}g})lMcbA^7tUqEKl1Gn3RyX8tvG zbOpz~IiE^;B*slxReeAKX|ufUYV-@~E>({ynok3?`U>581A)dH`m^>Q5+F_eSkwOV z_x*QdVXLdFR@#j<**a>%UGC^i@JcOkIsng65Yi650DzT!RK>xeqF-8ur=om(WUNTD zUHm*txxw>Gr^mNDQF6yF&PkIcwy9}pU+vx1-;H9zgQ@uMKwMx98ZiHs zNvbW$vT^7n*2(bF;hnM2YSxB~fJxuR5gT1hAB_v@iLrDXr{VBKsNH3Q5wH@I8tih$ zKUJ5N-OnqY7%>^-w3xH&IT2)MAG>8V1pnZ7NTcI-Sqq;soLg^l$C7*M?|L#|G`gxJ z=IAjv_V4F`aPHJ~^K%o2v<9=q*=h4ItgtbUzs4y%tS`5oThJLL@5nRIyjYKwK?vh9xh zznz@H{RMM;tN-@x+f)t1ms^csOeP`K`?LoB1;fBpK}|;{3gdX40mmUNq8xbl{US?4 zB7L?qp;c}0*3nV+^^TQmRk7uC&TVD<1C*HJnM#+;R8L~kHp9Vna6fi7-<8Q(2LAN3h!tWcJSmid(NuhepCU;eebn*dgv zk;f}^G3YhP_2dQw;1GR3as?b2lzIkwX8t^T4%Ly2;)L&1mh<&Mgnd5~Ugym<0TT`0w z5PDcOQ!+5gikvH)=@V^7GyJuwUq+yg)hX}yoR~mnf!rHNL$zOF14#=S(WuEv6+dWY zy1NzdG<0-MkIE;rg16=3%PUj@vp_NPl(aC8({ikVMknD%Vnlw%VS6TKDy9f3;L5nq z@ZNhu2qCKIKUDW?99TWM*l0MTqoEnrPdD&I-7dGCtNLEzhgUocs@5zI5koD`Il1)Z6 zwvFP=p-PeXP$>+aGm=thD{>w8W!~uwJNu}UwGKm~p1e4PE_CE1#%7MkV|zk&?2)lC z4P8tU5=Fgws>S1I`uwcmI(rLOSOzEQI|+$WmENr035z72q00BCc?zLPzM}6zT|ZW+ z6rV)+ndwLON6qS#OEZ}tJWNc<#i>Q^cfNz6+W0x-hxhje!s5>TwENs7T@8oki|EdL z=1sWDOC}eRu!snA<%L=J^4L&oBH&2?9O)-~G?ip7UYs0+5XbQvrrBqtq%0;ZWNt7m zSKT<3=oJsDD%dA-1u|iXTlW}$7@9n`b*(N2&_&E{I?Tc0#W<%2Y*j;M#SHEx!lYMk zWIdw+IVk+{>Qck%$t*gO$EUH1u$cl;z)pxZEKU1bbi28Azv>XKQCJEDp@3h4^W$xM zkgiGtf@=LZLxXIhEB;M}!Xp&W#LGdh{NJVJmd6xm@>Hu|(Z)G+CQ&>=6!wHx%PJev zFZ7P(;g97hfURThZq=uk6ODvdr!!-{fgobwN~h|8w?P4F2RfEbvF;{r9EsS1qryW=^#b(!2B+(HRRvW!COoc7lGU++9EG}l8z}gw??F;p zVEbjR)Srp5Jd(<6u`Z}7fd9`vqEB5AoztUkmmDw51(~Z)!_z#I_G5LQf2m*9JuP_H!1YRc)^{(L4zVQ^I z4ig7^cCx^CNitFvQ4p?c0gp`z^C3Y1w|cUQ>OrCNJ@X*P4YOy7*V(7L<#OUP*RCM+ zzpMfeL}Ttfr+c=+k#%vF9}LhR{yxqP3Dm*Mz+E67cCr^l|M@Y3^20SP;cx%rmXS%} z{of~z9{yiPq4Rv87yQpN|HE}dSS$t;@&7z=J@#LQ9m1F97yp+Aai|t?H3Fz7qQu?; zFs}8vLc1Bj_HtiKd-~5WQ#-XHr{vb95~+D!(2wa56^5^Xfmk$Cf~GAWDa+QmX*2N1 zD*<62a8N{8PgZ$k%}}HHLARz8uict-s?RpAi!w7!?Dr-+fX99kZt~&MIYDzSmM@kt zrL@*@rXh$DYRHv%h8ySr%Lo;Er7XXQDNK$jp-b%1JB?UI)rI%;_yiHi`?$Gl31T(= zpp{$xB#IT4Z#qH<&(l3v{6Z2+O-CBca2{Q*dt5bM!mCtN6c`hexmj+rb16hV!G`nJ5h7S4sy8O1lc`DFBDb=32c?rK$>a zFs}Ia$LBsk$Z5EvT9KQ&8nn$!dz^Q-}3(NIQMyWD{!hc+2IxSo*KmCdOM>lH!r z%$|8(mv!5%DiEqyN$U%MX>#vb4~*2JEMY%Was#A@pFq3%SycN=-JQqyof?m$w@io#MYNJcr=tCK)H zkWDBy)vk0Ic?|RBp=96wF`81%q+1K7_lBlcFK)Qj`)9oOb*7{E@YqH)XPjKY^nsFz zDdwDXZJ_actW|o`o#NlSSJ@ska@YF6RJ94u8m#{n4)-5%dB@&EUg(4Zpd!fx0V~q$ zgV-1Q0*j|nu3KHB{%p6v<`6&(-Sar$g>JpRg)u@iUppQ6Nw%t_eSOGXt5{ZHYkMp# z;OqC5_#HM%^mAde7ivUowjXBW&*LAweeDZ7I%|}CYWhJzjVw$&In5!EvW&ODTA$Vx zRS-0;HvkeJh-V2IXzA%0a5>uUkF|?|*;meWphIssmVT{iK@;n+gz2|q!8Prjc%-N} z3~bmtjC-+!fuE}=eh?7P{&uamKOJaXJOtAXVDr$^T{>M^mDY(@ZyhV(^0C_le$+g$ zVgtI-i{T~9g}vOIoR+ncg(la#<*|4G9)fUc5TZj#?P3iAu=@JVz=WRQMD?bbIv5)TQ{w4!WFM_@#>n|Ko&t|$%=u!|Ln1kQeYIu`}h1|-zdyE_nzZm_r18fFo2H41PG`W?l}*juFK3i8hZDG%&2_WSCM zb(MjL*;xZNdd%j(nDhW41U$YVKL%4G!H&D*!l0mnq1Gn=jAPPnk~k}hRt@%jw!i1J zwI1(;R7GOmvpz_eos~zn=SlGlb8X{f3n3zVqIQEx55PP;AC;t^tK&)eLZ76IOj8zF)JaXD2F3R-U}x3blynSv$E%I z@f46;2*j%ndSF~0Zc31VA|C9b)J$?Wfp{;7_neO2_nmNot_u7ie2m#1#l#28z+8nR zYm%6iwfu&0&KcwEdy@gCe~r4PcB(p1*dk7DCnhaiY*HuT%g?rI?$)$m zkM&-y+D<+RP4Jf!kDRB&!~rL}2xR29koD%P?1P4X^RaO7?l;Mx3Jq7W_~_x=*)n%( zj-}ZJ(pSvyUST_a65BJovKnlXoy*io_$ZUm)Fz|{m%5U;{$6I`Ipfn?Jvyd>f{dK8 z0`hpb&GOnQ?YMSnuzaB>litEZ0-+K7b&5!0%Bk8`MR@_ojVXuE8KJ6-N$w}IzvHWs zVA7z^qwfby0GS@)Wxv%Y`U=rNUp5xh04;`XO$F}@I;^%`Y^wy15RbgukH&yYe31ToIk4%$6+q7jE( zomD!PNzLEP^~b)u<4$}1_S2Z+hArV-z5Kz`37rqJX?D~9bAut!;sf~hmOL3{!g>MP zqTh?+lV&Wl4R_q-vAM*Ac=Dy@q$ohkZyQ~&f1^Fx_W=s71dL-@O3Q3~+&~r9F>$lf zD_r4kae0z~#?L|%xa81raRU~pD7SXZ@Zxt}k2(r@-@+UP^jcPIowWycear!b%cKSy zl!|zd3*I{zpT0#W17fV90)Hb-h%rjOZ|c$z$lub8d*KOhy*#ao>VQh>pdV2+1j_N* zE;sCy+-}?yjpyi6@KV9`VM-t`<#p#E{9tb7C}I*ECosp|to(F|K{Yj{iykAJ{SBd~ z8YLDhZ7d?-{C?>5OMpCcb?s#8*fz6@wzs!eO@0w-Y7I7dzmTNT95pcoPdqrK!0XpL z2_$1gL1zLiwT}H}qxl5*wkreBsV9J^O|R7`kT4uG8|*XRm}v~f=qc`PsDi1fBSDSGQf4NV`bF8f8w%%Foq{=`{Z zKu_ptENQv@T(v^=_PG(!qvQ8DdH2n((ma3rdarsu%_?wX2x(Ta^~a-xNtM zM8(7muGj(>Y1P67QKnTY3QU|X#%s6?;INSJbV=w0=hc&Y+wY8?b(iC9xD}r{Y#S@~ z)<}p12C7*<@p(7tbRZ;0&HgA~wA^>teNQ-*S}+-;nCIH0Cv1gHZrBK?e!5#y(z#pM z(V=B$5E0Rl;qZ}Bl^6F8^Gte2R(tpASCv#fFI*UGiMYKjX}bNW-C6VvSWZM;SX` z=+#|BiPYg>%of-{r^2#Xn9@l)!Hpof5afEZPiN%sjZvze5D^~}5kbYo1ixO}A$9=N32v&7#zt7eo62Qv z=rncHaoK}7g*zrW#ZtxH=llff-rr41i(jb6spOm07)_*h8~V}G9&=ah25yKz-6#AstPq3TyTWY#925(56OY#W@sq=1Pp{i| z3=(^@f|zLg8tz^#_g(aY2=dz63rsQvMP(p`4U37`IN~B8(C~V~r5P9Re#ib7AFOpiYQ6UU9V?T$d{k2=g;8ZTU*phA>E?OZvZRD` z5Mee}aQ2FRyX)vAR%7bsPA`iJhu{>ZbDb^Oik5l0l=g^IqB}R;*L@r~i1AXfv1w^y zI4$*9#&h&b37n1XIH?sasHiC+g}N1_rDdcQkcWv&%a~Eq9?w%zf|8+RRUL$xaQx0z z6~qpt7z#C<4!JD)S_A6AmK0{wlx$^?lv8JO)g<&PgDnFWlp?J9>ZNT(pxT*7LCcFG<5bdwb)F(JgXcNJ329 zb_15RRrS!MwsE%n#E1yBg2(b4j{>8?#Htj^HI|eR9TvOhay`3v8v=`i*dE)`&};=D zBg+};Zf`5*DgqS%ufv%zPyxuih#Nttkt9ifNVlpos}&|bnr*^a=XrV6wtA`smq}#i z+g1pgpdslbPBg<;yHVf!u{)Wrq~7)#s$=-u!k|qAN)l|OvD56Z8he! zo)&VvXlS|8*Ws;V$yG^gnkv&sPjn5%#>NK92B)3barkmDr!^Mg9?w{j#v4xz11n=p zY)o#$TQlKr4@2o@D!04KH~8zOS6A0{8eNUEu zWB!UMo_92}zKKGyT@JbfJ1^)OK!LWFIb#cf#sV>L6h>U(Z?c#Ss5gVX(7-3Jev0i>nEMW6eQ2DK=T4lfk zEnWAa01#zfU#tWN_0&`S8nm6xYkW$!BI7sEV{zec6Q<2yS}-1a0qsfm_gqxKni6!M zmeY_Z%~VNedHom^-8Gy?g9f_uXiqtqe?yah5CWr;xssqH58hWlFffk}S>|B;XQJAl z+S2t08tMCYET(Nrl>CZy{`$Iq2?!(&!`^xDOdg4XJWD*@B_;|MME{7N77^+8+wa58 zj=RB&%PR@;a9~|e=_Nr`1_o>ojZWtS;K1ASi!$j8paf>AyHe4*p*W#T`uH{waVX;=J+ovHEM9 zEdSsYkZ>IC0Eq?NCtA9Hv5UiM5nzzLND`|5|BrtdnSvt{Bn-8%0|bRy#MY>m?f%dF z5?}~_zyu0gP}ze*1?2w;3};%$?vBs)tqzazf*PHkKbT6F5gQ1q;-7m ziDO|*43i{!B;=TW95{;<^F{YZd%zYiLj_(Vw8;GtlY%Q61)>KF>-j+O!eKowq$6WA z$`){ckxq`aH(h4zZ*;ubBThup3;jA6IpS zApdK0Y-qY3T4+;A3#$P1`j(X6DNmN_&xnlOg9gx?w&b41@(hhRs4I+_J<&4r#;{#+ zOxbB$b}>=fpiku4P$JrCV`-%fX6R`Q*Hz@1r?oq&XJr4&uK%;ry$W^-N$z$^nU*_( z@YUPJlQGIBp}mJc8$lT}A+N;0=#tkYI#-l9O-)1l#_WT;AXnNb!noIA&brJ?X36e; zGL}*%fJPc;t_^@`b~K@sh6L%QjdXU=3Ol4^M=y)xd3XsTL;M@d9yZ@oQ2ue)V?m-!pUF>LB&B^wIb zuiu=e-QBtHufmRd@C@s?QP%mYTP3?U8dL+99OlC*W;m_kPW^GLAt5|6Nu}Z4=a9-0_X!*rMYUe?Me}lFuoa;l8{+J@n+I(8Xp-_RLv45_r?elhcR!{NIvbA z1H2!=S!m`iZ1S0cz!5=H%Pina3kn}UvG<@Wk){vZ-2POo%agq-qUo?38!3IW^U->S zn}%j>t9%1Y;ey<+gD{43p$fip;CO$JMuhR=xx>Y57)gH%W*{)^y%_PN)oAUMt;fQr z-(wr=m<|Z>c=m$Drel@m8U0Q>p9iG!Ix_`b&lYx&n#uwS49OqI5$2MLM9K(B3#CHKgb%H@J+rn+ozIHbuR z^B1erZcCLxVH>fxsB~=Oo5i~$ycZGOKWbZ`=Zo%7_~hh0v$0HwcIygsdEl3Y^#qXmdODiNUN&GPwGcSLQJ|fZnVS@y^!#+w6woFwF0NZr)izShf zg9}vBHFFc^0;kExtU!>sIlfx3%X5>DIcooht+xP+YH!=V*%pd~f`F1D(j`bJDJU)7 z-Cfc!FdzaVAfTjlNq09Wh?I19cXz{k;lA(ZdyemY=h(;ILu_WPnYI3LUBB}@Yoc^C z-7dfvTVGETfIo$-hoRk({4`5~djP~-IlBQc50K&VeN3NoUS^Zl?8d6H92uF^lMD_^ z?P=q|`S**ySfVX}F|t~XEWz6dJQs(h@o@^>Do`^WJS4qTK_E3@b05&RSLpX>pah4j zA{cd-iEiGUfWFv*Wc*R`BW2Ka!OYAU$=$5aVsICwF4&{Q?0LzNHqaLS2bdsO|BRkN zJ5u4V6mepA?8+O|#>~=J=en-w#v9)>J5cuQE~c-swhGhJv&7)wqzV;c1SNcI=L^JQ zxBr>40`VLShG))@5nZ}^me-gMJ8W6gKk3O5bOOyA*EI`0VGZnV!gu(g-n{C8f;=wy z13%3=iFBFRl@yIMhk&sdZh_|X#B-J+n_#&f)Bf+AO}%lAwV{l{x95$(b78^IKJTwMpa{Qmb4bM7CFYdt&JBUeg1)_$WUk_(4L&I8jRKTN4ll@|VpCR}4r!;9P{HCqkBMS4`Ju}Kl||?-SWi6*8=|nE z*xbqX?hEO`>u~tn*!6@jTx+aasobmfpe#T#_n|mKNl8m8PO%X=bJ$ zz=;GarjFMsY@k#ZkYCVbeU~^u(E$&~5B|r}0dJm2{t$!P> zHU9*b7ToYvOB0She3S)6dQ@Lh9GLz7zt~OV0s(>Mf9XxP-5-ENT!+#qJQ7%(pxKgJ zBP@9HCMk}>hh;$&j!o`gp(=9kfGdR#a;={W9kDNx#PQ(F0O9hxT47J9Kl3AwFjja6 ztWSzeRpa+BWq;{v)*@!LN4FJUZK=d3oj2P=3wje0DEH-Pwx`?rBw0=tGHO)K&br6` zd<-y9NNUZGPUl^A*q~uRlG#@a35t~L@8y<_AINe;2-))U0dIC0JV({xy-?~P8h>4* z9KNp~@i>OZg1ZLF*~@zK#3e?F(#5uUP5Ww&&LfX>W}^ zl8@B`LYBiarK1w0G3?RAhYK2OyGrY-?tTpu)yPe{rdudmT>sf1h4D+wUdjG17K%Ab z0^E(uTs@v~?`&t&lvt2QClVT*L|CytB)=hLa;tstX-g-l52IFZ%*^w z(A0$_Ojz9<@ajNi_B?$dAd-A*0r>neEX)uLZH=l&;0^XMXEof^44K)8>3rx-jH7w=5SI)mspQHGZfiLk$Z3mr=~^N}T;S++NX zt$@QgXXWQO7K8fq`MZW&H?O_KTZQ`;?zFis4`|9!V;kt}yNN)H5>*% z5$!ySj*(6CmP3_3m@?hx)#yw#7hjEHLTo`Y>^wY))q{ z1keJv3}&J*!=t5TB{bZBP+Ao$E^T38f-XyJY)F+|9HCDGqkUj{!qn28ctB^jb2}P0 z5WDO;?WsHpa|73hL8#q-f3IWOA=s~qS@u9H1oIBo-f@t%M!|K;w{dFWCJe5$cnlno+6N%+J3 zG`JHliU9{pfRuz20d73%w+_rlj*3P$*`g1soui+b`I+I8o7SMK>Lfbtc6c&rAzQae zxPNRPneZh_znL^29LWTH*zp=Ex7$gzS{gePQh%?XlKUL+*dKg=-5s*6683h`@l3D9 zzH*PCHE^K;O(ObU*XtW73Frx^16GQZJo&9FHMpB;Tj%aJBT*@N*Hl0(;C#-m`2-J^ z)vXH(NGd3aeiaeRc}=edJOaZgDBFhn@@ron*9cq@yQ=cUDzq-69e}bvAbjBa2HfDG zB?ZkBxK3p}(lS+l#~1uFbtod)PCvL=1Q2yK(er$SU5PJZZ*70{h63*V1W#3uCzve( zWSo&sjU&);tWjfgp1by1(Q1rgT$9yE_eV{alJ%zgt(U}H%d`5Ejbqsd?OZ>hig#e4 zHdb-^!=nBfv4sRlL`Z1N&e8HNlnAeFc;6EMiQe{hU20~gxoi>QIQEJ#Iio?pHOwn% zu-SN)k1tqfl0p5q}%9i%p|ihfG#u_rku?+qd|eRd4JgeaCWXip+U*SRM{Oxq;(oD0iM1k*PGOBP!Cp z>Apk%J3k=OBgh{!ISO<2>`BSVtat|YwfB?0KegraO!s=Rm{cArO9DTe{2?!xFHr`$ z+w78JXAweM!VZ#^IL2pv13lE8$=6YiYW|_GeYLeP?n2ANLFY1=n8d2euIARzT2Xi< z4*PMzO}D=veKcr=!#j{Zs8=)}&0bheN)#6nQFl0X=T3>NP)IJZ8UT{X=|5(z#huL} zS@j-~&Apa2RsNN{!^H(}&e3@#`@)}zi#s z^KY7DEUHro`o3_nYV2#E^`E6gun9jQTYf2j!}JaQL;_o6BW16uq(oaQouBM5`>dVC zSq4V^m;K1Z0>S%P&+qyvhWbyW3|mVgj$>F+UJdK9MDF!O0(5DIl4YXTmc179-X#&1 zhSXc-Ftp$ZSdPI0{UjfHKe{37RgTg!iowL&b#@_`+C1*}9jAA4?nYQ4)mQd$k(*GK z<=DJ&UjT~t%RL2bHMS~pROoz8bH$~lsR|({Bw9K8P(6C@H?N!iN-dy8H`r5YCxbhC zo7N|9{_fpo|3mN6yL|qn79`1IiT^}1G<}*#ao!1hyrS?khg!$9^o>-kiZbHSjj)Q~m#Cok<#`Bl%Hq@`Lc{Vt!cR*t_M~!{Cx9BuzqupMauLL`+AFMCH+<~-; zbAR_^{UB-D*68itOpyh9Jg%68&{Zb7^Bz&eyBn*;YH#93UdOa?jQOP9e8> z=pN!|06QzfzAw=e;@zuw?r-qp^4~xEhHh~4w+G!d&i5s~Ojc=H6L40brFLPIrSRH4 z!KH9UX2?*7i2gE|eDjw9az5&6j9#F_L)1;m~&v!L`v|<)Gn0x8)S{+Dg6Fq0N3KJ9rlZ zV{b!qpV6lQ6@}W-g(|C$HG#M0h)FI@I5)TNg>|%+Ts&^2LP*PFG$J8PtsU;f{K?kN zo@DyZ^VJKkc%Q5+I@o)X@TQXrzJ0!y`D+Wu8Sg%BC`qa=vnaogN*q4iHYjHvD2nfv z8eI5wtn+3iObM~p^ag(vGJ5`W+S_wBcG@%9^mjgX-K{KX`b_jKCKxtF%f%V8F503P z#B)!pILSgdW3dNwRgCL8O5+=zNRMri4{(o}IxQ$}%&&HxnUDmLT4{T2E66~$vJ zDy3wE0)mT&{5jagMv3(26t!n(XsJmEnf7@_LKAGF#=c}t+eXZ^m%TKl!>TXSnD|zP z3rEN5>XVlHC~jq6ql=aT?8(EdxF4L{yt_28Tq-flgJ&e)t3w=xRS+5&&6n&#s0IUR#4IqpI|B}$kZZ_(LMPCo?FeQv8y~$uprF%#ZLUmBQWw~4`g^5LY#iWi$Nh|W_!F`lfJ$^ zT4Ymu&m?$+Q?Y^{*HmeQY|LQ>M{%K2ztPJRu5aA8t+@rZ0t^H}%w;a?)3B zx`>*J{n?A@*}TGT-=pFDSn0}5sfcVT>>tgE>f?BxLqY6*w&yG@qEDK(A?AlRXmtzC zJLv>3b+V{|nH+rYOsTmF4VuUh4XdG6B2KJibE1FlV%V2J49$yW~I*`F1j*GMptDcM-_7$Zk_L4Kto$TG;9;q z=e~d{n^k6}Y_a-aM0!Rh5npjpABnO{X^tQkJ<1WG6DnHNKzJP<+1f-XdHWAjbv0gw z)6rvT@xTRjjIGnb}viT`#~KFNJjC zd3PkQGo2O`4BcR81|r`ob*o=NN%3f}hHVM?dcfMP()aY|crogEGA4L^J;+)P?UDQo9b8PHgy#khlVh{f0`j!jRxJc+8NYpdX4 zI`cMeFrH5lwvCR)JO9#E%R5?0;_=z>TXh z6Bn|syoXGi@x$&_sD09Drz9c4-2SY zird(QkHD#4VBH8XYf%b^hDdNZg=VQTy6nujv|g3Zgfw?Z0eRl9g-BE>ZNx(8_YJ(8}i zxDd>?`O33GO9e_PpxDG**?iih%Y!^PJ8paN*LdX?kiPUU-ABd@(rWxoAJ$c%>C|Z+ zz;>^36{=TS@dGi#$P7aToz9G{kXT%!>FJq*OwtvP{sDEjjh{r7-C@;4Dy-7h?JZ+> z$>iG;+&{fLr=Is%FE@D^{1Ua0ii_Gbg9VY-oItg>Ls5h!E!D35rHdg-jC&=1Uhbc> z9d4Ja(aZfW)cdF4`e+8{FncL@{JoklE?V269!^Yb$?n?4AZ zyuLss_f9WZ(gjyMr=)!Pl!V)+2Q==G{$*nF2pTLct*y|KEEKHSR26stt=+HT0fKk_ zY5nW?e`&sVm086{|AO_yL^;mGYN*%UeNIbjw=eYGPGHwCAZD#M@423fC>QeRca=y$>7vlJ zgnI=teuGw~-Fq6AmF+}wD$sUWU;Og8V4U6A*#%K}PfxnyMoWeX^b0~onn6=>UjRy) zpFSi0%-dk|Jq?IsZCjlRWD2{{1HbPR5P3qoA%RQod9!G|mSq=A9_a?H+;I_5Ay_9{~GV8DdPU~<}<=ldgSm5?JE*<%Ev#G5+om#)aq||9` zLSHuPqa84{56}d43tsGy^_%;*r`nXSRXW-b^4aW0QTUPu_dZW2`F+(eFWGzt1+RUE zRgFE~o*LUzpmb8Q*x5{a&$UffAO1&^8H&nkje4ZF(CN_Dwg|=~o!ZiLc~S&i+}tdc zYDUrbUjw7@2Xy-&s{%`XV$Yw(eLw0`CEAExxWT40A|hh4&@!^H5SvWDz3{juRs+8x zZ?i8^0(I04=Kd%5O9a9bYZ=MjNGKR|mX?^YuY;wHXhBk)#wn)NSgA0gDD!^Fn2vZB zB|}csJ%P{Y`_NFWamJslHc9@t-%dEdktSE>U~UuScDD9odKTI(o+q3azGnaNV7`3v z(fptLuMEPzd`rqrl`TDe+u3~5&hQX+Xy2FbB3_PMjatO&m8Nnaw2U=Z4YH56o!-Hq zrDvcj11AtDeP|8$w{snS42%=7f|>~lS3a@C@IO;nERTG{|I{h`(afn^tl2-Ti-&jX zmEaj>APOFcBZW~`SK;bUOG&eRNrXgdkVKsBw*bmKolHef>EEC;2%lv1E)?V72CIAY zw>&OAUF!)up@iVB-u~3nY zckKi{rL1b7Xl>R#Wyp)eYW5V9qHI4_ z(bVvr-|TKypkaW8sY-ES{)+KLwx_p3Qz6%t9^3ss975^UA*2M8NzFSn9bP=G5)W3@vPgx+3Xptxo^YX3^cV{oW4Ix`cE?AM>- zgN>Z5J7gABdz{5aw)>evT!&7dANIHp^ld}saC5?auK6P8Z~N?k(Z?1Vut#N&KmJt_ z)p1?PiceQ@gkEr6Eb-df*nk;yYg;E@wbAqFb`nm*RuDs%=4yfCu$!F{2pM7Ay)VEB z6xGR?cWksG=o>6MJ(9t>e4{J3Kl|o}+8`4&@oRF{63Np*;R{t^=i@WVoGO?FNRbX# zXMFXz@^Jp&ZqYvz@Aody=U8bvUUux;{aWdAk527SnR%i83w(ehvDeMC47z@!874O2g|5Y`nqpnuM>| z7Cc!K23_Fo!J7bD{^~2a9dUKd)A1zmX`P@>Jg@8+5I)D;CdKCS=Jk1L^a|YH1vgqfSf~49TPGRak)}8}K*b zjU%4!(L&f}kH%~@8{--n41*@hS>f|u5b22Mqduk(dJej^|J6)sX+(?oa?KLYoHZ{$QT^!@b921(%;>spOeihAK?vUnt=N zubN8?;h~#1eZph#9zNJ1qZzJsF%l4II9aee>4yjrMyT4^)d9jODZ4 zne8G}2ta3aa?#v=DP+G%(8EW&w9?T|mlMVAhX%eSJK%o0>9j}0k_C7MbP$ikanFv{T4d>Bfn!m6TLNz*XKmhSq1mAaImPq*+P!K$VGJ5} zfPL_A?e+&d{(Dj=v>GUFnI^AI!nBxch$~5X6}jnX<2$9qB&{Fyr41dyaU%|k&o35< zxou>PogR>VmsVGnmew8^`bfg(VC;glEh6RqpK$E->VLBHjP=H=1MF={FX;+BxfusH zi-lWS;1F(;J^4x<-&yD0;BycAbfzDSrJyV(WFD z5_$JI2wuAL{woZeD$@Z;(az8&FJKFBsXp)BE$_T-)MO>;a>klkCAZxnM-j_Y>Nvh| zxiR6s)gCE9pc1z;CSk>-Rx`Y*yN#&`UI3Da3#A>8tO2XT7l_P08D`?BDc-hX} zfV{h^kymwI!GATf1HYhHc!VF???N{r1rs%GyqC=prY7i;C#C4|mQ@zW!2Ny z->&=1^1Uzg{&xiJ*qp-6@Y>>Hj(qzo<-Z>~Eru83zt5-Q(X|8KIqY#u=1d+&uU=`+ z|2`6eX_~O>!K)t3f9hVQon1+x;XxY-6u@6WCFo(jHT<((U9`z~Z*IlD6`Dx~g-&Sl zw;J62UfTEBUcVk#NGPb|fXPMpmv6HCddgw>zFe=o^;lRaoXot>@Zpqb(L%n`eA3|; z^a20qA9=k4@;M32^jGtD!%#Ou{v+`Gf6SfJxgAKiD(%(-_Y6%{f9oDH2qdQW zwScZI=EdwKVbImdx&@DQ^4`1pD^r`;`%A-ZN>;Ntyf=K_U<+g_FhB4`dk7x=0hir4 zrh_aSlWpM>n0Ndu?e-6r?q9!LB7@e_4@WrGtN)+Y({bCEszdV~A>Z2j#SGAh0d?dm zBDQ}}!(ue@4P^Hi8=DEBREj0K*eYmZw!$@-$4NVvY+ic`);0ygXk z^CzdiH1i|Z_wAspWkq!U;^RG=J+Gh;q!GJXEpXsq6}V@=B6<6(Nb|m$2f(lg4r?Q+ z3UbR06xc11yAdGTG9O{ROkVuQfF9(_uXy62vAQ~tA#r=S+@dp(heXRc0d9H_ z_9m4{xt#h4y{TY|Q&{;EcU`EGDNb-xF?{q-BSSX9;i`es4jG8QJ2VPM7Jqr@&gxNi z0&TeNvK_UW&ky=PoU27P5xb$7jTiyX^n!N?Bz#XI4^U9TQ2#C_P^2G$hgBknYMD6% z9;|;Gir6*$%;V6b#P2bfU62xK!f-MHCp?6owI&bpJAA@ zmqUbLX|2X-1OXz@wtg_$5=K}Skvl@o)sv($3rK+5vSZ74n|Mp+flu)BRzM zUPx64vW$W25VT0kA;J+cr3UM=2yzARs%67q=F}On{{=Gw98GMP2by-)O zf`T_N{~rXNc=8@tr}d|68k`Rxp#xuJDytwtG-{mxie zWN=avTrGTuLr4Z{J$qeYqofkuhnG@BL^Vnp{41KKc{5Me*Wj85El zSci;*ah}f+Mu9Mt|6W1rwIn~nBjR~Y-ej1t4G&iUs3t(3RApy;PDaB<|K#Mt^LFj4 zSGQkoy02GXvLT|RsaJXu?FS_-+)k%oADd2OlWD{XudZ`*!p@O{RAI8-yyo=7uA9erxCW;}4Tvp>q`H1WT${JoQ*>t?HrL5UqT(0bF;`sFRmn@U&)-7!LvW2Y??VS!Je z%YY69lp%lsW{l*h7?Om(c^yW?(M_NGKuz1o(7-~aiWLG1;2sDdRK;AIm0p>v zudfHT@idNe&VJ==HmzV~CDUq>qKmlXPxFU*~tGnu%28YIO# z-&xz^-1gqnp1p;4{ZuBg^IsTiYxm}$)p!l=yE^OFZL;yy+)qqr_HJU({~5?pesx<$ zUVf;?BEX||t2$gm&aVop*saFhrlzL<64Y3=j*H@lB>S8NhU>S)#qS1Pcd5N}8YwX=(!L<7 z#GLuvt|pfnR!j84Vj?CIiNMd{nkaH~&oY!S>Wope8A)sqX15%vbUX~C3?OU?^zr%_ zU`O1fQ?!XXkrXd8@G(G*n>#3u)B3w&dsGiU$X<$_S0#x@aq81`)RAl7WZqKR{ycjL zI0ziy$wlvt_wJDr(FS^n9!7LN*CG3VgD4r}B6uQe!oN8N=&r z=i@K{9T6!>$^CZ(<6$ulJ$9pyJeM;oZMAKzc73(s!N=?s`ICNok^wKoKT`LSUsp1ue)rHNEwfb; zN4&ZE`Y<@enrSFR^(VTuoSEIZS--W_OsAA*I}~%jL0wlbo^+RUn%nq&WhE3UUO1e| z>+0&pa`w&edwubb$gTDd8az2V4rVv&I1`WHqkH}`f3xl*hM(I+gqXNgkS}t>eOk8# z1y4dsNl8$_`yTcsBP4m`sg`8M1l8s7x?jw!Ho4FIGRfp$OSqVHZ$(3^t|&4T(G#_? zu>mGWE3)(As37{@&YH@fEG29BVA+kw)Dc!@tBPtIc@eR7Mw=e%T>ea7p58+vWH%w> zVzK$vb!YZ>=*ef;m3|JQXZXXz9W*jJOh7>J?BVB%BBL9qe9i4`rxzhN-@A9srgdVu z;40WNDA#_S7%HCCwzTApXuESc-8B(Q4RLrTU$+ELS>aA)1YqO^W zpJ|poS5w|*rpJruSk>n^1MipltgK10F`PmRq)KE9_KJT*Ui9b?ho!!#ktz^_KwU+#W!Aawr-BoA4Y7s)`j*MtZCLgk zrCr%tKH5_Wzu?S}cKCI!9C%tlgs4JZ@5sC_-zVzPur%!FXFBfk#PzuL-Fu9nmdE#* z-UMmlyYAAIIxXTo2)>I&W0|}OCLt)IZ}{bJ;FCz7Tl(0|@JJ<)^qW7~cQM?pTw|D( zM{CsI-;Obx?(@1c%6lp@m>zzX+Y;|xdGP{?tYL_TO^fvyE~*%z@P zW&}zMkH9h?z*PFx*$;K~At2|Rtj1Jn{y{C#rMBC7E8eB9$nE423IF!P#}X9LEDTNv@zsinIez<8?f?}w)+JI73U_&s>;xlJR}Bz|C-oOavu(%8;(LzLA$;)@)g`i=G%gZ17aM7aBG z-Gb1x5i2zw3xPPgmb~sL){7N2XhDoRZ!0&H4AStj$-~ zk>`{Wezd5B9Ht^cz4-e1yYEfp(l?q%OE*WVE)y&cbLqkvQjKyo%C?&eX8Tb0YCS9M zQfuiPmdCzovaPkkRF;_uLrLm|U6!k9`6#^N)iP>}&S7m^xyGEa2Fdio{K`>PUG&M< zH#`Vhre3Nnnd`gv8Lw}k`n252&mBisF4k=ruoquW;)@b_D%ROdKcFWLYE4CD<)ddO zG_giCMxz9XcR=>Syn5_fs}gbm%i`tL82L0L%oPuxyg=}{Z@f=pDVRfNj(sLr6sKApvIG$^zbSVP+B04a z9lM<6FD5m5X7n*ohKNs2%whfkOdEovWfe;w`^+r?66Zc5@8`YQW zhpF^mzx-&b7wl+7zg2N6a`YrIK^&)}Pg9Fd;gtM4f7bO=zs!k)^$GC6&VRRE=!SH0 zT!%E#aEq^BWxT!=BnuZR|0&5D&rvPyAL#kMx?tEIc^MYl8UH*>40nZN;@i+-)?l_( ze`e!W;_LKZ#iDZQ@~IB-ibgQ*`+cnBB%5n&QyLx~rlc&vxXP6zMAsr+~Q*I zs1HvN@c}nwOQv9W$fJj%(=&f5Ps;a6qG&GbYX5HR?U~wxaogm45#BbbBE7ahF zp;D`BKgnCeOI-ak%@e$bj_w#C8986tC3}hi|5)Qwi;U=+C?&1o(bu*bK9>9K9-bT# z8ChZ$zX%Ngi0exbhJrciOSfAkyxI!Mv_iKEL$KB-o{lp<@Fy%?0y7di8rqGKLRp6q z|MEfqMTsoAs^3LhY7?~)P@S|sX|`lj2qQ}#14RWyg?4+4SKD^3_BmHCp=<^Hy#~G< zG`q#hzi@OfHFNZaJM`0HQkvCWd0hVuxv6I-CCR!s9Fx2|XYZ_+soa9U9N1P0G|{bhO2v zJBUB0#V)vz&vnm#^*YkTpjFfLg^P_;WAN9KI*+ekJ;GBB#a7a&CvGdzGQPh3(ru=1 zJBUWIIQDYA2IpOwiLL2*RoUjuvhFKRtEFgGHnw{5Cn3SXA1ly1+B)k<_ue<^XS#n@ z?iRu%rBxFscltSI6@D-7g|iSn9v9~jvc^+Ev~c&Ox@3XR;{3dCqb^C1u#rG_x%!66 zrtO}?o4JNh%|0*zl$Z`wvE{M<@sfz22rS-Jxe7CQ_aGX zwy+~!vZoe=COSKj*lQJd1)7$aOY{q{Tl6UNdq4}vaiiJ_{_5VI-Lhp^n156r%!_A4 zzHeCER?b3v93Ls2hEAL5r@J>UetSc&C@UMtgD{a1dKl7TSGc*LKN(QFT;Xo^cFkXvEj{W7M?t#Jf3;jrco5XK# z$Koocqz`har{ADvrb}~L$VxSS!hh0fb}ag6=DZh3q|1OtPkFTd&n5&b1cee!SfnF| z8{<_kckwU?x;jf;21`~syoI6M^QRq5r6N^SutRIiA4t%dsH5jP|2g^cBF#fVJip{Lp z?36}?yTSS`q1BGYkM5Lc;}`?DlSi#i2weYg-362F$A3mj+fZ{0^YHg zcpk#47=2_h#xwd5!~-oi<9h-xBt12Rx(I~>iPN}PyM=<1eq#}FpKa-c1_mCq;);X6 zYpuLM^WttsXDb5Hsa369Zai$A*TB9$;^p;G1A6mJ3AsXMt4aOC-lSFpgi1hO9baJA zw<+bOrWx58Pj+-|70G&UZlAQP!9HyGD@@3wyf#;#N{*`A3NtCm{R*8~yu*3%CE8{~ ziRe#_GrPQQ=coJ57c=uIZAwfUwIJk*=CCTgOb~7{5|t3ILQ=gF7k|#elIfh~u$PeO zC#H%(7#hlCxnvXp#0 z%9)&7!YLEVS#04h#qcpUgTlf$60~9G;2QiLPF8)TLA~R#Me(QKMPrlVPr>Qh-e4i0 z5v`$;x{u}ihe5_zCwQt%;C{lhCG`DWyKfA|>rka2`QuI|$H_)+#2G}KB$_?Xa?A_|29@iH}Vl<@mU&sebS7&ky%CaDR`|iCxMmWj?&@ zBjPQ#n)joS_ZWTe=7Y7KCDQ-~k3GzxaB`jG@?2?6QgN8XyivKHbPBSvEM(s`Mh7qt zcxE)~CSWR&s49gC2@MU+!{g9^D`RnPp=Z1hb7KF%jrmYL9Sh$g9Ju^Y`mb7a8uK%Jcgbgz2`-h@U~w1?$%iE4rG-N{w7V9fzKybv&uu2`P~6} z70I|kS^yC*>ysIsshZR0MxB$T2A<|+fz{R3S%a4O%JgNTvl-2)i~P*`U9}MEOe=94Oepag~8K_paK4(*r zEF{YoW;Iz`<+R)?6~prPR*}cVWqThM5kKkDwRGfl=rPzqLo2J*EItqNZ0Jxy2#xF= zavszmLbhL^zRp`?2Y_OIA=c;6JpA&ALUCX=jd?saUGP_}S9^GnZ$jqkWOYD1ucHd! z9{Y6oVw*fpb8`V|js_9r*0C?>9zS~#-??b>0$fLCg)oQ9kyt(rG=JNA+&96$x7WFw6EuMoH+c_bYGy^FU-tPGQQAso&}7k(gH=_P=`^KxGq0g{&Ukm z{KiC;m9cTY>#~5LU}MEDzDk*?GshN*0*Z1CK~R%_kW}-ZB){4E`X@K8@q6A1_qvCH zv0s!Hgx}_7Y9%KxOLY$otUSX*Lb7z_#U=xktn)yQxH!AxO3|Bl>r(y%cRb$g*iYed zeT_S3_}^a{q!WhpdRqSvQI3tx3lMU6+z&Wc7mscGQId+ zTO{&4F3^FV(roFr(&&ap06K=fy*(_9$}G}OWw-7iAn5`Uv4XWcNpA8rTLw-xC2A^6heuBK` z$gc8Rn~U11A1O(Gd@AjfsjPWzmPRe%A|m6N@i+4W$LFm0qzp`~htU;MWGl_YZ@#&k zcA?Z)v$Pc8I{agJp{OFdb0L>FrDvd!dL${O{`(+jC?}$3iOfCBs8e_8LeU44H1e6r zN<`{Q&Y=JjwkLFSqsU{hY&UIbWXnoVU9dwjYnizjj<;aD$h1@U&KE7}^cY8AB`Qkn zd63_5iOXj0IF!8eO@@;yUOhG*N~m26cK7-s9275dT5e_{*Jvjj85tSDsL|cuzdV-F zAQf+KtbBClEj|{()ZN`ZQDa7^5yfG>!@7Lq^=n%Gw;CE2-5;EdYC16gPG^s~_#}HbN z9gP1K%U#(S6Qe%pTLkPE*5>dZ!y=!+NEXAM?3~pI+ltAOYa-0hB>Mc2qh@Fd0+A>? z&q7_N+1ocpwPtyA(h(^@a*zGSY+u}P|ssj2}38|NXkC@A$uvLUt zZlzJDuC!Rhlp+f>C8zU%6l4p`??xAIXqp21Bbur(hlizDd!MGbg!cUMW(oQnOg0?M zU#$)=AIcSRn%~4s22eQqy8wxgj$C|u_^B#NR%zl`^*{2fSxn5#v?on-W5Kd$GkyvW zE+~lBT;!p0qcu4Zi0QD1JlCvs4U3MZ!xM*eJ%|jUrwWX2duCiW*@4ib?QrX)s$QS*PKI z&Gey>k%>XF7O{(UXHa)+%4ZusUl!c&r3@BqgxOf7Di0GmZ?PN_qxPF zkHKP)&2uWn?*S^yzHGL^2n2Qb|U&YCk(UTyNKBiD1%r8hsCTwD7omEOaa= zdf<%UIy_zT7ZZ(ZLb_3Z#3dqNw&>_NS+F0hVERt32omI#7z&`$ER-v{{)C>;HZR_d zxfQrGRwnpbBc~6$zOQ%>MBGlqBVY!LSU3Cui5;#|#3!vGh4b@s^YhCP6OtM6M&K&5 zZ~@=H(a*OWhvd;XBytbnM~!rW@n{FpsF{goner_~MF)o#bb4^!@P!t+eTh_wy}^^K z2$Q@$%$jUp#Wh-~azpSmXkV%xlm^JO` zsh2G&TR&{yh0F}$(9fFPmn@gQdVg_)_jU5#%N`|=#h7`tyWewMO@nR$!RC;wQkgf3 zI2iK=x~GQ70-Up6KqhBK72Gq9UU&QR{C;bH$>O*M=2yejhQ8scLaM3=`MnU}>~?o{ zuW#~vWB;o9EbgAHGWEhcKMwheV8{TkCr?%g4dbJ8`_rDK``!JlOY&r4hb=mYoMP1j z3W#+lKweh1INj*vGV-jPW7AZ%IFx}bbmF`C?F>tn{dQ1razeZGUtT5*xnjm~-GMYA zoI8296pW)f;$J?J82kGMULBe!N|ro7R()19F2jCGZYlwZNX|8(+cL7UYh#J)EzfJ$ zM@wlBzQ90KiM~R_%*mnidgdqAMJlqby%P9gz$iGmzy1N zadF+b_Wqui7H5XALKzR&uq)40zBLfhVX#J>$zMp1Vb8|;<3HpjO8U@0;17?Hg6j;b z^d+~Wp=Di9fT3h<{Gc)1b7e#L)^zZDREC<`I9mB&i5wTWo`V@9m@H$W6R_DO*ew8L zVfqkX>*)oZn4vaueClh6Ktpo6s-QI_M|ePR1mbKcaecqNz1AIQJ$Qr#dBowJltcgV z6XwSJcU{!{+N1#cUG{-?Xls+!p&5Kc zcD&JFWY?>^OzTzm4iJW`qrlLG;whlfnIHadtOz*qDaV~ECkcAIUYSfNdlw9^{mC|$ z3yA_^%Y}%izg!0i?;^rbzi&3e+G?c4ayvzX$93y}l3LHKPp%=VM9JF-`XSCo>y=|g&tQMWw7bB`J#gcwv}dH9A@_n@ z9cJgT+t8H>Mjhz4?&|%9?{%-~Dw+g*qSQ+fwzh;-x*=H)3A&b*_K22`04s*EBsi9a zfh=32_h`)be6o`J?;&1#`JMIy3FCJ2^^>n(Z1S(-Qna?WBr>>zPCvhMpl?XS^KX(;})=P`{&lz-I{{t&H0;%J_`N5*f630PuiZ`V zkX`-v>hU)c_}{1hFIeflmd)Wt4Gxv$?2~_QGx@$NuGYN>HdsSL_&Pe%zkmN;2i+2? zoLp~591kfeXENulB?mee4jTyK0LhCY5N*w$Tm;Y zmoHlvV=pJ?<{n5$U~qAbW-0{SCcC(ZxORQB7r>_6<(V1!ulHc;hk8qWy#N)JF#MiC z^YN}5?Byk*SWkL7c6WCN^Cnp=M)XO7=uSV^)?WDfibh2dNJ?Tt(K01Y+nG;KC6@f} z8J^vRcI|uj!3;Sg1qFr3x0Gbq2uSiF;z3kfYV;<)j(sgqA4tr_toJdxy4tmcpFR3~ zseAUvkA&X=gqax`rKbHK?ga-2BlecI-Of*3jrPF1Y~H?5@NU*Zdyc^ChCmV?Ub6w# zTb_Q|!{9VK;ymkeHa7 zJ|PsJ*}X|ZB3$XPZmy$4^3ZAXXj?9XDu~J}l>27{(`@VJqetjM|KF)x1v*{k!e;5k zi@hluK0&ps79R@>H1o-+sEiEyKR4>uIBgg9{e;x>si}KLix=Znj?S07+rNB!4>wU= z5F|xqn=*Nt8R0 zrKTFfatsE;_(?%j)T$syHyIHT<$|#krMwv+83B21;H*xfo2x}N;}Semt; z!Rrr!fU+!hTXx5~w+#z$M1BYJ>b; z$SM5yT|W|r?lsERouDQhH1D2hfyDRi3tLWO!JdkW5(cknp{QKvcK*8~x9aOxoeX?= z1%(piX({}bLQh{`QdieARE!lRxR>FwCE|5`DGOl z|Ic-Z5Oo^v-271C%)`LIfQyUk`$l%>#vQWx!_Qt{wD|sW3XXqI!S~}wgsiNeGCi20 zVBZlH6DuvX1cFu^6Z`+r_SI2Uu3xvtQ9+at0VPERrKJS~4j>@iT}pRKm%^q~knZl1 zZWR#e?(W`n*Ijtd@4NTAz<<>Ur59bLAbl&F+A~56<@2%J=s7W8?002TY0(wYRobIqVC- z8r+)UgNOoAM_v6QigD7{*EdhOw7aM0Vlix>rw78=%$fbv-rhYqxiDhRs>k^Fn7rtO zTSt-Rjm&VV%*;e2!ryt9mj}hE+2Z;E-^OUHqhZcFmM}-F`QRg4ye#ie$IpMiH#SyX z4JCeU{+g51y?Kt=pf?j%pa$F8j^nTYS^*iaQvLX@%WD2PaAn8h7{11T(MinMr*eGt zpNhp*5?;>r(obH#1DGeYYE?gVtq6%WM8(9Ge|}#ZGGj3r9qupbBw;JFT5=i~7=Rj1 z&L;tez?F-ADCiwaFX9geHC(U!TRyqYaJ+WuzJ2ZJF&s0`1kqE<{b+*q^z~oaZGGpq zR`TGL`nWgO656aVtM_l5xPR5Y4!ave!)-R%-g@r;Prxfks`}%d_2*w_rT?%rum17B zd9VC8|{&E z!&Qzxr?*GGbZ{JWs4rinIfD-a@hf8|aCM6yudyeXvfYX_unKQQznar)8W6K-w4S9d z{>AcZU%B6;zw>AI9LSB4-&a;qv}Q6gmT5~4^N~)t%zB;? znJ5>i(I-s0;GSx>r;f1M+taYWerF4kD!@=;%~v1q%U}EdFc5RGkaLwUZArX)CwkoH z1>Z`3cmz&Xchj71DqfM&xjrC@=Yo)ofH#7;0!#-rIIEF$7wH7$Ot8+$t93`U3>)d;b%L-jfr$BTBMbB7UZUh%knj+G6t zP3SaPi@2(MY<~~O+o&~HRxPis0ul@2tB)Bq&7r<`ym;!>Ag>@3$87zEQ@S9(4Nf@ZWbXf&914cd42{M(5L zCV(HWbEwf!F}koTo4YD9I(Bfnc>JGt{P(T3KcEAqWyg?+VD;DeEz+Bg5S3QyOxH%N z@P1WR?OB#g)SXT*&vd3CSLc|JMsLntd^HmFfAitv z{moXNT(@~;8URjwXOo;J0AAEPT`Vh>gA!f9%0!>MjTa!J>s;nQL!a1uO?o9Rb`}-d z)A*l(nZ%I43Wag@p43!59!0F0Yg0!PM?*j<{7B!3#;)&Y=-b>SLKbh{~JD$N!la;LuugU=Cby$ z(+QBsEO9tK>44xy$)vcQ!ymRalr(QuZNFj%J48z=CGT0GUCa^MBz5)+P2E! z(_{sHpUcge%ER?oHpZpcuz-jt+dz`h52l7^a~uEO_iIeA_BlSuxgQ*`Y;2g&s#j7d zz9gq~IBuVzWOlS!D{-1wT>E?>O5WEyz6Vx{bAr|NK_}+O*#VIZjPpHIC(avwn9@p0 zO3LyF^GIL{?Ri!F&cyKGZ(>}ckr3&+S7#mAYKOD8<+JJHdU?*pJ;B_MCw2NTI-tX0 z(Ve*-oYpW57|Ey%NhWRK9VK35NnEGKjp>*%KYEt*S`|G)#ai}Z=#Qg<4jW@V0`rqI zusx?%iDoM?bEMp|gru|GzHKN^F){PWrM0u8;8Fov8&&J+-tx`_mLdsu$nAimnu-~6 zlBus>_u?nmqhcP%L_H$aaGXOt!iDxYy|+3bUVoqS&skQM_T*3X{B6scL6T*^*Vsgl zJg-xsnRS-!x{xb=>%1|(?MzUPM0MFYt7cYFDT`#*IrH9@vr@p~tx%nmr1JbTsB8u5_*=4+?*kEKiC&0uvg zf3c~K-cL<*dNRcKRMvlo~Qxnuzh}|KZL(!yXAoW{ltP0 z-HVlJ%~2om>wUMYR=s4z!1gs~H z@Gl_oN#NnXu~t7=y7!fFJBouGSacJ3!V+(dCv(zi}m*a#d=c%;92K9PFf0zMIv@So>i zySB=7m8t&oNEH8H(xm_QUnG9^_PkHNA)~v3bO*gLLJzg2eB{@3>sz&j*^e{Z?vP zYSQ3K=^=Be1X^t(KSI8X3_Y6^EE-;S`}xzqeZ9YbFZF8)B6Ys8aeg?+$Ah0A!!$Op z%o%nvFN#;&K))mn1fqB|JIV7!4RZe&MwFV~$vjNIaohRaM$>e0;iois0&fUdb%5 zlakS_nO)6lGihhH-c9YXJ9t{cSAJdYF6^1h{lc2rlRQVjWp=(X(BxL5AVVC)D>l(Z+IdU7CZ*y?E0+S(=&Unwi8I4mm# z`i1eB$(c_!d&>nGZ`OJR#bfa@G0UnbMeZY!%iUH_NVVGnomFhspCL-hj4e(w%{InG zGMgc2RXS}f;$h^Y;Cgxp=8i1yvY*9eX2QHHI-0J8LGRny>S|bhH(>Q$)O{_<71+P> z3%#fj*jLxm8(S>g45##HXcnu#+(Nya2_vwD%80|dFfi#NXx2@*GmNP zTcx+Ov|#c&*^r>TcK+;&&L?31fS3KiyraF08V^fW!>)PmYB?X^$rU^e-wK3B>) z<*Iz)ms3jmQ9t*(GVq@3X*{OobF#EtvV;tvA>P{%w zNR=3vB&8+&LVJ(8os5dVn$5vdATBIiX}$FMn{*$dalT{hP}+;hEL~4qAM>14JWo~$ zUd2kV8VbPE9}@fsj|4A-lr<3FQAue;V>U;>+00lLWJW4>Z9j9JQbRawt_D=g=+YsF zJIib_nhDC?|FSjN*$xXaw0wU^PA?@j$t{Iz6dJS{K=#-l?zVVIt6yU&VikJfTy60> zw$iVbB{yCWRJhh-$18$-q)4~~nw z?nS;Zot3VCXo#`f3*x$4SN9?7hie4fhpLnx&4r7i2^AJ=@rA5dev6_heFiGFCkuEF zVNOe}FfcdQ-z|2%g%OXN{5ck{en0Cg-UAZ0qRZc?hK}dyL~E=YPY@M*YYVly^m4AaX_;uUG&jFy;)aDiT_POiOJea{e4f9{(O&1(Ewi`5VJfea_1;R zZaqW%HFa0D!pYg5ziBRmPNROtV>MYzb3t1tnv!LB>7k2TR?$oVT66Tu+Ri176eSfE z=oK*a=W*jCKSk`VO_;!KIroydcmHF3Dcbeis%MN;dPC~2SXeXQ0JDRJ<|q8Tu_?SW zLAv2{^?Bf$q0z?;V>(4er51Llbycz)%i~ekbB>v{+4qO^Tx{$IS{4>r2!x^$TCtpn z?gQR$->l%!RWH?Eywu>zDRS=m0+Y~>4JgE{<^PC3a#A>1^QG=nLp7ZQ_6Wo=Y8ZIv{ZJksSE*IJg;U{4v&SUxKa)ASq3e4So z6f{(hXM1VB(lRL$$30?P=jGo*_)(OKjpLowSG?o#J+eSAPmsr$*Qpl!(XaARVlyGI7jJu}tU z>FL={=3R^M5$4`3fsw=n>Rp%PRqG&Hbk{9nKF-9HJS7u*RVPg)aJXP}cDb^If*1-v zxLcHprLLWi>gkl;2YLByuLdf4;kW2AphJU zGn*-`Z$;MQcjj=SSJ&OUexPLZ&1z@RWHco!pIsM06>oP`@b75sZL+f!8g_Sj%kjO) z;UM?hd-f+!Kla2L>{v2zIAM6yJ5RxBq9#TLCpqU_+g(aE!cm$i?q{GpXk8t@NaGLg z)Xm`4mLP$W^i2s5FT&fk6)_;Hu{1Nc#D-%J-Di&B-E=Bim5q)r7ygBYNyq8P&!0^V z9e(*R;#J$2cEvazOohNg$=?3VhjhIdJEmK+Xdt?lh^aXZKKfVRejGtjs7Es<{ogmOx{m*r7Y9IYF8XWdzuveCjipml1F(*X-Ln-&I(RW zsz%%JIxLCb*fdHGQD6()hefY0MQ?d_&+EV>L!7Yo{m2O%Es82iHI5|3&0PtYJ7+q> z%|~xPkj{|aj6)?gd-fEH@VET@U9t75>gqG={c(3c-#15+Q9q|9B}ER_AFgeAR~$9o zx)e?7(I;Tp)O_{0RT$`s&&B+sYn}1ZQu0Q!+$R!ht0gr+<%$<2?xMh6g9$%CJY%46 zEhvFpmQPVp-*f3DOH61;G*3nk2zi}JsJ|~BQDYy`)7I@<`S{pC=mMe7qe^SP$JAKr z+C{m*S#A9sLC9^LrC{qNzF|Vljn>gdbycvFB06-z99~#av0_wD^J}%=2gXUGCrws^ zI|XZdNTm5}`+{$)@G5D5fQ-EKN92U(Ve%oZfU2tT=I2j!wbg`NHsRTlin32>$y?uV z-B9=J_-I5dc{_mcpBd$DO!L=-=rIx6t4iHzZac6RC@g^s0!G0{7iD*f313v;~mFNe&#$$@H=rso?9jCbI9aNM` z_im>w4ljIT9)mNmljJxoDr}dOHmN4rGHfXD`nkifvI>03I=(kl_AHSNl@HhLp|_9~ zpqU)KF?NXY5t)^rekOBx8z1kVswa^&vRr!u(n~v$yEe;WVeh>C(o)lfSPXtHSn@SY z{%&b`CnO(NF0I&j+N-WA-5L|P)XxcqPtMxym1qhiZycgSV@~HiUX!M#!1!Q;kGH?P zytETG)-f#uY+GS5x#NxM%nQCZD5N$lc`4kDV7n&4qmKMtmj`P4%Y(MdU!0+EeYFDL zfhRCtM-=Yay#0DJBI#zF**Lm##W)os)mYDui-Z+y#$wC6e!i%ryrPS4uIY~mm}APd z#Wt@$D|4U;vLl&jO>Qd2OZqT_RfB=N_p70~EArm2=zuXshT?J6lUO#_CdaY(pFfjt zUG{(d`S?==0bqXuDg3V9b5jA}u@KTL&3CgF-)3fT;1>FZ3E}9ak14HtaNDEHplqv3RhF1q!{*NaaDWfHZSmvwJ zVYh8hi8hDEq?ClVn@v%fr2kbd;G16WS5uKu6Bd>h{^s-bYwFOV8rEhC`$yY6P#_Hr zwXj{QAKQFq3s%l46H8qO^CZ^Cqb46dBx#+Ncg2=FMNEB}P#Gd-w>e4h$gz_-KH10T z(*7GdE`Q^_uxC?(R5fe=uGxhBbgik6cktHN5kL2YH$wwG_`_2x&a(c#mVG#Wx&)8$ zoxDX7dki+8YB_wg2F(~Pbr&81U3nRPkMZ%dpUF?bS`daM@8{r+l$&Vj4pf%p`eQzQ zLB*FgvN}{96CXI(J1}|MfgRYnf`JM2^oF{9>2kZeCmA>C7MAdk93NFB6pS`)=&)0C z&rkOh>+P2iMGY6L0bVCO!qVTuJVq9b$^i#%)847O9bf;^z2*JKmHvEBHP_SJnd0vv zuKlQ3n9fYJ>nAUT^93JsJ4h-!EOypjP~mP5 z8q`{|Dypjbx7No;g%v{zwt$u~V7}((>wAk)PwWu~qV;nV2|sh=fDn&*_$XAl!yC5# z5%rsc?&3toQ~b^VJZlM}=k})iew*D$Z05Uj@IwZj`CscW{2MB3@@0d0M;Nvn9Mn|L zYBhV-+lI{O;<)+vm9iWo0zqkSqi0{E?Vz%9ucu#Oul=tU74dVhBRw-rYho=uALGbbEUD<=bKo`gLHtY~NS!sLN+0VjF zQZtn8aV9_;&;HKjqxCu_4pC0#OKz7v$qRMH&_%tVjWl_;wXte~`thEm)w3r?RA|}c z--9CAbYf2H(!K@1W$L+pBbpsW($43Cn++jTs~QB5?3Cy3DR@Xl&unRuN{6y z&P+|*vVLnLJ_)<~bRVgypU4;X#%}K^(|VrB6moz(*x`&RRiWIqY3-JrtStHSbV)x{ z>0~WCt9KBdp}!1Si>1}d{&Ww}b_epTI811)O=y@~$R7}*H`}^ii|H6~+*Y)(_HJ5>(uIaRAdWK;?Y2&~vLe}|HqNm!{ z5GMvIx9f_0Q2xgK`yb(c+(q+ye9ys=g9_`z43T3HSjxWMU#C8~Cc zKzVINLCId`VPJJZ8WiuTs1n8ah`Wl*pu0gY<7NRWD*b?5m=}h{MU~rS3mU+(w9eHs zeb>fHO(wp1^o*dfA~~JH_tMb^czWMbelk{ce13Ye z+gS$Bx07ETIU299KJlKiKe^kzm71#4()#XvlErHGu51{0J?&*Ipg5QPKNEt~w*h3l z*8To$$Tnfr}~SCbMNllKd|KLjoWi=qP1pNI9LbjjF;TZe#sBVR`$8|{1J)2_T6kN#Y%H6I;6KZ{@g2O>>~v& zZC27KG#cVm1*OM0W4+XBEO*z~#q*zWH~x|t1JO5|!1GKKj4n0|5^lWQ6*i-u4M&VD z6JYF0NkxT*9+I+Ltn79}eq=UfwI%lUxfy?N<2+D^+oS7ww}#y>G6ei%XcZYuTUF=e z(b>t%1j30ra*1p=ILC8!I2ert;io6MHoAj>=_c$kN*ovc8`nQgC5mJmoGlLojPZ>A zVqrczN_gGI-CcB;n3hwUW72o{slKeJBUBF*UUg~4wlNMlr#I)>ch+=CIGulRvrw=N zl!z_;ix>S7xy{0 z0g6v9p3pU8&d9)+^+?`E+*E&<0E&IU=;f5^=f<0iE~!vF5j2H}f|2JyFG+|5gD_V^R023ufzA7blyZV4*ehpb{btU0w zwVaBKGbF@Xo*2;_R+iljFX~RuA*_Q>to1V2G+qH3z7OCwVq7jXq5Z_iu--3!}pTlYw1^7RjAFL4y&{G2>`)4liO<~$RG z9H2+ELt?Y~9`9mrFlam(l=ht2YZ_p!@HR|F#^C2&o28`8rHO)h0T6wlR|tK z4Xr?<@)M@Cs`M&DzdI&x9$jc$D2Kz(T<=4v2M=a%#yN_-^Oo6%^cfeo6U}8s-)Lt{ z)-b!f)~_Mzdz&3E^h==a^dqzBTKGThpUuHz3Hn?;I*pF#`k&+d`j@n3l$zH1UEv^f zc1Z9>w{Mi}S4YhDpz2GiP433I%qbQ&r6@y!md+L;hE~Su?oJ#dR&KjJYATLq>tQZ)lgGAao=EL?DEnt z;GI~TiYiY&q=Mv+0X(Jrjx9*a@l~K!cuNBiDj)4-c#Gpe(w!$cZ6chwmOsH?I zY1CRA0?z72_N9lUYXAI=X?|9+8yNoW1{YEk<4R$*%+7|ODVSDatQPdkZqJYS$?h4p zd;jPo55O{REK1@0C#$&D9sKH2^NMkaT-x@F0(WS

fgTc%!tnzB5y=r)F9Y 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 tbqq#0bLa&R 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 J{7LW2{{T1t0~i1R literal 0 HcmV?d00001 diff --git a/docs/prototypes/sending-monitor-20260906/04-threshold-rules.svg b/docs/prototypes/sending-monitor-20260906/04-threshold-rules.svg new file mode 100644 index 0000000..f011089 --- /dev/null +++ b/docs/prototypes/sending-monitor-20260906/04-threshold-rules.svg @@ -0,0 +1,137 @@ + +发送监控页面重做 · 静态设计原型(全部为示例数据) + + + + + +聆界短信管理平台 +平台运营工作区 +运营概览 + +运营看板 + + + +发送监控 + +网关异常 + +签名质量检测 +客户管理 + +企业管理 + +企业应用管理 + +企业签名管理 + +企业模板管理 +短信业务 + +短信通道 + +短信记录 + +任务进度 +系统管理 + +用户管理 + +系统监控 +设计原型 · 非真实业务数据 + + +运营概览 / 发送监控 + +预警中心 6 + +待审核任务 + +报备任务提醒 +管理员 +告警阈值设置 +整体兜底 · 通用规则与个性规则 + +静态示例 · 待实施 + +返回监控 + +生效优先级 + +应用×签名 > 签名 > 应用 > 通用 +命中最高优先级后,整套规则覆盖。 +规则列表 + +新增规则 + + +应用×签名 +通知应用 / 【示例商城】 +100条 · 85% / 90% / 95% + + +签名 +【示例服务】 +100条 · 90% / 95% / 98% + + +应用 +商户应用 +100条 · 90% / 95% / 98% + + +通用 +全部未覆盖对象 +100条 · 90% / 95% / 98% +实际生效示例 +示例零售 / 通知应用 / 【示例商城】 +采用应用×签名规则,覆盖下层通用设置。 + +编辑个性规则 + +草稿 · 未保存 +作用范围 + +企业应用 × 签名 +企业 / 应用 + +示例零售 / 通知应用 +签名 + +【示例商城】 + +最低成熟条数 + +100 +条 / 每项指标 +仅有样本数达到门槛的指标才参与告警。 + + + +1分钟到达率下限 + +85.00 % + + + +5分钟到达率下限 + +90.00 % + + + +20分钟到达率下限 + +95.00 % +连续异常 1 次触发 · 连续恢复 2 次关闭 +预计下周期生效;旧告警记录保留原规则版本。 + + +恢复继承 + +取消 + +保存规则 +交互说明:保存失败保留输入;版本冲突重新加载;未保存离开须确认。 + \ No newline at end of file diff --git a/docs/prototypes/sending-monitor-20260906/05-channel-enrollment.png b/docs/prototypes/sending-monitor-20260906/05-channel-enrollment.png new file mode 100644 index 0000000000000000000000000000000000000000..b73c0ef9bf7d01e9f2f6d602c90eabc3b88b5d5b GIT binary patch literal 128901 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 E1H*N}?*IS* literal 0 HcmV?d00001 diff --git a/docs/prototypes/sending-monitor-20260906/05-channel-enrollment.svg b/docs/prototypes/sending-monitor-20260906/05-channel-enrollment.svg new file mode 100644 index 0000000..04b6196 --- /dev/null +++ b/docs/prototypes/sending-monitor-20260906/05-channel-enrollment.svg @@ -0,0 +1,82 @@ + +发送监控页面重做 · 静态设计原型(全部为示例数据) + + + + + +聆界短信管理平台 +平台运营工作区 +运营概览 + +运营看板 + + + +发送监控 + +网关异常 + +签名质量检测 +客户管理 + +企业管理 + +企业应用管理 + +企业签名管理 + +企业模板管理 +短信业务 + +短信通道 + +短信记录 + +任务进度 +系统管理 + +用户管理 + +系统监控 +设计原型 · 非真实业务数据 + + +运营概览 / 发送监控 + +预警中心 6 + +待审核任务 + +报备任务提醒 +管理员 +短信通道 +新建 / 复制通道保存成功之后,独立询问是否纳管 + +静态示例 · 待实施 + + +通道已保存 +行业通道 E · 新通道编号 CH-005 +创建结果已生效。加入监控不会修改通道价格、连接或路由。 + + +是否加入行业通道监控? +× + + +如果是行业短信通道建议加入 +新通道:行业通道 E(CH-005) · 支持:移动 / 联通 / 电信 +将采用行业通道通用规则 +最低100条成熟样本;5秒 ≥90%,20秒 ≥95%,1分钟 ≥98%。 +现在不加入,也可稍后从发送监控 → 监控通道中添加。 + + +暂不加入 + +加入监控 + +加入失败状态:通道已保存,加入监控失败。 +仅重试加入监控,不重复创建通道;关闭弹窗保留原创建结果。 +触发点:服务端返回新ID之后。复制通道不继承原通道监控身份。 + \ No newline at end of file diff --git a/docs/prototypes/sending-monitor-20260906/06-alert-center-detail.png b/docs/prototypes/sending-monitor-20260906/06-alert-center-detail.png new file mode 100644 index 0000000000000000000000000000000000000000..1c42681c09d8d0ed343b5038715dc16616b21759 GIT binary patch literal 160825 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

mR^L zRTfiv^VI;<(4}nMU~oXl(QL0l7KTxFH_h(&!_PkLUwH#Kp`;+*JRlAy$e-CRS{{9_ zqi>ft-P`4Oo!pc4$M2sWG4!K-F6Y1|PLuE)c5~F^=q`2(7MWmE6L1M0vQP7X9o`^B zs2!Mw2}F4JXvxXP`wLIOFC2b$8c?9*(~{1FnA0Wb9F?{Zvc*wh*E5W|Ha|Oms8VtJ zjGZ5Vn8D-*;}aa@OrnCj9XF&05*y6cZiWiWi$g)X)3`mzbOdu(M@yV0lPY_$$N-|keXRnz zD5qEb*JehXPBO^CR@M2hK%mwBA}TyOoL6h22moBn&skGgaUO7;PR%?g4Vbj~wOD`o z__lzF>YjP}UEa0ceuM;cX3mk%fayvL|j*naN09 ze#0rq|Di`rdaAlYvWP=EWb-|6Q{Hs!tf>3)=m#}E=B#{|rJZlGqVwE1b>H%{nGB~_ z16wpzNKJqJY(2ACe=v!}pOgRhRa#YD3%{7)1vn!DyPst)(5r$-%%j%Wh@l%C`sW5l zyE}ph#S!^2!`24+nq>~{(Li&l`|4;jyzo4v{t<%Rx&Sq7s;@jMw^x?izB-vvSHEfi z7{yZuu9zs|e5LaKLbqBF`$a|d6n=s@%H>~O17%j&lx~IkT_sBv5gt4)EG`3gg_Z;a z|GuP*T@aX_&-Ol}{(0J(ei=|j7n2Zwd<8@xV55*0_!p%RSwK8&*3TLEklE6nCgKmY z=d^u&eL)1(t?~RUnimw0QPGDS6jneD3Tg3wa~AtTe^whhfp|$dDUCDR3bf&nHCGgz zbUr72{rc9V9VdW!U3NLmPv=#k7++f(ZES7=u1f>FbbSF$&7M_v8r8V!DofN!+%bX= z##*n$cH2j1Y+AcodwY9MYL71z$e**$X!ommn@*?xQG711+H6G2xLO^rI~ndK0GxLr zv_xxSp+d!kT+{-<^)M`hT%7gkArlS0L4dPDV?|F}H;&y&6S!ixB-Xi|NbB_HJgNts z223XeF{7BYrhj4;Pt*ng*{F4)ucYj&$(DHopUz!;!U*K%(+wY>d4gKPQCy7X+0?rP z?uv5J@;M_`FdTc~HOzgoN)yt-iX< z)8h>LL*c2ipbdCG)VOP!bR(Dx*X|$E2I74fX*_HCp$u9*y47lFi<_&r)!GWQ_Rn&a znfoQ>M+-mUvpB=_6-e8HE&r^_QZ=ho`6NAINbIzdgr>{u9$6w$xzpr~M|@V(PpRLS zqek0nP4gicC3m!hiHYX8v3?B}uEp}=qq9KeOE2qj6HaO^*TIJT_xpX0_Uxn|F4{&* z=vD_-8q3z~lCKC8p_P@Px--sOIcstC?jG0_x+1xSnAshsvast0yW__6dW)j;e*xoc z$)XO1@X)+kURkl*u_58;OLmmd1e=qzgblPFeA90}k2*g@C%Hp1SsBs77I5CtGj46H zbX(viDbMM&Y~uhTR%BWwKbsK-QNS`;6Rq6KmzvN$0WS}{ z7?6|zk{E!f6^O>g$O>IC;as!Qp>-$k?q~j5ILeE?s%5n-n>WA-exJyOr(J8YV4b~;|9Nkc? zGYbbY0`P5s|Ippq8V7H@o9fCiwj4l<>My$+mn~WfDcO7QKe9dKd;xaFX}RE-6Gf^gVo zor`*8mUp(DqBu$2^Er_pR__ASJ> zW&aKE)nii&$1~k7WwrTAAc_&Q73udUEoErN17b%<2U!yIE$1&W@}a;_!03a#xsi=y zXxR4Q#HY=+PDq1*d|`>0^U^`Pwu4(>Oy4NYMU&Ku1_2OIGDhg+7xGNHR6PS?fX?Lr zQ6((x3;Px;B4S=%eo7UN<5gkUCX+alx#b?V`w%(Z?J|=5We;ig^UYwbq@35ScpXPD&K$ARoJiSXT%ZzfjddZ=S`0P3J zCvYI6WmG=N^>&yO#RQkQuWG}GLSG-BE$r*Sd>0k9HHX$?f1k`%9J8>nFz~toLZKdd zeALu$`;yC6xoK%=m_GRp?%)5Ope|s$ru!X84!N{+v~=%a*r_-bYeBW2`IM$|=b_1m zkBf6X`_4bL(!bsWQ)nuU#(J&)5kMCS!`Q@P*nPy)^Uw5-8+(5A^~+v#q!_q8B>MV$ zoGtgawj=U|#bV<^Vg`$2X7W0-RmX*E?2hYBdOPD;otF_oI#*9oVUh|F>C3+vGRh9QKCd2+M zwe`L=qlJJ^l`51W&(v^r0Nd0yOpd^#X=ga^jA4GhwY^I)DbhYKMv9?!YkX~Jov+81 z0={VjG7Z}NJxe>th%Uv-+5GG2JyHpO8{d-UhicU@SAK6PFCxiNihjGkFQW0AG58YDMidp&U#4d|*HJh{5F6s9hTcZcMh`tk3! z-$_89+2jCVzUcV`u%jdBBMTwp_+|tN-T}X3L#60o1_{t7?H*3Rla#rKlDYz(M&Ig6 z<2Z{f>Wi$vY*-8R4z!oy1ZvIN!16hCai{`BBXA7lvnNm^J@vb>OEU(Th{KBxA-O7- zjY4I`G|DM7xB6zCE&fYY;~YR;hF26kn?L?B3M4V7rDG!P&VsU5OU) zIC8{LiJ|y-X;DeVszpUXfqq8{hfJX?51l`R7j-4@*p0o(H!*R8?HW9F??YhiI_<0d zT+cO%t>%z*Ciu&4%d~CkXk>iV?suQhs_tD1g~{sA`cIz{-udCcEIsF2UYUN=5pdQr z#3(2z5O}a53qTo_yVxK=qzaPDV%v$G7uEKg%YVsteCB8wng7^-z!Ftl zYLNFxeN%uBISTg>_8uu`YD&h&iB2O78DCfXQrNj=z2-UY_d9jMF#&?={1Uj#SHrStGk8b$fR?cT0dX zw>VOHnXEBSOcZdlSxx;MlSUr9?s`Dc5|W7D=Ae*OQ|q$$93$4Q3!#Pf8&5kb)rS*4 z_A~EZ%5cx3{!Yx3(!F0&f7EsLpLsYM%g-z;eEFjxKvpE@hQ-B!TVReckpYlYH1dfuweN`Uu^8%~u`XXGOMx3K;LN1&AS9iEx7h`P-(9Jj-b)6i z_Zq;K@>{>8zkNP4>*-|eda>@zSJ32N`x;+mJC|1Yt-f@-<;y99&t7Z<-V3s1q{_rCw5)V=-?oA}j`Zb!W+rHV zaA!7cWiSXr6w4N%g2Ghp;2*G_v?W=7zQIJvrzpzxyZ?xau?YSvRZoSPj*TG!?{WSkiQn!vFyXjBB*%cs z2nx0~lpSE4K@mGqtFsGd?aU6EN6!!9Coy_3@Sd@qUT#-OmYn?_Bt4CxkG7E>f%iD! z?|JewXKKb9TYmwNg+V4RU9pIiRDG%5!ZB_y6x`!iWjYh%t5qgOcVLk`@)Iv;A~;(l*y)6FR01+*}jFFaWmey`H;7*R013S>D@ z>rkr*3>DdhSe1QNueOTAh(R>uoXW(I2Eye=stb6_-r$iVGUw!Z&HM0B#!U>9<5++GO) zCmN7LjwHLFHqmOH?SaaVi3q=M<u1sV-7pd7&+MTA8}FHXz=Ors^bywZ8_}-bHu z$5%LS0{ULV+-Y#zRdP>M1gV)^7WNRXp+GDyV^-^o<6=Rq4g|Uy_H-QeacGL(-zS@) znM^MVejHLiWU@8sbtaQ1x%$TbUgglcb5eDH zu3eE+_tcuhO?mcQmxmET;q$Pikh1hitEwu5?4HOXN@ahDXn9CctuK%D=ZUq$kv{El zO2wNgonz{$rHNzbH;X^NT^>K)yN&a8!<@}nqvX@dgw!h@p^MrgzMvA!{THApHTOWg z>As$+jd-!S>U3$a(%m85ycik5A^tb3tPK`f+{mbO%Sjwh0Vdhk2dh9oIUU@=k}-(1 z=IPv~+V55>Fduuv05~H}33Y1=k`oRVF*!NiKnLIk@a$NYIOUIXS`DxrOojaMY>-XG zUU>Hau(ex*R}$%yvCMkJGcNykI@7v7@e3sozwEJp!d#KX){Z5!iw-V^djq{Zep_cd z(rmcfNCO3?|CSntP<4R{+jZ^D!-%{ii?{4?oJ0LIapCHcw!6&_w8$@m0wL`F=cF(9 z58aB2%*)m|N}3}>vEFrU}|jQRR9T1;4Y~2mG|T( zp!5i{C@3D@*iS-@QAMuU-t{cxf&%u?-5~gn$NDpIAO%@1bYc7y$1hHH@F7V~CI#usS{J?l|9srW`Oo@> zKmRvkG5|e?I=tzu+^%eq$pOynu{_Sm27(C=`9;4}hac;G zCGUEEg1j5#6EZ6=FZDg?SmyoD_YKr%J4FGIkh#?4De)oRo&8zGia~z1O#=W)sk|_~ z9>$4}UtDEnB8kb4H6LnUg zmszqHZ2o$$;=|fk9qhCR9Cj0+jVsy7DVOSjUgvAvckkYAVps6#9(=F8CNVcV$3%3a zCk_14B3iYeuGu1^{Ms_JFh6IiRGf(T0f(XX)>cswF^M?uI;@em6J#az|hgrx#!2Q``DVb6X+kypdRok zn(lIHftKrS0p`B`w?nbgdijtg)86(r=H4J`dJ$wlQ<{t0;BdhtgP&uuJXGdd`0{XY zR%+1~D6`3))h;aoHxu{%L##kUQx8i}KVV;_@E6*yG!qk4%+%siR*umPL#lzCZq#8h zG*@gJm+=!A(838QCl8O*s+P~e<8VPVr<*csAfJ%3nVG%=q~hdndBhQcuQ36sEiWtg zyJrBxnZ3aZF=)+YA6XrqR<*d!i1I}Qese=`^w_EM-SiBJin9Rp2t)#K`iDow^$wQC zxYm8GiKQibtuCsUql`$dD*{)&k8TTuMOR@+Q(V*q{&z_cJ-ZEB)Q zOVu+TEg0HY0+U)HQ4|NTu|8@W?7dLACy+Z{;n}JU6Y{+AlEG9@Ekh-tpUHYj<1kL> z)xV%+B?XlkEA3dV4Z!bvP>ci#%--VHSwp2)%PB{PUXsdHvW0n253zkAq z2=QyY`Cy(U)=p_|UX(xi8lQk5cd|%bP-OGhriBi50Z83$2~591=8j1SKJ0)&#AT;B59HM7z2tN=2Mc?8MD$i`xAvF>Rcx_r6YhbJ`@xW!+X#I-ni-ngM9Q$ zQOJ*%WtDU;zCWVi9R>jf1M<&Kr4c091c!%b&9*Q!X^Y3O$KpLc_`3gd+~H!{Ty1Hd zVU}%h`3FD`+HSyYATe&cv8V`EKuWh;hxGRIp;7<@Q|7jLAJqzjkhQ)EYp{NUvhZ2) zGb*ZlS?m=QyU^$8>;LYaj{Q<7UjqXokO$xNymRYNOr^Ds%a|nwo{@aT=Z%UKdyJuYnJ`cj>&cW+-+^OGi5;bD9>Pq6q}Mn(jT@gE)R5 zB0DjeJjc5;n4Lajg-j$VM>n`|k4Vc((LbA-CA@10_4%3|*s2O2W%u{RQc$AQbw0!CZ5-yu!9!msPnS-tHwyiqWO*sW4e zOiNQ*?2Ry3QuHT@x-hCGY%uZ$DV8(NIYv^>35zc zUigr2^Y9DM1Z{V0IF>A;mIoj@JVSS_INd*pZf&t~ZtG?OH)^E!86|7{bA;7H?8C=@8FJJc5Yw5*R+fYBHeS!e! zmi6>bY6ap6P!>wg^DlqY(3VVFtF^_D1G9TbGtQk5=?mt2ZBp+Nh>^3N(zO13vu#@g zscdV;%B+U^)G9BcVyi9$+sCc#40sIIm;Y{OZx9gAwakkc5t0xtt^(TIpYFnYZZ5+7 zk8Ak6TwIL4!R8L`>uA>JDfA5Ywi(G7IZ_h~ygKPG{Ep)3paZPZD;I~+AC#h(kEe!rrcR#eRivQ*VHIcc=in4-!^$ADn#K=Bh}c6Nvv9|TSi5`w{S8S*kU+VjYn()~ii z!k$UH;zMrE>?V^ez77r!i&V3WcjV9&8c`-I7JRrH*ih`VJ;*_LXl953@nhX>0w7ma zoE(y_p*em#kyE5_9}YWxcYw!k7Ip5{^_@vtCZ^(t zp0&^%6-kwc&Ce*jbE0k`GFQxEQy%=)P|HZ3LS-6Q_D2>{C=K4^^P2-4h~GnYg@}ac z#{RNR$MFZy7^?R+OUk!#f#(6Fs#poZemJ}SIJ-2C8ckO{ za>t}AF0&LdEsB{rKL>IW*gI|qw2W4wQe5lAm%^@NfM4U!<{>N>NF8BjW7(@TQx#Hb z>v%on;~lmJ>dc!EAD)C7@zcmk{@T#?c795&5ESA}+=;;vgK9LhQ@ zR~800K%K)wrUE1ra8j_1;_RcZeLVtx|GxE-ih@GT!mnqd7Iy%FFpc}I2QhfXabq#+ zd|V@o$!QK>;W00vDfl@cbP+;MIF_BH;3@iv+ydSfLmJO^9*Zer^+%Wiwh#<$&}=+&p!#DKEN9zK1tZevPXF4jkQqW~7#bG6=wF z9LF;rXVMI!5C~oxT3Xf@eL&*}7k5T3T&Hm?drPWCDNuj|M&~yDla4kiDY+u!alfp? z_mDj}SQdsVMKdH@SP0#Lo-K@jp@aX4@5wtw#h%||v%~FPkcbJe#pg_nS#9OOzf8uu zGHF4F@j06Ap8;_Kt#ia`Y>hfYj6lQt{*CLG`PV#lu0I(-<^DJVY?pI;dIcxNlyp&d z6Uml2q_`JxaM%Hoz^}f{^%mTq+QQ}9dBk0~N zM*!ud=hp-ai}e!@iqm1=!5JYtYU-zrj*zB#^6sTt7Z_1l*FykTYx}t$DS->jT<}~} z@2#%d9LEDJ*oqt*i1L&nts1|)`4tvlv&ikk?E&>G#P-3I;5~~ zr8N!@wX`!BXvptG1Rm_ET0){Yw2oHTq(Cf7FppzdS_*Q{Of@aEQWO_EI25yRio*EN ztRM`^7miXQ9-KKN7cDJ#P`|d>f559{pgEHA30z6=T#U zAZ~^*?G3{ASY@eiqN^&XGPSbRo2d@QSyW#)IqjMwRNsFXt+ESgCO`y&>hz3U?`m~5 zxIBxCn5AU`k>;mgfmZ}1DtaEyT04^QnoQY`W9cwNdJ@|%I3%WJ%FI1X*HJT0xR^2=-BknX5HO6G9!x4D?H)$7r-Fp+3O8v$`y5Nz zi}bCuHmobN4LW?*BCR9%F5Ybw8J{~w-r5rAz?)YAp?vVwfJ#CHLgA*qjSVb`m%zCD zFX~OB-2aVwvmSM%i1vn9M&o7NqbPg@%!0EUHCCJ#b_~1tTSO%<=i5qhjnB~Sa4^0&(Dd>Hmdcze6~MsP1=9*UOp;z|0Z=# zlyfEIr6WN`{B>qQEyAHp|^j{(J%ntERQc73|C_h|o9rR7ng{;bYHOi#$!b)2d;ZRcaYJ?O(Xi$xtz z_mfE9NrwDWKT_U|h8@T;Gpr(H9McVP|0Lm_$E}Ns%wX2BIXm?V7Mgj{_R&~}zO+L$ zsA}9mZD7#)F`b}8=}J4_WAsa#4s8=GB6hR$+(ugStIk_}6@JWXe{SgTp0~fU&+qUS zr6b|?j#;Km2yS8sQ9HeYp{R68G*UaPB{3w#Le{c>>6)HnDQb1EU63oE;E-3FizOs} zKCNKs!xRJQMT^A|SH&G~8KGo>FTk7NvXrI%Gx_;clM@CyNJkt-2WsuDzxC)Ralov< z_TlZf*aW#lW-|kE02w7Rc*em|$(uJWad>cBz}At}^G8_N z;Z`8e=m2yX$3e)&7GMlq27Eb$EEoJtG{bBZ^7_>Jv$isv)L9*Uiu;!$B#zEc{WJ7s z*f{VpM#4n}=h#YLL@05{1Z92CLipWX+a<-xf+U8hVfi{QiXofgg9YjW8GHj+JUjz) zbrN^OxpDNVstqHjk#o(0=u#NrH66%vN_sxUKNblTS>KPckpiY%L>xp)jMX1MTdiR^ ztPMBh&V+uXOTC)g?eCSHSg_pT7>4Y=>%$tg#MnhAvsUwni{|{C?EVR1-bD(X9)*0p zjoB3iNvggtXfzCb=j*keii*PkOoJ&%p+43Wz|J5+Rz^+^Vk7~hM1K|-IdtIc)^g=A zPF^}!BhKr2_VlJPCnrNJPZ$({m3MZ4uSX7%t=>Xljh5Ki|0Lj;e*mFDQU_Fv{@I*m zrZmKQzm}#sqGvCf5~cn7*A!%odwz5-Z{reP@sKZju^!WSnRb7#$c?jgPdRLx=MuqO zs~iqd=5=ctIzeUoq(3Sf^4ZzkTy0h55o_l*7~Q*ZqL`D;)8gYH-HF(4OrFDvU(8t) zijQfY=xo@R24$wd)eDo6Owy4FnA+`jDay6LmSsQ`bd4SNCl!ob9MJgV!c;IO>kAQh ziC5XJ_I|ej#)M9$7%$e$?PHcR#3@t>3nr9AhNMUNK0>7@kZ{vRw+ zY$ia0P;;3A#nAX8ZA#zWrRzlvNEQ{vG{X$pBi}e7?Nt4wg64BU?@v5JOn0XEm~+#0 z=JBxz?5J;`9?R>>KMbbHo}fle-|iRMjS`8fp~o&7?f6;3`a#?>XwtTDL+iSPcy#kL z<`wiJha&SS`S4w-RoYb2y3+|0#p$Y&z_Q}Iy1Fgs3clR<=xU*e*X9{J%fmPQO|XlZ z&ei!!m%f-WYUH!ND84!Cl8c_*@iV!c!a5v6a^N02L%Y~bzC&Ns9h;M~ORdn>Iv_8u z?PKlvqn*Ym?7#lmg^tL;xR7eV)`3WfrPM@5w@8+zGF`u%NE_pA)ECXrSzcZNK_Nf6SiI!yoB>s>(j;>gp+^MG2F+=0z#@Hq7? zGhDdKW2@S~%@2~R+gV;{SJ9upZ_$jPJIZoYPDF9BGe5YvmaU+? zEL%IX`Sj4e=>v!urORQYQRzGAhl2x}8n7ro+CG<)dn~hWb7B9T{o^UYSyF5?Stj;+ zwz{FA;isM}K0R3q$OD`Q&yt1rOjvXBCHxf>l{ykwS}ht=;$qHB#(pLlcHM*E>dRWj zLPi#u=?~f28ir2qYl~SC$)vrK3QUcQOnzZ5ZDJDiSw1f&g#V!29}p1U(_U=feY_T` z^1Cu?ysOz^*FK0hSEk4J9}X8*RS0Y$6cYTwIxpvZ{jE9kX6W*(7ZQCM@k#Hzu&``Ex0rAXdj58ao;*a*b&; z&vzj@D(8EW3Ai^JlaVXwDcudE<-WS|TPabB!$5m*0SsM7ArJIRd`&?RYBKJFK~B{{ z%=FP&sSX3i|?^m`t;KalsCpxO$ZTjFpJ!&mdZTX4mP4d@m!ob14&Q@0ay)-pX)HT zyrGf7-nwkrBtRS9eAx&XlXlI)Nk-D1k}N+FP7f(hs8HwByj6q}+Jxdo_{4YH7x{o{ zw=}{)_i^co_RG0mTgMl*0UK>@*G}qG>?CD_tW8fNR{V!Lr8J*o`U{bop1m;NBy(`z zm*0;Ht!Mg0Tm1#)xuZ{~mDL_;5hynP;Fp^2SxN;@YU}@~{%L0&`k8xhEHCUWUOqE(}>U=%Olc zkcGT4LAM8^!%{2PkYxxnm=_BC^mZG~tcKp*V+4e%D>A?Aa|PGOlV3ff>W`nmq?l4G zIQt}{vvN9O3frMuI zx=!BzN)ejm6N_q1?Boe$;9W2xMb7LP&{WU;jvy|Cim|FZ_)r%&=bGu;=I}h(yK4Q7 zp_NDPG?%^zzQ`$7d3~RaA_irVz~YjKjvwo96VBAHQfbWQV} zeqZX9OOsF@#wN=-V4f($ddrw#$CZCq%5#UsSweLFhUD{Jt=AE1mp?VvISOnc)31g9 zR7z;5d3?!DJZ(RGP)e(V>#^g3|8wi==J&qWo_%DOFF|=cuL+6xR%%LXY)aAp&D&Ci z7-d1gK9?HorX&zwZ3wFt!Q%GSW zsBxvY`^Ge*9f)Ttes*<`=iM)Mb`Uo`hFY1rn8YEyDDfB`Udu@RJ7Gnt)E@t%8$WDz z|3L#8dYiruXcs502t~g`bE3M0?}>Mao)LRe{c&{IRnu8yPD-Y%DN#QZJ8VLyPC8Oe ziJa|l?7w5<Y2{dAw(OKtrj{A6$GUNoa91V&|O8Q-+50yj_-15W@)m)`s56@20jAXz)MO`RBKO-Pb1BK@aeZ5Xohhw z{gzdhqmNQ_=H^41wM=M%R^_%o$i}BSM{yzH!dJrA%h6?ehr+<%*|LcU7EFA9EvY9N z6ZqCzH{GY)=0iTcKo9O?-{%=~Yt{A&0F9xWa5oHj069OSW~R?C`P1d*8-9o-7A1T~ zj&Sso;I`QmI@Frqv<3ORG}R3%z7NC8xsId>zo{PXGW7AjQ3T&`x-0rq6Aif#4 zSeHR_H|!z*Y&EX1cc4Kd*ZP&<}t|pVoe4-K9S@ zQ0MAxXh`}&)x}{|0=by6Kc)x>2mt#)aQE)q{9JmfURs)7N}3MvB9*3ST6H66m1}jz z+w8))QNgk?@^n$MQ)$3PWi!PPyEj8Y%;B`>QyKMXC0xv9XB7-gFcvdZY97s41Ti*r z_U_&#n4g{1)mZ>&d6T0bfE6@NN8dB^v9Y;yzeI5`H8bARIWK@fyH$rKmjYo_uU%U%}g32d*(Db1PZ^F~PHZKIXJu%6CW`eQ}2F77I zDk;ETJ<&M=XUg5#FwkD1L0n9a`n-Cxej zPggxFTj!l}5DM={JTE>z z;c{RJO9UJa8P(h2IS_Kqqxyh8V1KpA2yiRYGdHe|kF-sH?_q)kiW-_IgZaj0uDf7U zOxXjx2i~@~p8yZhdHp>`{Qw(XELW!E*H=7C;SW5WElmgfX|Li~(lA8^MS(PzV>9T? z$v&3dN<>&$v^swNd_g-7X=&l5mjD!wjuwOkVZKEr_hj~2o&0HL{aDS(-X5z7y=tSL zuI^lHwe62gty_#p;>O~39&pYxed@rIYCBYxF;4>@p4-?s{lP?N z@CQ(*t4m5k2GIApPs6LX;rDMAx(Z!!fO_`+W&+df9txQcvppb*fXdL65j*0PCU0$SZwe>y8K`QZ~aUV2k0!a<(h`o&aF;?>z+5klfLBedik!F!7@3yWbGhm%ac)$q zOdR7rJlYa zPMmnYX(HEH_W3^dMFodu_!wFge5TubZo`#!)8wLZ#suSM>JIx42>PSSE}eATc#uMl z`Lq`6eF|36BcI2tGBT?aWlx%)#LTwqhI|~M9JXZX8LA%QFC@#r{DMyXC~;@PfyhIX zxWjR9W4aa7OTUA@bpna(x_?v8=UPoy=QekKaPYJzs#aVobaEDp#R^B3#mY$DgF6?U zW?R$bm6pY4WWefh;|Io&R>)sXSeyf<{1Hud`0Omc&}+3+Ts)uGzk@?uj6-Tss`t2i zC%Sx`BX^%NtaiW+FhT5T>OAs_I#;)QCxN}*$_rIeQ1S76s<%i}v9I(X!)Wt2;V>QR z^Ir~5Gcf<7w6E+RV3U*UZ>#%!_Bts~eeZ@D1Kn*a8X8=dfa4kNHoAl5YSqhf8bNC( zUxLXs7y5)Vr0!ZRDzFPmf!$=1w=4LoN8F61Wsbt_k9tPK!>!f!bn(6Q<3}UJ_;V97 zzT;gS4)kqpzds6n*B(ySH`YRN;ITFh8g0GC#lUcP@)S2wLaMN07Z<)zFMgboSg@lj zP?Qjmp6f4YCFW#1D{I=l+4WURBKGSEIj=v*%igaZg3QdUL?j|1aS_u|C>eQSqh6Z! zr#?kx%;XL)ip=5jgi;O9cya`3+2M2> zyPG+gnN;6c16sB%Eu16csDj>ior*|!;`1}^(dqEw4pQ2#*%2r{N>EZMwAM$v>;}ZE_jP?Ny1OshMpOsnF zuKw8PJvlPS6=^5vrpwPb8)QTNTz`VE;OMH+T+&)LKoAs>cX({yO8V%Q=o|9LWVhU8 zH#$M7J!?5jRsh}CTA&!yKb7H!vCs%CFhwE9%M+^c;trn&v_wp_Rk06`Dv7!U#5sJW zi)3@_b9$}fm4-|Il=^VC-B?@s5uS`(|BHt$njZ=gyd8aww%@NNP5<^;Tq$4lB&%mi zIIL`KZ?CPL3yT0-i7orzy8*Q)M)EHBC6}PopU$j+duqe#?kHz54)*Yhh}6 zc3Rs7CijU%&h}NDHo?*lwRNr?NG$hWl2=i>WqtGonZPE3pMGR#V`GCFv-l{u$o)g= z_cAwAZ%?lA+T^}W;o*_()9k091+pJ+Ybw5+{)BQoz{h*r%%bQy(>FC%%8(u^>%+MC zLvf33UutS2SlyW!PZO>qU)PB~4)SUW#^pT>=k9x$xj(RCbR2sa!cdOo-jJ7PVy<9Q z&d#j8XRCLOG~s-%oJ*|bUdRuGz%5lG88xX>7gN*6yXw#OA7UcVPlKvHvZhy*)a2D| z&gagGlk$}(vLD%_3re|O3Q(noc>!1e0p+7RnIX~2O5l1Iq2EB<(^ur*yW)Q$ zd1SbA3bb|nzd{-SlFjZF=?MCrr|33x=Oq+`gyjdXS876ykeFwypjpsk_{eCb-S_ilLX6iyPwNa+35%0>7j1`x^xX7jGfU5hG(5CS^}% zdmF~jtb|9M;hV(pU$}cFgT9%Fw$8e02;XLlGT;pAMy-FNfp zQ)*C@7Q<~|(ZYAb{reC4x{i+;5{3~kWu1NT*8qp9XCrrHn1S&N@Y z-({_j-HoiRb%eOUCt=gRtAkp)a!R}w{3>|C;ysG#hBeQnWt7<~GN&hJQ^lpLXz*n+ z$WUxH2j^?v*b?4{SHvEIoIynq0jRbBO3p)q4`D6-jecRJ&z5l0O-cZ*;Tm}ftyl|oO4fIwVm zZjV{kUaz4$G*c6V7BU-?EQjgL+XIyF_Krt0a5RxLAlH*uC1w9?5i;6tljgo<7+ zyY35P9OnwCTJwstk()-={M~Q1buQCZ;f>Y#>`C$z6fA6y6H{B-Lp6=faC{zDG55-${~cs~Ino9OW&t z$n9-%na?oIMO2J54eD70Sc~cD$6vX#QXkn(Cq1A(a+W42XI8P5V*DZga;#_7;Yg%n(8>!`YKVhjJrHG^h_+iZRol0o3V5$R7C6Qk`jg||mA{^V zYJL>^Qi{VTy~`Nd^dS(rWAU0)mq(=XM%M#9X`sA!=-}k&`i!ZW6FJy*Z?M5s`U`J?O6<36crf4QEYhG2%BA4!eTZWxx6Cq2Uf))!R^HnR<4{%LKNdr3k| zw;W*3E64iS{>v+C!=@ZB*$nB;u$(uSc2-_JxzE-cHd9_^{p7Aho>}~QWa7ANgHuIj zA$)wueYe!|A$G?sj7xBTdzL7ac~HS%v0>jpXZ>@Ig*oA7s|`zVEale*|eynWbF3W&GGbRQj^yz=uvh{jcM3yer_&9b2?&l&#mQ3 zEK#}$?v!S+Nris0_$qQ_(f9PQ+eOZvb|G9zJ~|Pd)_T~NI7ed)lq_eP?d_hw8;mfF zyfgHt+DmUl{k@i~d2IB(Pc+jyjn1t|f?XaYai;3k_g z77Z5NpQu&aMfY!Ul2tRQs>_LV?w$cs2AGq_%@?VkJ7-|x&Ged0c#xjX>Pv*zTSK zYpb83>ReQ!Ay=7&tAU!l9&pUc${#vrN55pl`h+RR^X21gUwF;RsjH~z)mx1vePfDk zL4eT*&EoowN_2>D1s1TRy1(YQqD3kNx!eMhiwjG1%NOk%SDUv;a_m4;#dzBdfrj~? zHx~N{gwl6%z-(;qsQ7BrW#*YQoXE5^vL!kG%$_jNY)aw8!t+9){=K?-;0THHz8j2N zK11XOHdvc}B6uKDY9q;Dd*gl#8{BH0X$&NQ&JU+Y>Tvl^`jrF&v}JC(rWe+PCn(_8 zu@$AirvEZJH{U|SQ0aNRUT!pfTc+u;{B_&~nX@0adv*{Kk(rR+4Yn{;WYCcrKz*9t zyCPI;%e(XQFrMKB^HgZ~=T-w?Y)u(mKgpa04oq!r>CY=J#Ptzu{@k==2}ny5461~N zhT;m}wr1!Sm@$lKb>Bzkbv^jf3$-&=DF&AQD5V~VH()2R9JL#0Lvx!;PW-)}^4H}s zFz)ZW2vL*;8`!OW@aWD-ZOIn4_l>E)ps|NkVXk_v7tXi0g==ky*XeW(_4QSCGrl{w zmA3Rx^*F7;uvXib92%q)#oZeC!g+YS%6Z$@Tnz^Lwd)=C5b%eUTJkb9U_9~Xo2`8A zw;^Va6t%U_(s(DSgz@m6a(L#ZE4nBk;x`+J^F67P3)NOcz2-i;)&Qa$y zxDct1;b_!s(^uB$-a*sDii-$)EpkTSLk+ZTO+UT`^Zy3=^jkfuYg+a#OPk=|Un9XA^U!GnhT+56SJVsF<28uxEReBsh|oVWPcTOUD)LVM_A%l9#6@ zSa^6iNON!PT;>6xH>@H(Ho39_*_{75s~zOJUS4_U1~Kzui#9qltK zprS;N`Xxpjdi0Ba(aQ3em=+F79m`T5B#W=uTYifpew4s$*mG0=QSnrU6bQxx1!?31z zC$i&6+cL#K!`bugr^KOaD{GP=vyKP%#ny2ox;ppVye{a2`v2Q*{>`B;<`p$^UwXky z-}!3FpIjrB-&#rcn++`0t)HnDp1gpom_gk#x)GeX|wX{d?Y^pSrDV| zV}Hz14a6{n5UB)qi)AJDxeubVjej3Hy8ysV1iR*d1eZGCMlYm+b-Pn^UrtDUFLF4*bSCLeh6uc0S? z`w!$Oh5H{QQHeJ}@ptD#!KW99;`Nl*;t>4Srg!qE7ta9$()2N6DL~Q%THA#Xtyd#T?87s;ShnF452q#8I z#o0+Ea}MJTK4Q38Si*f_Mf8{`v*^r%nwH|?CcCKnrDsn0yxjF#$w~5iM^+~F z=mjcCjT_%r*RIweZSooXjlPk#`rff~r=I`}Fx8aXJRt0YjLQv_+`9Bu8Lx&>3aY59 z?>RU!3hedwnm-&KBhTsH4+O zO=Vx7zpeo`d*}Q~`b}PlDyN~RW8JVH=u=M%m&karI3m#L-6v}KKo%F$?<8G$hTTI+Sq3J4Yy6lOX@4Z-#>sp=xp&{=BrU5Q4$@gqD z=jUZSJUv~OHh)sL@Pk)1ej}z&1$0JYdGXQ&7nWD>K&O4y3#VR*UgJuQfZ@lHE$0L2 zIpk9;@wj@O#xgL38XvLsmqAAt-_({%;%q}bm4afpA(`$QYhrIU#+tWNFqfvmTSsInJ!vm*>&&ct)OAtWyE;R3r-MRGv z0^vsC~d|A}WyB{}VgzyN}43yU^*=Tkksdvk2By6e667gr|#OlAhwtBLH~a7*3`mmIL;Wc1GL84+_e&2YpD?t z_b6G3)VT#tC{wmKY^`mTHI(x*pD)s*vH^1`OM_1ro0MV*TBe35H*Wa@KZiU%J|L+G z{5q%+m1u8clRwaWdh1t*lzSZyF$iuoE4rq5xrXi~TUnUQOv9N8@2_b&f<;v>zIb^y z)d9ji@Gxac^tB~iu64q0g225mUlTt#;FnQNO^uM|##76?LQcCOX|-5s2Dk`J%^(x| z-u}Mh;TJoafx_~lfngSAW>!uz6Rux~q}@-RH^-*zqTlC>n^W*|Jl3t#+;QE{4?f zzj*D>RbMl~%cZ0JJtk-`_!UG2wpkHFrUg^VEH&=DJF%V2Z$W>t#5WGP^jLL1T|2T) zh(hL77Uk8J=_@G2XEV%5;Lptov?A&(zH$3wKwR{@Dx?j%*B{yTjFg7JJx=xQ$?|bn zMU$=NhjTqmHTuY&Wd|7=M#2!r5-T}bruaA_;I9|MlqmB=I9S=iKd%iXc!XUNMJM#sL4Pq;+!>?IepfI?6 zA(etF{_^4dz?YPf71`O$+xU4FraMBzyq@QwWgA2H3yaD`eA(#^lovp3jeCR#USOiS znzn9oIGJr>mas7ciHgCyPe0)@ha7}nt(keX;k$zqqonLkP4+-N-^Py!!qiyas_bf) zCjN5SQ9zq{{mJ#;iRCwzeA$2Aj|_8lt)cF4_FeFaoK)H?k>B*G5tI0L4fRSKHEM4yv3apl<;Ea9PFq!@%9L zJ#lqtG^gtZs9nA>qta_{Ua4(%Z%f4If*gt7+tL(R@K)t#+`K?tn2os8)3R`5USNJ? zRpw52A%TjrSIXPp#&7sgwz8kDwzEuagmB z9BG;u!;_%EJ2=PoqAyCyG6X%{JCeIHyfFv#R5n7+f`T8L?8Qvv?0lk;&*qD_n>NYs z?P#(sKt)Q+(x^Q_S?~P$?AJ9DNs+}j>DQkC5s7nFTwHt~0fWKe?J*`>k#Hd|!TENZ z!O|qvUfl0n94jIH$-p9jTg$bd>O<|)*gqyo5;R^w{tYu|7Cm22jHIj*0wSD##NhIG z3Pqf=i>FmU@@)1QXWngpkJ;OxQaJ92VX9{iTGV(n-FJXZ?Sksj8A;uh@`@Ke2h}+>pkRfN1JUxy;V7fcM)0g}Nb+xW;T5g`& zJBNdLtV|XA8JA(QsW&k#7t&_xETLWdNA3|fVS08OATHKVLqX{e727%Q zKVcoPeNstb>>g1`6t3$p{eL+?T-4&p1me^8HUV0H7_$80!2YlWbnKvP%YdGU@Tr-$ zj)9D!o1k!8c9r?W{zBeK`quf-+>|i^K(8R+mtM5%4E$KBB}i?=afWv3U%gkkC&Ns4 z5I+ICmIo|)Nl`J7fgc#?L&yyzBUhBwRPeYuB4ebl?PFM0UJ3>0qRJxyn~xuxdm9-a zM=16suT7?(u{b7XoTn5wFC~#YMW+rWC|!pu6;6|+D}!;lb`ic(76$#oRV z4i`Lc%}Ch5?gUn4yb_!G%%q*Pm}#GZ1OLI^k>|F+_>fCT=2E0|ztsej(hy-JCp=o5HtS9JrYyOBC)D7+9nU;NPtNG6tyQ>z44EV2lnI7V+%MH{tHLa~`VFnZp zSpj||xl2muZ`bixQT2u!Xh>Sm&jBl&iP3r*^(d(Xa-?ZDz_xvhMM}EaR`R4EUaEi~-c;dI9t)HT=;tp}B%v)**vN z_NN&VKBc4&%`>#su34ljmarbimYlR*{O0D8?9JCCl)zxphWwua#oO~iGqh4G&QTAr zIwQ@5pa>3>!L318$+Uh|-!8V^sp#yq*P0Xf7Ld(gEmy77I&Wug)dFBItwbP8%2$4` z&W@o^3oCS3`1sND^uI;rWwgz7buUilPGX7M0oe!nv_IySrIjue$n@^;=@ye;zhYKNOk;Tg2M&f%BAkP?(dWpx>EWu+ zY=?2uyDq@~YL|L1w~!s-4lPG(8ZI`7)&>43&k8<&{2RPmO8yC7`kAOYoa0hdot;^4 zV<@|5)(?xq*Pd6YTd-F&zn~AAX6CdD@M}XO3p~x{h40*S+h#BWGphiRk9!nxd(={rD-SX3J~Q`3xV0Eg(N8N&vmhx+ z9EB78rjL&#l&6gCnS>1>sq1fskGE@eF}F)Si;`%zn}|J|i}MwgH0Qee=cju7#XW&- zb;s%gpUV0e-~?H<-!Q#4a$H>_XG+AL(@Kiw6gOy9)-jk^7=A(EFvmv$sCfz6wdRwc zdlK20pphS1gXQJBlRU@uA~GG~x4oh21M83X$Nq*3e~(Kdox8!f)(KwCwu|Qzp)NJt zfudu)BB;IeKb`&W{6P&P2+@G=gu+YPvpGN>ad|^7Z zgs?&RVMk?M0zk@OgpA*{ct|#|#mjqlzG72Pl|MYQ+{gl{0d*A>@qg94|L!poTMLLY z+Ks|H=wI@b>3Z=04gryzn18g`^>G4E9T0y3Ny@sqbp~(fe#my`Djcko32v^Wh-lU} zTP|7Op%vObmced9;&?=p_sCR_2}9^(5aubR{?Y9}@cd|P>2)=xt5ou{iO}W1$Afr= zm6??wxTztnB|BzcPPx*w0Gc)t6Icy$aC)hzlw=)KB^7OTv61C$hV2c66nJMe9IC47 zef`7K7b(fQB3@{2eTuSg4*+}R#31W<>Ly;VH9z(X^LwSfj9FeuN>5oWs-BCNw& zg$A49+x)DIHfN!V%!U)WXJBN^^UxbH($;%lGD&<$K3K34B_=$EiGJjml~xtw_tKZr zb-G~P+W%GsGJpV*!+S@c)4Xv|j1rld>9$*hY;tvF0!Bv=kxEFIuGM9EX1wL+IwMqt z8&4<^t-Pl&RMv*%JC1}H=Cxs}D||K7qszxZCdHXDQl$Uw$n-}wJ<KpOQBvrRCf_aQd9iZsGE~b5Idvpa}clr2q~;5e2`A*=`U^LP)Jaj=I&; zSBt6HdszNj;FTp#WFT-j7M6C|rKL2W)XBuD4#kh$SSflv8iD|vkAC+IC>QV!QW{C) z9(rq7pIs~&(FGfyFo1epT~Qa*+ZouJ7K->P-jKkGvJY-e&nzun-C5aFS?H?jg1M`Y z*t{^UhpeuXm@%fXR5)>PVtiHN^@@t*zaPzwpH$&5 zqNNRfZ_(iQ)#(R;S~7$_1puR@54XgRFD$hIaFSOD^S4m)j7o}4kA}K^7`@9qaWkj^ z6j{D-Q+#W6F82BDrjb2nAl-zS4lIi2QaI!x*($qcTs*Z70s?@)!*(YFffQJ2zSnbS zhb0u~mglK_RTj~?F{w+7C#k_qDE2bN0nB>M~7Is0w9Ct15qU|C* zV4BxfzuYP~RZ39w6>;TIc~0oj#1~mzPlsja`8X|E#Nr&lcR~pSG$YAS3-BP{qvHjb zM%e`FKVr7KK+buUBtdYvt+1)7`{WA762R@E0DSi~O7lO4v;!okNz?ze_56L9m+tJ> zb8P?fSZ~}gdi{TU0*ti&m-<-8|7si{o%}yPzwz@2C^!Gl&%bhmEY1HMuS@@ +发送监控页面重做 · 静态设计原型(全部为示例数据) + + + + + +聆界短信管理平台 +平台运营工作区 +运营概览 + +运营看板 + + + +发送监控 + +网关异常 + +签名质量检测 +客户管理 + +企业管理 + +企业应用管理 + +企业签名管理 + +企业模板管理 +短信业务 + +短信通道 + +短信记录 + +任务进度 +系统管理 + +用户管理 + +系统监控 +设计原型 · 非真实业务数据 + + +运营概览 / 发送监控 + +预警中心 6 + +待审核任务 + +报备任务提醒 +管理员 +发送质量告警 +聚合异常指标,记录处理与恢复过程 + +静态示例 · 待实施 + + +异常持续 +行业通道 A × 移动 +事件 AL-EXAMPLE-001 · 开始于12:30 · 最近评估12:35 + +三个时效指标低于阈值,合并为一条活动告警。 +命中指标 +实际值 +最低值 +成熟样本 +5秒到达率 +83.97% +90.00% +1058 / 1260 + +20秒到达率 +94.00% +95.00% +1128 / 1200 + +1分钟到达率 +97.00% +98.00% +1067 / 1100 + +5秒到达率趋势 +实线:实际 / 虚线:阈值 + + + + +100% +90% +80% + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +11:45 +12:00 +12:15 +12:35 + + +查看样本 + +标记已读(非恢复) + +预警中心弹层示意 +与既有消息提醒保持相同交互 + +安全检测与封禁 + +0 +暂无待处置告警 + +系统监控告警 + +0 +暂无活动告警 + +发送质量告警 + +6 +行业2 · 验证码1 · 整体兜底3 + +事件时间线 + +12:30 +首次异常 +三项命中,创建1条事件 + +12:35 +持续异常 +更新原事件,不重复刷屏 + +后续 +连续2次正常后恢复 +缺样本或数据延迟不算恢复 +未读状态按用户记录;同一异常多个窗口只计一个活动事件。所有数据均为设计示例。 + \ No newline at end of file diff --git a/docs/prototypes/sending-monitor-20260906/07-mobile-monitor.png b/docs/prototypes/sending-monitor-20260906/07-mobile-monitor.png new file mode 100644 index 0000000000000000000000000000000000000000..9a01d8215dc5bc8014bf04bae7afa233331afb23 GIT binary patch literal 63757 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 T1wn&O9YaAzMY=-L^y~iuE!OBY literal 0 HcmV?d00001 diff --git a/docs/prototypes/sending-monitor-20260906/07-mobile-monitor.svg b/docs/prototypes/sending-monitor-20260906/07-mobile-monitor.svg new file mode 100644 index 0000000..d3456ae --- /dev/null +++ b/docs/prototypes/sending-monitor-20260906/07-mobile-monitor.svg @@ -0,0 +1,60 @@ + +发送监控页面重做 · 静态设计原型(全部为示例数据) + + + + + + +发送监控 + +预警 6 + + + +整体兜底 + +静态设计示例 +近30分钟 · 每10分钟评估 +行业通道 +验证码 +整体兜底 +告警 + + +以收到成功回执为准 +未满时长仍在观察中,不计作失败。 + +筛选 + +阈值设置 + +刷新 +12:00 – 12:30 / 12:30:18更新 + +示例零售 · 通知应用 +【示例商城】 · 应用×签名规则 + +样本不足 +窗口提交300条业务短信 + +1分钟 +88.62% +257/290成熟 · 10条观察中 + +5分钟 +92.17% +212/230成熟 · 70条观察中 + +20分钟 +94.44% +85/90成熟 · 210条观察中 +20分钟指标最低100条,当前90条。 +可评估项正常;不足项继续观察。 + + + +查看趋势 + +告警记录 + \ No newline at end of file diff --git a/docs/prototypes/sending-monitor-20260906/README.md b/docs/prototypes/sending-monitor-20260906/README.md new file mode 100644 index 0000000..feb0daf --- /dev/null +++ b/docs/prototypes/sending-monitor-20260906/README.md @@ -0,0 +1,74 @@ +# 发送监控重做:主要页面原型 + +配套需求:[发送监控页面重做方案](../../sending-monitor-redesign-plan-20260906.md)。 + +本目录为2026-09-06需求评审材料。全部名称、告警和指标均为设计示例,不含真实业务数据,不连接API,不代表功能已经实现或通过真实页面验收。桌面图为1600×1000,窄屏图为390×844;1366×768的适配要求在需求方案中说明,本轮未绘制该尺寸。 + +## 1. 行业通道监控 + +按通道×运营商展开;展示近5分钟窗口、更新时间、三项到达率、成功数/成熟分母、异常与样本不足状态。顶部进入监控通道选择和阈值设置;行内进入趋势或详情。通道纳管不影响发送路由。 + +行业/验证码图展示12:30初评,12:31补齐同一窗口最后一分钟的观察样本;初评/定稿合并处理,不能重复计连续告警次数。详见需求方案4.3节。 + +![行业通道监控](01-industry-monitor.png) + +[可编辑SVG](01-industry-monitor.svg) + +## 2. 验证码监控 + +按企业应用×签名展开,只统计最终提交内容含“验证码”的业务短信。复用行业监控的时间口径、筛选和详情布局;数据延迟明确显示为待更新,不填充正常指标。 + +![验证码监控](02-verification-monitor.png) + +[可编辑SVG](02-verification-monitor.svg) + +## 3. 整体兜底监控 + +暂按全部短信理解“兜底”,展示近30分钟、每10分钟评估的1/5/20分钟指标,以及当前生效规则来源。 + +首行采用应用×签名规则,最低100条、下限85%/90%/95%。前两项正常;20分钟成功85条、成熟90条,94.44%但尚不告警,另有210条观察中。该例用于说明三个指标的分母不同,不能用全窗口300条直接计算20分钟指标。 + +![整体兜底监控](03-overall-monitor.png) + +[可编辑SVG](03-overall-monitor.svg) + +## 4. 阈值与个性规则 + +完整规则优先级为:应用×签名 > 签名 > 企业应用 > 通用。左侧选择范围,右侧编辑最低样本、各指标下限及异常/恢复连续次数;保存前预览生效范围。恢复继承需要清晰说明将采用哪一套规则。保存失败保留输入,版本冲突提示重新加载。 + +![阈值与个性规则](04-threshold-rules.png) + +[可编辑SVG](04-threshold-rules.svg) + +## 5. 新建或复制通道后的纳管提示 + +仅在服务端创建成功、取得新通道ID之后出现。提示“是否加入行业通道监控?”并标注“如果是行业短信通道建议加入”。暂不加入不影响创建结果;加入失败只重试纳管,不重复创建通道。图下方的失败提示用于展示另一种状态,并非成功时同时弹出错误。 + +![通道纳管提示](05-channel-enrollment.png) + +[可编辑SVG](05-channel-enrollment.svg) + +## 6. 预警中心与告警详情 + +右上角预警中心新增“发送质量告警”,汇总行业、验证码、整体兜底三类;保留既有待审核任务和报备任务提醒入口。点击进入告警列表,再进入左侧详情。图中把弹层、详情和时间线并列,以便评审,实际弹层仍由顶部按钮打开。 + +同一维度多项异常合成一条活动事件,持续异常更新原事件;标记已读不等于恢复。阈值线、当时分母、首次/最近异常时间及规则版本应可追溯。 + +![预警中心与告警详情](06-alert-center-detail.png) + +[可编辑SVG](06-alert-center-detail.svg) + +## 7. 窄屏监控 + +折叠导航,将宽表转为指标卡;每项独立展示百分比、成熟样本、观察中条数。筛选和配置在抽屉中完成,保留刷新、趋势和告警入口。 + +![窄屏监控](07-mobile-monitor.png) + +[可编辑SVG](07-mobile-monitor.svg) + +## 文件维护与核验 + +- PNG用于直接评审,SVG保留文字和矢量形状,二者由同一绘制源生成。 +- 绘制源:[render-prototypes.py](render-prototypes.py),依赖Python、Pillow及Windows微软雅黑字体;执行`python render-prototypes.py`只重建本目录七组PNG/SVG,不读取业务数据。 +- 本轮检查图文内容、比例示例、图片尺寸、SVG可解析性和文档链接;原型不包含可操作的业务功能,也不代替后续三个尺寸的真实浏览器验收。 +- 本目录未使用业务CSS,未修改应用样式或其他并行任务文件。 diff --git a/docs/prototypes/sending-monitor-20260906/render-prototypes.py b/docs/prototypes/sending-monitor-20260906/render-prototypes.py new file mode 100644 index 0000000..9295a07 --- /dev/null +++ b/docs/prototypes/sending-monitor-20260906/render-prototypes.py @@ -0,0 +1,318 @@ +"""Standalone design artifacts only. No network, application state or business APIs. +Regenerates only the PNG/SVG files in this prototype directory. +Requires Pillow and Windows Microsoft YaHei fonts. +""" +from pathlib import Path +from html import escape +from PIL import Image, ImageDraw, ImageFont + +ROOT = Path(__file__).resolve().parent +FONT = Path('C:/Windows/Fonts/msyh.ttc') +BOLD = Path('C:/Windows/Fonts/msyhbd.ttc') +C = dict(bg='#F6F7F9', white='#FFFFFF', text='#1F2937', title='#111827', muted='#6B7280', + line='#E5E7EB', blue='#2563EB', soft='#EFF6FF', red='#DC2626', redbg='#FEF2F2', + green='#15803D', greenbg='#F0FDF4', amber='#B45309', amberbg='#FFFBEB') +fonts = {} + + +class Canvas: + def __init__(self, w=1600, h=1000): + self.w, self.h = w, h + self.im = Image.new('RGB', (w, h), C['bg']) + self.d = ImageDraw.Draw(self.im) + self.svg = [f'', + '发送监控页面重做 · 静态设计原型(全部为示例数据)'] + self.rect(0, 0, w, h, C['bg']) + self.overflow = [] + + def rect(self, x, y, w, h, fill=None, stroke=None, radius=0): + fill = fill or C['white'] + self.d.rounded_rectangle((x, y, x+w, y+h), radius=radius, fill=fill, outline=stroke) + self.svg.append(f'') + + def line(self, x1, y1, x2, y2, color=None, width=1): + color = color or C['line'] + self.d.line((x1, y1, x2, y2), fill=color, width=width) + self.svg.append(f'') + + def text(self, x, y, s, size=14, color=None, bold=False, maxw=None): + key = (size, bold) + if key not in fonts: + fonts[key] = ImageFont.truetype(str(BOLD if bold else FONT), size) + font = fonts[key] + width = self.d.textlength(s, font=font) + if (maxw is not None and width > maxw) or x+width > self.w or y+size > self.h: + self.overflow.append((s, round(width, 1), maxw)) + color = color or C['text'] + self.d.text((x, y), s, font=font, fill=color, anchor='lt') + self.svg.append(f'{escape(s)}') + + def button(self, x, y, w, label, primary=False): + self.rect(x,y,w,36,C['blue'] if primary else C['white'],None if primary else C['line'],6) + self.text(x+14,y+9,label,14,C['white'] if primary else C['text'],maxw=w-22) + + def badge(self, x, y, label, tone='blue'): + palettes = {'blue':(C['soft'],C['blue']),'red':(C['redbg'],C['red']), + 'green':(C['greenbg'],C['green']),'gray':('#F3F4F6',C['muted']), + 'amber':(C['amberbg'],C['amber'])} + bg,fg=palettes[tone] + w= len(label)*12+18 + self.rect(x,y,w,25,bg,radius=5) + self.text(x+9,y+6,label,12,fg,bold=True) + + def save(self, name): + if self.overflow: + raise RuntimeError(f'{name}: overflowing text: {self.overflow}') + self.im.save(ROOT/(name+'.png')) + (ROOT/(name+'.svg')).write_text('\n'.join(self.svg+['']),encoding='utf-8') + print(name, f'{self.w}x{self.h}', 'OK') + + +def shell(c, title='发送监控', subtitle='监测时效变化,定位异常通道与应用签名'): + c.rect(0,0,248,c.h,C['white']); c.line(248,0,248,c.h) + c.rect(24,24,38,38,C['soft'],radius=8); c.text(31,32,'聆',22,C['blue'],True) + c.text(74,25,'聆界短信管理平台',16,C['title'],True); c.text(74,49,'平台运营工作区',12,C['muted']) + sections=[('运营概览',['运营看板','发送监控','网关异常','签名质量检测']), + ('客户管理',['企业管理','企业应用管理','企业签名管理','企业模板管理']), + ('短信业务',['短信通道','短信记录','任务进度']),('系统管理',['用户管理','系统监控'])] + y=105 + for group,items in sections: + c.text(28,y,group,12,C['muted'],True); y+=29 + for item in items: + if item=='发送监控': + c.rect(16,y-7,216,40,C['soft'],radius=6); c.rect(16,y-7,3,40,C['blue']) + c.rect(29,y+2,14,14,'#F8FAFC',C['blue'] if item=='发送监控' else '#9CA3AF',3) + c.text(56,y,item,14,C['blue'] if item=='发送监控' else C['text'],item=='发送监控') + y+=44 + y+=17 + c.text(24,952,'设计原型 · 非真实业务数据',12,C['muted']) + c.rect(249,0,1351,65,C['white']); c.line(249,65,1600,65) + c.text(276,24,'运营概览 / 发送监控',13,C['muted']) + c.button(1000,15,140,'预警中心 6'); c.button(1152,15,148,'待审核任务'); c.button(1312,15,152,'报备任务提醒') + c.text(1500,27,'管理员',13,C['muted']) + c.text(276,91,title,24,C['title'],True); c.text(276,125,subtitle,13,C['muted']) + c.badge(1370,91,'静态示例 · 待实施','gray') + + +def tabbar(c, selected): + tabs=['行业通道','验证码','整体兜底','告警记录'] + for i,t in enumerate(tabs): + x=276+i*134 + c.text(x+8,192,t,15,C['blue'] if i==selected else C['muted'],i==selected) + if i==selected: c.line(x,223,x+100,223,C['blue'],3) + c.line(276,225,1572,225) + + +CHANNEL = [ + ('行业通道 A','CH-001 · 移动',1280,[(1058,1260),(1128,1200),(1067,1100)],'异常','通用规则'), + ('行业通道 A','CH-001 · 联通',920,[(874,900),(856,880),(813,820)],'正常','通用规则'), + ('行业通道 B','CH-002 · 电信',760,[(680,740),(666,700),(640,650)],'正常','通用规则'), + ('行业通道 C','CH-003 · 移动',68,[(56,60),(53,55),(45,46)],'样本不足','通用规则'), + ('行业通道 D','CH-004 · 联通',430,[(310,420),(362,400),(348,360)],'异常','通用规则')] +OTP = [ + ('示例零售 · 登录应用','【示例商城】',1280,[(1058,1260),(1128,1200),(1067,1100)],'异常','验证码通用'), + ('示例服务 · 用户中心','【示例服务】',920,[(874,900),(856,880),(813,820)],'正常','验证码通用'), + ('示例物流 · 商户应用','【示例物流】',760,[(680,740),(666,700),(640,650)],'正常','验证码通用'), + ('示例教育 · 学员登录','【示例学堂】',68,[(56,60),(53,55),(45,46)],'样本不足','验证码通用'), + ('示例平台 · 会员应用','【示例会员】',0,[], '数据延迟','验证码通用')] +FALLBACK = [ + ('示例零售 · 通知应用','【示例商城】',300,[(257,290),(212,230),(85,90)],'样本不足','应用×签名'), + ('示例服务 · 业务应用','【示例服务】',2500,[(2115,2350),(1940,2000),(950,1000)],'异常','签名规则'), + ('示例物流 · 商户应用','【示例物流】',1800,[(1666,1700),(1485,1500),(895,900)],'正常','应用规则'), + ('示例教育 · 通知应用','【示例学堂】',630,[(558,600),(478,500),(238,240)],'正常','通用规则'), + ('示例平台 · 消息应用','【示例会员】',0,[], '数据延迟','通用规则')] + + +def overview(kind): + c=Canvas(); shell(c); tabbar(c,kind) + title=['行业通道监控','验证码监控','整体兜底监控'][kind] + c.rect(276,150,1296,28,C['soft'],radius=5) + note='以平台收到成功回执为准;未满观察时长的短信不参与该指标评估。' + if kind==1: note='仅统计最终正文包含“验证码”的业务短信;补发不重复计数,以成功回执为准。' + if kind==2: note='近30分钟整体监控;1 / 5 / 20分钟分别使用成熟分母,不将新提交短信计作失败。' + c.text(288,157,note,12,C['blue']) + c.button(1210,183,80,'刷新'); c.button(1300,183,118,'阈值设置') + c.button(1428,183,144,'监控通道' if kind==0 else '运行概况',kind==0) + values=[('监控维度','16' if kind==0 else '48','通道 × 运营商' if kind==0 else '企业应用 × 签名'), + ('异常维度','2' if kind==0 else '1','点击仅看异常'),('样本不足','3','不足最低成熟条数'), + ('窗口提交量','3,458' if kind==0 else ('3,028' if kind==1 else '5,230'),'次发送尝试' if kind==0 else '条业务短信')] + for i,(lab,val,desc) in enumerate(values): + x=276+i*330; c.rect(x,246,306,97,C['white'],C['line'],8) + c.text(x+18,260,lab,13,C['muted']); c.text(x+18,286,val,28,C['red'] if i==1 else C['title'],True) + c.text(x+115,300,desc,12,C['muted']) + c.rect(276,363,1296,72,C['white'],C['line'],8) + c.text(294,378,'统计窗口',12,C['muted']); c.text(294,401,'12:00 – 12:30' if kind==2 else '12:25 – 12:30',14,C['text'],True) + c.text(490,378,'评估时刻 12:30:00',12,C['muted']); c.text(490,401,'每10分钟评估' if kind==2 else '初评 · 12:31补齐',13) + c.text(686,378,'更新于 12:30:18',12,C['muted']); c.text(686,401,'查看最近2小时趋势',13,C['blue']) + c.button(934,382,168,'搜索通道 / 编号' if kind==0 else '企业 / 应用'); c.button(1114,382,168,'运营商:全部' if kind==0 else '搜索签名'); c.button(1294,382,152,'状态:全部') + c.rect(276,455,1296,462,C['white'],C['line'],8) + c.rect(277,456,1294,47,'#F9FAFB',radius=7) + xs=[294,574,727,889,1051,1220,1384] + headers=['通道 / 运营商' if kind==0 else '企业应用 / 签名','窗口提交', + '1分钟到达率' if kind==2 else '5秒到达率','5分钟到达率' if kind==2 else '20秒到达率', + '20分钟到达率' if kind==2 else '1分钟到达率','状态 / 规则','操作'] + for x,h in zip(xs,headers): c.text(x,472,h,13,C['muted'],True) + data=[CHANNEL,OTP,FALLBACK][kind] + for i,(name,sub,total,metrics,state,rule) in enumerate(data): + y=504+i*75 + if state=='异常': c.rect(277,y,1294,74,'#FFFBFB') + c.text(xs[0],y+16,name,14,bold=True,maxw=265); c.text(xs[0],y+40,sub,12,C['muted']) + c.text(xs[1],y+19,f'{total:,}' if metrics else '—',16,bold=True) + if metrics: + for j,(s,n) in enumerate(metrics): + x=xs[2+j]; minimum=100 + thresholds = [.85,.90,.95] if kind==2 and i==0 else [.90,.95,.98] + low=s/n < thresholds[j] + tone=C['muted'] if n 签名 > 应用 > 通用',15,C['blue'],True) + c.text(298,291,'命中最高优先级后,整套规则覆盖。',13,C['muted']) + c.text(298,332,'规则列表',16,bold=True); c.button(730,320,122,'新增规则',True) + rules=[('应用×签名','通知应用 / 【示例商城】','100条 · 85% / 90% / 95%'), + ('签名','【示例服务】','100条 · 90% / 95% / 98%'), + ('应用','商户应用','100条 · 90% / 95% / 98%'), + ('通用','全部未覆盖对象','100条 · 90% / 95% / 98%')] + for i,(scope,obj,value) in enumerate(rules): + y=373+i*98 + c.rect(298,y,554,83,C['soft'] if i==0 else C['white'],C['blue'] if i==0 else C['line'],6) + c.badge(313,y+12,scope,'blue' if i==0 else 'gray'); c.text(426,y+16,obj,14,bold=True) + c.text(426,y+48,value,12,C['muted']) + c.text(298,793,'实际生效示例',14,bold=True) + c.text(298,823,'示例零售 / 通知应用 / 【示例商城】',13) + c.text(298,847,'采用应用×签名规则,覆盖下层通用设置。',13,C['blue']) + c.rect(900,176,672,706,C['white'],C['line'],8) + c.text(925,199,'编辑个性规则',18,bold=True); c.badge(1398,198,'草稿 · 未保存','amber') + labels=[('作用范围','企业应用 × 签名'),('企业 / 应用','示例零售 / 通知应用'),('签名','【示例商城】')] + for i,(lab,value) in enumerate(labels): + y=246+i*67; c.text(925,y,lab,13,C['muted']); c.rect(1085,y-8,455,38,'#FAFAFA',C['line'],5); c.text(1097,y+3,value,14) + c.line(925,445,1540,445) + c.text(925,469,'最低成熟条数',14,bold=True); c.rect(1170,458,160,40,C['white'],C['line'],5); c.text(1183,471,'100',16); c.text(1340,473,'条 / 每项指标',13,C['muted']) + c.text(925,508,'仅有样本数达到门槛的指标才参与告警。',12,C['muted']) + for i,(label,val) in enumerate([('1分钟到达率下限','85.00'),('5分钟到达率下限','90.00'),('20分钟到达率下限','95.00')]): + y=548+i*54; c.rect(925,y+1,18,18,C['blue'],radius=3) + c.line(929,y+10,933,y+14,C['white'],2); c.line(933,y+14,939,y+6,C['white'],2); c.text(954,y+3,label,14) + c.rect(1280,y-7,260,38,C['white'],C['line'],5); c.text(1293,y+3,val+' %',15) + c.text(925,718,'连续异常 1 次触发 · 连续恢复 2 次关闭',13) + c.text(925,750,'预计下周期生效;旧告警记录保留原规则版本。',12,C['muted']) + c.line(901,791,1571,791) + c.button(925,817,120,'恢复继承'); c.button(1300,817,80,'取消'); c.button(1392,817,148,'保存规则',True) + c.text(276,920,'交互说明:保存失败保留输入;版本冲突重新加载;未保存离开须确认。',13,C['muted']) + return c + + +def join_dialog(): + c=Canvas(); shell(c,'短信通道','新建 / 复制通道保存成功之后,独立询问是否纳管') + c.rect(276,180,1296,713,C['white'],C['line'],8) + c.badge(298,202,'通道已保存','green'); c.text(420,207,'行业通道 E · 新通道编号 CH-005',14,bold=True) + c.text(298,249,'创建结果已生效。加入监控不会修改通道价格、连接或路由。',13,C['muted']) + c.rect(426,316,940,421,'#F3F4F6',radius=9) + c.rect(420,310,940,421,C['white'],'#D1D5DB',8) + c.text(448,335,'是否加入行业通道监控?',22,C['title'],True); c.text(1313,335,'×',23,C['muted']) + c.line(421,386,1359,386) + c.rect(448,409,884,48,C['soft'],radius=6); c.text(468,424,'如果是行业短信通道建议加入',16,C['blue'],True) + c.text(448,484,'新通道:行业通道 E(CH-005) · 支持:移动 / 联通 / 电信',15) + c.text(448,527,'将采用行业通道通用规则',14,bold=True) + c.text(448,561,'最低100条成熟样本;5秒 ≥90%,20秒 ≥95%,1分钟 ≥98%。',14,C['muted']) + c.text(448,602,'现在不加入,也可稍后从发送监控 → 监控通道中添加。',13,C['muted']) + c.line(421,655,1359,655); c.button(1058,678,118,'暂不加入'); c.button(1190,678,142,'加入监控',True) + c.rect(420,761,940,79,C['amberbg'],radius=6) + c.text(440,778,'加入失败状态:通道已保存,加入监控失败。',14,C['amber'],True) + c.text(440,808,'仅重试加入监控,不重复创建通道;关闭弹窗保留原创建结果。',13,C['amber']) + c.text(276,930,'触发点:服务端返回新ID之后。复制通道不继承原通道监控身份。',13,C['muted']) + return c + + +def alerts(): + c=Canvas(); shell(c,'发送质量告警','聚合异常指标,记录处理与恢复过程') + c.rect(276,180,808,724,C['white'],C['line'],8) + c.badge(298,203,'异常持续','red'); c.text(408,207,'行业通道 A × 移动',18,bold=True) + c.text(298,250,'事件 AL-EXAMPLE-001 · 开始于12:30 · 最近评估12:35',13,C['muted']) + c.rect(298,282,764,54,C['redbg'],radius=6) + c.text(314,299,'三个时效指标低于阈值,合并为一条活动告警。',15,C['red'],True) + xs=[298,548,704,851] + for x,t in zip(xs,['命中指标','实际值','最低值','成熟样本']): c.text(x,366,t,13,C['muted'],True) + for i,(lab,val,limit,count) in enumerate([('5秒到达率','83.97%','90.00%','1058 / 1260'),('20秒到达率','94.00%','95.00%','1128 / 1200'),('1分钟到达率','97.00%','98.00%','1067 / 1100')]): + y=405+i*50 + for j,(x,t) in enumerate(zip(xs,[lab,val,limit,count])): c.text(x,y,t,15,C['red'] if j==1 else C['text'],j==1) + c.line(298,y+35,1062,y+35) + c.text(298,573,'5秒到达率趋势',16,bold=True); c.text(798,577,'实线:实际 / 虚线:阈值',12,C['muted']) + for i in range(4): c.line(350,619+i*41,1044,619+i*41) + c.text(298,612,'100%',12,C['muted']); c.text(305,674,'90%',12,C['muted']); c.text(305,737,'80%',12,C['muted']) + for x in range(350,1044,13): c.line(x,681,x+7,681,C['red'],1) + points=[(350+i*69.4,619+(100-v)*6.2) for i,v in enumerate([98,97.5,97,97.5,96,95,94,92,91,83.97,83.97])] + for (x1,y1),(x2,y2) in zip(points,points[1:]): c.line(x1,y1,x2,y2,C['blue'],3) + for x,t in [(350,'11:45'),(558,'12:00'),(766,'12:15'),(999,'12:35')]: c.text(x,768,t,12,C['muted']) + c.line(277,821,1083,821); c.button(298,846,120,'查看样本'); c.button(834,846,224,'标记已读(非恢复)',True) + c.rect(1110,180,462,376,C['white'],C['line'],8) + c.text(1132,204,'预警中心弹层示意',16,bold=True); c.text(1132,238,'与既有消息提醒保持相同交互',12,C['muted']) + for i,(lab,count,desc) in enumerate([('安全检测与封禁','0','暂无待处置告警'),('系统监控告警','0','暂无活动告警'),('发送质量告警','6','行业2 · 验证码1 · 整体兜底3')]): + y=277+i*83 + c.rect(1130,y,420,70,C['soft'] if i==2 else C['white'],C['line'],6) + c.text(1146,y+12,lab,15,bold=True); c.badge(1496,y+10,count,'red' if i==2 else 'gray') + c.text(1146,y+43,desc,12,C['muted']) + c.rect(1110,580,462,324,C['white'],C['line'],8) + c.text(1132,603,'事件时间线',16,bold=True) + for i,(time,status,desc) in enumerate([('12:30','首次异常','三项命中,创建1条事件'),('12:35','持续异常','更新原事件,不重复刷屏'),('后续','连续2次正常后恢复','缺样本或数据延迟不算恢复')]): + y=645+i*80; c.badge(1132,y,time,'gray'); c.text(1212,y+4,status,14,bold=True,maxw=338); c.text(1212,y+34,desc,12,C['muted'],maxw=330) + c.text(276,942,'未读状态按用户记录;同一异常多个窗口只计一个活动事件。所有数据均为设计示例。',13,C['muted']) + return c + + +def mobile(): + c=Canvas(390,844) + c.rect(0,0,390,58,C['white']); c.line(0,58,390,58) + for y in [22,28,34]: c.line(17,y,33,y,C['muted'],2) + c.text(49,19,'发送监控',18,C['title'],True) + c.badge(255,18,'预警 6','red') + for x in [349,355,361]: c.rect(x,27,3,3,C['muted'],radius=1) + c.text(16,81,'整体兜底',22,C['title'],True); c.badge(246,80,'静态设计示例','gray') + c.text(16,116,'近30分钟 · 每10分钟评估',13,C['muted']) + for i,t in enumerate(['行业通道','验证码','整体兜底','告警']): + x=[16,118,204,310][i]; c.text(x,154,t,14,C['blue'] if i==2 else C['muted'],i==2) + c.line(199,183,280,183,C['blue'],3) + c.rect(16,202,358,73,C['soft'],radius=6) + c.text(28,215,'以收到成功回执为准',14,C['blue'],True) + c.text(28,244,'未满时长仍在观察中,不计作失败。',12,C['blue']) + c.button(16,290,107,'筛选'); c.button(132,290,116,'阈值设置'); c.button(257,290,117,'刷新') + c.text(16,344,'12:00 – 12:30 / 12:30:18更新',12,C['muted']) + c.rect(16,374,358,341,C['white'],C['line'],8) + c.text(32,392,'示例零售 · 通知应用',16,bold=True); c.text(32,421,'【示例商城】 · 应用×签名规则',12,C['muted']) + c.badge(269,390,'样本不足','gray'); c.text(32,454,'窗口提交300条业务短信',13) + rows=[('1分钟','88.62%','257/290成熟 · 10条观察中'),('5分钟','92.17%','212/230成熟 · 70条观察中'),('20分钟','94.44%','85/90成熟 · 210条观察中')] + for i,(label,val,desc) in enumerate(rows): + y=486+i*65; c.line(32,y-4,358,y-4); c.text(32,y+10,label,14,bold=True); c.text(232,y+8,val,20,C['muted'] if i==2 else C['green'],True) + c.text(122,y+36,desc,12,C['muted'],maxw=236) + c.text(16,733,'20分钟指标最低100条,当前90条。',12,C['muted']) + c.text(16,758,'可评估项正常;不足项继续观察。',12,C['muted']) + c.rect(0,788,390,56,C['white']); c.line(0,788,390,788) + c.button(16,798,171,'查看趋势'); c.button(201,798,173,'告警记录',True) + return c + + +if __name__ == '__main__': + ROOT.mkdir(parents=True,exist_ok=True) + for i,n in enumerate(['01-industry-monitor','02-verification-monitor','03-overall-monitor']): overview(i).save(n) + policy().save('04-threshold-rules') + join_dialog().save('05-channel-enrollment') + alerts().save('06-alert-center-detail') + mobile().save('07-mobile-monitor') diff --git a/docs/report-readiness-notifications-20260906.md b/docs/report-readiness-notifications-20260906.md new file mode 100644 index 0000000..7cb9289 --- /dev/null +++ b/docs/report-readiness-notifications-20260906.md @@ -0,0 +1,27 @@ +# 报备状态变化站内通知 + +2026-09-06;状态:实施中。补充报备工作台设计,不替代既有状态记录。 + +## 业务规则 + +签名和每条引流信息独立计算移动、联通、电信的全国通道报备覆盖。通道必须启用、发送地区为全国并支持该运营商;签名的运营商专属报备覆盖同通道旧版全通道报备,不能用被覆盖的历史成功抵消新的失败。引流按自己的报备任务计算,不借用签名成功。 + +从零网成功开始记住一次变化过程,允许分次经过一网、两网成功;首次达到三网成功创建一条不可变站内事件。重复导入和三网状态重复保存不重复通知。只有再次回到零网成功才开启下一轮;三网降到两网再恢复不重复通知。存量状态只建基线,不追发历史通知。此处是报备覆盖通知,不保证余额、路由、风控等其他发送条件通过。 + +每个事件同时对平台运营人员和所属企业可见,企业按北京时间自然小时汇总。阅读状态按用户保存已读汇总版本;同小时追加事件后重新显示未读。不发送短信、邮件或第三方消息。通道组改动是否使资料重新进入待生成池是本轮独立调查项,不由通知改动顺便调整。 + +## 数据与事务 + +PostgreSQL 保存对象状态、不可变事件、企业小时汇总及用户阅读游标。报备任务触发器覆盖人工状态修改、导入、删除等全部写入口;在同一事务内按对象加锁、计算覆盖、推进状态、写事件及递增小时版本。回滚同时撤销通知,失败明确使状态写入失败,避免假成功。触发器只在报备任务写路径执行,不接入短信发送热路径。 + +迁移仅增加表、索引、函数和触发器,不回填虚假通知。通知保存企业、应用、签名和引流名称快照,删除或重命名不破坏历史展示;不存短信正文、手机号或验证码。 + +## API 与页面 + +`GET /api/{admin|client}/report-notifications` 分页企业小时汇总,`GET /:id` 分页查看该小时事件,`GET /summary` 返回个人未读小时数,`POST /:id/read` 携带已展示版本幂等标记已读。分页最大100;非法页码、版本返回400。运营必须平台管理员;客户企业由已验证会话确定,越权详情与不存在同为404,拒绝伪造租户。 + +运营“状态记录”保留原有筛选与详情,新增 URL 页签 `tab=readiness`。“报备任务提醒”增加“报备状态变化通知”跳转此页签。客户端新增“消息通知”页及导航入口。两端展示未读、企业/小时、签名/引流条数及展开明细;加载、失败、无通知有独立状态,读取失败不伪造已读。 + +## 验收 + +真实 PostgreSQL 隔离事务覆盖零→部分→全部、重复、回零再恢复、并发、回滚、历史基线、三网通道专属优先、省通道排除、引流独立;真实 API 验证双端会话、租户隔离、分页、小时聚合与按版本阅读。浏览器覆盖三尺寸、刷新、路由页签、详情与失败状态。部署仅测试环境,保留独立恢复资产。 diff --git a/docs/sending-monitor-redesign-plan-20260906.md b/docs/sending-monitor-redesign-plan-20260906.md new file mode 100644 index 0000000..26198f4 --- /dev/null +++ b/docs/sending-monitor-redesign-plan-20260906.md @@ -0,0 +1,313 @@ +# 发送监控页面重做:需求、统计口径与页面方案 + +- 版本:V1.0实施版,2026-09-06。 +- 状态:2026-09-06用户授权实施中;原型中的名称、条数和比率全部为设计示例。 +- 本轮范围:用户已授权按方案修改、提交、推送、部署测试环境;默认阈值留空。原设计阶段及当前验证边界分别见第11、12节和testing-progress。 +- 原型入口:[原型说明](prototypes/sending-monitor-20260906/README.md)。 + +## 1. 目标与页面定位 + +将运营端 `/admin/monitor` 从通道清单和总体数量页改为发送质量监控工作台:运营人员能快速回答“哪个通道/哪个应用签名发送异常、哪个时效指标下降、样本够不够、何时发生、采用什么阈值”。 + +提供三种监控,并将异常集中展示到右上角现有“预警中心”: + +| 监控类型 | 聚合维度 | 执行频率 | 每次选取的提交窗口 | 指标 | +|---|---|---|---|---| +| 行业通道监控 | 通道 × 运营商 | 每5分钟 | 最近5分钟 | 5秒、20秒、1分钟到达率 | +| 验证码监控 | 企业应用 × 签名(含企业隔离键) | 每5分钟 | 最近5分钟,最终发送正文包含“验证码” | 5秒、20秒、1分钟到达率 | +| 整体兜底监控 | 企业应用 × 签名(含企业隔离键) | 每10分钟 | 最近30分钟 | 1分钟、5分钟、20分钟到达率 | + +这是按固定周期评估的准实时业务监控,不宣称秒级持续告警。“刷新页面”刷新已计算的最新快照,不重启全量统计;界面同时展示样本窗口、评估时刻、最近计算时间和数据是否延迟。 + +系统监控 `/admin/system-monitoring` 继续负责CPU、内存、磁盘及服务指标;数据统计/签名质量报表继续承担长周期报表。不得把三类页面的分母和统计口径互相替换。 + +## 2. 原需求解释与待确认点 + +以下是为使方案可实施而采用的建议,不视为用户已确认: + +1. “5到达率”按“5分钟到达率”处理。 +2. “兜底”暂指**全部短信的整体质量兜底**,包含验证码和行业短信,与前两类监控允许重叠;不是仅筛选补发或兜底通道。若实际意图是后者,必须先定义哪些通道/重试事件属于兜底,并在发送事实中冻结标记,不能仅凭最终channelId推断。 +3. “提交”建议指首次实际发往上游的 Submit,不包括尚在平台排队、定时未到、审核未通过或路由前拦截的消息。用户提交至平台的排队时长另作辅助信息,不混进供应商回执时延;若要验证码端到端SLA,应另加“平台受理起算”指标。 +4. “到达”采用**平台收到有效成功回执**的可观测口径。页面可保留用户熟悉的“5秒到达率”等列名,但须常驻说明“以平台收到成功回执为准”。不等于终端实测到达或用户已读。 +5. 各指标下限、最低样本量初始值待根据真实基线确定。原型中的100条、90%/95%/98%等只是示例,不作为生产默认值或行业标准自动启用。 +6. 未满观察时长的短信不计为失败;采用第4节的按指标成熟样本口径。同一行三个指标可有不同分母,必须明确展示。 + +## 3. 当前实现核对与差距 + +本轮只读基线:2026-09-06,`main / 69e3d73`,本地相对跟踪`origin/main`领先2项;`ls-remote`回读远端为`442dda711d5c9f778f3f76fd6d8fd69f14414ce6`。工作区有其他任务的文档修改及草稿,均未作为本轮成果或纳入原型数据。未连接PostgreSQL、Redis或服务器,因此下列是代码事实,性能数字仅为设计目标。 + +| 位置 | 当前代码事实 | 本次设计影响 | +|---|---|---| +| [AdminMonitorPage.tsx](../src/apps/admin/AdminMonitorPage.tsx) | 调用通道列表和listMonitor,展示运行通道、总体成功率、消息总量;手动刷新 | 没有三类时效窗口、监控范围与告警策略 | +| [uplink.queries.ts](../api/src/operations/queries/uplink.queries.ts) 的monitor | 按messageWhere分组当前状态,另读最近消息/回执/上行;本页调用未提供有界时间窗口 | 不应让新自动刷新继续触发全表总体聚合 | +| [AdminLayout.tsx](../src/layouts/AdminLayout.tsx) | 全局用轻量接口轮询;预警中心含安全和系统告警;另有待审与报备任务提醒 | 新发送质量告警加入预警中心,不放入报备任务提醒,不复用重型dashboard接口 | +| [schema.prisma](../api/prisma/schema.prisma) | 有SmsMessageRecord、SmsSubmitRecord、分片审计、SmsReceiptRecord与UpstreamReceiptInbox | 能关联业务消息、发送尝试、分片和回执;还没有本方案的规则、快照与告警实体 | +| [upstream/submit.go](../gateway/internal/upstream/submit.go) | submitResult中的SubmittedAt为结果构造时刻,submitPart内才发生SendReqPkt | 现有submittedAt不能未经验证就当作最初发包时间计算5秒指标 | +| [upstream/deliver.go](../gateway/internal/upstream/deliver.go) | 回执事件DeliveredAt赋值time.Now().UTC() | 这是Gateway收到回执的时间,不是供应商DoneTime;不能将字段名直接理解为终端时间 | +| [send-receipt.service.ts](../api/src/send-chain/send-receipt.service.ts) | 入站回执持久化到Inbox,再匹配处理;重复回执有receiptKey | 复用现有持久化与匹配结果,区分Gateway接收时间和API处理时间,避免处理积压扭曲5秒指标 | + +旧需求[5.10运营看板与监控](first-version-development-requirements.md)及[TC-ADMIN-011](system-functional-test-cases.md)还要求发送趋势、最近发送/回执/上行、通道状态和积压。本次以三类质量监控为主视图,保留“运行概况”和详情跳转入口承接这些功能;不因当前页面未展示某旧需求就擅自删除它。统计逻辑不复用运营看板的分片到达率。 + +## 4. 统一统计口径 + +### 4.1 计数单位与去重 + +- 行业通道:按`messageRecordId + submitId + channelId`唯一的**一次业务短信发送尝试**计1次,随后按真实收件号码运营商分组。一个三网通道拆为移动、联通、电信三行,不能按通道配置的“三网”重复累计同一条;未知运营商单列并提示数据质量。 +- 验证码与整体兜底:按`tenantId + applicationId + messageRecordId`去重,每条业务短信计1条。补发、换通道不增加分母,也不重置第一次实际提交时间;成功可来自任一有效完整发送尝试,但不能将不同尝试的零散成功分片拼成一次完整成功。 +- 行业通道中,原通道尝试失败、换通道成功分别反映各自质量;后者不得反向把前者改成成功。该业务短信在应用×签名监控中仍只计一次。 +- 同号码多次不同业务发送各计一次,不按号码去重;网关重放同一事件不增加计数。批量多号码按平台稳定业务消息ID逐条统计。 +- 长短信以完整业务消息为单位:该次有效尝试的全部必要分片成功回执收齐才成功,成功时刻取最后必要分片的首次成功回执接收时刻。分片总数必须来自真实发送快照,不能用当前计费单位随意替代。 +- 实际已提交但上游拒绝、响应超时或最终失败的尝试保留在分母;未发包的路由/连接失败不伪造Submit样本,进入运行概况的“提交前失败”。对于“可能已写出但无法确认”的网络边界,单列不确定样本和完整性状态,不静默排除并显示健康。 +- 未要求回执、不支持成功回执、无法匹配、缺少关键时间的记录,不制造100%或0%指标。展示不可评估数量和原因,触发数据质量提示;已确认提交且正常应有回执但未收到的样本,在成熟后计为未按时成功。 + +签名采用发送时已解析的`signatureId`及名称快照;应用用稳定ID,tenantId始终在后端隔离键中。签名重命名不拆历史序列;删除后历史快照仍可查。没有可验证签名/应用映射的历史数据单列“未识别”,不按当前同名签名猜测归并。验证码判断是最终展开、重组后的**发送正文包含字面量“验证码”**,只识别一次保存布尔值和规则版本;不以模板分类、登录图形验证码或模糊关键词替代,不存储验证码具体值到监控表。 + +### 4.2 时间定义 + +- `t0`:行业通道为该次尝试第一次成功写出Submit的时间;验证码/整体兜底为该业务消息所有有效尝试中最早的实际Submit时间。 +- `ts`:满足完整成功条件的Gateway成功回执接收时刻;重复成功取首次、重复事件幂等。记录`timestampSource`和精度,禁止用API事务处理时间/updatedAt替代。 +- 时间统一存UTC,页面显示北京时间,精确到毫秒计算;阈值边界使用`ts - t0 <= h`,5.000秒算5秒内,5.001秒不算。负延迟或时钟明显异常单列不可评估并暂停受影响告警,不强制归零。 +- 真正Submit时间采集是实施前置项:扩展现有Gateway结果/分片事件携带`firstWireSubmitAt`及时间源,随已有耐久事件持久化,保持旧消费者兼容。不得靠解析全量文本日志实现常态监控;必须验证进程崩溃、无SubmitResp、分片和回执先到的边界,不能只在accepted结果里补时间。 +- 旧数据缺少精确起点时可显示“历史口径不可比”,但不参与新5秒告警;不把SubmitResp时刻回填成已核实发包时刻。 + +### 4.3 周期、成熟样本与公式 + +设评估边界为`T`,5分钟任务在北京时间整5分钟对齐,10分钟任务在整10分钟对齐;按`[T-W, T)`选取提交样本,左闭右开。`W`为5分钟或30分钟。 + +对每个时效`h`独立计算。`B`是观察截止时刻,实时初评时`B=T`;行业/验证码补齐时`B=T+60秒`,详见本节末尾: + +```text +Q = 窗口内本维度可纳入时效统计的唯一提交样本 +M_h = { m ∈ Q | t0(m) + h <= B } # 已等满h的成熟样本 +N_h = |M_h| # 可评估条数 +S_h = |{ m ∈ M_h | 完整成功且0 <= ts(m)-t0(m) <= h }| +R_h = S_h / N_h × 100% # N_h=0时为null +观察中_h = |Q| - N_h +触发_h = 指标开启 且 数据完整 且 N_h>=minSamples 且 R_h<下限_h +``` + +重要规则:尚未等满时长的样本,即使已成功或已失败,也统一先留在“观察中”,不能只把提前成功的样本塞入分子/分母造成幸存偏差。失败、超时、未知及成熟后未回执均在分母中;`N_h 签名 > 应用 > 通用**。同时匹配签名和应用时采用签名规则,界面明确显示被覆盖来源;列表显示“实际生效规则”,详情能查看完整匹配链。 +- 采用最高优先级的一整套规则,避免不同来源按字段拼接难以解释。创建个性规则时预填继承值,保存为独立完整规则集;“恢复继承”删除该层覆盖并展示将生效的下级策略。 +- 同层同范围唯一,重复保存更新原规则;版本号乐观锁,冲突返回409并让用户重新加载。改规则记录操作者、修改前后值、生效时间;不对历史窗口用新阈值追溯制造告警。 +- 编辑页实时展示一个示例维度的最终生效策略,并提示高优先级覆盖范围。不要让用户保存后仍猜测哪套生效。 + +### 5.4 参数校验与生效 + +- 最低成熟条数为正整数;到达率下限0~100%,保留两位小数;开启的累计下限建议满足短时限≤长时限,不合理顺序提示修正。至少开启一项时效指标。 +- 百分比仅展示时四舍五入,告警比较使用整数基点/精确分子分母;等于下限不告警,低于下限告警。0%下限等于该项不会因低比率触发,界面明确提示。 +- 每类可配置连续异常次数(默认建议1)、连续恢复次数(默认建议2),范围1~5;站内提醒默认新异常一次,持续异常更新原事件,不周期刷屏。 +- 配置成功以真实持久化为准,页面显示版本和生效时间。配置修改后从下一个周期使用新版本;旧活动事件以“规则变更”关闭并重置连续计数,不算业务恢复。 + +## 6. 告警生命周期与预警中心 + +1. 任意开启的指标在成熟样本达标且数据完整时低于下限,累计对应连续异常次数;达到阈值创建一条该维度的发送质量告警,附全部命中指标。 +2. 同一类型+维度只保留一个活动告警事件,多个时效指标合并展示;使用事务唯一约束/锁防止双Worker重复。业务维度键不包含窗口T,避免每个重叠窗口新建。 +3. 活动事件更新最新值、最差值、持续时长和周期记录。用户“标记已读/已知悉”只影响个人未读状态,不等于恢复或关闭统计。 +4. 所有开启指标均有充分成熟样本、数据完整且不再命中下限,连续满足恢复次数后自动恢复。样本不足、无发送、数据延迟均不累计恢复;活动告警显示“暂停评估”原因。 +5. 恢复后再次异常创建新事件并重新未读;配置关闭、范围移除、规则变更分别记录关闭原因,不能冒充恢复。短暂静默仅隐藏个人/授权范围通知,统计仍进行并记录到期时间。 +6. 预警中心新增“发送质量告警”,展示未读活动事件数及异常维度数,点击进入`/admin/monitor?tab=alerts`;弹层样式、键盘/点击外部关闭和窄屏行为复用现有AppShell。 +7. 全局角标只调用独立轻量`notification-summary`,按既有30秒节奏、聚焦及已读事件刷新。返回失败保留上次值并标记不可用,不能清零或清空其他预警域。明细列表和计数使用相同权限、过滤和去重口径。 +8. 发送质量告警属于预警中心;签名清退继续在现有报备任务提醒中,待审核任务不增加这些计数。首期只做站内告警,不发短信、邮件或第三方通知,不触发自动停通道、换路由、补发。 + +## 7. 页面与交互 + +### 7.1 监控主页面 + +- 路由保持`/admin/monitor`。一级页签:行业通道、验证码、整体兜底、告警记录;标题操作区为刷新、阈值设置、行业页特有的监控通道。 +- 顶部持续显示口径、当前窗口、计算周期、最新成功计算时间/数据延迟;30秒页面取数不等同于5/10分钟重新评估。长时间挂后台暂停轮询,恢复焦点再拉取,手动刷新节流。 +- 摘要卡:监控维度数、异常维度数、样本不足维度数、窗口提交量(行业用“提交尝试”,其他用“业务短信”)。无数据时显示—/0并区别未配置、无发送、计算中与接口失败。 +- 表格以异常优先:维度、窗口提交量、三个到达率、实际阈值/规则来源、状态、趋势/详情。各指标格包含百分比、成功/成熟数;低于阈值的格红色强调,观察中/样本不足中性显示,不只依赖颜色。 +- 用户能筛选全部/异常/正常/样本不足/数据延迟;应用/签名支持带企业名的远程搜索、分页。筛选保存在URL,首次进入、刷新和告警深链接能还原。 +- 保留“运行概况”入口显示连接、积压及最近消息/回执/上行,不把业务启用标记等同实际连接健康。详情链接保持权限过滤。 + +### 7.2 趋势与告警详情 + +- 详情页/抽屉显示异常对象、类型、状态、开始/最近评估时间、规则快照及每项命中指标。 +- 展示最近2小时/24小时曲线,点的时间含义为评估T;悬停显示窗口、分子分母、观察中条数和revision。阈值变更用分段线和注释,不能用今天阈值覆盖昨天曲线。 +- “查看样本”跳转已有短信记录,带精确应用/签名/通道/时间/结果过滤;需有详情权限,手机号脱敏,不在告警摘要暴露正文或验证码。 +- 异常、无数据、待计算、采集延迟、失败重试、权限不足、删除对象历史查看均有明确状态。配置弹窗保存失败保留输入,未保存离开有确认。 + +### 7.3 响应式与原型覆盖 + +- 原型采用项目白底侧栏、浅灰内容区、蓝色选中、紧凑表格和8px圆角;复用Breadcrumb/Button/Select/Table/Tag/Modal。 +- 1600×1000完整展开;1366×768保持正文14px,表格自身横向滚动、弹窗仅Body滚动;390×844用折叠导航、横滑页签、每维度一张指标卡和全屏配置抽屉,不缩小字体挤宽表。 +- 配套图覆盖三个主视图、阈值/个性规则、通道纳管提示、预警中心/详情、窄屏;均为静态示意,不含真实API、数据库或用户操作。 + +## 8. 数据流与性能方案 + +### 8.1 推荐架构 + +```text +已有Submit结果 / 分片审计 / 回执Inbox(耐久业务事实) + → 独立监控Worker:增量投影、完整性校验、幂等归并 + → 短期MonitorFact + 分钟汇总桶 + → 5/10分钟调度:生成窗口快照、评估规则、维护告警事件 + → 轻量分页API / 角标摘要 → 页面 +``` + +原则是发送热路径不等待统计查询、规则匹配或通知,也不每条短信执行多次聚合SQL。精确时间需要扩展既有耐久事件,但尽量不新增独立同步消息或额外发送事务。监控读取失败只造成监控降级,不能阻断发送;基础事实持久化本身仍遵循原发送可靠性契约,不为性能跳过必要写入。 + +推荐一期由独立Worker读取**既有已落库事实**做短批增量投影,避免再造一套逐短信业务Outbox;如果无法在既有事实中证明完整性,必须在技术验证阶段调整采集契约,不宣称纯查询就能准确算5秒。不能直接消费现有短信Stream的同一个consumer group分走消息,也不能依赖已ACK/XDEL的Stream作为历史账本。 + +### 8.2 增量、桶与精度 + +- 数据提取针对提交事实与回执处理结果两条游标分别维护检查点。`createdAt/id`或`updatedAt/id`排序只提供扫描位置,不能假设数据库事务提交顺序与时间戳一致;采用重叠回读+按ID幂等覆盖,并定期有界对账。扫描到未完成关联的Inbox保留待匹配集合,直到已匹配或明确异常,不越过后遗忘。 +- 监控事实保持稳定source key、源版本、t0、首次完整成功时间、类型标记和维度快照;同一源重复摄取以替换贡献/脏桶重建处理,不能直接重复INCR。事实、桶版本和检查点在监控侧短事务内一致提交,崩溃可回放。 +- 以提交分钟建立稀疏桶,记录计数及5秒/20秒/1分钟/5分钟/20分钟累计按时成功数。长时限成熟边界可整分钟读取;5秒/20秒成熟边界落在分钟内部,必须从索引事实补算边界秒区间,不能把整分钟全算成熟,更不能把时间四舍五入到分钟。 +- 每次评估读5或30个分钟桶及最多一分钟的边界事实,不对每个通道/签名单独发SQL循环。批量处理活跃维度,监控列表只读已保存快照。 +- 三类监控共享一次业务消息/正文解析投影,验证码布尔只识别一次;行业通道尝试汇总与应用业务消息汇总分别维护。禁止常态运行`content LIKE '%验证码%'`扫描业务大表,禁止反复JSON反序列化正文。 +- 固定维度ID;仅有流量或配置的组合建桶,不生成“企业×应用×签名×通道×运营商”笛卡尔积。应用签名不是Prometheus高基数标签;Prometheus仅观测Worker延迟、批量大小、错误率等低基数运行指标。 +- 迟到事件只将相应提交分钟标脏并合并修正其相关快照;兜底每条样本最多影响3个滚动提交窗口,再处理有必要的历史revision,禁止重算所有维度全部历史。 + +### 8.3 表与索引候选(设计项,不直接执行迁移) + +| 候选实体 | 内容及约束 | +|---|---| +| SendingMonitorTarget | 行业通道成员、enabled、effectiveFrom、version;channelId唯一 | +| SendingMonitorRule | 类型、作用域与ID、完整阈值JSON/结构字段、版本、生效时间、操作者;同类型同作用域唯一 | +| SendingMonitorFact | sourceKind/sourceId唯一、tenant/app/signature/channel/carrier快照、t0、successAt、时间源、验证码标记、完整性与源版本;不复制手机号和正文 | +| SendingMonitorMinute | type/dimensionKey/minute/口径版本唯一,累计计数、revision;稀疏存储 | +| SendingMonitorSnapshot | type/dimensionKey/T/口径版本唯一,三个S/N、观察中、规则快照、completeAt/revision;保留历史追溯 | +| SendingMonitorAlert / AlertRead | 活动事件唯一约束、规则版本、首次/最新/最差值、状态/原因;已读按eventId+userId唯一 | +| SendingMonitorCheckpoint | 按来源/分片的扫描位置、租约、扫描上下界、对账进度、未处理缺口 | + +索引按实际谓词和EXPLAIN选:事实`(dimensionKey,t0)`支持边界范围;快照`(type,T,status)`及维度历史时间索引;源表新增`(updatedAt,id)`/相关状态时间索引前先验证现有查询计划。不能仅因表很大就堆宽索引,源表新增索引会增加发送/回执写放大;DDL锁与索引创建窗口需部署评审。 + +参考:[PostgreSQL复合索引说明](https://www.postgresql.org/docs/current/indexes-multicolumn.html)强调前导列约束对扫描范围的作用;[Prometheus标签规范](https://prometheus.io/docs/practices/naming/)提示避免无界高基数。应用版本能力以目标数据库为准,不将文档最新版优化当作当前服务器已具备。 + +### 8.4 调度与资源预算 + +- 一期建议1个独立监控Worker,连接池上限2、并行任务1,按哈希/时间分批;每批500~2000条是压测候选值,受statement_timeout和短事务约束,自适应退避,禁止Promise.all按全部签名并发。 +- 以数据库租约/唯一任务键确保每个边界T只被一个执行者持有;过期可接管,重跑幂等。不要只使用进程内setInterval防重。调度边界固定,批次可错峰,不漂移窗口定义。 +- 轻量摘要API缓存15~30秒,按权限作用域及版本隔离;缓存丢失只回源汇总表,禁止回源重扫业务表。使用Redis只缓存结果,不做每条短信一个TTL键/定时器。 +- 建议热事实先按2小时估算,分钟桶7天、窗口快照30天、告警及规则审计90天,再按实际合规与磁盘容量评审。72小时是候选纠错范围,不要求保留等长的全量热明细;热事实过期后的纠错从既有事实按ID有界恢复,恢复成本超预算则明确标记未回算。清理仅针对独立监控数据,按分区/小批执行,不清业务消息、回执或短信队列。 +- 新增实际发包时间字段、源表索引、监控投影和回算均有成本;不能承诺“零影响”。性能验证不通过时先缩小纳管范围、降低摄取批量或部署独立读副本(需确认复制延迟),不能以提高发送并发或削弱耐久性掩盖。 + +### 8.5 可解释的容量估算与验收预算 + +令业务短信速率为λ、平均尝试数a、平均分片数s,则已有提交/分片/回执事实处理量约按`λ×a×s`增长;重复回执另计,不能仅看业务TPS。 + +以假设500条业务短信/秒、a=1.1、s=1为例:每5分钟15万业务短信、约16.5万次尝试;每30分钟90万业务短信。每次对这些数据重新Join三遍会产生持续负载。监控分钟汇总将周期读取转为与活跃维度和窗口长度相关,而事实摄取仍与事件量线性相关。 + +该假设下业务+尝试投影若约1050行/秒,72小时约2.72亿行;即使每行连索引按粗估200字节,也约54GB且未计WAL/膨胀。**因此72小时明细不能不经容量测算直接上线**;可优先缩短热事实至2小时(约756万行、粗估1.5GB),更长回算在既有事实中按ID有界恢复,或评估分区/独立存储。这是容量风险示例,不代表现环境有500TPS、该磁盘余量或该行大小。 + +实现验收建议预算(待基线实测校准): + +- 同负载对照开启/关闭监控,发送受理/提交及回执落库P95相对恶化不超过5%,无业务错误增加,发送Stream/Inbox无持续新增积压。 +- 监控新增连接不超分配池,数据库总体CPU增幅目标不超过5个百分点,磁盘I/O和WAL写放大单独记录;不以单次低峰截图证明高峰达标。 +- 周期任务P95在30秒内完成、必须小于调度周期;快照/摘要API P95≤300ms(不含公网延迟);不足则标记性能验收未通过,禁止藏掉延迟指标。 +- 数据超过一个采集SLA(初值30秒)未完整时标为延迟;两个评估周期无新完整快照时告警“监控计算异常”。按真实依赖延迟校准,不误关正常短信发送。 +- 先用脱敏历史快照/隔离数据集验证1倍及峰值2倍规模,覆盖高签名基数、长短信、重试与回执突发。真实发送压力测试另需授权;本设计阶段未运行压测。 + +## 9. API与权限边界(拟定) + +统一使用`/api/admin/sending-monitor`,不重用系统监控或旧monitor的全量聚合接口: + +| 接口 | 用途 | +|---|---| +| GET /overview?type=... | 最新快照摘要、T、nextEvaluationAt、数据完整性 | +| GET /rows?type=...&page=... | 权限范围内分页维度、S/N/观察中、状态与生效规则 | +| GET /history?dimensionId=...&range=... | 有界历史快照及规则变更 | +| GET /targets;PUT /targets/:channelId | 行业纳管列表与幂等加入/移除,携带version | +| GET /rules;PUT /rules/:id;POST /rules | 通用与个性规则,完整校验与乐观锁 | +| GET /effective-rule?... | 返回生效规则及被覆盖层,用于编辑预览 | +| GET /alerts;GET /alerts/:id | 历史、活动及详情、过滤、分页 | +| GET /notification-summary | 轻量未读活动事件/异常维度数、更新时间,不聚合原始消息 | +| POST /alerts/:id/read | 个人幂等标记已读,不改变业务恢复状态 | + +响应必须区分`rate=null`、`sample_insufficient`、`observing`、`stale`、`error`,不能统一0。越权资源返回一致404/403策略;后端从会话确定访问范围,不能相信前端tenantId。监控查看、阈值修改、通道纳管、消息详情分别校验权限,配置写入与版本审计在事务中完成。分页上限建议100,历史时间范围有限,错误明确返回而非静默成功。 + +## 10. 实施拆分与验收清单 + +### 10.1 分阶段建议 + +1. 先确认第2节口径与阈值,对真实代码/数据核验提交时间、回执匹配、分片合并和高峰规模。交付统计样本独立对账,不先接告警。 +2. 实现兼容时间字段、独立投影/桶/快照,影子运行并与独立SQL按ID比对;监控关闭时不改变发送行为。完成容量和故障演练后才开启有限纳管。 +3. 实现三页签、通用与个性规则、通道新建/复制提示,接预警中心轻量摘要和事件生命周期;先灰度一个测试范围再扩展。 +4. 同步主需求、系统用例、技术设计及testing-progress;经授权提交、推送及部署,分别记录代码级与真实环境证据。 + +### 10.2 可直接转入系统用例的验收条目 + +| 编号 | 场景 | 预期 | +|---|---|---| +| SMR-001 | 5分钟边界、10分钟边界、跨天和时区 | 提交窗口左闭右开、UTC计算一致,无跨周期漏重 | +| SMR-002 | 三网通道含移动/联通/电信/未知号码 | 按消息运营商拆分;未知单列,不重复三次计数 | +| SMR-003 | 同业务短信换通道补发 | 通道按各尝试,应用签名按1条;t0不因补发重置 | +| SMR-004 | 长短信、重复/乱序/冲突回执 | 全必要分片同一有效尝试完整成功才计成功;幂等,负时延异常可追溯 | +| SMR-005 | 4.999/5.000/5.001秒以及20秒/1分/5分/20分边界 | 精确分类,不由显示四舍五入决定 | +| SMR-006 | 尚未成熟但已成功/已失败的样本 | 两者都观察中;不能只纳入提前成功者;N_h独立 | +| SMR-007 | N_h为0、99、100且最低100 | null、样本不足、可评估,零数据不显示100%或自动恢复 | +| SMR-008 | 最新30分钟,20分钟成熟段只有前10分钟 | 分子分母/观察中符合第4.3例子,不把新提交直接计为未到达 | +| SMR-009 | 正文含验证码、模板分类验证码但正文不含、不同租户同名签名 | 字面正文匹配;稳定ID归属和租户隔离,不混淆 | +| SMR-010 | 全部规则层同时匹配、重复修改、恢复继承 | 应用×签名>签名>应用>通用;整套规则覆盖、409冲突、来源可解释 | +| SMR-011 | 新建/复制成功后加入监控成功或失败 | 主创建只一次、加入幂等;失败保留新通道,复制不继承成员资格 | +| SMR-012 | 新建失败/无权限/关闭纳管弹窗 | 不误弹成功、不越权加入、后续可手动纳管 | +| SMR-013 | 一个维度三项低于阈值、连续重叠周期 | 一条活动事件、多命中指标;无重复角标刷屏 | +| SMR-014 | 已读、持续异常、恢复、再异常、样本不足 | 已读非恢复;充分数据连续恢复;再异常新未读;不足暂停评估 | +| SMR-015 | 回执Gateway及时但API处理迟到、规则变更 | 延迟/回算有revision;保留原告警与修正原因,不伪称终端时延 | +| SMR-016 | 投影Worker重启、多实例抢占、数据库/Redis故障 | 检查点可恢复、幂等;监控显示降级,业务发送链无新增依赖阻断 | +| SMR-017 | 长事务晚提交、游标跨越、已扫描Inbox后匹配 | 重叠读取+待匹配集合+有界对账恢复,不永久漏统 | +| SMR-018 | 预警中心接口失败、权限变化、点告警深链接 | 其他域不清零,来源状态明确;同作用域计数与列表一致 | +| SMR-019 | 三尺寸、首次进入、刷新、筛选、弹窗失败与未保存离开 | 无页面级意外溢出,正文可读、Footer可见,表单状态保留 | +| SMR-020 | 高峰/高基数/长短信与监控开启关闭对照 | 按第8.5预算出真实CPU/IO/延迟/队列/存储报告,不用构建成功代替 | +| SMR-021 | 旧数据缺时间、不确定发包、不支持回执 | 单列不可评估和完整性,不伪造指标或混入健康样本 | +| SMR-022 | 旧功能入口与跨业务提醒分组 | 保留运行概况/最近事件入口,新告警只进预警中心,不污染报备和待审核 | +| SMR-023 | 固定窗口尾部与补齐任务 | 12:29:59提交的行业/验证码短信必须进入12:30窗口的12:31定稿;初评/定稿不重复计告警次数,旧定稿不覆盖新状态 | + +## 11. 原型文件与本轮验证边界 + +参见[原型目录](prototypes/sending-monitor-20260906/README.md),PNG便于预览,SVG用于后续修改。所有表格为示例数据;正文未展示短信、手机号或验证码。原型是需求交流材料,不接后端,不可作为业务验收证据。 + +本轮已核验文档相对链接、Markdown代码块、空白、统计公式示例、绘制脚本语法、七组PNG/SVG尺寸及可解析性,并逐图检查文字与布局;文件范围仅本文及专属原型目录。没有真实API/数据库/Redis功能测试或性能压测。阈值、兜底范围、提交计时起点及容量预算必须在实施前评审,不能依据示例图直接启用告警。 + +## 12. 实施决策与验收边界(2026-09-06) + +用户已确认默认阈值留空,由运营后续配置;任何原型阈值均不自动启用。前三节旧记录保留为设计阶段证据,不代表当前实施状态。 + +新增 Gateway 实际写出时间、时间来源及真实上游回执请求标记,随已有结果和分片耐久事件传递;API 持久化到尝试/分片,回执新增 gatewayReceivedAt 区分真实 Gateway 接收时间与 API 缺省时间。客户端是否要求下游回执不能代替上游实际请求标记。现有 Inbox 的 matchedSubmitRecordId 尚未写入,投影使用已匹配业务消息、通道和网关消息号关联,遇到尝试重号拒绝混合。 + +独立 Worker 使用最多2个 PostgreSQL 连接、单执行槽、数据库排他租约;提交及回执各自保留重叠游标,另有72小时有界对账,脏分钟只重算所属固定窗口/最多3个兜底窗口,调度队列与投影原子提交。指标读取成熟分钟桶加毫秒边界事实,不按页面刷新扫描业务大表。 + +事实保留期本次采用72小时(第8节2小时是原建议),以保证迟到修改能替换原贡献、不会在删除事实后把旧桶重建成局部样本;分钟7天、快照30天、关闭告警90天。新增表不存短信正文/手机号。需要以真实峰值容量预算再优化事实压缩/冷热分层;当前不得据此宣称500TPS下预算达标。真实短信压测未获授权,只使用隔离数据库样本验证统计和查询成本。 + +纳管范围使用不可变版本,按窗口评估时刻解析;以后移除/重新加入不改写旧统计。当前API规则按type+scope通过POST完整保存(version乐观锁),不另外提供重复的PUT更新入口。新Worker健康异常通过发送监控数据延迟和预警中心不可用说明展示;监控性能指标接Prometheus和真实峰值对照尚未验收。 diff --git a/docs/system-functional-test-cases.md b/docs/system-functional-test-cases.md index 3857685..16335f1 100644 --- a/docs/system-functional-test-cases.md +++ b/docs/system-functional-test-cases.md @@ -5145,3 +5145,22 @@ npm run verify:phase8 | TC-CHANNEL-ORDER-006 | 三尺寸首次进入、刷新、上移/下移/撤销、添加、搜索空态和跨路由切换 | 撤销和保存按钮宽度相同且紧凑;表格/弹窗可操作,无新增裁切或控制台异常;真实API验收不保存业务配置 | 真实短信补发、真实保存业务通道组及真实权限/故障注入未授权时仍标记未执行;不能把纯函数、模拟保存或构建通过当作发送链投递验收。 + +## 发送质量监控与报备状态消息(2026-09-06) + +权威设计:[发送监控方案](sending-monitor-redesign-plan-20260906.md)、[报备状态通知](report-readiness-notifications-20260906.md)。发送监控 SMR-001~023 全部沿用方案第10.2节,不把未执行项视为通过。 + +| 编号 | 操作 | 预期 | +|---|---|---| +| RRN-001 | 签名零网成功,依次更新移动、联通、电信全国成功 | 到第三网仅产生1条站内事件,双端均可见 | +| RRN-002 | 引流独立报备;全国三网通道旧版成功或多通道逐步成功 | 按引流自己的报备覆盖计算,不借签名状态 | +| RRN-003 | 重复导入;三→二→三;三→零→三 | 前两者不重复,回零再恢复新增下一轮 | +| RRN-004 | 同企业同小时多对象达到条件;读后同小时追加 | 企业×小时汇总计数,按用户和revision重新未读 | +| RRN-005 | 不同企业详情ID、伪造租户头、匿名及非法分页/版本 | 会话隔离,403/404/401/400,无越权读取或写入 | +| RRN-006 | 报备事务失败/回滚、并发保存相同对象 | 通知与事务同进退,对象锁和唯一键防重 | +| RRN-007 | 既有成功、省通道、运营商专属失败覆盖旧成功 | 不追发历史,排除省通道和被覆盖成功 | +| RRN-008 | 运营状态记录tab、顶栏跳转、客户端消息页,三尺寸及失败 | URL可刷新,原记录筛选保留,失败不伪造已读 | +| SMR-024 | 默认阈值及样本量为空,尚无任何规则 | 显示未配置,不启用告警;后续完整校验后保存 | +| SMR-025 | 纳管移除/重新加入后重算旧窗口 | 使用历史纳管版本,不改写原窗口范围 | +| SMR-026 | 从快照查看短信样本,再筛选和导出 | 均限定同一快照贡献范围,超过72小时明确提示 | +| RMP-OBS-001 | 已生成资料的对象所用组新增通道(只读代码调查) | 记录实际行为:pendingReport=false不会自动重入池;不把调查写成修复 | diff --git a/docs/testing-progress.md b/docs/testing-progress.md index e29a3f6..5feb8df 100644 --- a/docs/testing-progress.md +++ b/docs/testing-progress.md @@ -4605,3 +4605,16 @@ git diff --check - 动态环境:浏览器验收期间其他操作新增了一个真实停用通道,旧候选快照因此不再匹配;改为用当前页面实际收到的API响应核对过滤集合,未删除或改写该通道。只读数据库短信记录119509;三条短信Stream在核验时pending/lag均0且last-delivered/entries-read与本轮开始一致。未发送、补发、重投或重新入队短信,未修改余额、通道或客户配置。 - 证据目录:本机`%TEMP%/cmpp-channel-order-20260906`内before.png、after.json、editor-1600/1366/390.png、choices-1600/1366/390.png、前后浏览器脚本、build.log和api-tests.log。首轮浏览器脚本修正了API路径/定位器及草稿beforeunload确认处理;不把脚本超时当作功能通过。图片、响应报告不含密码,认证文件沿用部署文档受限入口。 - 验收边界:未真实保存现有通道组、未执行短信补发;参数映射/保存失败用组件隔离测试,补发顺序用真实代码、当前PostgreSQL/API顺序及无副作用策略测试交叉核对。无真实省网可选夹具,地区过滤和历史缺失项由组件测试覆盖;不冒充端到端投递或真实权限异常验收。仅本地提交,不推送、不部署测试或预生产。 + +## 2026-09-06 发送监控与报备状态消息实施(发布前) + +- 范围:按用户授权修改、提交、推送、部署测试环境;本轮不访问或发布预生产。阈值及最低样本量默认留空、不告警,后续由用户配置。 +- 起点:main/HEAD=69e3d73,2026-09-06 19:15回读origin/main=442dda711d5c9f778f3f76fd6d8fd69f14414ce6,差异0/2。原有AGENTS、开发/测试/部署规范、用例/进度及未跟踪方案受保护,仅暂存本轮文件或追加节。 +- 实现:三种周期监控、真实Gateway写出和回执接收时间、尝试/业务去重、独立有界投影Worker、成熟桶/边界统计、规则与纳管版本、告警生命周期、历史快照和短信样本范围;顶部预警中心及运行概况保留。通知采用事务触发器、零网过程记忆、企业小时聚合、个人版本已读,双端页面和运营提醒入口。 +- 根因证据:现有submittedAt是等待供应商响应后的时间,不能冒充发包时间;matchedSubmitRecordId实际未写入,使用已匹配消息/通道/网关号,重号不可评估;上游实际RegisteredDelivery与客户要求的下游回执不同,分别保留。测试库时区Asia/Shanghai,新表/SQL显式UTC。 +- 资料池只读结论:pending-query要求pendingReport=true;生成完成置false;组添加通道没有重新置true。实际41个pendingReport=false签名存在有效路由和通道组,不会仅因新增通道自动重新进入待生成池;尚待生成对象可以动态计算新目标,但不会自动创建资料文件。本轮未修改此业务规则。 +- 验证:前端20套99项、API59套638项、Gateway全量Go测试及vet通过;真实PostgreSQL隔离事务20项通过(含5秒边界、初评/定稿、重复、缺时间/回执请求、历史纳管版本、签名和引流通知、UTC、回滚)。数据库夹具明确为从不入队的隔离样本,全部回滚;测试替身不作为真实业务验收。新增API单测初次类型声明失败,修正后全量通过;引流夹具初次误用按运营商三条,与真实唯一约束冲突,改为既有全通道报备模型后通过。 +- 本地TypeScript、前后端构建通过;格式、Stylelint、CSS所有权/级联治理及15项门禁测试通过,CSS全部由页面所有者导入,未修改历史模块或加载顺序。按当前门禁机械格式化了本轮涉及的旧代码文件,未变更其其他业务逻辑。ESLint无错误,有既有/关联Hook和any警告;入口gzip108.71KiB低于250KiB,图表chunk保留既有提示。 +- 测试机19:05~19:08基线:旧部署442dda7;短信119509、近72小时尝试0、待匹配回执0;提交命令/结果Stream pending/lag均0;数据库约2363MB、连接13/100、根盘可用24GB。Gateway desired=6、connected=0是发布前既有状态,不宣称供应商链路通过。当前没有真实高峰/长短信负载;500TPS性能预算及故障演练尚未执行,不作容量承诺。 +- 本次独立恢复点:/var/backups/cmpp-platform/20260906-sending-monitor-191302,含PostgreSQL custom dump、应用、环境/systemd/Nginx/Prometheus/fstab、Redis RDB、旧版本;pg_restore列表、tar可读性及SHA-256均通过。未执行实际恢复演练。 +- 此节为发布前证据;提交、推送、测试发布、真实双端浏览器结果在后续发布节记录,不预先标记完成。 diff --git a/gateway/internal/queue/messages.go b/gateway/internal/queue/messages.go index 2765de6..1692b6d 100644 --- a/gateway/internal/queue/messages.go +++ b/gateway/internal/queue/messages.go @@ -83,25 +83,31 @@ type Retry struct { type SubmitResult struct { Envelope - SubmitID string `json:"submitId"` - SequenceID uint32 `json:"sequenceId"` - GatewayMessageID string `json:"gatewayMessageId"` - SubmitStatus string `json:"submitStatus"` - ErrorCode string `json:"errorCode,omitempty"` - ErrorMessage string `json:"errorMessage,omitempty"` - SubmittedAt time.Time `json:"submittedAt"` - Segments []SubmitSegmentResult `json:"segments,omitempty"` + FirstWireSubmitAt *time.Time `json:"firstWireSubmitAt,omitempty"` + WireTimeSource string `json:"wireTimeSource,omitempty"` + ReceiptRequested bool `json:"receiptRequested"` + SubmitID string `json:"submitId"` + SequenceID uint32 `json:"sequenceId"` + GatewayMessageID string `json:"gatewayMessageId"` + SubmitStatus string `json:"submitStatus"` + ErrorCode string `json:"errorCode,omitempty"` + ErrorMessage string `json:"errorMessage,omitempty"` + SubmittedAt time.Time `json:"submittedAt"` + Segments []SubmitSegmentResult `json:"segments,omitempty"` } type SubmitSegmentResult struct { - SegmentTotal int `json:"segmentTotal"` - SegmentIndex int `json:"segmentIndex"` - SequenceID uint32 `json:"sequenceId"` - GatewayMessageID string `json:"gatewayMessageId"` - SubmitStatus string `json:"submitStatus"` - ErrorCode string `json:"errorCode,omitempty"` - ErrorMessage string `json:"errorMessage,omitempty"` - SubmittedAt time.Time `json:"submittedAt"` + FirstWireSubmitAt *time.Time `json:"firstWireSubmitAt,omitempty"` + WireTimeSource string `json:"wireTimeSource,omitempty"` + ReceiptRequested bool `json:"receiptRequested"` + SegmentTotal int `json:"segmentTotal"` + SegmentIndex int `json:"segmentIndex"` + SequenceID uint32 `json:"sequenceId"` + GatewayMessageID string `json:"gatewayMessageId"` + SubmitStatus string `json:"submitStatus"` + ErrorCode string `json:"errorCode,omitempty"` + ErrorMessage string `json:"errorMessage,omitempty"` + SubmittedAt time.Time `json:"submittedAt"` } type ReceiptEvent struct { diff --git a/gateway/internal/upstream/submit.go b/gateway/internal/upstream/submit.go index 1383ae0..7e49c6f 100644 --- a/gateway/internal/upstream/submit.go +++ b/gateway/internal/upstream/submit.go @@ -40,7 +40,15 @@ func (p *connectionPool) submit( ctx context.Context, cmd queue.SubmitCommand, onSegment func(queue.SubmitSegmentResult) error, -) (queue.SubmitResult, error) { +) (final queue.SubmitResult, finalErr error) { + defer func() { + for _, segment := range final.Segments { + if segment.FirstWireSubmitAt != nil && (final.FirstWireSubmitAt == nil || segment.FirstWireSubmitAt.Before(*final.FirstWireSubmitAt)) { + final.FirstWireSubmitAt = segment.FirstWireSubmitAt + final.WireTimeSource = "gateway_write_complete" + } + } + }() parts, err := splitSubmitContent(cmd.CMPP.MsgFmt, cmd.Content) if err != nil { result := submitResult(cmd, 0, "", "rejected", "ENCODE_FAILED", err.Error()) @@ -96,7 +104,10 @@ func (p *connectionPool) submit( return result, nil } -func (c *connection) submitPart(ctx context.Context, cmd queue.SubmitCommand, part submitPart) (uint32, string, queue.SubmitResult, error) { +func (c *connection) submitPart(ctx context.Context, cmd queue.SubmitCommand, part submitPart) (finalSequence uint32, finalID string, final queue.SubmitResult, finalErr error) { + var wireAt *time.Time + wireSource := "not_written" + defer func() { final.FirstWireSubmitAt = wireAt; final.WireTimeSource = wireSource }() startedAt := time.Now() defer func() { c.mu.Lock() @@ -116,7 +127,13 @@ func (c *connection) submitPart(ctx context.Context, cmd queue.SubmitCommand, pa return 0, "", result, err } c.sendMu.Lock() + wireSource = "write_uncertain" seq, err := client.SendReqPkt(pkt) + if err == nil { + at := time.Now().UTC() + wireAt = &at + wireSource = "gateway_write_complete" + } c.sendMu.Unlock() if err != nil { c.emitProtocolLog(protocolLogEvent{ @@ -326,6 +343,8 @@ func submitResult(cmd queue.SubmitCommand, sequenceID uint32, gatewayMessageID s ErrorCode: code, ErrorMessage: message, SubmittedAt: time.Now().UTC(), + WireTimeSource: "not_written", + ReceiptRequested: cmd.CMPP.RegisteredDelivery != 0, } } @@ -334,14 +353,17 @@ func submitSegmentResult(part submitPart, sequenceID uint32, gatewayMessageID st gatewayMessageID = result.GatewayMessageID } return queue.SubmitSegmentResult{ - SegmentTotal: int(part.PkTotal), - SegmentIndex: int(part.PkNumber), - SequenceID: sequenceID, - GatewayMessageID: gatewayMessageID, - SubmitStatus: result.SubmitStatus, - ErrorCode: result.ErrorCode, - ErrorMessage: result.ErrorMessage, - SubmittedAt: result.SubmittedAt, + FirstWireSubmitAt: result.FirstWireSubmitAt, + WireTimeSource: result.WireTimeSource, + ReceiptRequested: result.ReceiptRequested, + SegmentTotal: int(part.PkTotal), + SegmentIndex: int(part.PkNumber), + SequenceID: sequenceID, + GatewayMessageID: gatewayMessageID, + SubmitStatus: result.SubmitStatus, + ErrorCode: result.ErrorCode, + ErrorMessage: result.ErrorMessage, + SubmittedAt: result.SubmittedAt, } } diff --git a/gateway/internal/upstream/wire_timing_test.go b/gateway/internal/upstream/wire_timing_test.go new file mode 100644 index 0000000..da66f7d --- /dev/null +++ b/gateway/internal/upstream/wire_timing_test.go @@ -0,0 +1,36 @@ +package upstream + +import ( + "context" + "testing" + "time" +) + +func TestUnavailableConnectionNeverClaimsWireSubmitTime(t *testing.T) { + conn := &connection{closed: true} + cmd := submitCommandForPacketTest("3.0") + parts, err := splitSubmitContent(cmd.CMPP.MsgFmt, cmd.Content) + if err != nil { + t.Fatal(err) + } + _, _, result, err := conn.submitPart(context.Background(), cmd, parts[0]) + if err == nil || result.FirstWireSubmitAt != nil || result.WireTimeSource != "not_written" { + t.Fatalf("invalid pre-write timing: %+v / %v", result, err) + } +} + +func TestSegmentCarriesActualWireTimeAndReceiptRequest(t *testing.T) { + cmd := submitCommandForPacketTest("3.0") + cmd.CMPP.RegisteredDelivery = 1 + result := submitResult(cmd, 1, "upstream-1", "timeout", "SUBMIT_TIMEOUT", "no response") + at := time.Now().UTC().Add(-5 * time.Second) + result.FirstWireSubmitAt = &at + result.WireTimeSource = "gateway_write_complete" + segment := submitSegmentResult(submitPart{PkTotal: 2, PkNumber: 1}, 1, "upstream-1", result) + if segment.FirstWireSubmitAt == nil || !segment.FirstWireSubmitAt.Equal(at) || segment.WireTimeSource != "gateway_write_complete" || !segment.ReceiptRequested { + t.Fatalf("wire timing was lost: %+v", segment) + } + if !segment.SubmittedAt.After(*segment.FirstWireSubmitAt) { + t.Fatal("response timestamp must not replace earlier wire timestamp") + } +} diff --git a/src/api/admin/operations.api.ts b/src/api/admin/operations.api.ts index 0b3b49c..e2b6220 100644 --- a/src/api/admin/operations.api.ts +++ b/src/api/admin/operations.api.ts @@ -1,87 +1,349 @@ -import { request, requestBlob, requestForm, withQuery } from '../core/httpClient'; -import type { BatchRequeueResponse, BatchTaskMessagePage, DailyProfitReport, DailyQualityReport, DailyReconciliationReport, DashboardResponse, DownstreamDeliveryDashboard, DownstreamDeliveryRecord, DownstreamRecoveryStatusExportQuery, DownstreamRecoveryStatusResponse, DownstreamRequeueFilter, DownstreamRequeuePreview, DownstreamRequeueTask, DownstreamRequeueTaskItem, GatewayDownstreamRecoveryStatus, GatewaySubmitException, GatewaySubmitExceptionResponse, OperationLogResponse, PagedResponse, PagedResult, PendingAuditCounts, ProfitReportSummary, ProtocolInteractionLogResponse, QualityReportSummary, ReceiptAnomalyResponse, ReconciliationReportSummary, SendQualityResponse, SignatureChannelQualityResponse, SmsBatchTask, SmsMessageRecord, SmsMessageSegmentAudit, SmsUplinkMessage, SystemLogExportResult } from '../types'; +import { request, requestBlob, withQuery } from '../core/httpClient'; +import type { + BatchRequeueResponse, + BatchTaskMessagePage, + DailyProfitReport, + DailyQualityReport, + DailyReconciliationReport, + DashboardResponse, + DownstreamDeliveryDashboard, + DownstreamDeliveryRecord, + DownstreamRecoveryStatusExportQuery, + DownstreamRecoveryStatusResponse, + DownstreamRequeueFilter, + DownstreamRequeuePreview, + DownstreamRequeueTask, + DownstreamRequeueTaskItem, + GatewayDownstreamRecoveryStatus, + GatewaySubmitException, + GatewaySubmitExceptionResponse, + OperationLogResponse, + PagedResponse, + PagedResult, + PendingAuditCounts, + ProfitReportSummary, + ProtocolInteractionLogResponse, + QualityReportSummary, + ReceiptAnomalyResponse, + ReconciliationReportSummary, + SendQualityResponse, + SignatureChannelQualityResponse, + SmsBatchTask, + SmsMessageRecord, + SmsMessageSegmentAudit, + SmsUplinkMessage, + SystemLogExportResult, +} from '../types'; // Read-heavy operations endpoints are isolated from configuration mutations. export const adminOperationsApi = { - getDashboard: (tenantId?: string) => request(withQuery('/admin/operations/dashboard/statistics', { tenantId })), - getPendingAudits: (tenantId?: string) => request(withQuery('/admin/operations/pending-audits', { tenantId })), - getSendQuality: (date?: string) => request(withQuery('/admin/operations/send-quality', { date })), + getDashboard: (tenantId?: string) => + request(withQuery('/admin/operations/dashboard/statistics', { tenantId })), + getPendingAudits: (tenantId?: string) => + request(withQuery('/admin/operations/pending-audits', { tenantId })), + getSendQuality: (date?: string) => + request(withQuery('/admin/operations/send-quality', { date })), getSignatureQuality: (query: { date?: string; keyword?: string; page?: number; pageSize?: number } = {}) => request(withQuery('/admin/operations/signature-quality', query)), - listSystemLogs: (query: { tenantId?: string; keyword?: string; level?: string; module?: string; range?: string; createdAtFrom?: string; createdAtTo?: string; page?: number; pageSize?: number }) => - request(withQuery('/admin/system-logs', query)), - listProtocolInteractionLogs: (query: { protocol?: string; direction?: string; eventType?: string; status?: string; keyword?: string; range?: string; createdAtFrom?: string; createdAtTo?: string; page?: number; pageSize?: number }) => - request(withQuery('/admin/system-logs/protocol-interactions', query)), - exportSystemLogs: (query: { tenantId?: string; keyword?: string; level?: string; module?: string; range?: string; createdAtFrom?: string; createdAtTo?: string }) => - request('/admin/system-logs/exports', { method: 'POST', body: JSON.stringify(query) }), - listReconciliationReports: (query: { dateFrom?: string; dateTo?: string; tenantId?: string; applicationId?: string; page?: number; pageSize?: number } = {}) => - request & { summary: ReconciliationReportSummary }>(withQuery('/admin/reports/reconciliation', query)), - exportReconciliationReports: (query: { dateFrom?: string; dateTo?: string; tenantId?: string; applicationId?: string } = {}) => - requestBlob(withQuery('/admin/reports/reconciliation/export', query)), - listProfitReports: (query: { dateFrom?: string; dateTo?: string; dimensionType?: 'application' | 'channel'; tenantId?: string; applicationId?: string; channelId?: string; page?: number; pageSize?: number } = {}) => - request & { dimensionType: 'application' | 'channel'; summary: ProfitReportSummary }>(withQuery('/admin/reports/profit', query)), - exportProfitReports: (query: { dateFrom?: string; dateTo?: string; dimensionType?: 'application' | 'channel'; tenantId?: string; applicationId?: string; channelId?: string } = {}) => - requestBlob(withQuery('/admin/reports/profit/export', query)), - listQualityReports: (query: { dateFrom?: string; dateTo?: string; dimensionType?: 'application' | 'channel' | 'signature' | 'drainage'; tenantId?: string; applicationId?: string; channelId?: string; page?: number; pageSize?: number } = {}) => - request & { dimensionType: DailyQualityReport['dimensionType']; summary: QualityReportSummary }>(withQuery('/admin/reports/quality', query)), - exportQualityReports: (query: { dateFrom?: string; dateTo?: string; dimensionType?: 'application' | 'channel' | 'signature' | 'drainage'; tenantId?: string; applicationId?: string; channelId?: string } = {}) => - requestBlob(withQuery('/admin/reports/quality/export', query)), + listSystemLogs: (query: { + tenantId?: string; + keyword?: string; + level?: string; + module?: string; + range?: string; + createdAtFrom?: string; + createdAtTo?: string; + page?: number; + pageSize?: number; + }) => request(withQuery('/admin/system-logs', query)), + listProtocolInteractionLogs: (query: { + protocol?: string; + direction?: string; + eventType?: string; + status?: string; + keyword?: string; + range?: string; + createdAtFrom?: string; + createdAtTo?: string; + page?: number; + pageSize?: number; + }) => request(withQuery('/admin/system-logs/protocol-interactions', query)), + exportSystemLogs: (query: { + tenantId?: string; + keyword?: string; + level?: string; + module?: string; + range?: string; + createdAtFrom?: string; + createdAtTo?: string; + }) => request('/admin/system-logs/exports', { method: 'POST', body: JSON.stringify(query) }), + listReconciliationReports: ( + query: { + dateFrom?: string; + dateTo?: string; + tenantId?: string; + applicationId?: string; + page?: number; + pageSize?: number; + } = {}, + ) => + request & { summary: ReconciliationReportSummary }>( + withQuery('/admin/reports/reconciliation', query), + ), + exportReconciliationReports: ( + query: { dateFrom?: string; dateTo?: string; tenantId?: string; applicationId?: string } = {}, + ) => requestBlob(withQuery('/admin/reports/reconciliation/export', query)), + listProfitReports: ( + query: { + dateFrom?: string; + dateTo?: string; + dimensionType?: 'application' | 'channel'; + tenantId?: string; + applicationId?: string; + channelId?: string; + page?: number; + pageSize?: number; + } = {}, + ) => + request< + PagedResponse & { dimensionType: 'application' | 'channel'; summary: ProfitReportSummary } + >(withQuery('/admin/reports/profit', query)), + exportProfitReports: ( + query: { + dateFrom?: string; + dateTo?: string; + dimensionType?: 'application' | 'channel'; + tenantId?: string; + applicationId?: string; + channelId?: string; + } = {}, + ) => requestBlob(withQuery('/admin/reports/profit/export', query)), + listQualityReports: ( + query: { + dateFrom?: string; + dateTo?: string; + dimensionType?: 'application' | 'channel' | 'signature' | 'drainage'; + tenantId?: string; + applicationId?: string; + channelId?: string; + page?: number; + pageSize?: number; + } = {}, + ) => + request< + PagedResponse & { + dimensionType: DailyQualityReport['dimensionType']; + summary: QualityReportSummary; + } + >(withQuery('/admin/reports/quality', query)), + exportQualityReports: ( + query: { + dateFrom?: string; + dateTo?: string; + dimensionType?: 'application' | 'channel' | 'signature' | 'drainage'; + tenantId?: string; + applicationId?: string; + channelId?: string; + } = {}, + ) => requestBlob(withQuery('/admin/reports/quality/export', query)), listAdminBatchTasks: (query: { tenantId?: string; status?: string } = {}) => request(withQuery('/admin/send/batch-tasks', query)), - listAdminBatchTasksPage: (query: { tenantId?: string; status?: string; keyword?: string; enterpriseKeyword?: string; applicationKeyword?: string; createdAtFrom?: string; createdAtTo?: string; page: number; pageSize: number }) => - request>(withQuery('/admin/send/batch-tasks', query)), + listAdminBatchTasksPage: (query: { + tenantId?: string; + status?: string; + keyword?: string; + enterpriseKeyword?: string; + applicationKeyword?: string; + createdAtFrom?: string; + createdAtTo?: string; + page: number; + pageSize: number; + }) => request>(withQuery('/admin/send/batch-tasks', query)), listAdminBatchTaskMessages: (id: string, query: { phone?: string; page?: number; pageSize?: number } = {}) => request(withQuery(`/admin/send/batch-tasks/${id}/messages`, query)), terminateAdminBatchTask: (id: string) => request(`/admin/send/batch-tasks/${id}/terminate`, { method: 'POST', body: JSON.stringify({}) }), - listAdminMessages: (query: { tenantId?: string; applicationId?: string; channelId?: string; taskId?: string; phoneNumber?: string; status?: string } = {}) => - request(withQuery('/admin/send/messages', query)), + listAdminMessages: ( + query: { + tenantId?: string; + applicationId?: string; + channelId?: string; + taskId?: string; + phoneNumber?: string; + status?: string; + } = {}, + ) => request(withQuery('/admin/send/messages', query)), listMessageSegmentAudits: (query: { messageId?: string; messageRecordId?: string }) => request(withQuery('/admin/operations/message-segment-audits', query)), - listOperationMessages: (query: { tenantId?: string; applicationId?: string; channelId?: string; channelKeyword?: string; taskId?: string; messageId?: string; phoneNumber?: string; contentKeyword?: string; carrier?: string; status?: string; hasDrainage?: string; queuedAtFrom?: string; queuedAtTo?: string; page?: number; pageSize?: number } = {}) => - request>(withQuery('/admin/operations/messages', query)), + listOperationMessages: ( + query: { + monitorSnapshotId?: string; + tenantId?: string; + applicationId?: string; + channelId?: string; + channelKeyword?: string; + taskId?: string; + messageId?: string; + phoneNumber?: string; + contentKeyword?: string; + carrier?: string; + status?: string; + hasDrainage?: string; + queuedAtFrom?: string; + queuedAtTo?: string; + page?: number; + pageSize?: number; + } = {}, + ) => request>(withQuery('/admin/operations/messages', query)), getOperationMessage: (id: string) => request(`/admin/operations/messages/${id}`), - exportOperationMessages: (query: { tenantId?: string; applicationId?: string; channelId?: string; channelKeyword?: string; phoneNumber?: string; contentKeyword?: string; carrier?: string; status?: string; hasDrainage?: string; queuedAtFrom?: string; queuedAtTo?: string } = {}) => - requestBlob(withQuery('/admin/operations/messages/export', query)), + exportOperationMessages: ( + query: { + monitorSnapshotId?: string; + tenantId?: string; + applicationId?: string; + channelId?: string; + channelKeyword?: string; + phoneNumber?: string; + contentKeyword?: string; + carrier?: string; + status?: string; + hasDrainage?: string; + queuedAtFrom?: string; + queuedAtTo?: string; + } = {}, + ) => requestBlob(withQuery('/admin/operations/messages/export', query)), listAdminUplinkMessages: (query: { tenantId?: string; channelId?: string } = {}) => request(withQuery('/admin/operations/uplink-messages', query)), - listAdminUplinkMessagesPage: (query: { tenantId?: string; channelId?: string; phoneNumber?: string; keyword?: string; startTime?: string; endTime?: string; page: number; pageSize: number }) => - request>(withQuery('/admin/operations/uplink-messages', query)), + listAdminUplinkMessagesPage: (query: { + tenantId?: string; + channelId?: string; + phoneNumber?: string; + keyword?: string; + startTime?: string; + endTime?: string; + page: number; + pageSize: number; + }) => request>(withQuery('/admin/operations/uplink-messages', query)), claimUplinkMatchCandidate: (uplinkMessageId: string, body: { candidateId: string; operatorId?: string }) => - request(`/admin/operations/uplink-messages/${uplinkMessageId}/claim`, { method: 'POST', body: JSON.stringify(body) }), - listMonitor: (query: { tenantId?: string; channelId?: string } = {}) => request>(withQuery('/admin/operations/monitor', query)), - listGatewaySubmitExceptions: (query: { tenantId?: string; applicationId?: string; channelId?: string; status?: string; keyword?: string; page?: number; pageSize?: number } = {}) => - request(withQuery('/admin/operations/gateway-submit-dead-letters', query)), + request(`/admin/operations/uplink-messages/${uplinkMessageId}/claim`, { + method: 'POST', + body: JSON.stringify(body), + }), + listMonitor: (query: { tenantId?: string; channelId?: string } = {}) => + request>(withQuery('/admin/operations/monitor', query)), + listGatewaySubmitExceptions: ( + query: { + tenantId?: string; + applicationId?: string; + channelId?: string; + status?: string; + keyword?: string; + page?: number; + pageSize?: number; + } = {}, + ) => request(withQuery('/admin/operations/gateway-submit-dead-letters', query)), requeueGatewaySubmitException: (id: string, body: { confirmedNotSubmitted: boolean; reason: string }) => - request(`/admin/operations/gateway-submit-dead-letters/${id}/requeue`, { method: 'POST', body: JSON.stringify(body) }), + request(`/admin/operations/gateway-submit-dead-letters/${id}/requeue`, { + method: 'POST', + body: JSON.stringify(body), + }), resolveGatewaySubmitException: (id: string) => - request(`/admin/operations/gateway-submit-dead-letters/${id}/resolve`, { method: 'POST', body: JSON.stringify({}) }), - listReceiptAnomalies: (query: { tenantId?: string; applicationId?: string; channelId?: string; anomalyType?: string; status?: string; keyword?: string; page?: number; pageSize?: number } = {}) => - request(withQuery('/admin/operations/receipt-anomalies', query)), - listStatistics: (query: { tenantId?: string; groupBy?: string } = {}) => request>>(withQuery('/admin/operations/statistics', query)), - getDownstreamDeliveryDashboard: (query: { tenantId?: string; applicationId?: string; deliveryType?: string; createdAtFrom?: string; createdAtTo?: string } = {}) => - request(withQuery('/admin/operations/downstream-deliveries/dashboard', query)), - listDownstreamRecoveryStatuses: (query: { tenantId?: string; applicationId?: string; state?: string; failureCategory?: string; keyword?: string; updatedAtFrom?: string; updatedAtTo?: string; page?: number; pageSize?: number } = {}) => - request(withQuery('/admin/operations/downstream-recovery-statuses', query)), + request(`/admin/operations/gateway-submit-dead-letters/${id}/resolve`, { + method: 'POST', + body: JSON.stringify({}), + }), + listReceiptAnomalies: ( + query: { + tenantId?: string; + applicationId?: string; + channelId?: string; + anomalyType?: string; + status?: string; + keyword?: string; + page?: number; + pageSize?: number; + } = {}, + ) => request(withQuery('/admin/operations/receipt-anomalies', query)), + listStatistics: (query: { tenantId?: string; groupBy?: string } = {}) => + request>>(withQuery('/admin/operations/statistics', query)), + getDownstreamDeliveryDashboard: ( + query: { + tenantId?: string; + applicationId?: string; + deliveryType?: string; + createdAtFrom?: string; + createdAtTo?: string; + } = {}, + ) => request(withQuery('/admin/operations/downstream-deliveries/dashboard', query)), + listDownstreamRecoveryStatuses: ( + query: { + tenantId?: string; + applicationId?: string; + state?: string; + failureCategory?: string; + keyword?: string; + updatedAtFrom?: string; + updatedAtTo?: string; + page?: number; + pageSize?: number; + } = {}, + ) => request(withQuery('/admin/operations/downstream-recovery-statuses', query)), getDownstreamRecoveryStatus: (id: string) => request(`/admin/operations/downstream-recovery-statuses/${id}`), exportDownstreamRecoveryStatuses: (query: DownstreamRecoveryStatusExportQuery = {}) => requestBlob(withQuery('/admin/operations/downstream-recovery-statuses/export', query)), - listDownstreamDeliveries: (query: { tenantId?: string; applicationId?: string; deliveryType?: string; status?: string; keyword?: string; page?: number; pageSize?: number; createdAtFrom?: string; createdAtTo?: string } = {}) => - request>(withQuery('/admin/operations/downstream-deliveries', query)), + listDownstreamDeliveries: ( + query: { + tenantId?: string; + applicationId?: string; + deliveryType?: string; + status?: string; + keyword?: string; + page?: number; + pageSize?: number; + createdAtFrom?: string; + createdAtTo?: string; + } = {}, + ) => request>(withQuery('/admin/operations/downstream-deliveries', query)), requeueDownstreamDelivery: (id: string) => - request(`/admin/operations/downstream-deliveries/${id}/requeue`, { method: 'POST', body: JSON.stringify({}) }), + request(`/admin/operations/downstream-deliveries/${id}/requeue`, { + method: 'POST', + body: JSON.stringify({}), + }), batchRequeueDownstreamDeliveries: (ids: string[]) => - request('/admin/operations/downstream-deliveries/requeue', { method: 'POST', body: JSON.stringify({ ids }) }), + request('/admin/operations/downstream-deliveries/requeue', { + method: 'POST', + body: JSON.stringify({ ids }), + }), previewDownstreamRequeueTask: (filter: DownstreamRequeueFilter) => - request('/admin/operations/downstream-requeue-tasks/preview', { method: 'POST', body: JSON.stringify({ filter }) }), - createDownstreamRequeueTask: (body: { previewToken: string; reason: string; ratePerSecond: number; consecutiveFailureLimit: number }) => - request('/admin/operations/downstream-requeue-tasks', { method: 'POST', body: JSON.stringify(body) }), + request('/admin/operations/downstream-requeue-tasks/preview', { + method: 'POST', + body: JSON.stringify({ filter }), + }), + createDownstreamRequeueTask: (body: { + previewToken: string; + reason: string; + ratePerSecond: number; + consecutiveFailureLimit: number; + }) => + request('/admin/operations/downstream-requeue-tasks', { + method: 'POST', + body: JSON.stringify(body), + }), listDownstreamRequeueTasks: (query: { status?: string; page?: number; pageSize?: number } = {}) => request>(withQuery('/admin/operations/downstream-requeue-tasks', query)), - getDownstreamRequeueTask: (id: string) => request(`/admin/operations/downstream-requeue-tasks/${id}`), - listDownstreamRequeueTaskItems: (id: string, query: { status?: string; keyword?: string; page?: number; pageSize?: number } = {}) => - request>(withQuery(`/admin/operations/downstream-requeue-tasks/${id}/items`, query)), + getDownstreamRequeueTask: (id: string) => + request(`/admin/operations/downstream-requeue-tasks/${id}`), + listDownstreamRequeueTaskItems: ( + id: string, + query: { status?: string; keyword?: string; page?: number; pageSize?: number } = {}, + ) => + request>( + withQuery(`/admin/operations/downstream-requeue-tasks/${id}/items`, query), + ), changeDownstreamRequeueTaskStatus: (id: string, action: 'pause' | 'resume' | 'terminate') => - request(`/admin/operations/downstream-requeue-tasks/${id}/${action}`, { method: 'POST', body: JSON.stringify({}) }), + request(`/admin/operations/downstream-requeue-tasks/${id}/${action}`, { + method: 'POST', + body: JSON.stringify({}), + }), }; diff --git a/src/apps/admin/AdminChannelsPage.tsx b/src/apps/admin/AdminChannelsPage.tsx index 5f25f04..562a8a2 100644 --- a/src/apps/admin/AdminChannelsPage.tsx +++ b/src/apps/admin/AdminChannelsPage.tsx @@ -7,14 +7,22 @@ import { ChannelFormModal } from './channels/ChannelFormModal'; import { ChannelLogModal } from './channels/ChannelLogModal'; import { ChannelTable } from './channels/ChannelTable'; import { SmsTestModal } from './channels/SmsTestModal'; -import { buildChannelPayload, carrierOptions, mapApiChannel, mapUiStatusToApi, statusOptions } from './channels/channelModel'; +import { + buildChannelPayload, + carrierOptions, + mapApiChannel, + mapUiStatusToApi, + statusOptions, +} from './channels/channelModel'; import type { ChannelConfirmAction, ChannelLogState, ChannelModalState, SmsChannel } from './channels/channelTypes'; import './channels/AdminChannelsPage.css'; +import { ChannelEnrollmentPrompt } from './sending-monitor/MonitorConfiguration'; export function AdminChannelsPage() { const navigate = useNavigate(); const [channels, setChannels] = useState([]); const [error, setError] = useState(''); + const [enrollment, setEnrollment] = useState<{ id: string; name: string } | null>(null); const [keyword, setKeyword] = useState(''); const [carrier, setCarrier] = useState('all'); const [status, setStatus] = useState('all'); @@ -29,13 +37,23 @@ export function AdminChannelsPage() { function loadChannels(targetPage = page, filters = { keyword, carrier, status }) { Promise.all([ - adminApi.listChannelsPage({ keyword: filters.keyword.trim() || undefined, carrier: filters.carrier, status: filters.status, page: targetPage, pageSize }), + adminApi.listChannelsPage({ + keyword: filters.keyword.trim() || undefined, + carrier: filters.carrier, + status: filters.status, + page: targetPage, + pageSize, + }), adminApi.getSendQuality(), ]) .then(([result, quality]) => { const visibleChannels = result.items; const qualityByChannel = new Map(quality.channels.map((item) => [item.channelId, item])); - setChannels(visibleChannels.map((item) => mapApiChannel(item, item.connectionStates ?? [], qualityByChannel.get(item.id)))); + setChannels( + visibleChannels.map((item) => + mapApiChannel(item, item.connectionStates ?? [], qualityByChannel.get(item.id)), + ), + ); setTotal(result.total); setError(''); }) @@ -54,11 +72,12 @@ export function AdminChannelsPage() { if (modal?.mode === 'edit' && modal.channel) { await adminApi.updateChannel(modal.channel.id, buildChannelPayload(nextChannel, nextChannel.passwordCipher)); } else { - await adminApi.createChannel({ + const created = await adminApi.createChannel({ code: `CH-${Date.now()}`, ...buildChannelPayload(nextChannel, nextChannel.passwordCipher || 'secret'), status: 'active', }); + setEnrollment({ id: created.id, name: created.name }); } loadChannels(); setModal(null); @@ -74,7 +93,8 @@ export function AdminChannelsPage() { } async function copyChannel(channel: SmsChannel) { - await adminApi.copyChannel(channel.id); + const created = await adminApi.copyChannel(channel.id); + setEnrollment({ id: created.id, name: created.name }); loadChannels(); } @@ -103,34 +123,72 @@ export function AdminChannelsPage() { setConfirmAction(null); } - const confirmTitle = confirmAction?.type === 'copy' - ? '确认复制通道' - : confirmAction?.channel.status === 'stopped' - ? '确认启用通道' - : '确认停用通道'; + const confirmTitle = + confirmAction?.type === 'copy' + ? '确认复制通道' + : confirmAction?.channel.status === 'stopped' + ? '确认启用通道' + : '确认停用通道'; - const confirmDescription = confirmAction?.type === 'copy' - ? '系统将复制当前通道配置和报备详情,并新建一条名称带“副本”的通道。' - : confirmAction?.channel.status === 'stopped' - ? '启用后通道会进入连接中状态,后续可继续观察网关连接。' - : '停用后该通道将不再承接新的发送任务。'; + const confirmDescription = + confirmAction?.type === 'copy' + ? '系统将复制当前通道配置和报备详情,并新建一条名称带“副本”的通道。' + : confirmAction?.channel.status === 'stopped' + ? '启用后通道会进入连接中状态,后续可继续观察网关连接。' + : '停用后该通道将不再承接新的发送任务。'; return (

- +
{error ?

{error}

: null}
- setKeyword(event.target.value)} placeholder="请输入通道名称" value={keyword} /> - setStatus(event.target.value)} options={statusOptions} value={status} /> + setKeyword(event.target.value)} + placeholder="请输入通道名称" + value={keyword} + /> + setStatus(event.target.value)} + options={statusOptions} + value={status} + />
- - + +
@@ -150,6 +208,7 @@ export function AdminChannelsPage() { /> {modal ? setModal(null)} onSubmit={upsertChannel} /> : null} + {enrollment && setEnrollment(null)} />} {testChannel ? ( - + - )} + } onClose={() => setConfirmAction(null)} open title={confirmTitle} diff --git a/src/apps/admin/AdminMonitorPage.css b/src/apps/admin/AdminMonitorPage.css new file mode 100644 index 0000000..3c1ad9b --- /dev/null +++ b/src/apps/admin/AdminMonitorPage.css @@ -0,0 +1,123 @@ +.sending-monitor .sending-monitor__actions { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + gap: 8px; +} + +.sending-monitor .sending-monitor__notice { + margin: 0; + padding: 10px 12px; + border-radius: 8px; + background: var(--color-selected-soft); + color: var(--color-selected); +} + +.sending-monitor .sending-monitor__summary { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 16px; +} + +.sending-monitor .sending-monitor__summary > div { + display: grid; + gap: 8px; + padding: 16px; +} + +.sending-monitor .sending-monitor__summary strong { + font-size: 28px; +} + +.sending-monitor .sending-monitor__filters { + display: grid; + grid-template-columns: minmax(280px, 2fr) minmax(200px, 1fr) minmax(140px, 1fr); + align-items: end; + gap: 16px; + padding: 16px; +} + +.sending-monitor .sending-monitor__rate { + display: grid; + gap: 4px; +} + +.sending-monitor .sending-monitor__rate--bad { + color: var(--color-danger, #dc2626); +} + +.sending-monitor .sending-monitor__form, +.sending-monitor .sending-monitor__scope { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 16px; + margin: 16px 0; +} + +.sending-monitor .sending-monitor__rule { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + gap: 12px; + padding: 12px 0; + border-bottom: 1px solid var(--color-border, #e5e7eb); + overflow-wrap: anywhere; +} + +.sending-monitor .sending-monitor__trend-point { + display: grid; + gap: 6px; + padding: 12px 0; + border-bottom: 1px solid var(--color-border, #e5e7eb); +} + +.sending-monitor .sending-monitor__bars { + display: grid; + gap: 3px; + max-width: 400px; +} + +.sending-monitor .sending-monitor__bars > span { + height: 5px; + background: var(--color-selected); +} + +.sending-monitor .sending-monitor__mobile { + display: none; +} + +@media (width <= 767px) { + .sending-monitor .sending-monitor__summary { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .sending-monitor .sending-monitor__filters, + .sending-monitor .sending-monitor__form, + .sending-monitor .sending-monitor__scope { + grid-template-columns: minmax(0, 1fr); + } + + .sending-monitor .sending-monitor__desktop { + display: none; + } + + .sending-monitor .sending-monitor__mobile { + display: grid; + gap: 12px; + } + + .sending-monitor .sending-monitor__mobile > article { + padding: 16px; + overflow-wrap: anywhere; + } + + .sending-monitor .sending-monitor__mobile-metric { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + padding: 12px 0; + } +} diff --git a/src/apps/admin/AdminMonitorPage.tsx b/src/apps/admin/AdminMonitorPage.tsx index 6093e99..f0e801a 100644 --- a/src/apps/admin/AdminMonitorPage.tsx +++ b/src/apps/admin/AdminMonitorPage.tsx @@ -1,82 +1,308 @@ -import { useEffect, useMemo, useState } from 'react'; -import { Activity } from 'lucide-react'; -import { Breadcrumb, Button, CarrierTag, Table, Tag, type TableColumn } from '@/components/ui'; -import { adminApi, type AdminChannel } from '@/api/adminApi'; - -const columns: Array> = [ - { key: 'id', title: '通道编号', render: (record) => record.id }, - { key: 'name', title: '通道名称', render: (record) => record.name }, - { key: 'carrier', title: '运营商', render: (record) => { - const carriers = record.carriers?.length ? record.carriers : record.carrier === 'all' ? ['mobile', 'unicom', 'telecom'] : record.carrier ? [record.carrier] : []; - return carriers.length ? {carriers.map((carrier) => )} : '-'; - } }, - { key: 'gatewayHost', title: '网关地址', render: (record) => `${record.gatewayHost}:${record.gatewayPort}` }, - { key: 'rateLimitPerSecond', title: '限速', render: (record) => `${record.rateLimitPerSecond} 条/秒` }, - { - key: 'status', - title: '状态', - render: (record) => {record.status === 'active' ? '运行中' : '已停用'}, - }, -]; +import { useCallback, useEffect, useRef, useState } from 'react'; +import { useSearchParams } from 'react-router-dom'; +import { Breadcrumb, Button, Input, Select, Table, Tabs, Tag, type TableColumn } from '@/components/ui'; +import { MonitorRuntimeOverview } from './MonitorRuntimeOverview'; +import { MonitorRulesModal, MonitorScopePicker, MonitorTargetsModal } from './sending-monitor/MonitorConfiguration'; +import { MonitorAlerts, MonitorHistory, MonitorPager, Rate } from './sending-monitor/MonitorDetails'; +import { + monitorApi, + names, + ruleSource, + states, + time, + title, + type MonitorType, + type Snapshot, +} from './sending-monitor/monitorApi'; +import './AdminMonitorPage.css'; export function AdminMonitorPage() { - const [channels, setChannels] = useState([]); - const [monitor, setMonitor] = useState>({}); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(''); - - function loadData() { - setLoading(true); - Promise.all([adminApi.listChannels(), adminApi.listMonitor()]) - .then(([channelItems, monitorData]) => { - setChannels(channelItems.filter((item) => item.status !== 'deleted')); - setMonitor(monitorData); - setError(''); - }) - .catch((reason: Error) => setError(reason.message || '监控数据加载失败')) - .finally(() => setLoading(false)); - } - + const [params, setParams] = useSearchParams(); + const tab = params.get('tab') ?? 'industry'; + const type: MonitorType = tab === 'overall' || tab === 'verification' ? tab : 'industry'; + const [data, setData] = useState> | null>(null); + const [summary, setSummary] = useState> | null>(null); + const [error, setError] = useState(''), + [loading, setLoading] = useState(false), + [dialog, setDialog] = useState<'rules' | 'targets' | null>(null), + [detail, setDetail] = useState(null); + const lastLoad = useRef(0), + busy = useRef(false); + const page = Math.max(1, Number(params.get('page')) || 1), + queryKey = params.toString(); + const update = (values: Record) => { + const next = new URLSearchParams(params); + Object.entries(values).forEach(([key, value]) => (value ? next.set(key, value) : next.delete(key))); + setParams(next); + }; + const load = useCallback( + async (force = false, signal?: AbortSignal) => { + if ( + tab === 'alerts' || + tab === 'runtime' || + document.hidden || + (busy.current && !force) || + (!force && Date.now() - lastLoad.current < 1500) + ) + return; + busy.current = true; + lastLoad.current = Date.now(); + setLoading(true); + const q = new URLSearchParams(queryKey); + try { + const [rows, overview] = await Promise.all([ + monitorApi.rows( + { + type, + page: q.get('page') ?? '1', + status: q.get('status') ?? '', + keyword: q.get('keyword') ?? '', + tenantId: q.get('tenantId') ?? '', + applicationId: q.get('applicationId') ?? '', + signatureId: q.get('signatureId') ?? '', + }, + signal, + ), + monitorApi.overview(type), + ]); + if (!signal?.aborted) { + setData(rows); + setSummary(overview); + setError(''); + } + } catch (e) { + if (!signal?.aborted) setError(e instanceof Error ? e.message : '监控加载失败'); + } finally { + if (!signal?.aborted) { + setLoading(false); + busy.current = false; + } + } + }, + [queryKey, tab, type], + ); useEffect(() => { - loadData(); - }, []); - - const enabledChannels = channels.filter((item) => item.status === 'active').length; - const statusGroups = Array.isArray(monitor.byStatus) ? monitor.byStatus as Array<{ status: string; _count: { _all: number } }> : []; - const totalMessages = useMemo(() => statusGroups.reduce((sum, item) => sum + (item._count?._all ?? 0), 0), [statusGroups]); - const deliveredMessages = useMemo(() => statusGroups.filter((item) => item.status === 'delivered').reduce((sum, item) => sum + (item._count?._all ?? 0), 0), [statusGroups]); - const successRate = totalMessages > 0 ? ((deliveredMessages / totalMessages) * 100).toFixed(1) : '0.0'; - - return ( -
-
+ const controller = new AbortController(); + void load(true, controller.signal); + const refresh = () => void load(false, controller.signal); + const timer = setInterval(refresh, 30000); + window.addEventListener('focus', refresh); + document.addEventListener('visibilitychange', refresh); + return () => { + controller.abort(); + clearInterval(timer); + window.removeEventListener('focus', refresh); + document.removeEventListener('visibilitychange', refresh); + }; + }, [load]); + const health = data?.health?.data; + const stale = !health || !health.complete || Date.now() - new Date(health.checkedAt).getTime() > 30000; + const rows = data?.items ?? []; + const columns: TableColumn[] = [ + { + key: 'name', + title: type === 'industry' ? '通道 / 运营商' : '企业 / 应用 / 签名', + width: '260px', + render: (row) => ( +
+ {title(row.dimensions)} +

{row.dimensions.channelId ?? row.dimensions.signatureId}

+
+ ), + }, + { key: 'total', title: '窗口提交量', width: '110px', render: (row) => row.metrics.total.toLocaleString() }, + ...(type === 'overall' ? [60, 300, 1200] : [5, 20, 60]).map((seconds, i): TableColumn => ({ + key: `rate${seconds}`, + title: `${seconds < 60 ? `${seconds}秒` : `${seconds / 60}分钟`}到达率`, + width: '165px', + render: (row) => , + })), + { + key: 'state', + title: '状态 / 规则', + width: '140px', + render: (row) => ( + <> + + {stale ? '数据延迟' : states[row.status]} + +

+ {ruleSource(row.rule)} + {row.rule ? ` v${row.rule.version}` : ''} +

+ + ), + }, + { + key: 'detail', + title: '操作', + width: '110px', + render: (row) => ( + + ), + }, + ]; + const counts = summary?.rows ?? []; + const cards = [ + ['监控维度', counts.reduce((n, r) => n + r.dimensions, 0)], + ['异常维度', counts.filter((r) => r.status === 'abnormal').reduce((n, r) => n + r.dimensions, 0)], + [ + '样本不足', + counts + .filter((r) => ['sample_insufficient', 'unassessable'].includes(r.status)) + .reduce((n, r) => n + r.dimensions, 0), + ], + ['窗口提交量', counts.reduce((n, r) => n + Number(r.total), 0)], + ]; + const content = ( +
+
+ {cards.map(([label, value]) => ( +
+ {label} + {data ? Number(value).toLocaleString() : '—'} + {type === 'industry' ? '按通道发送尝试' : '按唯一业务短信'} +
+ ))} +
+
- + 评估时刻:{time(counts[0]?.evaluationAt)} +

+ 每{type === 'overall' ? '10' : '5'}分钟评估,提交窗口最近{type === 'overall' ? '30' : '5'}分钟 +

+ + 采集检查:{time(health?.checkedAt)} + {stale ? ' · 数据延迟或等待首次计算,暂停告警判断' : ' · 已完成采集'} +
- + update({ keyword: e.target.value, page: '1' })} + /> + { + setKind(e.target.value as typeof kind); + setPage(1); + setKeyword(''); + }} + /> + { + setKeyword(e.target.value); + setPage(1); + }} + /> + { + changeScope({}, e.target.checked); + }} + />{' '} + 配置个性规则 + + {custom && } + + )} + {error && ( +

+ {error} +

+ )} + {!loaded &&

正在加载规则…

} +
{ + dirtyRef.current = true; + setDirty(true); + }} + > + + setMin(e.target.value)} /> + {(type === 'overall' ? ['1分钟', '5分钟', '20分钟'] : ['5秒', '20秒', '1分钟']).map((label, i) => ( + setThresholds((values) => values.map((v, index) => (index === i ? e.target.value : v)))} + /> + ))} + setBad(e.target.value)} + /> + setGood(e.target.value)} + /> +
+

当前编辑版本:{version || '新规则'}。生效顺序:应用×签名 → 签名 → 应用 → 通用,整套覆盖。

+

+ 当前生效: + {matched.length + ? matched.map((r) => `${ruleSource(r)} v${r.version}(${time(r.effectiveAt)})`).join(' → ') + : '尚未配置'} +

+ {custom && version > 0 && ( + + )} + {type === 'overall' && + rules + .filter((r) => r.type === type && Object.keys(r.scope).length && !r.config.deleted) + .map((r) => ( +
+ + {ruleSource(r)} · {Object.values(r.scope).join(' / ')} · v{r.version} + + +
+ ))} +
+ + ); +} + +export function MonitorTargetsModal({ onClose }: { onClose: () => void }) { + const [targets, setTargets] = useState([]), + [error, setError] = useState(''), + [busy, setBusy] = useState(false), + [keyword, setKeyword] = useState(''); + useEffect(() => { + monitorApi + .targets() + .then(setTargets) + .catch((e) => setError(e.message)); + }, []); + async function toggle(t: Target) { + setBusy(true); + try { + await monitorApi.target(t, !t.enabled); + setTargets(await monitorApi.targets()); + setError(''); + } catch (e) { + setError(e instanceof Error ? e.message : '监控范围保存失败'); + } finally { + setBusy(false); + } + } + return ( + 关闭}> +
+

加入和移除仅影响行业质量监控,不改变通道路由或发送配置。下一周期生效。

+ setKeyword(e.target.value)} /> + {error && ( +

+ {error} +

+ )} + {targets + .filter((t) => t.name.includes(keyword)) + .map((t) => ( +
+
+ {t.name} +

+ {t.status === 'active' ? '业务启用' : '业务停用'} · {time(t.effectiveFrom)} +

+
+ {t.enabled ? '已纳管' : '未纳管'} + +
+ ))} +
+
+ ); +} + +export function ChannelEnrollmentPrompt({ + channel, + onClose, +}: { + channel: { id: string; name: string }; + onClose: () => void; +}) { + const [error, setError] = useState(''), + [busy, setBusy] = useState(false); + async function enroll() { + setBusy(true); + try { + const targets = await monitorApi.targets(); + const current = targets.find((t) => t.id === channel.id); + if (!current) throw new Error('通道已保存,但当前没有监控管理权限或通道不可用'); + if (!current.enabled) await monitorApi.target(current, true); + onClose(); + } catch (e) { + setError(e instanceof Error ? e.message : '通道已保存,加入监控失败,可重试'); + } finally { + setBusy(false); + } + } + return ( + + + + + } + > +

{channel.name}已保存。是否加入行业通道监控?

+

关闭后仍可在发送监控中加入。复制通道不会继承原通道的监控设置。

+ {error && ( +

+ {error},可重试加入,无需重新创建通道。 +

+ )} +
+ ); +} diff --git a/src/apps/admin/sending-monitor/MonitorDetails.tsx b/src/apps/admin/sending-monitor/MonitorDetails.tsx new file mode 100644 index 0000000..e1abf0f --- /dev/null +++ b/src/apps/admin/sending-monitor/MonitorDetails.tsx @@ -0,0 +1,337 @@ +import { lazy, Suspense, useCallback, useEffect, useMemo, useState } from 'react'; +import type { EChartsOption } from 'echarts'; +import { Link } from 'react-router-dom'; +import { Button, Modal, Select, Table, Tag, type TableColumn } from '@/components/ui'; +import { + monitorApi, + names, + ruleSource, + states, + time, + title, + type Alert, + type Metric, + type Page, + type Snapshot, +} from './monitorApi'; + +const TrendChart = lazy(() => import('@/components/ui/Chart').then((m) => ({ default: m.Chart }))); +const closeReasons: Record = { + recovered: '已连续恢复', + data_corrected: '迟到数据修正', + disabled: '规则已停用', + rule_changed: '规则版本变化', + enrollment_removed: '已移出监控', +}; +export function Rate({ value }: { value: Metric }) { + return ( +
+ {value.rate === null ? '—' : `${value.rate.toFixed(2)}%`} + + {value.success.toLocaleString()} / {value.mature.toLocaleString()} 成熟 + + + {value.observing} 条观察中{value.insufficient ? ' · 样本不足' : ''} + {value.bad ? ' · 低于下限' : ''} + +
+ ); +} +export function MonitorHistory({ row, onClose, alert }: { row: Snapshot; onClose: () => void; alert?: Alert }) { + const [range, setRange] = useState('2h'), + [items, setItems] = useState([]), + [error, setError] = useState(''); + useEffect(() => { + let live = true; + monitorApi + .history(row, range) + .then((r) => { + if (live) { + setItems(r); + setError(''); + } + }) + .catch((e) => { + if (live) setError(e.message); + }); + return () => { + live = false; + }; + }, [row, range]); + const chartOption = useMemo( + () => ({ + tooltip: { trigger: 'axis', confine: true }, + legend: { type: 'scroll', bottom: 0 }, + grid: { left: 45, right: 20, top: 20, bottom: 65 }, + xAxis: { + type: 'category', + data: items.map((item) => + new Date(item.evaluationAt).toLocaleTimeString('zh-CN', { + timeZone: 'Asia/Shanghai', + hour: '2-digit', + minute: '2-digit', + }), + ), + }, + yAxis: { type: 'value', min: 0, max: 100, axisLabel: { formatter: '{value}%' } }, + series: row.metrics.metrics.flatMap((m, i) => [ + { + name: `${m.seconds}秒到达率`, + type: 'line' as const, + connectNulls: false, + data: items.map((item) => item.metrics.metrics[i]?.rate ?? null), + showSymbol: false, + }, + { + name: `${m.seconds}秒下限`, + type: 'line' as const, + step: 'end' as const, + connectNulls: false, + data: items.map((item) => (item.rule?.config.enabled ? (item.metrics.metrics[i]?.threshold ?? null) : null)), + showSymbol: false, + lineStyle: { type: 'dashed' as const }, + }, + ]), + }), + [items, row.metrics.metrics], + ); + return ( + 关闭}> +
+

{title(row.dimensions)}

+ {alert && ( +
+

+ 告警开始:{time(alert.openedAt)} · 最近评估:{time(alert.lastEvaluatedAt)} · {states[alert.state]}{' '} + {closeReasons[alert.closeReason ?? ''] ?? ''} +

+

+ 最差快照:{time(alert.worst.evaluationAt)} ·{' '} + {alert.worst.metrics.metrics + .map( + (m) => + `${m.seconds}秒 ${m.rate === null ? '—' : m.rate.toFixed(2) + '%'}(${m.success}/${m.mature})`, + ) + .join(';')} +

+
+ )} + + 查看该窗口样本(沿用短信详情权限,样本保留72小时) + +

+ 统计窗口:{time(row.windowFrom)} 至 {time(row.evaluationAt)}(不含结束时刻) +

+

+ 观察截止:{time(row.observedUntil)} · {row.stage === 'final' ? '定稿' : '初评'} · 修订 {row.revision} +

+

+ {ruleSource(row.rule)}{' '} + {row.rule + ? `v${row.rule.version},最低成熟 ${row.rule.config.minSamples} 条,下限 ${row.rule.config.thresholds.map((v) => (v === null ? '未启用' : `${v}%`)).join(' / ')}` + : '等待配置阈值'} +

+

+ 不可评估 {row.metrics.unassessable} 条。{row.completeness.reason} +

+ ({ value, label: states[value] })), + ]} + onChange={(e) => { + setState(e.target.value); + setPage(1); + }} + /> + {error && ( +

+ {error} +

+ )} + + + {detail && setDetail(null)} />} + + ); +} diff --git a/src/apps/admin/sending-monitor/monitorApi.ts b/src/apps/admin/sending-monitor/monitorApi.ts new file mode 100644 index 0000000..462780d --- /dev/null +++ b/src/apps/admin/sending-monitor/monitorApi.ts @@ -0,0 +1,138 @@ +import { request, withQuery } from '@/api/core/httpClient'; +export type MonitorType = 'industry' | 'verification' | 'overall'; +export type Scope = { tenantId?: string; applicationId?: string; signatureId?: string }; +export type Dimensions = Scope & { + tenantName?: string; + applicationName?: string; + signatureName?: string; + channelId?: string; + channelName?: string; + carrier?: string; +}; +export type Config = { + enabled: boolean; + minSamples: number; + thresholds: (number | null)[]; + consecutiveBad: number; + consecutiveGood: number; + deleted?: boolean; +}; +export type Rule = { + id: string; + ruleId?: string; + type: MonitorType; + scope: Scope; + config: Config; + version: number; + effectiveAt: string; +}; +export type Metric = { + seconds: number; + success: number; + mature: number; + observing: number; + rate: number | null; + threshold: number | null; + insufficient: boolean; + bad: boolean; +}; +export type Snapshot = { + id: string; + type: MonitorType; + dimensionKey: string; + dimensions: Dimensions; + evaluationAt: string; + windowFrom: string; + observedUntil: string; + stage: string; + revision: number; + metrics: { total: number; unassessable: number; metrics: Metric[] }; + rule: Rule | null; + status: string; + completeness: { complete: boolean; reason?: string }; + computedAt: string; +}; +export type Alert = { + id: string; + type: MonitorType; + dimensionKey: string; + dimensions: Dimensions; + state: string; + openedAt: string; + lastEvaluatedAt: string; + closeReason?: string; + latest: Snapshot; + worst: Snapshot; + unread: boolean; +}; +export type Page = { items: T[]; total: number; page: number; pageSize: number }; +export type Target = { + id: string; + name: string; + enabled: boolean; + version: number; + status: string; + effectiveFrom?: string; +}; +export const names = { industry: '行业通道', verification: '验证码', overall: '整体兜底' }; +export const states: Record = { + abnormal: '异常', + normal: '正常', + sample_insufficient: '样本不足', + stale: '数据延迟', + unassessable: '不可评估', + unconfigured: '未配置', + disabled: '规则停用', + no_data: '无发送', + active: '活动', + recovered: '已恢复', + closed: '已关闭', +}; +export const time = (value?: string) => + value ? new Date(value).toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai', hour12: false }) : '—'; +export const title = (d: Dimensions) => + d.channelName + ? `${d.channelName} · ${{ mobile: '移动', unicom: '联通', telecom: '电信' }[d.carrier ?? ''] ?? '未知运营商'}` + : `${d.tenantName ?? '未识别企业'} / ${d.applicationName ?? '未识别应用'} / ${d.signatureName ?? '未识别签名'}`; +export const ruleSource = (r: Rule | null) => + !r + ? '尚未配置' + : r.scope.signatureId && r.scope.applicationId + ? '应用×签名' + : r.scope.signatureId + ? '签名规则' + : r.scope.applicationId + ? '应用规则' + : '通用规则'; +export const monitorApi = { + rows: (q: Record, signal?: AbortSignal) => + request< + Page & { health: { data: { complete: boolean; checkedAt: string; pendingReceipts: number } } | null } + >(withQuery('/admin/sending-monitor/rows', q), { signal }), + overview: (type: MonitorType) => + request<{ + rows: { status: string; dimensions: number; total: string; evaluationAt: string; computedAt: string }[]; + }>(withQuery('/admin/sending-monitor/overview', { type })), + history: (row: Snapshot, range: string) => + request( + withQuery('/admin/sending-monitor/history', { type: row.type, dimensionId: row.dimensionKey, range }), + ), + targets: () => request('/admin/sending-monitor/targets'), + target: (t: Target, enabled: boolean) => + request(`/admin/sending-monitor/targets/${t.id}`, { + method: 'PUT', + body: JSON.stringify({ enabled, version: t.version }), + }), + rules: () => request('/admin/sending-monitor/rules'), + saveRule: (r: Pick) => + request('/admin/sending-monitor/rules', { method: 'POST', body: JSON.stringify(r) }), + effective: (type: MonitorType, scope: Scope) => + request(withQuery('/admin/sending-monitor/effective-rule', { type, ...scope })), + options: (kind: string, scope: Scope, keyword: string, page: number) => + request<{ id: string; name: string }[]>( + withQuery('/admin/sending-monitor/options', { kind, ...scope, keyword, page }), + ), + alerts: (page: number, state: string, signal?: AbortSignal) => + request>(withQuery('/admin/sending-monitor/alerts', { page, state }), { signal }), + read: (id: string) => request(`/admin/sending-monitor/alerts/${id}/read`, { method: 'POST' }), +}; diff --git a/src/apps/report-notifications/ReportNotificationsPage.test.tsx b/src/apps/report-notifications/ReportNotificationsPage.test.tsx new file mode 100644 index 0000000..0b5ec0b --- /dev/null +++ b/src/apps/report-notifications/ReportNotificationsPage.test.tsx @@ -0,0 +1,59 @@ +import { render, screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { beforeEach, expect, it, vi } from 'vitest'; +import { ReportNotificationsPage } from './ReportNotificationsPage'; +const api = vi.hoisted(() => ({ request: vi.fn() })); +vi.mock('@/api/core/httpClient', () => api); +const hour = { + id: 'hour-1', + tenantName: '验收企业', + hour: '2026-09-06T04:00:00Z', + revision: 3, + signatureCount: 2, + drainageCount: 1, + unread: true, +}; +beforeEach(() => { + vi.clearAllMocks(); + api.request.mockImplementation((path: string) => + path.includes('hour-1') + ? Promise.resolve({ + hour, + items: [ + { + id: 'event-1', + reportType: 'signature', + signatureName: '验收签名', + targetName: '验收签名', + createdAt: hour.hour, + }, + ], + total: 1, + page: 1, + pageSize: 20, + }) + : Promise.resolve({ items: [hour], total: 1, page: 1, pageSize: 20 }), + ); +}); +it('uses the client API and explicitly marks the displayed revision read', async () => { + const user = userEvent.setup(); + render(); + await user.click(await screen.findByRole('button', { name: '查看消息' })); + await user.click(await screen.findByRole('button', { name: '标记已读' })); + await waitFor(() => + expect(api.request).toHaveBeenCalledWith('/client/report-notifications/hour-1/read', { + method: 'POST', + body: JSON.stringify({ revision: 3 }), + }), + ); + expect(api.request.mock.calls.some(([path]) => String(path).startsWith('/admin/'))).toBe(false); +}); +it('reports a failed read without pretending success', async () => { + const user = userEvent.setup(); + render(); + await user.click(await screen.findByRole('button', { name: '查看消息' })); + api.request.mockRejectedValueOnce(new Error('标记失败')); + await user.click(await screen.findByRole('button', { name: '标记已读' })); + expect(await screen.findByRole('alert')).toHaveTextContent('标记失败'); + expect(screen.getByRole('button', { name: '标记已读' })).toBeEnabled(); +}); diff --git a/src/apps/report-notifications/ReportNotificationsPage.tsx b/src/apps/report-notifications/ReportNotificationsPage.tsx new file mode 100644 index 0000000..1c4f129 --- /dev/null +++ b/src/apps/report-notifications/ReportNotificationsPage.tsx @@ -0,0 +1,216 @@ +import { useCallback, useEffect, useState } from 'react'; +import { Breadcrumb, Button, Modal, Table, Tag, type TableColumn } from '@/components/ui'; +import { request } from '@/api/core/httpClient'; +import './report-notifications.css'; + +type Hour = { + id: string; + tenantName: string; + hour: string; + revision: number; + signatureCount: number; + drainageCount: number; + unread: boolean; +}; +type Event = { + id: string; + reportType: string; + applicationName?: string; + signatureName: string; + targetName: string; + createdAt: string; +}; +type Page = { items: T[]; total: number; page: number; pageSize: number }; +const time = (value: string) => new Date(value).toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai', hour12: false }); + +export function ReportNotificationsPage({ portal = 'client' }: { portal?: 'admin' | 'client' }) { + const [data, setData] = useState>({ items: [], total: 0, page: 1, pageSize: 20 }); + const [page, setPage] = useState(1); + const [unread, setUnread] = useState(false); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(''); + const [detail, setDetail] = useState<{ hour: Hour; items: Event[]; total: number; page: number } | null>(null); + const [detailError, setDetailError] = useState(''); + const [busy, setBusy] = useState(false); + const base = `/${portal}/report-notifications`; + const load = useCallback( + async (signal?: AbortSignal) => { + setLoading(true); + try { + const result = await request>(`${base}?page=${page}&unread=${unread}`, { signal }); + setData(result); + setError(''); + } catch (e) { + if (!signal?.aborted) setError(e instanceof Error ? e.message : '通知加载失败'); + } finally { + if (!signal?.aborted) setLoading(false); + } + }, + [base, page, unread], + ); + useEffect(() => { + const controller = new AbortController(); + void load(controller.signal); + return () => controller.abort(); + }, [load]); + async function open(item: Hour, detailPage = 1) { + setBusy(true); + setDetailError(''); + try { + const result = await request<{ hour: Hour } & Page>(`${base}/${item.id}?page=${detailPage}`); + setDetail({ ...result, hour: { ...result.hour, unread: item.unread } }); + } catch (e) { + setError(e instanceof Error ? e.message : '详情加载失败'); + } finally { + setBusy(false); + } + } + async function markRead() { + if (!detail) return; + setBusy(true); + try { + await request(`${base}/${detail.hour.id}/read`, { + method: 'POST', + body: JSON.stringify({ revision: detail.hour.revision }), + }); + setDetail({ ...detail, hour: { ...detail.hour, unread: false } }); + window.dispatchEvent(new Event('cmpp-report-notification-refresh')); + await load(); + } catch (e) { + setDetailError(e instanceof Error ? e.message : '标记已读失败'); + } finally { + setBusy(false); + } + } + const columns: TableColumn[] = [ + { + key: 'read', + title: '状态', + width: '90px', + render: (row) => {row.unread ? '未读' : '已读'}, + }, + { key: 'tenant', title: '企业', width: '220px', render: (row) => row.tenantName }, + { key: 'hour', title: '汇总时段(北京时间)', width: '220px', render: (row) => `${time(row.hour)} 起一小时` }, + { + key: 'content', + title: '报备状态变化消息', + width: '300px', + render: (row) => ( +
+ {row.signatureCount} 个签名、{row.drainageCount} 条引流信息已具备三网全国通道报备成功记录 +
+ ), + }, + { + key: 'actions', + title: '操作', + width: '110px', + render: (row) => ( + + ), + }, + ]; + return ( +
+
+ + +
+

+ 从三网均无全国通道报备成功,变为移动、联通、电信均有全国通道报备成功时通知。按企业与北京时间小时汇总。 +

+ + {error && ( +

+ {error} +

+ )} + {loading ? ( +

正在加载通知…

+ ) : ( +
+
+ {data.total === 0 &&

暂无报备状态变化通知

} + + )} +
+ + 共 {data.total} 条 · 第 {page} 页 + + + +
+ {detail && ( + setDetail(null)} + footer={ + <> + + + + } + > +
+

+ {detail.hour.tenantName} · {time(detail.hour.hour)} · 版本 {detail.hour.revision} +

+ {detailError && ( +

+ {detailError} +

+ )} + {detail.items.map((item) => ( +
+ 三网报备成功 + + {item.reportType === 'signature' ? '签名' : '引流信息'}:{item.targetName} + + + 应用:{item.applicationName ?? '未关联应用'} · 签名:{item.signatureName} + + +
+ ))} +
+ 共 {detail.total} 项 + + +
+
+
+ )} + + ); +} diff --git a/src/apps/report-notifications/report-notifications.css b/src/apps/report-notifications/report-notifications.css new file mode 100644 index 0000000..5ee31a3 --- /dev/null +++ b/src/apps/report-notifications/report-notifications.css @@ -0,0 +1,15 @@ +.report-notifications-page .report-notifications-page__pager { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + gap: 12px; +} + +.report-notifications-page .report-notifications-page__event { + display: grid; + gap: 8px; + padding: 16px 0; + border-bottom: 1px solid var(--color-border); + overflow-wrap: anywhere; +} diff --git a/src/layouts/AdminLayout.test.tsx b/src/layouts/AdminLayout.test.tsx index 415379f..487ed83 100644 --- a/src/layouts/AdminLayout.test.tsx +++ b/src/layouts/AdminLayout.test.tsx @@ -67,11 +67,19 @@ it('separates retirement counts from security/monitoring and leaves audit counts await user.click(screen.getByRole('button', { name: '预警通知' })); const alerts = screen.getByRole('menu', { name: '预警中心' }); expect(within(alerts).queryByRole('menuitem', { name: /签名清退/ })).not.toBeInTheDocument(); - expect(within(alerts).getAllByRole('menuitem')).toHaveLength(2); + expect(within(alerts).getAllByRole('menuitem')).toHaveLength(3); + expect(within(alerts).getByRole('menuitem', { name: /发送质量告警/ })).toHaveAttribute( + 'href', + '/admin/monitor?tab=alerts', + ); expect(within(alerts).getByText('1 条严重告警待处置')).toBeVisible(); await user.click(screen.getByRole('button', { name: '报备任务提醒' })); expect(screen.queryByRole('menu', { name: '预警中心' })).not.toBeInTheDocument(); const reporting = screen.getByRole('menu', { name: '报备任务提醒' }); + expect(within(reporting).getByRole('menuitem', { name: /报备状态变化通知/ })).toHaveAttribute( + 'href', + '/admin/report-records?tab=readiness', + ); expect(within(reporting).getByRole('menuitem', { name: /签名清退预警/ })).toHaveAttribute( 'href', '/admin/signature-retirement', diff --git a/src/layouts/AdminLayout.tsx b/src/layouts/AdminLayout.tsx index f06f0e1..1374e42 100644 --- a/src/layouts/AdminLayout.tsx +++ b/src/layouts/AdminLayout.tsx @@ -34,6 +34,7 @@ import { adminApi, type PendingAuditCounts } from '@/api/adminApi'; import { getLastUserActivityAt, readSession, type LoginSession } from '@/api/session'; import { AppShell } from '@/layouts/AppShell'; import { PortalSessionBoundary } from '@/layouts/PortalSessionBoundary'; +import { request } from '@/api/core/httpClient'; const EMPTY_PENDING_AUDITS: Omit = { enterpriseCertifications: 0, @@ -54,6 +55,8 @@ export function AdminLayout() { function AdminAuthenticatedLayout({ session }: { session: LoginSession }) { const [pendingAudits, setPendingAudits] = useState(EMPTY_PENDING_AUDITS); const [retirementUnreadCount, setRetirementUnreadCount] = useState(0); + const [reportSummary, setReportSummary] = useState({ count: 0, unavailable: false }); + const [monitorSummary, setMonitorSummary] = useState({ count: 0, unavailable: false }); const [securityAlertSummary, setSecurityAlertSummary] = useState({ count: 0, criticalCount: 0 }); const [infrastructureAlertSummary, setInfrastructureAlertSummary] = useState({ count: 0, criticalCount: 0 }); const [sessionLocked, setSessionLocked] = useState(Boolean(session.locked)); @@ -72,8 +75,20 @@ function AdminAuthenticatedLayout({ session }: { session: LoginSession }) { adminApi.getSignatureRetirementUnreadCount(), adminApi.getSecurityNotificationSummary(), adminApi.getInfrastructureMonitoringNotificationSummary(), + request<{ count: number }>('/admin/report-notifications/summary'), + request<{ count: number; unavailable?: boolean }>('/admin/sending-monitor/notification-summary'), ]) - .then(([audits, retirement, security, infrastructure]) => { + .then(([audits, retirement, security, infrastructure, reporting, monitor]) => { + setMonitorSummary((previous) => + monitor.status === 'fulfilled' + ? { count: monitor.value.count, unavailable: Boolean(monitor.value.unavailable) } + : { ...previous, unavailable: true }, + ); + setReportSummary((previous) => + reporting.status === 'fulfilled' + ? { count: reporting.value.count, unavailable: false } + : { ...previous, unavailable: true }, + ); setPendingAudits(audits.status === 'fulfilled' ? audits.value : EMPTY_PENDING_AUDITS); setRetirementUnreadCount(retirement.status === 'fulfilled' ? retirement.value.count : 0); setSecurityAlertSummary(security.status === 'fulfilled' ? security.value : { count: 0, criticalCount: 0 }); @@ -100,6 +115,8 @@ function AdminAuthenticatedLayout({ session }: { session: LoginSession }) { window.addEventListener('focus', onFocus); window.addEventListener('cmpp-audit-count-refresh', onAuditRefresh); window.addEventListener('cmpp-retirement-count-refresh', onAuditRefresh); + window.addEventListener('cmpp-report-notification-refresh', onAuditRefresh); + window.addEventListener('cmpp-monitor-alert-refresh', onAuditRefresh); window.addEventListener('cmpp-security-alert-count-refresh', onAuditRefresh); window.addEventListener('cmpp-infrastructure-alert-count-refresh', onAuditRefresh); return () => { @@ -107,6 +124,8 @@ function AdminAuthenticatedLayout({ session }: { session: LoginSession }) { window.removeEventListener('focus', onFocus); window.removeEventListener('cmpp-audit-count-refresh', onAuditRefresh); window.removeEventListener('cmpp-retirement-count-refresh', onAuditRefresh); + window.removeEventListener('cmpp-report-notification-refresh', onAuditRefresh); + window.removeEventListener('cmpp-monitor-alert-refresh', onAuditRefresh); window.removeEventListener('cmpp-security-alert-count-refresh', onAuditRefresh); window.removeEventListener('cmpp-infrastructure-alert-count-refresh', onAuditRefresh); }; @@ -123,6 +142,12 @@ function AdminAuthenticatedLayout({ session }: { session: LoginSession }) { userRole="平台管理员" onSessionLockedChange={setSessionLocked} reportingNotifications={[ + { + label: '报备状态变化通知', + count: reportSummary.count, + description: reportSummary.unavailable ? '消息计数暂不可用,请重试' : '按企业与小时汇总的未读消息', + to: '/admin/report-records?tab=readiness', + }, { label: '签名清退预警', count: retirementUnreadCount, @@ -136,6 +161,12 @@ function AdminAuthenticatedLayout({ session }: { session: LoginSession }) { }, ]} alertNotifications={[ + { + label: '发送质量告警', + count: monitorSummary.count, + description: monitorSummary.unavailable ? '告警计数暂不可用,请重试' : '未读活动发送质量告警', + to: '/admin/monitor?tab=alerts', + }, { label: '安全检测与封禁', count: securityAlertSummary.count, diff --git a/src/layouts/AppShell.tsx b/src/layouts/AppShell.tsx index 8ec8959..42d38f6 100644 --- a/src/layouts/AppShell.tsx +++ b/src/layouts/AppShell.tsx @@ -86,6 +86,21 @@ export function AppShell({ const [closedSections, setClosedSections] = useState>({}); const [userMenuOpen, setUserMenuOpen] = useState(false); const [openNotice, setOpenNotice] = useState<'alerts' | 'reporting' | 'audits' | null>(null); + useEffect(() => { + if (!openNotice) return; + const key = (event: KeyboardEvent) => { + if (event.key === 'Escape') setOpenNotice(null); + }; + const outside = (event: PointerEvent) => { + if (event.target instanceof Element && !event.target.closest('.notice-menu-wrap')) setOpenNotice(null); + }; + window.addEventListener('keydown', key); + document.addEventListener('pointerdown', outside); + return () => { + window.removeEventListener('keydown', key); + document.removeEventListener('pointerdown', outside); + }; + }, [openNotice]); const [passwordModalOpen, setPasswordModalOpen] = useState(false); const [currentPassword, setCurrentPassword] = useState(''); const [newPassword, setNewPassword] = useState(''); diff --git a/src/layouts/ClientLayout.tsx b/src/layouts/ClientLayout.tsx index c48be06..dd9bcb0 100644 --- a/src/layouts/ClientLayout.tsx +++ b/src/layouts/ClientLayout.tsx @@ -5,7 +5,6 @@ import { Home, MessageSquareText, PenLine, - ReceiptText, Cable, ShieldCheck, Users, @@ -14,7 +13,11 @@ import { AppShell } from '@/layouts/AppShell'; import { PortalSessionBoundary } from '@/layouts/PortalSessionBoundary'; export function ClientLayout() { - return {(session) => }; + return ( + + {(session) => } + + ); } function ClientAuthenticatedLayout({ session }: { session: import('@/api/session').LoginSession }) { @@ -30,7 +33,10 @@ function ClientAuthenticatedLayout({ session }: { session: import('@/api/session navSections={[ { title: '概览', - items: [{ label: '工作台', to: '/client', icon: Home }], + items: [ + { label: '工作台', to: '/client', icon: Home }, + { label: '消息通知', to: '/client/notifications', icon: MessageSquareText }, + ], }, { title: '短信业务', @@ -52,9 +58,7 @@ function ClientAuthenticatedLayout({ session }: { session: import('@/api/session }, { title: '账户', - items: [ - { label: '账户余额', to: '/client/billing', icon: BadgeDollarSign }, - ], + items: [{ label: '账户余额', to: '/client/billing', icon: BadgeDollarSign }], }, { title: '系统管理', diff --git a/src/routes/AppRoutes.tsx b/src/routes/AppRoutes.tsx index 8c1966a..8b9a335 100644 --- a/src/routes/AppRoutes.tsx +++ b/src/routes/AppRoutes.tsx @@ -71,6 +71,10 @@ const AdminGatewaySubmitExceptionsPage = lazyNamed( ); const AdminHome = lazyNamed(() => import('@/apps/admin/AdminHome'), 'AdminHome'); const AdminMonitorPage = lazyNamed(() => import('@/apps/admin/AdminMonitorPage'), 'AdminMonitorPage'); +const ReportNotificationsPage = lazyNamed( + () => import('@/apps/report-notifications/ReportNotificationsPage'), + 'ReportNotificationsPage', +); const AdminPhoneSegmentsPage = lazyNamed(() => import('@/apps/admin/AdminPhoneSegmentsPage'), 'AdminPhoneSegmentsPage'); const AdminRechargeRecordsPage = lazyNamed( () => import('@/apps/admin/AdminRechargeRecordsPage'), @@ -173,6 +177,7 @@ export function AppRoutes() { } /> } /> }> + } /> } /> } /> } /> diff --git a/tools/deploy/production-deploy.sh b/tools/deploy/production-deploy.sh index 57244d7..3a04cc9 100644 --- a/tools/deploy/production-deploy.sh +++ b/tools/deploy/production-deploy.sh @@ -129,7 +129,7 @@ PROD_ADMIN_CREDENTIAL_FILE="$ADMIN_CREDENTIAL_FILE" node tools/deploy/ensure-pro chmod 600 "$ADMIN_CREDENTIAL_FILE" || true echo "[deploy] Ensuring runtime log directories" -install -d -m 0755 "$APP_DIR/logs/api" "$APP_DIR/logs/send-worker" "$APP_DIR/logs/report-material-worker" "$APP_DIR/logs/submit-outbox" "$APP_DIR/logs/gateway-callback" "$APP_DIR/logs/protocol-log-worker" "$APP_DIR/logs/gateway" +install -d -m 0755 "$APP_DIR/logs/api" "$APP_DIR/logs/send-worker" "$APP_DIR/logs/report-material-worker" "$APP_DIR/logs/sending-monitor" "$APP_DIR/logs/submit-outbox" "$APP_DIR/logs/gateway-callback" "$APP_DIR/logs/protocol-log-worker" "$APP_DIR/logs/gateway" echo "[deploy] Installing split API and send-worker services" node_bin="$(command -v node)" @@ -175,6 +175,31 @@ RestartSec=5 StandardOutput=append:$APP_DIR/logs/report-material-worker/stdout.log StandardError=append:$APP_DIR/logs/report-material-worker/stderr.log +[Install] +WantedBy=multi-user.target +EOF +cat >/etc/systemd/system/cmpp-sending-monitor.service < `qa-message-${n}`); + await projectMessages(db, ids); + const facts = (await db.query(`SELECT count(*)::int count FROM "SendingMonitorFact"`)).rows[0].count; + assert.equal(facts, 8); + checks++; + await projectMessages(db, ids); + assert.equal((await db.query(`SELECT count(*)::int count FROM "SendingMonitorFact"`)).rows[0].count, facts); + checks++; + await evaluateWindow(db, 'industry', t, false, true); + const key = keyOf([channel, 'mobile']); + let row = (await db.query(`SELECT * FROM "SendingMonitorSnapshot" WHERE "dimensionKey"=$1`, [key])).rows[0]; + assert.equal(row.metrics.total, 4); + assert.deepEqual( + row.metrics.metrics.map((m) => [m.success, m.mature, m.observing]), + [ + [2, 3, 1], + [3, 3, 1], + [3, 3, 1], + ], + ); + checks++; + await evaluateWindow(db, 'industry', t, true, true); + row = (await db.query(`SELECT * FROM "SendingMonitorSnapshot" WHERE "dimensionKey"=$1`, [key])).rows[0]; + assert.equal(row.revision, 2); + assert.deepEqual( + row.metrics.metrics.map((m) => [m.success, m.mature, m.observing]), + [ + [2, 4, 0], + [3, 4, 0], + [4, 4, 0], + ], + ); + checks++; + assert.equal( + (await db.query(`SELECT count(*)::int n FROM "SendingMonitorAlert" WHERE state='active'`)).rows[0].n, + 1, + ); + checks++; + await evaluateWindow(db, 'industry', t, true, true); + assert.equal( + (await db.query(`SELECT revision FROM "SendingMonitorSnapshot" WHERE "dimensionKey"=$1`, [key])).rows[0].revision, + 2, + ); + checks++; + await evaluateWindow(db, 'verification', t, true, true); + const business = (await db.query(`SELECT metrics,status FROM "SendingMonitorSnapshot" WHERE type='verification'`)) + .rows[0]; + assert.equal(business.metrics.total, 4); + assert.equal(business.status, 'unconfigured'); + checks++; + + // Removing enrollment in a later period cannot rewrite a historical window. + await db.query(`INSERT INTO "SendingMonitorTargetVersion" VALUES($1,2,false,$2,'qa')`, [ + channel, + new Date(t.getTime() + 300000), + ]); + await evaluateWindow(db, 'industry', t, true, true); + assert.equal( + (await db.query(`SELECT metrics FROM "SendingMonitorSnapshot" WHERE "dimensionKey"=$1`, [key])).rows[0].metrics + .total, + 4, + ); + checks++; + await db.query(`UPDATE "SmsSubmitRecord" SET "receiptRequested"=false WHERE id='qa-submit-0'`); + await projectMessages(db, ['qa-message-0']); + assert.equal( + (await db.query(`SELECT reason FROM "SendingMonitorFact" WHERE id='attempt:qa-submit-0'`)).rows[0].reason, + 'receipt_not_requested', + ); + checks++; + await db.query(`UPDATE "SmsSubmitRecord" SET "receiptRequested"=true WHERE id='qa-submit-0'`); + await db.query(`UPDATE "UpstreamReceiptInbox" SET "gatewayReceivedAt"=NULL WHERE id='qa-receipt-0'`); + await projectMessages(db, ['qa-message-0']); + assert.equal( + (await db.query(`SELECT reason FROM "SendingMonitorFact" WHERE id='attempt:qa-submit-0'`)).rows[0].reason, + 'missing_receipt_time', + ); + checks++; + const created = (await db.query(`SELECT min("createdAt") at FROM "ReportReadinessEvent"`)).rows[0].at; + assert( + Math.abs(created.getTime() - Date.now()) < 60000, + 'Notification timestamps must remain UTC under Asia/Shanghai session', + ); + checks++; + const drainage = ( + await db.query( + `SELECT id,"signatureId","tenantId" FROM "SmsDrainageInfo" WHERE "signatureId" IS NOT NULL LIMIT 1`, + ) + ).rows[0]; + if (drainage) { + const before = ( + await db.query(`SELECT count(*)::int n FROM "ReportReadinessEvent" WHERE "reportType"='drainage'`) + ).rows[0].n; + await db.query( + `INSERT INTO "ChannelSignatureReportTask" (id,"tenantId","signatureId","drainageItemId","reportType","channelId",carrier,"approvalScope",status,"updatedAt") VALUES($1,$2,$3,$4,'drainage',$5,NULL,'legacy_channel','approved',CURRENT_TIMESTAMP)`, + ['qa-drainage', drainage.tenantId, drainage.signatureId, drainage.id, channel], + ); + assert.equal( + (await db.query(`SELECT count(*)::int n FROM "ReportReadinessEvent" WHERE "reportType"='drainage'`)).rows[0].n, + before + 1, + ); + checks++; + } + await db.query('ROLLBACK'); + const leftover = (await db.query(`SELECT count(*)::int n FROM pg_namespace WHERE nspname=$1`, [schema])).rows[0].n; + assert.equal(leftover, 0); + checks++; + console.log( + JSON.stringify({ + passed: checks, + database: 'real PostgreSQL', + isolation: 'transaction schema rolled back', + smsSent: 0, + }), + ); + } catch (error) { + await db.query('ROLLBACK'); + throw error; + } finally { + await db.end(); + } +} +main().catch((error) => { + console.error(error.message); + process.exitCode = 1; +});