diff --git a/apps/asset-registry/cmd/main.go b/apps/asset-registry/cmd/main.go new file mode 100644 index 0000000..1a181e4 --- /dev/null +++ b/apps/asset-registry/cmd/main.go @@ -0,0 +1,58 @@ +package main + +import ( + "context" + "log" + "os" + "os/signal" + "strings" + "syscall" + + "github.com/jackc/pgx/v5/pgxpool" + "github.com/pahuldeepp/grainguard/apps/asset-registry/internal/application" + assetkafka "github.com/pahuldeepp/grainguard/apps/asset-registry/internal/kafka" +) + +func main() { + brokers := strings.Split(getEnv("KAFKA_BROKERS", "kafka:9092"), ",") + cmdTopic := getEnv("COMMANDS_TOPIC", "device.commands") + eventTopic := getEnv("EVENTS_TOPIC", "device.events") + groupID := getEnv("KAFKA_GROUP_ID", "asset-registry") + dbURL := getEnv( + "DATABASE_URL", + "postgres://postgres:postgres@pgbouncer-write:5432/grainguard?sslmode=disable", + ) + + log.Println("[asset-registry] starting") + + pool, err := pgxpool.New(context.Background(), dbURL) + if err != nil { + log.Fatalf("[asset-registry] db connect failed: %v", err) + } + defer pool.Close() + + publisher := assetkafka.NewEventPublisher(brokers, eventTopic) + handler := application.NewCommandHandler(pool, publisher) + consumer := assetkafka.NewCommandConsumer(brokers, cmdTopic, groupID, handler) + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + go consumer.Start(ctx) + + log.Println("[asset-registry] running") + + quit := make(chan os.Signal, 1) + signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) + <-quit + + log.Println("[asset-registry] shutting down") + cancel() +} + +func getEnv(key, fallback string) string { + if v := os.Getenv(key); v != "" { + return v + } + return fallback +} diff --git a/apps/load-generator/Dockerfile b/apps/load-generator/Dockerfile new file mode 100644 index 0000000..7a6f766 --- /dev/null +++ b/apps/load-generator/Dockerfile @@ -0,0 +1,11 @@ +FROM golang:1.25-alpine AS builder +WORKDIR /app +COPY go.mod go.sum ./ +RUN go mod download +COPY . . +RUN go build -o load-generator ./apps/load-generator/main.go + +FROM alpine:3.19 +WORKDIR /app +COPY --from=builder /app/load-generator . +CMD ["./load-generator"]