From 9665532f6ba95828ac29762d39c6de0710281546 Mon Sep 17 00:00:00 2001 From: ruquanzhao <903264308@qq.com> Date: Mon, 30 Dec 2024 17:43:53 +0800 Subject: [PATCH] fix: optimize api server-configs --- cmd/karpor/app/options/core_options.go | 1 + cmd/karpor/app/server.go | 10 +++++- pkg/core/route/route.go | 43 +++++++++++++++++++++++++- 3 files changed, 52 insertions(+), 2 deletions(-) diff --git a/cmd/karpor/app/options/core_options.go b/cmd/karpor/app/options/core_options.go index 228fc4f6..fee0aa27 100644 --- a/cmd/karpor/app/options/core_options.go +++ b/cmd/karpor/app/options/core_options.go @@ -24,6 +24,7 @@ type CoreOptions struct { ReadOnlyMode bool GithubBadge bool Version bool + EnableAI bool } func NewCoreOptions() *CoreOptions { diff --git a/cmd/karpor/app/server.go b/cmd/karpor/app/server.go index 345f42fa..4e148558 100644 --- a/cmd/karpor/app/server.go +++ b/cmd/karpor/app/server.go @@ -108,7 +108,9 @@ func NewServerCommand(ctx context.Context) *cobra.Command { return o.SearchStorageOptions })) expvar.Publish("AIOptions", expvar.Func(func() interface{} { - return o.AIOptions + displayOpts := *o.AIOptions + displayOpts.AIAuthToken = "[hidden]" + return &displayOpts })) expvar.Publish("Version", expvar.Func(func() interface{} { return version.GetVersion() @@ -191,6 +193,12 @@ func (o *Options) Complete() error { if err != nil { return fmt.Errorf("create token generator failed: %w", err) } + + // set enableAI true if AIBaseURL is not empty + if o.AIOptions.AIBaseURL != "" { + o.CoreOptions.EnableAI = true + } + return nil } diff --git a/pkg/core/route/route.go b/pkg/core/route/route.go index e4766897..52dbf543 100644 --- a/pkg/core/route/route.go +++ b/pkg/core/route/route.go @@ -15,8 +15,12 @@ package route import ( + "encoding/json" "errors" "expvar" + "fmt" + "net/http" + "strings" docs "github.com/KusionStack/karpor/api/openapispec" aggregatorhandler "github.com/KusionStack/karpor/pkg/core/handler/aggregator" @@ -125,7 +129,7 @@ func NewCoreRoute( router.Get("/endpoints", endpointhandler.Endpoints(router)) // Expose server configuration and runtime statistics. - router.Get("/server-configs", expvar.Handler().ServeHTTP) + router.Get("/server-configs", customExpvarHandler().ServeHTTP) healthhandler.Register(router, generalStorage) return router, nil @@ -188,3 +192,40 @@ func setupRestAPIV1( r.Get("/resource-groups/{resourceGroupRuleName}", resourcegrouphandler.List(resourceGroupMgr)) r.Get("/authn", authnhandler.Get()) } + +func customExpvarHandler() http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json; charset=utf-8") + + first := true + w.Write([]byte("{\n")) + expvar.Do(func(kv expvar.KeyValue) { + if !first { + w.Write([]byte(",\n")) + } + first = false + + if kv.Key == "cmdline" { + handleCmdline(w, kv.Value) + return + } + + fmt.Fprintf(w, "%q: %s", kv.Key, kv.Value) + }) + w.Write([]byte("\n}\n")) + }) +} + +func handleCmdline(w http.ResponseWriter, v expvar.Var) { + var cmdline []string + json.Unmarshal([]byte(v.String()), &cmdline) + + for i, arg := range cmdline { + if strings.Contains(arg, "token=") { + cmdline[i] = strings.Split(arg, "=")[0] + "=" + } + } + + output, _ := json.Marshal(cmdline) + fmt.Fprintf(w, "%q: %s", "cmdline", output) +}