[GIN] 2026/04/20 - 15:16:48 | 200 | 30.547µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:16:53 | 200 | 26.866µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:16:58 | 200 | 24.606µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:16:58 | 200 | 29.886µs | 10.133.0.2 | GET "/health" {"level":"warn","timestamp":"2026-04-20T15:16:59.843Z","caller":"api_keys/service.go:130","message":"Subscription selection failed when creating API key","user":"system:serviceaccount:models-as-a-service:e2e-sa-user","requestedSubscription":"e2e-test-other-subscription","error":"access denied to requested subscription"} {"level":"error","timestamp":"2026-04-20T15:16:59.843Z","caller":"api_keys/handler.go:189","message":"Failed to create API key","error":"access denied to requested subscription","stacktrace":"github.com/opendatahub-io/models-as-a-service/maas-api/internal/api_keys.(*Handler).CreateAPIKey\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/api_keys/handler.go:189\ngithub.com/gin-gonic/gin.(*Context).Next\n\tgithub.com/gin-gonic/gin@v1.10.1/context.go:185\nmain.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:121\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.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\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/04/20 - 15:16:59 | 400 | 232.995µs | 100.64.0.4 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:17:03 | 200 | 42.891µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:17:08 | 200 | 27.25µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:17:08 | 200 | 30.071µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:17:13 | 200 | 31.347µs | 10.133.0.2 | GET "/health" {"level":"info","timestamp":"2026-04-20T15:17:17.240Z","caller":"api_keys/service.go:150","message":"Created API key","user":"system:serviceaccount:models-as-a-service:e2e-sa-group","groups":["system:serviceaccounts","system:serviceaccounts:models-as-a-service","system:authenticated"],"id":"bdc048a9-9676-444a-a77d-b3038dc1d6ed","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:17:17.240Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"bdc048a9-9676-444a-a77d-b3038dc1d6ed","keyPrefix":"sk-oai-1KZ25q2efqDF...","username":"system:serviceaccount:models-as-a-service:e2e-sa-group","groups":["system:serviceaccounts","system:serviceaccounts:models-as-a-service","system:authenticated"],"ephemeral":false} [GIN] 2026/04/20 - 15:17:17 | 201 | 2.234638ms | 100.64.0.2 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:17:17 | 200 | 720.349µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:17:17 | 200 | 167.504µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:17:18 | 200 | 24.951µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:17:18 | 200 | 27.342µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:17:23 | 200 | 32.677µs | 10.133.0.2 | GET "/health" {"level":"info","timestamp":"2026-04-20T15:17:26.320Z","caller":"api_keys/service.go:150","message":"Created API key","user":"system:serviceaccount:models-as-a-service:e2e-sa-group-auth-only","groups":["system:serviceaccounts","system:serviceaccounts:models-as-a-service","system:authenticated"],"id":"420fed12-91da-4a91-9419-9751ea645df3","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:17:26.320Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"420fed12-91da-4a91-9419-9751ea645df3","keyPrefix":"sk-oai-1aHOg0nMZeqV...","username":"system:serviceaccount:models-as-a-service:e2e-sa-group-auth-only","groups":["system:serviceaccounts","system:serviceaccounts:models-as-a-service","system:authenticated"],"ephemeral":false} [GIN] 2026/04/20 - 15:17:26 | 201 | 2.040695ms | 100.64.0.3 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:17:28 | 200 | 26.268µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:17:28 | 200 | 24.92µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:17:33 | 200 | 28.948µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:17:34 | 200 | 841.073µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:17:34 | 200 | 88.033µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:17:38 | 200 | 28.4µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:17:38 | 200 | 27.685µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:17:43 | 200 | 25.543µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:17:48 | 200 | 28.065µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:17:48 | 200 | 32.809µs | 10.133.0.2 | GET "/health" {"level":"info","timestamp":"2026-04-20T15:17:51.906Z","caller":"api_keys/service.go:150","message":"Created API key","user":"system:serviceaccount:models-as-a-service:e2e-sa-group-sub-only","groups":["system:serviceaccounts","system:serviceaccounts:models-as-a-service","system:authenticated"],"id":"462c53bf-ecc7-43de-a3f4-797fc589bb36","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:17:51.906Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"462c53bf-ecc7-43de-a3f4-797fc589bb36","keyPrefix":"sk-oai-1PJ3u42oKbVY...","username":"system:serviceaccount:models-as-a-service:e2e-sa-group-sub-only","groups":["system:serviceaccounts","system:serviceaccounts:models-as-a-service","system:authenticated"],"ephemeral":false} [GIN] 2026/04/20 - 15:17:51 | 201 | 2.047001ms | 100.64.0.2 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:17:51 | 200 | 487.495µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:17:51 | 200 | 110.99µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:17:53 | 200 | 27.319µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:17:58 | 200 | 29.039µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:17:58 | 200 | 31.46µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:18:03 | 200 | 30.34µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:18:08 | 200 | 26.86µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:18:08 | 200 | 25.9µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:18:13 | 200 | 36.097µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:18:18 | 200 | 25.784µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:18:18 | 200 | 25.558µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:18:23 | 200 | 35.034µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:18:28 | 200 | 26.684µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:18:28 | 200 | 26.19µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:18:33 | 200 | 25.179µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:18:38 | 200 | 32.706µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:18:38 | 200 | 26.285µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:18:43 | 200 | 25.564µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:18:48 | 200 | 27.407µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:18:48 | 200 | 23.769µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:18:53 | 200 | 33.124µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:18:58 | 200 | 30.393µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:18:58 | 200 | 29.69µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:19:03 | 200 | 27.511µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:19:08 | 200 | 24.844µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:19:08 | 200 | 30.96µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:19:13 | 200 | 40.024µs | 10.133.0.2 | GET "/health" {"level":"info","timestamp":"2026-04-20T15:19:17.639Z","caller":"api_keys/service.go:150","message":"Created API key","user":"system:serviceaccount:default:e2e-models-single-sub-sa","groups":["system:authenticated","system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"id":"09fa2dd5-7d67-4e85-b269-cbf3808f2603","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:19:17.639Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"09fa2dd5-7d67-4e85-b269-cbf3808f2603","keyPrefix":"sk-oai-R3TCYep8xBFu...","username":"system:serviceaccount:default:e2e-models-single-sub-sa","groups":["system:authenticated","system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"ephemeral":false} [GIN] 2026/04/20 - 15:19:17 | 201 | 10.838393ms | 100.64.0.4 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:19:18 | 200 | 25.564µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:19:18 | 200 | 26.944µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:19:23 | 200 | 28.543µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:19:28 | 200 | 41.887µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:19:28 | 200 | 28.398µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:19:33 | 200 | 23.861µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:19:38 | 200 | 32.264µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:19:38 | 200 | 25.066µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:19:43 | 200 | 24.14µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:19:47 | 200 | 1.570276ms | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:19:47 | 200 | 93.881µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:19:47 | 200 | 467.271µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:19:47 | 200 | 471.544µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:19:47 | 200 | 100.895µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:19:47 | 200 | 20.308412ms | 100.64.0.3 | GET "/v1/models" [GIN] 2026/04/20 - 15:19:48 | 200 | 24.12µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:19:48 | 200 | 37.383µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:19:53 | 200 | 35.198µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:19:58 | 200 | 33.859µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:19:58 | 200 | 34.501µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:20:03 | 200 | 32.664µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:20:04 | 200 | 110.621µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:20:04 | 200 | 14.237742ms | 100.64.0.4 | GET "/v1/models" [GIN] 2026/04/20 - 15:20:08 | 200 | 38.054µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:20:08 | 200 | 53.774µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:20:13 | 200 | 38.59µs | 10.133.0.2 | GET "/health" {"level":"info","timestamp":"2026-04-20T15:20:13.494Z","caller":"api_keys/service.go:150","message":"Created API key","user":"system:serviceaccount:default:e2e-models-empty-header-sa","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"id":"25bc3cce-8227-4d65-9149-23463f0969a1","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:20:13.494Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"25bc3cce-8227-4d65-9149-23463f0969a1","keyPrefix":"sk-oai-1AQOnGcXHXWu...","username":"system:serviceaccount:default:e2e-models-empty-header-sa","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"ephemeral":false} [GIN] 2026/04/20 - 15:20:13 | 201 | 1.962392ms | 100.64.0.2 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:20:18 | 200 | 31.409µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:20:18 | 200 | 36.853µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:20:21 | 200 | 908.513µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:20:21 | 200 | 491.061µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:20:21 | 200 | 119.805µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:20:21 | 200 | 10.782938ms | 100.64.0.4 | GET "/v1/models" {"level":"info","timestamp":"2026-04-20T15:20:22.033Z","caller":"api_keys/service.go:150","message":"Created API key","user":"system:serviceaccount:default:e2e-models-filtered-sa","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"id":"26e90873-edac-4c1a-b1ee-aef282c1ee8c","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:20:22.033Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"26e90873-edac-4c1a-b1ee-aef282c1ee8c","keyPrefix":"sk-oai-1b5mrlz5kC26...","username":"system:serviceaccount:default:e2e-models-filtered-sa","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"ephemeral":false} [GIN] 2026/04/20 - 15:20:22 | 201 | 1.806661ms | 100.64.0.3 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:20:23 | 200 | 35.701µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:20:28 | 200 | 35.129µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:20:28 | 200 | 36.677µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:20:30 | 200 | 850.453µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:20:30 | 200 | 364.144µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:20:30 | 200 | 109.891µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:20:30 | 200 | 7.355384ms | 100.64.0.2 | GET "/v1/models" [GIN] 2026/04/20 - 15:20:30 | 200 | 356.274µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:20:30 | 200 | 303.522µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:20:30 | 200 | 76.926µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:20:30 | 200 | 6.882289ms | 100.64.0.3 | GET "/v1/models" {"level":"info","timestamp":"2026-04-20T15:20:30.948Z","caller":"api_keys/service.go:150","message":"Created API key","user":"system:serviceaccount:default:e2e-models-dedup-sa","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"id":"5c5cc4a6-a025-4c1d-ab1a-cd45dde61935","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:20:30.948Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"5c5cc4a6-a025-4c1d-ab1a-cd45dde61935","keyPrefix":"sk-oai-UeiZJDuBUEu5...","username":"system:serviceaccount:default:e2e-models-dedup-sa","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"ephemeral":false} [GIN] 2026/04/20 - 15:20:30 | 201 | 1.7291ms | 100.64.0.4 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:20:33 | 200 | 40.616µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:20:38 | 200 | 32.42µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:20:38 | 200 | 32.889µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:20:38 | 200 | 842.572µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:20:38 | 200 | 390.193µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:20:38 | 200 | 108.896µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:20:38 | 200 | 9.149204ms | 100.64.0.2 | GET "/v1/models" [GIN] 2026/04/20 - 15:20:43 | 200 | 34.244µs | 10.133.0.2 | GET "/health" {"level":"info","timestamp":"2026-04-20T15:20:48.043Z","caller":"api_keys/service.go:150","message":"Created API key","user":"system:serviceaccount:default:e2e-models-diff-refs-sa","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"id":"95ff25d8-9e29-4a35-830d-20655b701a20","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:20:48.043Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"95ff25d8-9e29-4a35-830d-20655b701a20","keyPrefix":"sk-oai-12PgilkoXhHC...","username":"system:serviceaccount:default:e2e-models-diff-refs-sa","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"ephemeral":false} [GIN] 2026/04/20 - 15:20:48 | 201 | 1.929474ms | 100.64.0.3 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:20:48 | 200 | 30.253µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:20:48 | 200 | 35.495µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:20:53 | 200 | 32.958µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:20:56 | 200 | 777.909µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:20:56 | 200 | 485.693µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:20:56 | 200 | 107.45µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:20:56 | 200 | 406.322µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:20:56 | 200 | 142.842µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:20:56 | 200 | 21.78786ms | 100.64.0.4 | GET "/v1/models" [GIN] 2026/04/20 - 15:20:58 | 200 | 32.291µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:20:58 | 200 | 31.892µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:21:03 | 200 | 36.276µs | 10.133.0.2 | GET "/health" {"level":"info","timestamp":"2026-04-20T15:21:05.193Z","caller":"api_keys/service.go:150","message":"Created API key","user":"system:serviceaccount:default:e2e-models-distinct-sa","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"id":"b4095722-f64b-458a-8f25-3760f667c8fb","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:21:05.193Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"b4095722-f64b-458a-8f25-3760f667c8fb","keyPrefix":"sk-oai-zIkVtprBkVMU...","username":"system:serviceaccount:default:e2e-models-distinct-sa","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"ephemeral":false} [GIN] 2026/04/20 - 15:21:05 | 201 | 1.997126ms | 100.64.0.3 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:21:08 | 200 | 31.919µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:21:08 | 200 | 37.816µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:21:13 | 200 | 757.517µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:21:13 | 200 | 411.467µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:21:13 | 200 | 208.702µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:21:13 | 200 | 10.090511ms | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:21:13 | 200 | 121.589µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:21:13 | 200 | 34.190051ms | 100.64.0.4 | GET "/v1/models" [GIN] 2026/04/20 - 15:21:13 | 200 | 34.98µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:21:18 | 200 | 45.365µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:21:18 | 200 | 34.408µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:21:23 | 200 | 35.195µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:21:28 | 200 | 37.351µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:21:28 | 200 | 36.638µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:21:29 | 200 | 115.428µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:21:29 | 200 | 132.848µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:21:29 | 200 | 127.942µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:21:29 | 200 | 32.830388ms | 100.64.0.2 | GET "/v1/models" [GIN] 2026/04/20 - 15:21:33 | 200 | 31.116µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:21:38 | 200 | 40.269µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:21:38 | 200 | 34.423µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:21:43 | 200 | 35.89µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:21:46 | 200 | 120.372µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:21:46 | 200 | 12.89986ms | 100.64.0.4 | GET "/v1/models" [GIN] 2026/04/20 - 15:21:48 | 200 | 38.584µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:21:48 | 200 | 45.054µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:21:53 | 200 | 38.861µs | 10.133.0.2 | GET "/health" {"level":"info","timestamp":"2026-04-20T15:21:55.887Z","caller":"api_keys/service.go:150","message":"Created API key","user":"system:serviceaccount:default:e2e-empty-models-sa","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"id":"0c0ba8eb-d70a-49fa-a47a-1a9e314fbe1c","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:21:55.887Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"0c0ba8eb-d70a-49fa-a47a-1a9e314fbe1c","keyPrefix":"sk-oai-15knknS6R903...","username":"system:serviceaccount:default:e2e-empty-models-sa","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"ephemeral":false} [GIN] 2026/04/20 - 15:21:55 | 201 | 3.995608ms | 100.64.0.2 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:21:58 | 200 | 46.065µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:21:58 | 200 | 36.044µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:22:03 | 200 | 42.46µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:22:03 | 200 | 900.422µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:22:03 | 200 | 4.129079ms | 100.64.0.3 | GET "/v1/models" {"level":"info","timestamp":"2026-04-20T15:22:04.523Z","caller":"api_keys/service.go:150","message":"Created API key","user":"system:serviceaccount:default:e2e-models-schema-test-sa","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"id":"651dfafa-9e9b-4352-9d47-5466adc286ec","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:22:04.523Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"651dfafa-9e9b-4352-9d47-5466adc286ec","keyPrefix":"sk-oai-1XJVvhm7HS7S...","username":"system:serviceaccount:default:e2e-models-schema-test-sa","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"ephemeral":false} [GIN] 2026/04/20 - 15:22:04 | 201 | 1.782949ms | 100.64.0.4 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:22:08 | 200 | 35.923µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:22:08 | 200 | 34.824µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:22:12 | 200 | 864.262µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:22:12 | 200 | 411.902µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:22:12 | 200 | 110.174µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:22:12 | 200 | 9.94939ms | 100.64.0.3 | GET "/v1/models" {"level":"info","timestamp":"2026-04-20T15:22:12.940Z","caller":"api_keys/service.go:150","message":"Created API key","user":"system:serviceaccount:default:e2e-models-metadata-sa","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"id":"28caf5f8-a9cf-42e8-bab9-efeacdd4b7ae","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:22:12.940Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"28caf5f8-a9cf-42e8-bab9-efeacdd4b7ae","keyPrefix":"sk-oai-1czZMM7RdLlN...","username":"system:serviceaccount:default:e2e-models-metadata-sa","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"ephemeral":false} [GIN] 2026/04/20 - 15:22:12 | 201 | 1.565905ms | 100.64.0.2 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:22:13 | 200 | 31.797µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:22:18 | 200 | 32.556µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:22:18 | 200 | 31.108µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:22:20 | 200 | 874.347µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:22:20 | 200 | 406.03µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:22:20 | 200 | 114.741µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:22:20 | 200 | 10.046161ms | 100.64.0.4 | GET "/v1/models" {"level":"info","timestamp":"2026-04-20T15:22:21.580Z","caller":"api_keys/service.go:150","message":"Created API key","user":"system:serviceaccount:models-as-a-service:e2e-api-key-scoped-sa","groups":["system:serviceaccounts","system:serviceaccounts:models-as-a-service","system:authenticated"],"id":"eb178571-a8b4-419a-859e-28803c5a5740","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:22:21.580Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"eb178571-a8b4-419a-859e-28803c5a5740","keyPrefix":"sk-oai-BJqlb5g0jQ1o...","username":"system:serviceaccount:models-as-a-service:e2e-api-key-scoped-sa","groups":["system:serviceaccounts","system:serviceaccounts:models-as-a-service","system:authenticated"],"ephemeral":false} [GIN] 2026/04/20 - 15:22:21 | 201 | 1.612229ms | 100.64.0.3 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:22:23 | 200 | 33.019µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:22:28 | 200 | 40.224µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:22:28 | 200 | 32.471µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:22:29 | 200 | 747.834µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:22:29 | 200 | 346.709µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:22:29 | 200 | 130.418µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:22:29 | 200 | 9.503617ms | 100.64.0.4 | GET "/v1/models" [GIN] 2026/04/20 - 15:22:33 | 200 | 48.717µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:22:38 | 200 | 35.957µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:22:38 | 200 | 31.735µs | 10.133.0.2 | GET "/health" {"level":"info","timestamp":"2026-04-20T15:22:38.659Z","caller":"api_keys/service.go:150","message":"Created API key","user":"system:serviceaccount:models-as-a-service:e2e-api-key-deleted-sub-sa","groups":["system:authenticated","system:serviceaccounts","system:serviceaccounts:models-as-a-service","system:authenticated"],"id":"a683fc39-3b17-4344-b09b-f27b003ff595","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:22:38.660Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"a683fc39-3b17-4344-b09b-f27b003ff595","keyPrefix":"sk-oai-TAnHjTT3H7FS...","username":"system:serviceaccount:models-as-a-service:e2e-api-key-deleted-sub-sa","groups":["system:authenticated","system:serviceaccounts","system:serviceaccounts:models-as-a-service","system:authenticated"],"ephemeral":false} [GIN] 2026/04/20 - 15:22:38 | 201 | 1.724234ms | 100.64.0.2 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:22:43 | 200 | 32.136µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:22:48 | 200 | 36.173µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:22:48 | 200 | 43.728µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:22:53 | 200 | 35.837µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:22:54 | 200 | 760.414µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:22:54 | 403 | 87.128µs | 100.64.0.2 | GET "/v1/models" [GIN] 2026/04/20 - 15:22:58 | 200 | 31.269µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:22:58 | 200 | 35.605µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:23:03 | 200 | 34.001µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:23:08 | 200 | 35.008µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:23:08 | 200 | 32.414µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:23:12 | 403 | 108.346µs | 100.64.0.3 | GET "/v1/models" [GIN] 2026/04/20 - 15:23:13 | 200 | 32.986µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:23:18 | 200 | 35.517µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:23:18 | 200 | 37.309µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:23:23 | 200 | 36.25µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:23:28 | 200 | 35.745µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:23:28 | 200 | 37.46µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:23:29 | 403 | 74.067µs | 100.64.0.3 | GET "/v1/models" [GIN] 2026/04/20 - 15:23:33 | 200 | 38.068µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:23:38 | 200 | 31.426µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:23:38 | 200 | 36.26µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:23:43 | 200 | 37.975µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:23:46 | 403 | 84.311µs | 100.64.0.4 | GET "/v1/models" [GIN] 2026/04/20 - 15:23:48 | 200 | 32.166µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:23:48 | 200 | 34.65µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:23:53 | 200 | 36.15µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:23:58 | 200 | 31.988µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:23:58 | 200 | 34.589µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:24:03 | 200 | 30.207µs | 10.133.0.2 | GET "/health" {"level":"info","timestamp":"2026-04-20T15:24:04.199Z","caller":"api_keys/service.go:150","message":"Created API key","user":"system:serviceaccount:default:e2e-api-key-ignores-header-sa","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"id":"29c7c608-9737-423b-9c9f-4635c2bd0c03","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:24:04.199Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"29c7c608-9737-423b-9c9f-4635c2bd0c03","keyPrefix":"sk-oai-174VWRQ1wEit...","username":"system:serviceaccount:default:e2e-api-key-ignores-header-sa","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"ephemeral":false} [GIN] 2026/04/20 - 15:24:04 | 201 | 1.904906ms | 100.64.0.2 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:24:08 | 200 | 32.209µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:24:08 | 200 | 32.219µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:24:12 | 200 | 772.502µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:24:12 | 200 | 609.143µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:24:12 | 200 | 240.723µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:24:12 | 200 | 23.688378ms | 100.64.0.4 | GET "/v1/models" [GIN] 2026/04/20 - 15:24:13 | 200 | 37.602µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:24:18 | 200 | 34.95µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:24:18 | 200 | 31.257µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:24:23 | 200 | 36.897µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:24:28 | 200 | 33.451µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:24:28 | 200 | 35.226µs | 10.133.0.2 | GET "/health" {"level":"info","timestamp":"2026-04-20T15:24:30.023Z","caller":"api_keys/service.go:150","message":"Created API key","user":"system:serviceaccount:default:e2e-multi-keys-sa","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"id":"860b4add-b331-494b-afaf-fffe922a496d","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:24:30.023Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"860b4add-b331-494b-afaf-fffe922a496d","keyPrefix":"sk-oai-QLXGA8WnT4gq...","username":"system:serviceaccount:default:e2e-multi-keys-sa","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"ephemeral":false} [GIN] 2026/04/20 - 15:24:30 | 201 | 2.078914ms | 100.64.0.2 | POST "/v1/api-keys" {"level":"info","timestamp":"2026-04-20T15:24:30.055Z","caller":"api_keys/service.go:150","message":"Created API key","user":"system:serviceaccount:default:e2e-multi-keys-sa","groups":["system:authenticated","system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"id":"c68bad02-26f5-4bd3-9b63-d7577a39edf2","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:24:30.055Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"c68bad02-26f5-4bd3-9b63-d7577a39edf2","keyPrefix":"sk-oai-wv4gnjEbfIdJ...","username":"system:serviceaccount:default:e2e-multi-keys-sa","groups":["system:authenticated","system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"ephemeral":false} [GIN] 2026/04/20 - 15:24:30 | 201 | 2.087791ms | 100.64.0.3 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:24:33 | 200 | 35.752µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:24:38 | 200 | 696.525µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:24:38 | 200 | 457.785µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:24:38 | 200 | 174.133µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:24:38 | 200 | 10.951152ms | 100.64.0.4 | GET "/v1/models" [GIN] 2026/04/20 - 15:24:38 | 200 | 423.315µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:24:38 | 200 | 381.376µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:24:38 | 200 | 156.003µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:24:38 | 200 | 11.030661ms | 100.64.0.4 | GET "/v1/models" [GIN] 2026/04/20 - 15:24:38 | 200 | 35.82µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:24:38 | 200 | 67.548µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:24:43 | 200 | 36.844µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:24:48 | 200 | 61.534µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:24:48 | 200 | 53.665µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:24:53 | 200 | 37.267µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:24:54 | 200 | 188.967µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:24:54 | 200 | 228.689µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:24:54 | 200 | 147.168µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:24:54 | 200 | 33.566864ms | 100.64.0.2 | GET "/v1/models" [GIN] 2026/04/20 - 15:24:58 | 200 | 34.146µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:24:58 | 200 | 38.108µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:25:03 | 200 | 31.701µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:25:08 | 200 | 34.056µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:25:08 | 200 | 31.239µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:25:11 | 200 | 175.579µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:25:11 | 200 | 13.297804ms | 100.64.0.2 | GET "/v1/models" [GIN] 2026/04/20 - 15:25:11 | 200 | 140.021µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:25:11 | 200 | 11.319963ms | 100.64.0.3 | GET "/v1/models" [GIN] 2026/04/20 - 15:25:13 | 200 | 32.672µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:25:18 | 200 | 34.863µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:25:18 | 200 | 39.423µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:25:23 | 200 | 35.693µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:25:28 | 200 | 52.011µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:25:28 | 200 | 42.362µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:25:33 | 200 | 32.94µs | 10.133.0.2 | GET "/health" {"level":"info","timestamp":"2026-04-20T15:25:36.940Z","caller":"api_keys/service.go:150","message":"Created API key","user":"system:serviceaccount:default:tester-regular-user","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"id":"d986ea0d-34e1-45d6-8100-34eb0e2049bc","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:25:36.940Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"d986ea0d-34e1-45d6-8100-34eb0e2049bc","keyPrefix":"sk-oai-1YVqbgZvg0S6...","username":"system:serviceaccount:default:tester-regular-user","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"ephemeral":false} [GIN] 2026/04/20 - 15:25:36 | 201 | 2.341826ms | 100.64.0.3 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:25:36 | 200 | 472.688µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:25:36 | 200 | 115µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:25:36 | 200 | 482.05µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:25:36 | 200 | 98.099µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:25:37 | 200 | 430.275µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:25:37 | 200 | 112.103µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:25:37 | 200 | 476.35µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:25:37 | 200 | 323.119µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:25:37 | 200 | 114.612µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:25:37 | 200 | 10.25842ms | 100.64.0.4 | GET "/v1/models" [GIN] 2026/04/20 - 15:25:38 | 200 | 36.48µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:25:38 | 200 | 36.017µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:25:43 | 200 | 40.516µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:25:48 | 200 | 31.201µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:25:48 | 200 | 39.262µs | 10.133.0.2 | GET "/health" {"level":"info","timestamp":"2026-04-20T15:25:52.749Z","caller":"api_keys/service.go:150","message":"Created API key","user":"system:serviceaccount:default:tester-regular-user","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"id":"e104d536-1f62-407e-834a-2d3cce63927a","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:25:52.749Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"e104d536-1f62-407e-834a-2d3cce63927a","keyPrefix":"sk-oai-yq8sCw5mvNd4...","username":"system:serviceaccount:default:tester-regular-user","groups":["system:serviceaccounts","system:serviceaccounts:default","system:authenticated"],"ephemeral":false} [GIN] 2026/04/20 - 15:25:52 | 201 | 2.044627ms | 100.64.0.2 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:25:53 | 200 | 562.29µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:25:53 | 200 | 137.809µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:25:53 | 200 | 61.232µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:25:58 | 200 | 34.934µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:25:58 | 200 | 33.368µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:26:03 | 200 | 32.036µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:26:08 | 200 | 39.179µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:26:08 | 200 | 32.49µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:26:13 | 200 | 36.117µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:26:18 | 200 | 31.995µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:26:18 | 200 | 35.719µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:26:23 | 200 | 29.939µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:26:28 | 200 | 30.855µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:26:28 | 200 | 31.712µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:26:30.945Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:26:30 | 500 | 89µs | 100.64.0.4 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:26:33 | 200 | 47.547µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:26:35.978Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:26:35 | 500 | 91.254µs | 100.64.0.4 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:26:38 | 200 | 33.328µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:26:38 | 200 | 42.848µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:26:41.009Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:26:41 | 500 | 114.397µs | 100.64.0.2 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:26:43 | 200 | 37.156µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:26:46.046Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:26:46 | 500 | 99.587µs | 100.64.0.3 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:26:48 | 200 | 34.435µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:26:48 | 200 | 33.744µs | 10.133.0.2 | GET "/health" {"level":"info","timestamp":"2026-04-20T15:26:51.093Z","caller":"api_keys/service.go:150","message":"Created API key","user":"","groups":["system:authenticated","Engineering","Project-Alpha"],"id":"6dcb3c26-dac8-4724-846d-4e4670378e2b","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:26:51.093Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"6dcb3c26-dac8-4724-846d-4e4670378e2b","keyPrefix":"sk-oai-11cAbCDpqHJe...","username":"","groups":["system:authenticated","Engineering","Project-Alpha"],"ephemeral":false} [GIN] 2026/04/20 - 15:26:51 | 201 | 11.348527ms | 100.64.0.2 | POST "/v1/api-keys" {"level":"error","timestamp":"2026-04-20T15:26:51.995Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:26:51 | 500 | 87.888µs | 100.64.0.2 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:26:53 | 200 | 32.143µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:26:57.023Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:26:57 | 500 | 83.533µs | 100.64.0.3 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:26:58 | 200 | 30.98µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:26:58 | 200 | 36.152µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:27:02.054Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:27:02 | 500 | 94.259µs | 100.64.0.4 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:27:03 | 200 | 33.563µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:27:07.088Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:27:07 | 500 | 93.9µs | 100.64.0.2 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:27:08 | 200 | 32.791µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:27:08 | 200 | 31.441µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:27:12.122Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:27:12 | 500 | 80.667µs | 100.64.0.3 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:27:13 | 200 | 35µs | 10.133.0.2 | GET "/health" {"level":"info","timestamp":"2026-04-20T15:27:17.159Z","caller":"api_keys/service.go:150","message":"Created API key","user":"","groups":["system:authenticated","Site-Reliability"],"id":"cb4e79e2-503c-4154-847b-8592762edd38","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:27:17.159Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"cb4e79e2-503c-4154-847b-8592762edd38","keyPrefix":"sk-oai-kKS7yjUoKR5U...","username":"","groups":["system:authenticated","Site-Reliability"],"ephemeral":false} [GIN] 2026/04/20 - 15:27:17 | 201 | 3.527658ms | 100.64.0.2 | POST "/v1/api-keys" {"level":"error","timestamp":"2026-04-20T15:27:17.556Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:27:17 | 500 | 93.617µs | 100.64.0.3 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:27:18 | 200 | 31.924µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:27:18 | 200 | 39.353µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:27:22.588Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:27:22 | 500 | 84.006µs | 100.64.0.4 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:27:23 | 200 | 30.697µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:27:27.624Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:27:27 | 500 | 86.348µs | 100.64.0.2 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:27:28 | 200 | 41.876µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:27:28 | 200 | 30.97µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:27:32.663Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:27:32 | 500 | 88.517µs | 100.64.0.2 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:27:33 | 200 | 35.433µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:27:37.699Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:27:37 | 500 | 110.82µs | 100.64.0.3 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:27:38 | 200 | 33.773µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:27:38 | 200 | 33.258µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:27:42.733Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:27:42 | 500 | 92.001µs | 100.64.0.3 | POST "/v1/api-keys" {"level":"error","timestamp":"2026-04-20T15:27:42.926Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:27:42 | 500 | 98.089µs | 100.64.0.4 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:27:43 | 200 | 32.92µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:27:47.955Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:27:47 | 500 | 82.186µs | 100.64.0.4 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:27:48 | 200 | 48.458µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:27:48 | 200 | 38.814µs | 10.133.0.2 | GET "/health" {"level":"info","timestamp":"2026-04-20T15:27:52.993Z","caller":"api_keys/service.go:150","message":"Created API key","user":"alice_lead","groups":["system:authenticated","Engineering","Project-Alpha"],"id":"b92ade70-4829-46a8-8693-2a3cc7cace18","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:27:52.993Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"b92ade70-4829-46a8-8693-2a3cc7cace18","keyPrefix":"sk-oai-1CdJ7g5RgQL4...","username":"alice_lead","groups":["system:authenticated","Engineering","Project-Alpha"],"ephemeral":false} [GIN] 2026/04/20 - 15:27:52 | 201 | 1.997875ms | 100.64.0.2 | POST "/v1/api-keys" {"level":"info","timestamp":"2026-04-20T15:27:53.025Z","caller":"api_keys/store_postgres.go:460","message":"Revoked API key","id":"b92ade70-4829-46a8-8693-2a3cc7cace18"} {"level":"info","timestamp":"2026-04-20T15:27:53.025Z","caller":"api_keys/handler.go:303","message":"Revoked API key","keyId":"b92ade70-4829-46a8-8693-2a3cc7cace18","revokedBy":"alice_lead"} [GIN] 2026/04/20 - 15:27:53 | 200 | 3.518783ms | 100.64.0.2 | DELETE "/v1/api-keys/b92ade70-4829-46a8-8693-2a3cc7cace18" [GIN] 2026/04/20 - 15:27:53 | 200 | 36.875µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:27:56 | 200 | 1.201726ms | 10.134.0.56 | POST "/internal/v1/api-keys/validate" {"level":"error","timestamp":"2026-04-20T15:27:56.533Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:27:56 | 500 | 85.518µs | 100.64.0.4 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:27:58 | 200 | 31.925µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:27:58 | 200 | 37.286µs | 10.133.0.2 | GET "/health" {"level":"info","timestamp":"2026-04-20T15:28:01.582Z","caller":"api_keys/service.go:150","message":"Created API key","user":"alice_lead","groups":["system:authenticated","Engineering","Project-Alpha"],"id":"948ae3af-61e0-451f-941e-7ff1c314970b","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:28:01.582Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"948ae3af-61e0-451f-941e-7ff1c314970b","keyPrefix":"sk-oai-JCr3HOjZL0xW...","username":"alice_lead","groups":["system:authenticated","Engineering","Project-Alpha"],"ephemeral":false} [GIN] 2026/04/20 - 15:28:01 | 201 | 2.014604ms | 100.64.0.4 | POST "/v1/api-keys" {"level":"error","timestamp":"2026-04-20T15:28:01.643Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:28:01 | 500 | 84.039µs | 100.64.0.2 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:28:03 | 200 | 30.076µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:28:06.675Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:28:06 | 500 | 109.91µs | 100.64.0.3 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:28:08 | 200 | 31.466µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:28:08 | 200 | 41.964µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:28:11.705Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:28:11 | 500 | 95.459µs | 100.64.0.4 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:28:13 | 200 | 38.787µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:28:16.742Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:28:16 | 500 | 84.078µs | 100.64.0.2 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:28:18 | 200 | 32.417µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:28:18 | 200 | 32.6µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:28:21.780Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:28:21 | 500 | 86.449µs | 100.64.0.3 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:28:23 | 200 | 34.84µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:28:26.815Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:28:26 | 500 | 85.541µs | 100.64.0.4 | POST "/v1/api-keys" {"level":"info","timestamp":"2026-04-20T15:28:26.989Z","caller":"api_keys/service.go:150","message":"Created API key","user":"alice_lead","groups":["system:authenticated","Engineering","Project-Alpha"],"id":"0035dd88-ca57-4588-99c7-47e466a63d36","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:28:26.989Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"0035dd88-ca57-4588-99c7-47e466a63d36","keyPrefix":"sk-oai-7VeJO6T8cVgl...","username":"alice_lead","groups":["system:authenticated","Engineering","Project-Alpha"],"ephemeral":false} [GIN] 2026/04/20 - 15:28:26 | 201 | 8.436389ms | 100.64.0.2 | POST "/v1/api-keys" {"level":"error","timestamp":"2026-04-20T15:28:27.016Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:28:27 | 500 | 81.99µs | 100.64.0.2 | DELETE "/v1/api-keys/0035dd88-ca57-4588-99c7-47e466a63d36" {"level":"error","timestamp":"2026-04-20T15:28:27.180Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:28:27 | 500 | 82.612µs | 100.64.0.3 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:28:28 | 200 | 33.035µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:28:28 | 200 | 32.313µs | 10.133.0.2 | GET "/health" {"level":"info","timestamp":"2026-04-20T15:28:32.211Z","caller":"api_keys/service.go:150","message":"Created API key","user":"","groups":["system:authenticated","Engineering","Project-Alpha"],"id":"732a45a8-4a3e-47d2-b173-4e447432b55d","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:28:32.211Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"732a45a8-4a3e-47d2-b173-4e447432b55d","keyPrefix":"sk-oai-Tk0GY0o4XQzP...","username":"","groups":["system:authenticated","Engineering","Project-Alpha"],"ephemeral":false} [GIN] 2026/04/20 - 15:28:32 | 201 | 2.033823ms | 100.64.0.3 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:28:32 | 200 | 728.315µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:28:32 | 200 | 679.293µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:28:32 | 200 | 302.875µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:28:32 | 200 | 20.748062ms | 100.64.0.4 | GET "/v1/models" {"level":"error","timestamp":"2026-04-20T15:28:32.408Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:28:32 | 500 | 85.707µs | 100.64.0.4 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:28:33 | 200 | 47.176µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:28:37.440Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:28:37 | 500 | 90.607µs | 100.64.0.2 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:28:38 | 200 | 31.338µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:28:38 | 200 | 31.172µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:28:42.476Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:28:42 | 500 | 87.553µs | 100.64.0.3 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:28:43 | 200 | 40.744µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:28:47.526Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:28:47 | 500 | 84.938µs | 100.64.0.3 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:28:48 | 200 | 42.655µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:28:48 | 200 | 32.681µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:28:52.562Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:28:52 | 500 | 95.627µs | 100.64.0.4 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:28:53 | 200 | 33.917µs | 10.133.0.2 | GET "/health" {"level":"info","timestamp":"2026-04-20T15:28:57.610Z","caller":"api_keys/service.go:150","message":"Created API key","user":"","groups":["system:authenticated","Engineering","Project-Alpha"],"id":"8c7feac6-f2d9-4e25-b056-afc727b9fee2","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:28:57.610Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"8c7feac6-f2d9-4e25-b056-afc727b9fee2","keyPrefix":"sk-oai-16xs1AsbSyua...","username":"","groups":["system:authenticated","Engineering","Project-Alpha"],"ephemeral":false} [GIN] 2026/04/20 - 15:28:57 | 201 | 1.891753ms | 100.64.0.2 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:28:57 | 200 | 630.347µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:28:57 | 403 | 52.46µs | 100.64.0.3 | GET "/v1/models" [GIN] 2026/04/20 - 15:28:57 | 200 | 602.382µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:28:57 | 200 | 635.603µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:28:57 | 200 | 310.707µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:28:57 | 200 | 10.91746ms | 100.64.0.4 | GET "/v1/models" {"level":"info","timestamp":"2026-04-20T15:28:57.826Z","caller":"api_keys/service.go:150","message":"Created API key","user":"","groups":["system:authenticated","Engineering","Project-Alpha"],"id":"db2a25e9-1339-4712-9a4b-a3b8b41eb591","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:28:57.826Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"db2a25e9-1339-4712-9a4b-a3b8b41eb591","keyPrefix":"sk-oai-MfNtYKZhdhei...","username":"","groups":["system:authenticated","Engineering","Project-Alpha"],"ephemeral":false} [GIN] 2026/04/20 - 15:28:57 | 201 | 1.642827ms | 100.64.0.2 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:28:57 | 200 | 628.677µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:28:57 | 200 | 580.098µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:28:57 | 200 | 345.472µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:28:57 | 200 | 9.651965ms | 100.64.0.3 | GET "/v1/models" [GIN] 2026/04/20 - 15:28:57 | 200 | 629.595µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:28:57 | 200 | 591.09µs | 10.134.0.56 | POST "/internal/v1/api-keys/validate" [GIN] 2026/04/20 - 15:28:57 | 200 | 323.179µs | 10.134.0.56 | POST "/internal/v1/subscriptions/select" [GIN] 2026/04/20 - 15:28:57 | 200 | 9.240481ms | 100.64.0.4 | GET "/v1/models" {"level":"error","timestamp":"2026-04-20T15:28:58.047Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:28:58 | 500 | 85.607µs | 100.64.0.4 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:28:58 | 200 | 61.554µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:28:58 | 200 | 37.176µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:29:03.082Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:29:03 | 500 | 91.407µs | 100.64.0.2 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:29:03 | 200 | 33.893µs | 10.133.0.2 | GET "/health" {"level":"error","timestamp":"2026-04-20T15:29:08.114Z","caller":"token/handler.go:95","message":"Failed to parse group header","header":"X-MaaS-Group","header_value":"","error":"failed to parse header as JSON array: invalid character '<' looking for beginning of value","stacktrace":"main.registerHandlers.(*Handler).ExtractUserInfo.func4\n\tgithub.com/opendatahub-io/models-as-a-service/maas-api/internal/token/handler.go:95\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.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\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/04/20 - 15:29:08 | 500 | 83.685µs | 100.64.0.3 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:29:08 | 200 | 39.436µs | 10.133.0.2 | GET "/health" [GIN] 2026/04/20 - 15:29:08 | 200 | 35.009µs | 10.133.0.2 | GET "/health" {"level":"info","timestamp":"2026-04-20T15:29:13.151Z","caller":"api_keys/service.go:150","message":"Created API key","user":"bob_sre","groups":["system:authenticated","Engineering","Project-Alpha"],"id":"2490327f-027d-4719-8b19-9f212bebc733","ephemeral":false} {"level":"info","timestamp":"2026-04-20T15:29:13.151Z","caller":"api_keys/handler.go:208","message":"Created API key","keyId":"2490327f-027d-4719-8b19-9f212bebc733","keyPrefix":"sk-oai-qALO6FlGOGPy...","username":"bob_sre","groups":["system:authenticated","Engineering","Project-Alpha"],"ephemeral":false} [GIN] 2026/04/20 - 15:29:13 | 201 | 1.779806ms | 100.64.0.4 | POST "/v1/api-keys" [GIN] 2026/04/20 - 15:29:13 | 200 | 32.525µs | 10.133.0.2 | GET "/health"