- add rabbitmq-certs-secret.sh helper to create the server cert secret
- add rabbitmq-plugins-config.yaml ConfigMap enabling ssl auth, management,
prometheus, and web dispatch plugins
- rename rabbitmq Deployment from `eventrt-rabbitmq` to `rabbitmq`
- document the secret-creation script in deploy.md
- add imagePullPolicy: IfNotPresent to all k8s Deployments, DaemonSet
(grafana, jaeger, loki, rabbitmq, redis, promtail)
- migrate wg.Add(1)/go/defer wg.Done() pattern to wg.Go() (Go 1.25+)
in logger/loki_syncer.go and task/worker.go
- simplify redundant map existence check before delete in diagram/graph.go
- update deploy.md to reflect pg PVC size (6Gi) and resource limits
- rename all K8s services to xxx-service convention and update
all configmap references (postgres, mongodb, loki, jaeger)
- add explicit command: ["/app/modelrt"] to deployment to prevent
args from being treated as the executable (no ENTRYPOINT in
Dockerfile)
- set deploy_env to development to bypass Redis empty-password
guard in non-production Minikube environment
- fix GormLogger Info/Warn/Error to use fmt.Sprintf(msg, data...)
so GORM printf-style messages are formatted correctly and avoid
json: unsupported type: func() time.Time serialization panic
- expand pg PVC storage from 2Gi to 6Gi
- rename loop variable msg to task in PushTaskToRabbitMQ for clarity
- align comment indentation in queue_producer.go
- add 3-stage build table (builder/certs/scratch) with image size note
- add build-arg USER_ID override example in section 5.1
- add section 5.1.1 with smoke-test commands (size check, inspect, dry
run, full start)
- add workflow for loading pre-built local images into Minikube
directly
- bump builder base image from golang:1.25-alpine to
golang:1.26-alpine
- normalize inline Dockerfile comments to lowercase
- remove example config COPY from final scratch stage
- lowercase first letter of all logger.Info/Warn/Error message strings
in task/worker.go, task/retry_queue.go, task/handler_factory.go,
task/metrics_logger.go, task/retry_manager.go, task/queue_producer.go,
task/initializer.go, task/test_task.go, and main.go
- fix inline comments in main.go that mixed Chinese and uppercase English
- align Dockerfile comment casing with project convention
- replace interface{} with any across ~30 files for Go 1.18+ style
- adopt for-range-over-int loops in place of explicit index loops
- use maps.Copy from stdlib to replace manual map copy loops
- use min() builtin for exponential backoff delay cap in retry_manager
- add MongoDB 7.0 K8s manifests (StatefulSet, Service, PVC, Secret)
- document PostgreSQL and MongoDB deploy steps in deploy.md with SSH tunnel port mappings
- bind postgres.password to POSTGRES_PASSWORD env var via viper BindEnv
- bind service.secret_key to SERVICE_SECRET_KEY env var via viper BindEnv
- upgrade builder base image from golang:1.24-alpine to golang:1.25-alpine
- add split PostgreSQL K8s manifests for ConfigMap, Service, PVC, and StatefulSet
- expose PostgreSQL through NodePort for local Minikube access
- replace deploy.md LaTeX text syntax with Markdown inline code formatting
- keep deployment documentation rendering stable in Wiki.js and Markdown viewers
- add *Skip variants (logSkip, makeLogFieldsSkip, getLoggerCallerInfoSkip)
so wrapper functions report the true call site, not logger internals
- switch GormLogger.Trace to use ErrorSkip/WarnSkip/InfoSkip with extraSkip=1
so SQL log lines point to GORM caller rather than the logger facade
- pass postgresDBClient instead of tx to GetFullMeasurementSet in main
- run 5 independent DB queries concurrently via errgroup.WithContext
- add ctx parameter and bind db with WithContext for cancellation support
- replace silent error swallowing (if err == nil) with wrapped error returns
- promote golang.org/x/sync to direct dependency in go.mod
- add LokiConfig and batching lokiSyncer for dev-mode direct log push
- refactor zap logger to support mode-aware encoding and K8s pod fields
- fix RabbitMQ shutdown race: move CloseRabbitProxy to defer so channel
closes before connection (prevents 504 error on Ctrl+C)
- wrap MsgChan with EventMessage to carry per-cycle trace carrier
- create new root OTel span per computation cycle linked to startup span,
giving each cycle an independent traceID with startup as reference
- rename TaskParams interface to Params in task/base_task.go for brevity - remove debug fmt.Println/Printf statements from graph.go and handler_factory.go
- fix is_local flag from false to true for existing test components in deploy.md - add 6 new test component records (ns4-ns8) to deploy seed data
- fix params lost in RabbitMQ transit by threading them through PublishTask/PublishTaskWithRetry
- fix UpdateTaskErrorInfo not setting status=FAILED on async_task
- fix UpdateAsyncTaskResultWithError silently skipping when no result row exists (UPDATE → upsert)
- sync task failure to async_task_result in updateTaskWithError
- remove taskType from AsyncTaskHandler.Execute interface; rename TaskHandler → AsyncTaskHandler
- replace CompositeHandler with direct factory.GetHandler dispatch via worker.dispatch()
- use constructors (NewXxxHandler) for handler registration instead of zero-value literals
- consolidate TaskType/TaskStatus/UnifiedTaskType into task/types.go; delete types_v2.go
- extract BaseTask/TaskParams into task/base_task.go
- add TopologyAnalysisHandler.Execute() with 5-phase BFS reachability
check between start/end component UUIDs; support CheckInService flag
to skip out-of-service nodes during traversal
- carry task params through RabbitMQ message (TaskQueueMessage.Params)
instead of re-querying DB in handler; update TaskHandler.Execute
interface and all handler signatures accordingly
- fix BuildMultiBranchTree UUIDFrom condition bug; return nodeMap for
O(1) lookup; add QueryTopologicByStartUUID for directed traversal
- add QueryBayByUUID/QueryBaysByUUIDs and
QueryComponentsInServiceByUUIDs (two-column select) to database layer
- add diagram.FindPath via LCA algorithm for tree path reconstruction
- move initTracerProvider to middleware.InitTracerProvider; add
OtelConfig struct to ModelRTConfig for endpoint configuration
- update topology analysis params to start/end_component_uuid +
check_in_service; remove dead topology init code
- introduce typed traceCtxKey to prevent context key collisions (staticcheck fix)
- inject B3 trace values into c.Request.Context() in StartTrace middleware
so handlers using c.Request.Context() carry trace info
- create startup trace context in main.go, replacing context.TODO()
- propagate HTTP traceID/spanID through TaskQueueMessage into RabbitMQ
worker, linking HTTP request → publish → execution on the same traceID
- fix GORM logger null traceID by binding ctx to AutoMigrate and queries
via db.WithContext(ctx)
- thread ctx through handler factory to fix null traceID in startup logs
- replace per-request RabbitMQ producer with channel-based
PushTaskToRabbitMQ goroutine; restrict Swagger to non-production
Split monolithic async_task_handler.go into separate handlers:
- async_task_cancel_handler.go: Handles task cancellation
- async_task_create_handler.go: Handles task creation
- async_task_progress_update_handler.go: Handles progress updates
- async_task_result_detail_handler.go: Handles result details
- async_task_result_query_handler.go: Handles result queries
- async_task_status_update_handler.go: Handles status updates
This improves code organization and maintainability by separating concerns.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Create task/types_v2.go with unified task type definitions and interfaces
* Add UnifiedTaskType and UnifiedTaskStatus constants
* Define Task:Params interface for parameter validation and serialization
* Define UnifiedTask interface as base for all task implementations
* Add BaseTask for common task functionality