Fix P2 SaaS compilation: wire dispatchNotifications correctly, add P1/P2 Dockerfiles
- P2 processor: use correct dispatchNotifications signature (channels, notification, severity) - P2 processor: pass pool to withTenant, fix implicit any types - P1 Dockerfile: multi-stage Rust build for proxy/api/worker binaries - P2 agent Dockerfile: multi-stage Go build - P2 SaaS package-lock.json generated - All 6 products now compile cleanly
This commit is contained in:
@@ -1,13 +1,12 @@
|
||||
# --- Build stage ---
|
||||
# P2: dd0c/drift agent — Go binary
|
||||
FROM golang:1.22-alpine AS builder
|
||||
WORKDIR /app
|
||||
COPY go.mod go.sum ./
|
||||
COPY go.mod go.sum* ./
|
||||
RUN go mod download
|
||||
COPY . .
|
||||
RUN CGO_ENABLED=0 GOOS=linux go build -o /drift ./cmd/drift
|
||||
RUN CGO_ENABLED=0 go build -o dd0c-drift ./cmd/main.go
|
||||
|
||||
# --- Runtime stage ---
|
||||
FROM alpine:3.19
|
||||
FROM alpine:3.20
|
||||
RUN apk add --no-cache ca-certificates
|
||||
COPY --from=builder /drift /usr/local/bin/drift
|
||||
ENTRYPOINT ["drift"]
|
||||
COPY --from=builder /app/dd0c-drift /usr/local/bin/
|
||||
ENTRYPOINT ["dd0c-drift"]
|
||||
|
||||
7102
products/02-iac-drift-detection/saas/package-lock.json
generated
Normal file
7102
products/02-iac-drift-detection/saas/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -59,14 +59,30 @@ export async function registerProcessorRoutes(app: FastifyInstance) {
|
||||
// Trigger notification if drift score exceeds threshold
|
||||
if (report.drift_score > 0) {
|
||||
try {
|
||||
const { DriftNotificationService } = await import('../notifications/service.js');
|
||||
const notifService = new DriftNotificationService(pool);
|
||||
await notifService.notifyDrift(tenantId, {
|
||||
stackName: report.stack_name,
|
||||
driftScore: report.drift_score,
|
||||
totalResources: report.total_resources,
|
||||
driftedResources: report.drifted_resources?.length ?? 0,
|
||||
const { dispatchNotifications, shouldNotify } = await import('../notifications/service.js');
|
||||
const { withTenant } = await import('../data/db.js');
|
||||
|
||||
const maxSeverity = report.drifted_resources?.some((r: any) => r.severity === 'critical') ? 'critical'
|
||||
: report.drifted_resources?.some((r: any) => r.severity === 'high') ? 'high' : 'medium';
|
||||
|
||||
// Fetch tenant notification channels
|
||||
const channelResult = await withTenant(pool, tenantId, async (client: any) => {
|
||||
return client.query('SELECT * FROM notification_channels WHERE enabled = true');
|
||||
});
|
||||
const channels = channelResult.rows.filter((ch: any) => shouldNotify(ch, report.drift_score, maxSeverity));
|
||||
|
||||
if (channels.length > 0) {
|
||||
await dispatchNotifications(channels, {
|
||||
tenantId,
|
||||
stackName: report.stack_name,
|
||||
driftScore: report.drift_score,
|
||||
totalResources: report.total_resources,
|
||||
totalDrifted: report.drifted_resources?.length ?? 0,
|
||||
criticalCount: report.drifted_resources?.filter((r: any) => r.severity === 'critical').length ?? 0,
|
||||
highCount: report.drifted_resources?.filter((r: any) => r.severity === 'high').length ?? 0,
|
||||
reportUrl: `https://drift.dd0c.dev/reports/${report.stack_fingerprint}`,
|
||||
}, maxSeverity);
|
||||
}
|
||||
} catch (err) {
|
||||
app.log.warn({ tenantId, error: (err as Error).message }, 'Notification dispatch failed (non-fatal)');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user