{"level":"info","timestamp":"2026-06-11T15:12:06.566Z","caller":"cmd/main.go:65","message":"Loading database connection URL from secret..."} {"level":"info","timestamp":"2026-06-11T15:12:06.582Z","caller":"cmd/main.go:172","message":"Connecting to PostgreSQL database..."} {"level":"info","timestamp":"2026-06-11T15:12:06.582Z","caller":"cmd/main.go:101","message":"Metrics server starting","address":":9090"} {"level":"info","timestamp":"2026-06-11T15:12:06.682Z","caller":"api_keys/db_driver.go:90","message":"Database schema applied","version":4} {"level":"info","timestamp":"2026-06-11T15:12:06.682Z","caller":"api_keys/db_driver.go:57","message":"Connected to PostgreSQL database (schema applied)"} {"level":"info","timestamp":"2026-06-11T15:12:06.788Z","caller":"cmd/main.go:193","message":"Resolved gateway internal host for access probes","host":"maas-default-gateway-openshift-default.openshift-ingress.svc.cluster.local"} {"level":"info","timestamp":"2026-06-11T15:12:06.801Z","caller":"cmd/main.go:134","message":"Server starting","address":":8443","secure":true} [GIN] 2026/06/11 - 15:12:13 | 200 | 62.967µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:12:18 | 200 | 63.546µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:12:23 | 200 | 35.723µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:12:28 | 200 | 40.162µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:12:33 | 200 | 32.145µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:12:38 | 200 | 37.226µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:12:43 | 200 | 33.845µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:12:43 | 200 | 32.22µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:12:48 | 200 | 33.492µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:12:53 | 200 | 48.453µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:12:53 | 200 | 39.308µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:12:58 | 200 | 41.426µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:13:03 | 200 | 38.829µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:13:03 | 200 | 38.585µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:13:08 | 200 | 41.413µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:13:13 | 200 | 39.567µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:13:13 | 200 | 52.397µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:13:18 | 200 | 33.93µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:13:23 | 200 | 41.675µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:13:23 | 200 | 44.415µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:13:28 | 200 | 35.697µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:13:33 | 200 | 32.648µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:13:33 | 200 | 38.963µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:13:38 | 200 | 45.563µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:13:43 | 200 | 38.078µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:13:43 | 200 | 41.107µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:13:48 | 200 | 39.138µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:13:53 | 200 | 46.464µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:13:53 | 200 | 47.646µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:13:58 | 200 | 36.717µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:14:03 | 200 | 40.733µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:14:03 | 200 | 47.863µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:14:08 | 200 | 39.688µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:14:13 | 200 | 44.983µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:14:13 | 200 | 42.213µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:14:18 | 200 | 55.86µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:14:23 | 200 | 55.911µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:14:23 | 200 | 54.543µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:14:28 | 200 | 50.592µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:14:33 | 200 | 48.337µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:14:33 | 200 | 54.971µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:14:38 | 200 | 50.361µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:14:43 | 200 | 52.861µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:14:43 | 200 | 36.617µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:14:48 | 200 | 39.969µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:14:53 | 200 | 39.691µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:14:53 | 200 | 33.118µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:14:58 | 200 | 36.153µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:15:03 | 200 | 31.651µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:15:03 | 200 | 31.44µs | 10.132.0.2 | GET "/health" {"level":"info","timestamp":"2026-06-11T15:15:04.868Z","caller":"api_keys/service.go:307","message":"Ephemeral key cleanup completed","deletedCount":0} [GIN] 2026/06/11 - 15:15:04 | 200 | 9.884742ms | 10.134.0.40 | POST "/internal/v1/api-keys/cleanup" [GIN] 2026/06/11 - 15:15:08 | 200 | 32.432µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:15:13 | 200 | 32.105µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:15:13 | 200 | 34.708µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:15:18 | 200 | 32.129µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:15:23 | 200 | 32.576µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:15:23 | 200 | 32.54µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:15:28 | 200 | 33.007µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:15:33 | 200 | 34.608µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:15:33 | 200 | 35.205µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:15:38 | 200 | 34.346µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:15:43 | 200 | 37.865µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:15:43 | 200 | 30.663µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:15:48 | 200 | 37.526µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:15:53 | 200 | 31.816µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:15:53 | 200 | 50.571µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:15:58 | 200 | 34.584µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:16:03 | 200 | 37.303µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:16:03 | 200 | 34.236µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:16:08 | 200 | 46.896µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:16:13 | 200 | 34.544µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:16:13 | 200 | 31.621µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:16:18 | 200 | 33.481µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:16:23 | 200 | 34.019µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:16:23 | 200 | 34.001µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:16:28 | 200 | 35.345µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:16:33 | 200 | 32.536µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:16:33 | 200 | 33.85µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:16:38 | 200 | 63.43µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:16:43 | 200 | 34.818µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:16:43 | 200 | 36.343µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:16:48 | 200 | 31.866µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:16:53 | 200 | 32.567µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:16:53 | 200 | 33.083µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:16:58 | 200 | 33.989µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:17:03 | 200 | 33.909µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:17:03 | 200 | 33.512µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:17:08 | 200 | 34.626µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:17:13 | 200 | 41.849µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:17:13 | 200 | 33.499µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:17:18 | 200 | 33.479µs | 10.132.0.2 | GET "/health" {"level":"error","timestamp":"2026-06-11T15:17:22.456Z","caller":"token/handler.go:111","message":"Missing or empty tenant header","header":"X-MaaS-Tenant","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:111\ngithub.com/gin-gonic/gin.(*Context).Next\n\tgithub.com/gin-gonic/gin@v1.10.1/context.go:185\nmain.serve.NewMiddleware.func8\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/metrics/middleware.go:20\ngithub.com/gin-gonic/gin.(*Context).Next\n\tgithub.com/gin-gonic/gin@v1.10.1/context.go:185\ngithub.com/gin-gonic/gin.LoggerWithConfig.func1\n\tgithub.com/gin-gonic/gin@v1.10.1/logger.go:249\ngithub.com/gin-gonic/gin.(*Context).Next\n\tgithub.com/gin-gonic/gin@v1.10.1/context.go:185\nmain.serve.RequestID.func7\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/middleware/request_id.go:57\ngithub.com/gin-gonic/gin.(*Context).Next\n\tgithub.com/gin-gonic/gin@v1.10.1/context.go:185\ngithub.com/gin-gonic/gin.CustomRecoveryWithWriter.func1\n\tgithub.com/gin-gonic/gin@v1.10.1/recovery.go:102\ngithub.com/gin-gonic/gin.(*Context).Next\n\tgithub.com/gin-gonic/gin@v1.10.1/context.go:185\ngithub.com/gin-gonic/gin.(*Engine).handleHTTPRequest\n\tgithub.com/gin-gonic/gin@v1.10.1/gin.go:644\ngithub.com/gin-gonic/gin.(*Engine).ServeHTTP\n\tgithub.com/gin-gonic/gin@v1.10.1/gin.go:600\nnet/http.serverHandler.ServeHTTP\n\tnet/http/server.go:3340\nnet/http.(*conn).serve\n\tnet/http/server.go:2109"} [GIN] 2026/06/11 - 15:17:22 | 500 | 143.637µs | 34.228.250.194 | POST "/v1/api-keys" | Authorization=present X-Api-Key=absent Cookie=absent Set-Cookie=absent [GIN] 2026/06/11 - 15:17:23 | 200 | 34.106µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:17:23 | 200 | 33.365µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:17:28 | 200 | 32.807µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:17:33 | 200 | 37.242µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:17:33 | 200 | 35.148µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:17:38 | 200 | 31.599µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:17:43 | 200 | 49.134µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:17:43 | 200 | 31.883µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:17:48 | 200 | 32.505µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:17:53 | 200 | 34.206µs | 10.132.0.2 | GET "/health" [GIN] 2026/06/11 - 15:17:53 | 200 | 35.08µs | 10.132.0.2 | GET "/health" {"level":"error","timestamp":"2026-06-11T15:17:55.060Z","caller":"token/handler.go:111","message":"Missing or empty tenant header","header":"X-MaaS-Tenant","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:111\ngithub.com/gin-gonic/gin.(*Context).Next\n\tgithub.com/gin-gonic/gin@v1.10.1/context.go:185\nmain.serve.NewMiddleware.func8\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/metrics/middleware.go:20\ngithub.com/gin-gonic/gin.(*Context).Next\n\tgithub.com/gin-gonic/gin@v1.10.1/context.go:185\ngithub.com/gin-gonic/gin.LoggerWithConfig.func1\n\tgithub.com/gin-gonic/gin@v1.10.1/logger.go:249\ngithub.com/gin-gonic/gin.(*Context).Next\n\tgithub.com/gin-gonic/gin@v1.10.1/context.go:185\nmain.serve.RequestID.func7\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/middleware/request_id.go:57\ngithub.com/gin-gonic/gin.(*Context).Next\n\tgithub.com/gin-gonic/gin@v1.10.1/context.go:185\ngithub.com/gin-gonic/gin.CustomRecoveryWithWriter.func1\n\tgithub.com/gin-gonic/gin@v1.10.1/recovery.go:102\ngithub.com/gin-gonic/gin.(*Context).Next\n\tgithub.com/gin-gonic/gin@v1.10.1/context.go:185\ngithub.com/gin-gonic/gin.(*Engine).handleHTTPRequest\n\tgithub.com/gin-gonic/gin@v1.10.1/gin.go:644\ngithub.com/gin-gonic/gin.(*Engine).ServeHTTP\n\tgithub.com/gin-gonic/gin@v1.10.1/gin.go:600\nnet/http.serverHandler.ServeHTTP\n\tnet/http/server.go:3340\nnet/http.(*conn).serve\n\tnet/http/server.go:2109"} [GIN] 2026/06/11 - 15:17:55 | 500 | 93.278µs | 34.228.250.194 | POST "/v1/api-keys" | Authorization=present X-Api-Key=absent Cookie=absent Set-Cookie=absent [GIN] 2026/06/11 - 15:17:58 | 200 | 38.678µs | 10.132.0.2 | GET "/health"