From 40b2d6e779caeedcf175f667f9e509ec90495510 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Guih=C3=A9neuf?= Date: Thu, 29 Jan 2026 11:01:50 +0100 Subject: [PATCH] Refactor : rename api and feed handlers --- Makefile | 4 +-- api.go | 30 ++++++++--------- apifeeder.go | 32 +++++++++---------- cdb/db_instances.go | 4 +-- cmd.go | 4 +-- conf.go | 20 ++++++------ {apifeeder => feeder}/api.yaml | 0 {api => feeder}/codegen_server.yaml | 2 +- {apifeeder => feeder}/codegen_server_gen.go | 4 +-- {apifeeder => feeder}/codegen_type.yaml | 2 +- {apifeeder => feeder}/codegen_type_gen.go | 4 +-- {api => feeder}/main.go | 2 +- .../get_openapi.go | 8 ++--- .../get_version.go | 8 ++--- {apifeederhandlers => feederhandlers}/log.go | 2 +- {apihandlers => feederhandlers}/main.go | 8 ++--- .../middleware-ui.go | 2 +- {apihandlers => feederhandlers}/middleware.go | 2 +- .../post_feed_daemon_ping.go | 20 ++++++------ .../post_feed_daemon_status.go | 24 +++++++------- .../post_feed_instance_action.go | 14 ++++---- .../post_feed_instance_resource_info.go | 12 +++---- .../post_feed_instance_status.go | 18 +++++------ .../post_feed_node_disk.go | 12 +++---- .../post_feed_object_config.go | 12 +++---- .../post_feed_system.go | 8 ++--- {apihandlers => feederhandlers}/problems.go | 6 ++-- .../put_feed_instance_action.go | 12 +++---- .../redis.go | 16 +++++----- .../redis_object_config_to_feed.go | 10 +++--- {api => server}/api.yaml | 0 {apifeeder => server}/codegen_server.yaml | 2 +- {api => server}/codegen_server_gen.go | 4 +-- {api => server}/codegen_type.yaml | 2 +- {api => server}/codegen_type_gen.go | 4 +-- {apifeeder => server}/main.go | 2 +- .../get_openapi.go | 8 ++--- .../get_version.go | 6 ++-- {apihandlers => serverhandlers}/log.go | 2 +- {apifeederhandlers => serverhandlers}/main.go | 8 ++--- .../middleware-ui.go | 2 +- .../middleware.go | 2 +- .../problems.go | 6 ++-- worker/job_feed_daemon_ping.go | 4 +-- worker/job_feed_instance_action.go | 6 ++-- worker/job_feed_instance_resource_info.go | 4 +-- 46 files changed, 182 insertions(+), 182 deletions(-) rename {apifeeder => feeder}/api.yaml (100%) rename {api => feeder}/codegen_server.yaml (85%) rename {apifeeder => feeder}/codegen_server_gen.go (99%) rename {apifeeder => feeder}/codegen_type.yaml (80%) rename {apifeeder => feeder}/codegen_type_gen.go (98%) rename {api => feeder}/main.go (90%) rename {apihandlers => feederhandlers}/get_openapi.go (51%) rename {apifeederhandlers => feederhandlers}/get_version.go (50%) rename {apifeederhandlers => feederhandlers}/log.go (89%) rename {apihandlers => feederhandlers}/main.go (72%) rename {apifeederhandlers => feederhandlers}/middleware-ui.go (94%) rename {apihandlers => feederhandlers}/middleware.go (98%) rename {apifeederhandlers => feederhandlers}/post_feed_daemon_ping.go (75%) rename {apifeederhandlers => feederhandlers}/post_feed_daemon_status.go (81%) rename {apifeederhandlers => feederhandlers}/post_feed_instance_action.go (83%) rename {apifeederhandlers => feederhandlers}/post_feed_instance_resource_info.go (84%) rename {apifeederhandlers => feederhandlers}/post_feed_instance_status.go (87%) rename {apifeederhandlers => feederhandlers}/post_feed_node_disk.go (85%) rename {apifeederhandlers => feederhandlers}/post_feed_object_config.go (84%) rename {apifeederhandlers => feederhandlers}/post_feed_system.go (82%) rename {apihandlers => feederhandlers}/problems.go (85%) rename {apifeederhandlers => feederhandlers}/put_feed_instance_action.go (85%) rename {apifeederhandlers => feederhandlers}/redis.go (69%) rename {apifeederhandlers => feederhandlers}/redis_object_config_to_feed.go (58%) rename {api => server}/api.yaml (100%) rename {apifeeder => server}/codegen_server.yaml (83%) rename {api => server}/codegen_server_gen.go (98%) rename {api => server}/codegen_type.yaml (76%) rename {api => server}/codegen_type_gen.go (91%) rename {apifeeder => server}/main.go (89%) rename {apifeederhandlers => serverhandlers}/get_openapi.go (51%) rename {apihandlers => serverhandlers}/get_version.go (73%) rename {apihandlers => serverhandlers}/log.go (87%) rename {apifeederhandlers => serverhandlers}/main.go (71%) rename {apihandlers => serverhandlers}/middleware-ui.go (95%) rename {apifeederhandlers => serverhandlers}/middleware.go (98%) rename {apifeederhandlers => serverhandlers}/problems.go (84%) diff --git a/Makefile b/Makefile index 2273050..23a20ba 100644 --- a/Makefile +++ b/Makefile @@ -20,8 +20,8 @@ deps: $(GOCMD) get -tool github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen@latest api: - $(GOGEN) ./apifeeder - $(GOGEN) ./api + $(GOGEN) ./feeder + $(GOGEN) ./server clean: $(GOCLEAN) diff --git a/api.go b/api.go index 45308b6..c01e00b 100644 --- a/api.go +++ b/api.go @@ -10,18 +10,18 @@ import ( "github.com/shaj13/go-guardian/v2/auth/strategies/union" "github.com/spf13/viper" - "github.com/opensvc/oc3/api" - "github.com/opensvc/oc3/apihandlers" + "github.com/opensvc/oc3/server" + "github.com/opensvc/oc3/serverhandlers" "github.com/opensvc/oc3/xauth" ) -func startApi() error { - addr := viper.GetString("listener_api.addr") - return listenAndServeApi(addr) +func startServer() error { + addr := viper.GetString("listener_server.addr") + return listenAndServeServer(addr) } -func listenAndServeApi(addr string) error { - enableUI := viper.GetBool("listener_api.ui.enable") +func listenAndServeServer(addr string) error { + enableUI := viper.GetBool("listener_server.ui.enable") db, err := newDatabase() if err != nil { @@ -34,7 +34,7 @@ func listenAndServeApi(addr string) error { e.HideBanner = true e.HidePort = true - if viper.GetBool("listener_api.pprof.enable") { + if viper.GetBool("listener_server.pprof.enable") { slog.Info("add handler /oc3/api/public/pprof") pprof.Register(e, "/oc3/api/public/pprof") } @@ -43,28 +43,28 @@ func listenAndServeApi(addr string) error { xauth.NewPublicStrategy("/oc3/api/public/", "/oc3/api/docs", "/oc3/api/version", "/oc3/api/openapi"), xauth.NewBasicNode(db), ) - if viper.GetBool("listener_api.metrics.enable") { + if viper.GetBool("listener_server.metrics.enable") { slog.Info("add handler /oc3/api/public/metrics") e.Use(echoprometheus.NewMiddleware("oc3_api")) e.GET("/oc3/api/public/metrics", echoprometheus.NewHandler()) } - e.Use(apihandlers.AuthMiddleware(strategy)) + e.Use(serverhandlers.AuthMiddleware(strategy)) slog.Info("register openapi handlers with base url: /oc3/api") - api.RegisterHandlersWithBaseURL(e, &apihandlers.Api{ + server.RegisterHandlersWithBaseURL(e, &serverhandlers.Server{ DB: db, Redis: redisClient, UI: enableUI, - SyncTimeout: viper.GetDuration("listener_api.sync.timeout"), + SyncTimeout: viper.GetDuration("listener_server.sync.timeout"), }, "/oc3/api") if enableUI { - registerApiCollectorUI(e) + registerServerCollectorUI(e) } slog.Info("listen on " + addr) return e.Start(addr) } -func registerApiCollectorUI(e *echo.Echo) { +func registerServerCollectorUI(e *echo.Echo) { slog.Info("add handler /oc3/api/docs/") g := e.Group("/oc3/api/docs") - g.Use(apihandlers.UIMiddleware(context.Background())) + g.Use(serverhandlers.UIMiddleware(context.Background())) } diff --git a/apifeeder.go b/apifeeder.go index 5a81426..a078054 100644 --- a/apifeeder.go +++ b/apifeeder.go @@ -10,18 +10,18 @@ import ( "github.com/shaj13/go-guardian/v2/auth/strategies/union" "github.com/spf13/viper" - "github.com/opensvc/oc3/apifeeder" - "github.com/opensvc/oc3/apifeederhandlers" + "github.com/opensvc/oc3/feeder" + "github.com/opensvc/oc3/feederhandlers" "github.com/opensvc/oc3/xauth" ) -func startApiFeeder() error { - addr := viper.GetString("listener_feed.addr") - return listenAndServeApiFeeder(addr) +func startFeeder() error { + addr := viper.GetString("listener_feeder.addr") + return listenAndServeFeeder(addr) } -func listenAndServeApiFeeder(addr string) error { - enableUI := viper.GetBool("listener_feed.ui.enable") +func listenAndServeFeeder(addr string) error { + enableUI := viper.GetBool("listener_feeder.ui.enable") db, err := newDatabase() if err != nil { @@ -34,7 +34,7 @@ func listenAndServeApiFeeder(addr string) error { e.HideBanner = true e.HidePort = true - if viper.GetBool("listener_feed.pprof.enable") { + if viper.GetBool("listener_feeder.pprof.enable") { slog.Info("add handler /oc3/feed/api/public/pprof") // TODO: move to authenticated path pprof.Register(e, "/oc3/feed/api/public/pprof") @@ -44,28 +44,28 @@ func listenAndServeApiFeeder(addr string) error { xauth.NewPublicStrategy("/oc3/feed/api/public/", "/oc3/feed/api/docs", "/oc3/feed/api/version"), xauth.NewBasicNode(db), ) - if viper.GetBool("listener_feed.metrics.enable") { + if viper.GetBool("listener_feeder.metrics.enable") { slog.Info("add handler /oc3/feed/api/public/metrics") - e.Use(echoprometheus.NewMiddleware("oc3_apifeeder")) + e.Use(echoprometheus.NewMiddleware("oc3_feeder")) e.GET("/oc3/feed/api/public/metrics", echoprometheus.NewHandler()) } - e.Use(apifeederhandlers.AuthMiddleware(strategy)) + e.Use(feederhandlers.AuthMiddleware(strategy)) slog.Info("register openapi handlers with base url: /oc3/feed/api") - apifeeder.RegisterHandlersWithBaseURL(e, &apifeederhandlers.Api{ + feeder.RegisterHandlersWithBaseURL(e, &feederhandlers.Feeder{ DB: db, Redis: redisClient, UI: enableUI, - SyncTimeout: viper.GetDuration("listener_feed.sync.timeout"), + SyncTimeout: viper.GetDuration("listener_feeder.sync.timeout"), }, "/oc3/feed/api") if enableUI { - registerAPIUI(e) + registerFeederUI(e) } slog.Info("listen on " + addr) return e.Start(addr) } -func registerAPIUI(e *echo.Echo) { +func registerFeederUI(e *echo.Echo) { slog.Info("add handler /oc3/feed/api/docs/") g := e.Group("/oc3/feed/api/docs") - g.Use(apifeederhandlers.UIMiddleware(context.Background())) + g.Use(feederhandlers.UIMiddleware(context.Background())) } diff --git a/cdb/db_instances.go b/cdb/db_instances.go index 54a42cd..359c656 100644 --- a/cdb/db_instances.go +++ b/cdb/db_instances.go @@ -8,7 +8,7 @@ import ( "log/slog" "time" - "github.com/opensvc/oc3/apifeeder" + "github.com/opensvc/oc3/feeder" ) type ( @@ -549,7 +549,7 @@ func (oDb *DB) InstanceResourcesDeleteObsolete(ctx context.Context, svcID, nodeI return nil } -func (oDb *DB) InstanceResourceInfoUpdate(ctx context.Context, svcID, nodeID string, data apifeeder.InstanceResourceInfo) error { +func (oDb *DB) InstanceResourceInfoUpdate(ctx context.Context, svcID, nodeID string, data feeder.InstanceResourceInfo) error { defer logDuration("InstanceResourceInfoUpdate "+svcID+"@"+nodeID, time.Now()) const ( query = "" + diff --git a/cmd.go b/cmd.go index 56787cf..586a6a4 100644 --- a/cmd.go +++ b/cmd.go @@ -43,7 +43,7 @@ func cmdApiFeeder() *cobra.Command { if err := setup(); err != nil { return err } - return startApiFeeder() + return startFeeder() }, } } @@ -56,7 +56,7 @@ func cmdApiCollector() *cobra.Command { if err := setup(); err != nil { return err } - return startApi() + return startServer() }, } } diff --git a/conf.go b/conf.go index 9cf19cd..3ce35f3 100644 --- a/conf.go +++ b/conf.go @@ -29,16 +29,16 @@ func initConfig() error { viper.AutomaticEnv() // defaults - viper.SetDefault("listener_feed.addr", "127.0.0.1:8080") - viper.SetDefault("listener_feed.pprof.enable", false) - viper.SetDefault("listener_feed.metrics.enable", false) - viper.SetDefault("listener_feed.ui.enable", false) - viper.SetDefault("listener_feed.sync.timeout", "2s") - viper.SetDefault("listener_api.addr", "127.0.0.1:8081") - viper.SetDefault("listener_api.pprof.enable", false) - viper.SetDefault("listener_api.metrics.enable", false) - viper.SetDefault("listener_api.ui.enable", false) - viper.SetDefault("listener_api.sync.timeout", "2s") + viper.SetDefault("listener_feeder.addr", "127.0.0.1:8080") + viper.SetDefault("listener_feeder.pprof.enable", false) + viper.SetDefault("listener_feeder.metrics.enable", false) + viper.SetDefault("listener_feeder.ui.enable", false) + viper.SetDefault("listener_feeder.sync.timeout", "2s") + viper.SetDefault("listener_server.addr", "127.0.0.1:8081") + viper.SetDefault("listener_server.pprof.enable", false) + viper.SetDefault("listener_server.metrics.enable", false) + viper.SetDefault("listener_server.ui.enable", false) + viper.SetDefault("listener_server.sync.timeout", "2s") viper.SetDefault("db.username", "opensvc") viper.SetDefault("db.host", "127.0.0.1") viper.SetDefault("db.port", "3306") diff --git a/apifeeder/api.yaml b/feeder/api.yaml similarity index 100% rename from apifeeder/api.yaml rename to feeder/api.yaml diff --git a/api/codegen_server.yaml b/feeder/codegen_server.yaml similarity index 85% rename from api/codegen_server.yaml rename to feeder/codegen_server.yaml index 50cd686..5de029f 100644 --- a/api/codegen_server.yaml +++ b/feeder/codegen_server.yaml @@ -1,4 +1,4 @@ -package: api +package: feeder generate: echo-server: true models: false diff --git a/apifeeder/codegen_server_gen.go b/feeder/codegen_server_gen.go similarity index 99% rename from apifeeder/codegen_server_gen.go rename to feeder/codegen_server_gen.go index 7b7fba1..f94a482 100644 --- a/apifeeder/codegen_server_gen.go +++ b/feeder/codegen_server_gen.go @@ -1,7 +1,7 @@ -// Package apifeeder provides primitives to interact with the openapi HTTP API. +// Package feeder provides primitives to interact with the openapi HTTP API. // // Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.5.1 DO NOT EDIT. -package apifeeder +package feeder import ( "bytes" diff --git a/apifeeder/codegen_type.yaml b/feeder/codegen_type.yaml similarity index 80% rename from apifeeder/codegen_type.yaml rename to feeder/codegen_type.yaml index 76fc3ee..0977866 100644 --- a/apifeeder/codegen_type.yaml +++ b/feeder/codegen_type.yaml @@ -1,4 +1,4 @@ -package: apifeeder +package: feeder generate: models: true embedded-spec: false diff --git a/apifeeder/codegen_type_gen.go b/feeder/codegen_type_gen.go similarity index 98% rename from apifeeder/codegen_type_gen.go rename to feeder/codegen_type_gen.go index dc9143c..5d65ff6 100644 --- a/apifeeder/codegen_type_gen.go +++ b/feeder/codegen_type_gen.go @@ -1,7 +1,7 @@ -// Package apifeeder provides primitives to interact with the openapi HTTP API. +// Package feeder provides primitives to interact with the openapi HTTP API. // // Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.5.1 DO NOT EDIT. -package apifeeder +package feeder import ( "time" diff --git a/api/main.go b/feeder/main.go similarity index 90% rename from api/main.go rename to feeder/main.go index e0f9057..faafdc1 100644 --- a/api/main.go +++ b/feeder/main.go @@ -1,4 +1,4 @@ //go:generate go tool oapi-codegen -config codegen_server.yaml ./api.yaml //go:generate go tool oapi-codegen -config codegen_type.yaml ./api.yaml -package api +package feeder diff --git a/apihandlers/get_openapi.go b/feederhandlers/get_openapi.go similarity index 51% rename from apihandlers/get_openapi.go rename to feederhandlers/get_openapi.go index d76c9bf..096c2d3 100644 --- a/apihandlers/get_openapi.go +++ b/feederhandlers/get_openapi.go @@ -1,4 +1,4 @@ -package apihandlers +package feederhandlers import ( "net/http" @@ -6,9 +6,9 @@ import ( "github.com/labstack/echo/v4" ) -func (a *Api) GetSwagger(ctx echo.Context) error { - if !a.UI { - return JSONProblem(ctx, http.StatusUnauthorized, "serve schema is disabled by configuration.", "listener_api.ui.enable = false") +func (f *Feeder) GetSwagger(ctx echo.Context) error { + if !f.UI { + return JSONProblem(ctx, http.StatusUnauthorized, "serve schema is disabled by configuration.", "listener_feeder.ui.enable = false") } return ctx.JSON(http.StatusOK, SCHEMA) } diff --git a/apifeederhandlers/get_version.go b/feederhandlers/get_version.go similarity index 50% rename from apifeederhandlers/get_version.go rename to feederhandlers/get_version.go index e0de1e8..788f3d1 100644 --- a/apifeederhandlers/get_version.go +++ b/feederhandlers/get_version.go @@ -1,16 +1,16 @@ -package apifeederhandlers +package feederhandlers import ( "net/http" "github.com/labstack/echo/v4" - api "github.com/opensvc/oc3/apifeeder" + "github.com/opensvc/oc3/feeder" ) -func (a *Api) GetVersion(c echo.Context) error { +func (f *Feeder) GetVersion(c echo.Context) error { if SCHEMA.Info == nil { return JSONProblem(c, http.StatusInternalServerError, "invalid api schema", "missing schema info") } - return c.JSON(http.StatusOK, api.Version{Version: SCHEMA.Info.Version}) + return c.JSON(http.StatusOK, feeder.Version{Version: SCHEMA.Info.Version}) } diff --git a/apifeederhandlers/log.go b/feederhandlers/log.go similarity index 89% rename from apifeederhandlers/log.go rename to feederhandlers/log.go index a7636b8..db5db39 100644 --- a/apifeederhandlers/log.go +++ b/feederhandlers/log.go @@ -1,4 +1,4 @@ -package apifeederhandlers +package feederhandlers import ( "log/slog" diff --git a/apihandlers/main.go b/feederhandlers/main.go similarity index 72% rename from apihandlers/main.go rename to feederhandlers/main.go index 91bb817..4cbdb4c 100644 --- a/apihandlers/main.go +++ b/feederhandlers/main.go @@ -1,4 +1,4 @@ -package apihandlers +package feederhandlers import ( "database/sql" @@ -7,11 +7,11 @@ import ( "github.com/getkin/kin-openapi/openapi3" "github.com/go-redis/redis/v8" - "github.com/opensvc/oc3/api" + "github.com/opensvc/oc3/feeder" ) type ( - Api struct { + Feeder struct { DB *sql.DB Redis *redis.Client UI bool @@ -26,7 +26,7 @@ var ( ) func init() { - if schema, err := api.GetSwagger(); err == nil { + if schema, err := feeder.GetSwagger(); err == nil { SCHEMA = *schema } } diff --git a/apifeederhandlers/middleware-ui.go b/feederhandlers/middleware-ui.go similarity index 94% rename from apifeederhandlers/middleware-ui.go rename to feederhandlers/middleware-ui.go index 90d3935..559f329 100644 --- a/apifeederhandlers/middleware-ui.go +++ b/feederhandlers/middleware-ui.go @@ -1,4 +1,4 @@ -package apifeederhandlers +package feederhandlers import ( "context" diff --git a/apihandlers/middleware.go b/feederhandlers/middleware.go similarity index 98% rename from apihandlers/middleware.go rename to feederhandlers/middleware.go index 88ab1a2..163d093 100644 --- a/apihandlers/middleware.go +++ b/feederhandlers/middleware.go @@ -1,4 +1,4 @@ -package apihandlers +package feederhandlers import ( "net/http" diff --git a/apifeederhandlers/post_feed_daemon_ping.go b/feederhandlers/post_feed_daemon_ping.go similarity index 75% rename from apifeederhandlers/post_feed_daemon_ping.go rename to feederhandlers/post_feed_daemon_ping.go index ab7f62f..fb911f0 100644 --- a/apifeederhandlers/post_feed_daemon_ping.go +++ b/feederhandlers/post_feed_daemon_ping.go @@ -1,4 +1,4 @@ -package apifeederhandlers +package feederhandlers import ( "fmt" @@ -7,11 +7,11 @@ import ( "github.com/labstack/echo/v4" - api "github.com/opensvc/oc3/apifeeder" "github.com/opensvc/oc3/cachekeys" + "github.com/opensvc/oc3/feeder" ) -func (a *Api) PostFeedDaemonPing(c echo.Context) error { +func (f *Feeder) PostFeedDaemonPing(c echo.Context) error { log := getLog(c).With("handler", "PostFeedDaemonPing") nodeID := nodeIDFromContext(c) if nodeID == "" { @@ -20,7 +20,7 @@ func (a *Api) PostFeedDaemonPing(c echo.Context) error { } ctx := c.Request().Context() - if hasStatus, err := a.Redis.HExists(ctx, cachekeys.FeedDaemonStatusH, nodeID).Result(); err != nil { + if hasStatus, err := f.Redis.HExists(ctx, cachekeys.FeedDaemonStatusH, nodeID).Result(); err != nil { return JSONProblemf(c, http.StatusInternalServerError, "redis operation", "can't HGet %s: %s", cachekeys.FeedDaemonStatusChangesH, err) } else if !hasStatus { // no daemon status for node. We need first POST /daemon/status @@ -35,7 +35,7 @@ func (a *Api) PostFeedDaemonPing(c echo.Context) error { log.Error("close body failed: " + err.Error()) } }() - if err := a.Redis.HSet(ctx, cachekeys.FeedDaemonPingH, nodeID, string(b)).Err(); err != nil { + if err := f.Redis.HSet(ctx, cachekeys.FeedDaemonPingH, nodeID, string(b)).Err(); err != nil { log.Error(fmt.Sprintf("HSET %s %s", cachekeys.FeedDaemonPingH, nodeID)) return JSONProblemf(c, http.StatusInternalServerError, "redis operation", "can't HSET %s: %s", cachekeys.FeedDaemonPingH, err) } @@ -43,26 +43,26 @@ func (a *Api) PostFeedDaemonPing(c echo.Context) error { if err != nil { return JSONProblemf(c, http.StatusInternalServerError, "", "read request body: %s", err) } - if err := a.pushNotPending(ctx, cachekeys.FeedDaemonPingPendingH, cachekeys.FeedDaemonPingQ, nodeID); err != nil { + if err := f.pushNotPending(ctx, cachekeys.FeedDaemonPingPendingH, cachekeys.FeedDaemonPingQ, nodeID); err != nil { log.Error(fmt.Sprintf("can't push %s %s: %s", cachekeys.FeedDaemonPingQ, nodeID, err)) return JSONProblemf(c, http.StatusInternalServerError, "redis operation", "can't push %s %s: %s", cachekeys.FeedDaemonPingQ, nodeID, err) } clusterID := clusterIDFromContext(c) if clusterID != "" { - objects, err := a.getObjectConfigToFeed(ctx, clusterID) + objects, err := f.getObjectConfigToFeed(ctx, clusterID) if err != nil { log.Error(fmt.Sprintf("%s", err)) } else { if len(objects) > 0 { - if err := a.removeObjectConfigToFeed(ctx, clusterID); err != nil { + if err := f.removeObjectConfigToFeed(ctx, clusterID); err != nil { log.Error(fmt.Sprintf("%s", err)) } log.Info(fmt.Sprintf("accepted %s, cluster id %s need object config: %s", nodeID, clusterID, objects)) - return c.JSON(http.StatusAccepted, api.FeedDaemonPingAccepted{ObjectWithoutConfig: &objects}) + return c.JSON(http.StatusAccepted, feeder.FeedDaemonPingAccepted{ObjectWithoutConfig: &objects}) } } } log.Info(fmt.Sprintf("accepted %s", nodeID)) - return c.JSON(http.StatusAccepted, api.FeedDaemonPingAccepted{}) + return c.JSON(http.StatusAccepted, feeder.FeedDaemonPingAccepted{}) } diff --git a/apifeederhandlers/post_feed_daemon_status.go b/feederhandlers/post_feed_daemon_status.go similarity index 81% rename from apifeederhandlers/post_feed_daemon_status.go rename to feederhandlers/post_feed_daemon_status.go index 19a8625..8480a2b 100644 --- a/apifeederhandlers/post_feed_daemon_status.go +++ b/feederhandlers/post_feed_daemon_status.go @@ -1,4 +1,4 @@ -package apifeederhandlers +package feederhandlers import ( "encoding/json" @@ -10,11 +10,11 @@ import ( "github.com/go-redis/redis/v8" "github.com/labstack/echo/v4" - api "github.com/opensvc/oc3/apifeeder" "github.com/opensvc/oc3/cachekeys" + "github.com/opensvc/oc3/feeder" ) -func (a *Api) PostFeedDaemonStatus(c echo.Context) error { +func (f *Feeder) PostFeedDaemonStatus(c echo.Context) error { log := getLog(c).With("handler", "PostFeedDaemonStatus") nodeID := nodeIDFromContext(c) if nodeID == "" { @@ -40,7 +40,7 @@ func (a *Api) PostFeedDaemonStatus(c echo.Context) error { if err != nil { return JSONProblemf(c, http.StatusInternalServerError, "", "read request body: %s", err) } - postData := &api.PostFeedDaemonStatus{} + postData := &feeder.PostFeedDaemonStatus{} if err := json.Unmarshal(b, postData); err != nil { log.Error(fmt.Sprintf("Unmarshal %s", err)) return JSONProblemf(c, http.StatusBadRequest, "BadRequest", "unexpected body: %s", err) @@ -53,14 +53,14 @@ func (a *Api) PostFeedDaemonStatus(c echo.Context) error { } ctx := c.Request().Context() log.Info(fmt.Sprintf("HSET %s %s", cachekeys.FeedDaemonStatusH, nodeID)) - if err := a.Redis.HSet(ctx, cachekeys.FeedDaemonStatusH, nodeID, string(b)).Err(); err != nil { + if err := f.Redis.HSet(ctx, cachekeys.FeedDaemonStatusH, nodeID, string(b)).Err(); err != nil { log.Error(fmt.Sprintf("HSET %s %s", cachekeys.FeedDaemonStatusH, nodeID)) return JSONProblemf(c, http.StatusInternalServerError, "redis operation", "can't HSET %s: %s", cachekeys.FeedDaemonStatusH, err) } if len(mChange) > 0 { // request contains changes, merge them to not yet applied changes log.Info(fmt.Sprintf("HSET %s %s", cachekeys.FeedDaemonStatusChangesH, nodeID)) - redisChanges, err := a.Redis.HGet(ctx, cachekeys.FeedDaemonStatusChangesH, nodeID).Result() + redisChanges, err := f.Redis.HGet(ctx, cachekeys.FeedDaemonStatusChangesH, nodeID).Result() switch err { case nil: // merge existing changes @@ -79,29 +79,29 @@ func (a *Api) PostFeedDaemonStatus(c echo.Context) error { mergedChanges := strings.Join(l, " ") // push changes log.Info(fmt.Sprintf("HSET %s[%s] with %s", cachekeys.FeedDaemonStatusChangesH, nodeID, mergedChanges)) - if err := a.Redis.HSet(ctx, cachekeys.FeedDaemonStatusChangesH, nodeID, mergedChanges).Err(); err != nil { + if err := f.Redis.HSet(ctx, cachekeys.FeedDaemonStatusChangesH, nodeID, mergedChanges).Err(); err != nil { return JSONProblemf(c, http.StatusInternalServerError, "redis operation", "can't HSET %s: %s", cachekeys.FeedDaemonStatusH, err) } } - if err := a.pushNotPending(ctx, cachekeys.FeedDaemonStatusPendingH, cachekeys.FeedDaemonStatusQ, nodeID); err != nil { + if err := f.pushNotPending(ctx, cachekeys.FeedDaemonStatusPendingH, cachekeys.FeedDaemonStatusQ, nodeID); err != nil { log.Error(fmt.Sprintf("can't push %s %s: %s", cachekeys.FeedDaemonStatusQ, nodeID, err)) return JSONProblemf(c, http.StatusInternalServerError, "redis operation", "can't push %s %s: %s", cachekeys.FeedDaemonStatusQ, nodeID, err) } clusterID := clusterIDFromContext(c) if clusterID != "" { - objects, err := a.getObjectConfigToFeed(ctx, clusterID) + objects, err := f.getObjectConfigToFeed(ctx, clusterID) if err != nil { log.Error(fmt.Sprintf("%s", err)) } else { if len(objects) > 0 { - if err := a.removeObjectConfigToFeed(ctx, clusterID); err != nil { + if err := f.removeObjectConfigToFeed(ctx, clusterID); err != nil { log.Error(fmt.Sprintf("%s", err)) } log.Info(fmt.Sprintf("accepted %s, cluster id %s need object config: %s", nodeID, clusterID, objects)) - return c.JSON(http.StatusAccepted, api.FeedDaemonStatusAccepted{ObjectWithoutConfig: &objects}) + return c.JSON(http.StatusAccepted, feeder.FeedDaemonStatusAccepted{ObjectWithoutConfig: &objects}) } } } - return c.JSON(http.StatusAccepted, api.FeedDaemonStatusAccepted{}) + return c.JSON(http.StatusAccepted, feeder.FeedDaemonStatusAccepted{}) } diff --git a/apifeederhandlers/post_feed_instance_action.go b/feederhandlers/post_feed_instance_action.go similarity index 83% rename from apifeederhandlers/post_feed_instance_action.go rename to feederhandlers/post_feed_instance_action.go index d2c9cab..bd6291d 100644 --- a/apifeederhandlers/post_feed_instance_action.go +++ b/feederhandlers/post_feed_instance_action.go @@ -1,4 +1,4 @@ -package apifeederhandlers +package feederhandlers import ( "encoding/json" @@ -9,8 +9,8 @@ import ( "github.com/google/uuid" "github.com/labstack/echo/v4" - api "github.com/opensvc/oc3/apifeeder" "github.com/opensvc/oc3/cachekeys" + "github.com/opensvc/oc3/feeder" ) /* @@ -30,7 +30,7 @@ import ( */ // PostFeedInstanceAction handles POST /action/begin -func (a *Api) PostFeedInstanceAction(c echo.Context) error { +func (f *Feeder) PostFeedInstanceAction(c echo.Context) error { keyH := cachekeys.FeedInstanceActionH keyQ := cachekeys.FeedInstanceActionQ keyPendingH := cachekeys.FeedInstanceActionPendingH @@ -48,7 +48,7 @@ func (a *Api) PostFeedInstanceAction(c echo.Context) error { return JSONProblemf(c, http.StatusConflict, "Refused", "authenticated node doesn't define cluster id") } - var payload api.PostFeedInstanceActionJSONRequestBody + var payload feeder.PostFeedInstanceActionJSONRequestBody if err := c.Bind(&payload); err != nil { return JSONProblem(c, http.StatusBadRequest, "Failed to json decode request body", err.Error()) } @@ -69,17 +69,17 @@ func (a *Api) PostFeedInstanceAction(c echo.Context) error { idx := fmt.Sprintf("%s@%s@%s:%s", payload.Path, nodeID, ClusterID, uuid) s := fmt.Sprintf("HSET %s %s", keyH, idx) - if _, err := a.Redis.HSet(reqCtx, keyH, idx, b).Result(); err != nil { + if _, err := f.Redis.HSet(reqCtx, keyH, idx, b).Result(); err != nil { s = fmt.Sprintf("%s: %s", s, err) log.Error(s) return JSONProblem(c, http.StatusInternalServerError, "", s) } - if err := a.pushNotPending(reqCtx, keyPendingH, keyQ, idx); err != nil { + if err := f.pushNotPending(reqCtx, keyPendingH, keyQ, idx); err != nil { log.Error(fmt.Sprintf("can't push %s %s: %s", keyQ, idx, err)) return JSONProblemf(c, http.StatusInternalServerError, "redis operation", "can't push %s %s: %s", keyQ, idx, err) } log.Debug("action begin accepted") - return c.JSON(http.StatusAccepted, api.ActionRequestAccepted{Uuid: uuid}) + return c.JSON(http.StatusAccepted, feeder.ActionRequestAccepted{Uuid: uuid}) } diff --git a/apifeederhandlers/post_feed_instance_resource_info.go b/feederhandlers/post_feed_instance_resource_info.go similarity index 84% rename from apifeederhandlers/post_feed_instance_resource_info.go rename to feederhandlers/post_feed_instance_resource_info.go index 35fddd5..89551fa 100644 --- a/apifeederhandlers/post_feed_instance_resource_info.go +++ b/feederhandlers/post_feed_instance_resource_info.go @@ -1,4 +1,4 @@ -package apifeederhandlers +package feederhandlers import ( "encoding/json" @@ -7,14 +7,14 @@ import ( "github.com/labstack/echo/v4" - api "github.com/opensvc/oc3/apifeeder" "github.com/opensvc/oc3/cachekeys" + "github.com/opensvc/oc3/feeder" ) // PostFeedInstanceResourceInfo will populate FeedInstanceResourceInfo @@ // with posted instance resource information. The auth middleware has prepared nodeID and clusterID. -func (a *Api) PostFeedInstanceResourceInfo(c echo.Context) error { - var data api.PostFeedInstanceResourceInfoJSONRequestBody +func (f *Feeder) PostFeedInstanceResourceInfo(c echo.Context) error { + var data feeder.PostFeedInstanceResourceInfoJSONRequestBody keyH := cachekeys.FeedInstanceResourceInfoH keyQ := cachekeys.FeedInstanceResourceInfoQ keyPendingH := cachekeys.FeedInstanceResourceInfoPendingH @@ -43,12 +43,12 @@ func (a *Api) PostFeedInstanceResourceInfo(c echo.Context) error { ctx := c.Request().Context() idx := data.Path + "@" + nodeID + "@" + clusterID log.Info(fmt.Sprintf("HSET %s %s", keyH, idx)) - if err := a.Redis.HSet(ctx, keyH, idx, b).Err(); err != nil { + if err := f.Redis.HSet(ctx, keyH, idx, b).Err(); err != nil { log.Error(fmt.Sprintf("HSET %s %s", keyH, idx)) return JSONProblemf(c, http.StatusInternalServerError, "redis operation", "can't HSET %s %s ...: %s", keyH, idx, err) } - if err := a.pushNotPending(ctx, keyPendingH, keyQ, idx); err != nil { + if err := f.pushNotPending(ctx, keyPendingH, keyQ, idx); err != nil { log.Error(fmt.Sprintf("can't push %s %s: %s", keyQ, idx, err)) return JSONProblemf(c, http.StatusInternalServerError, "redis operation", "can't push %s %s: %s", keyQ, idx, err) } diff --git a/apifeederhandlers/post_feed_instance_status.go b/feederhandlers/post_feed_instance_status.go similarity index 87% rename from apifeederhandlers/post_feed_instance_status.go rename to feederhandlers/post_feed_instance_status.go index e1e7228..79117ee 100644 --- a/apifeederhandlers/post_feed_instance_status.go +++ b/feederhandlers/post_feed_instance_status.go @@ -1,4 +1,4 @@ -package apifeederhandlers +package feederhandlers import ( "context" @@ -11,11 +11,11 @@ import ( "github.com/go-redis/redis/v8" "github.com/labstack/echo/v4" - api "github.com/opensvc/oc3/apifeeder" "github.com/opensvc/oc3/cachekeys" + "github.com/opensvc/oc3/feeder" ) -func (a *Api) PostFeedInstanceStatus(c echo.Context, params api.PostFeedInstanceStatusParams) error { +func (f *Feeder) PostFeedInstanceStatus(c echo.Context, params feeder.PostFeedInstanceStatusParams) error { var ( keyH = cachekeys.FeedInstanceStatusH keyQ = cachekeys.FeedInstanceStatusQ @@ -42,15 +42,15 @@ func (a *Api) PostFeedInstanceStatus(c echo.Context, params api.PostFeedInstance return JSONProblemf(c, http.StatusConflict, "Refused", "authenticated node doesn't define cluster id") } - var payload api.PostFeedInstanceStatusJSONRequestBody + var payload feeder.PostFeedInstanceStatusJSONRequestBody if err := c.Bind(&payload); err != nil { return JSONProblem(c, http.StatusBadRequest, "Failed to json decode request body", err.Error()) } if params.Sync != nil && *params.Sync { syncMode = true - if a.SyncTimeout > 0 { - timeout = a.SyncTimeout + if f.SyncTimeout > 0 { + timeout = f.SyncTimeout } } @@ -70,7 +70,7 @@ func (a *Api) PostFeedInstanceStatus(c echo.Context, params api.PostFeedInstance defer cancel() if syncMode { - pubsub = a.Redis.Subscribe(ctx, cachekeys.FeedInstanceStatusP) + pubsub = f.Redis.Subscribe(ctx, cachekeys.FeedInstanceStatusP) defer func() { if err := pubsub.Close(); err != nil { log.Error(fmt.Sprintf("can't close subscription from %s: %s", cachekeys.FeedInstanceStatusP, err)) @@ -118,13 +118,13 @@ func (a *Api) PostFeedInstanceStatus(c echo.Context, params api.PostFeedInstance // Store data in Redis hash with generated ID as key s := fmt.Sprintf("HSET %s %s", keyH, id) - if _, err := a.Redis.HSet(ctx, keyH, id, b).Result(); err != nil { + if _, err := f.Redis.HSet(ctx, keyH, id, b).Result(); err != nil { s = fmt.Sprintf("%s: %s", s, err) log.Error(s) return JSONProblem(c, http.StatusInternalServerError, "", s) } - if err := a.pushNotPending(ctx, keyPendingH, keyQ, id); err != nil { + if err := f.pushNotPending(ctx, keyPendingH, keyQ, id); err != nil { log.Error(fmt.Sprintf("can't push %s %s: %s", keyQ, id, err)) return JSONProblemf(c, http.StatusInternalServerError, "redis operation", "can't push %s %s: %s", keyQ, id, err) } diff --git a/apifeederhandlers/post_feed_node_disk.go b/feederhandlers/post_feed_node_disk.go similarity index 85% rename from apifeederhandlers/post_feed_node_disk.go rename to feederhandlers/post_feed_node_disk.go index 9f14d37..710eaca 100644 --- a/apifeederhandlers/post_feed_node_disk.go +++ b/feederhandlers/post_feed_node_disk.go @@ -1,4 +1,4 @@ -package apifeederhandlers +package feederhandlers import ( "encoding/json" @@ -7,13 +7,13 @@ import ( "github.com/labstack/echo/v4" - api "github.com/opensvc/oc3/apifeeder" "github.com/opensvc/oc3/cachekeys" + "github.com/opensvc/oc3/feeder" ) // PostFeedNodeDisk will populate FeedNodeDiskH @@ // with posted disk, auth middleware has prepared nodeID, clusterID, and nodename. -func (a *Api) PostFeedNodeDisk(c echo.Context) error { +func (f *Feeder) PostFeedNodeDisk(c echo.Context) error { keyH := cachekeys.FeedNodeDiskH keyQ := cachekeys.FeedNodeDiskQ keyPendingH := cachekeys.FeedNodeDiskPendingH @@ -31,7 +31,7 @@ func (a *Api) PostFeedNodeDisk(c echo.Context) error { if clusterID == "" { return JSONProblemf(c, http.StatusConflict, "Refused", "authenticated node doesn't define cluster id") } - var payload api.PostFeedNodeDiskJSONRequestBody + var payload feeder.PostFeedNodeDiskJSONRequestBody if err := c.Bind(&payload); err != nil { return JSONProblem(c, http.StatusBadRequest, "Failed to json decode request body", err.Error()) } @@ -42,12 +42,12 @@ func (a *Api) PostFeedNodeDisk(c echo.Context) error { ctx := c.Request().Context() idx := nodename + "@" + nodeID + "@" + clusterID log.Info(fmt.Sprintf("HSET %s %s", keyH, idx)) - if err := a.Redis.HSet(ctx, keyH, idx, b).Err(); err != nil { + if err := f.Redis.HSet(ctx, keyH, idx, b).Err(); err != nil { log.Error(fmt.Sprintf("HSET %s %s", keyH, idx)) return JSONProblemf(c, http.StatusInternalServerError, "redis operation", "can't HSET %s %s ...: %s", keyH, idx, err) } - if err := a.pushNotPending(ctx, keyPendingH, keyQ, idx); err != nil { + if err := f.pushNotPending(ctx, keyPendingH, keyQ, idx); err != nil { log.Error(fmt.Sprintf("can't push %s %s: %s", keyQ, idx, err)) return JSONProblemf(c, http.StatusInternalServerError, "redis operation", "can't push %s %s: %s", keyQ, idx, err) } diff --git a/apifeederhandlers/post_feed_object_config.go b/feederhandlers/post_feed_object_config.go similarity index 84% rename from apifeederhandlers/post_feed_object_config.go rename to feederhandlers/post_feed_object_config.go index de242b6..746f0ea 100644 --- a/apifeederhandlers/post_feed_object_config.go +++ b/feederhandlers/post_feed_object_config.go @@ -1,4 +1,4 @@ -package apifeederhandlers +package feederhandlers import ( "encoding/json" @@ -7,13 +7,13 @@ import ( "github.com/labstack/echo/v4" - api "github.com/opensvc/oc3/apifeeder" "github.com/opensvc/oc3/cachekeys" + "github.com/opensvc/oc3/feeder" ) // PostFeedObjectConfig will populate FeedObjectConfigH @@ // with posted object config. The auth middleware has prepared nodeID and clusterID. -func (a *Api) PostFeedObjectConfig(c echo.Context) error { +func (f *Feeder) PostFeedObjectConfig(c echo.Context) error { keyH := cachekeys.FeedObjectConfigH keyQ := cachekeys.FeedObjectConfigQ keyPendingH := cachekeys.FeedObjectConfigPendingH @@ -27,7 +27,7 @@ func (a *Api) PostFeedObjectConfig(c echo.Context) error { if clusterID == "" { return JSONProblemf(c, http.StatusConflict, "Refused", "authenticated node doesn't define cluster id") } - var payload api.PostFeedObjectConfigJSONRequestBody + var payload feeder.PostFeedObjectConfigJSONRequestBody if err := c.Bind(&payload); err != nil { return JSONProblem(c, http.StatusBadRequest, "Failed to json decode request body", err.Error()) } @@ -42,12 +42,12 @@ func (a *Api) PostFeedObjectConfig(c echo.Context) error { ctx := c.Request().Context() idx := payload.Path + "@" + nodeID + "@" + clusterID log.Info(fmt.Sprintf("HSET %s %s", keyH, idx)) - if err := a.Redis.HSet(ctx, keyH, idx, b).Err(); err != nil { + if err := f.Redis.HSet(ctx, keyH, idx, b).Err(); err != nil { log.Error(fmt.Sprintf("HSET %s %s", keyH, idx)) return JSONProblemf(c, http.StatusInternalServerError, "redis operation", "can't HSET %s %s ...: %s", keyH, idx, err) } - if err := a.pushNotPending(ctx, keyPendingH, keyQ, idx); err != nil { + if err := f.pushNotPending(ctx, keyPendingH, keyQ, idx); err != nil { log.Error(fmt.Sprintf("can't push %s %s: %s", keyQ, idx, err)) return JSONProblemf(c, http.StatusInternalServerError, "redis operation", "can't push %s %s: %s", keyQ, idx, err) } diff --git a/apifeederhandlers/post_feed_system.go b/feederhandlers/post_feed_system.go similarity index 82% rename from apifeederhandlers/post_feed_system.go rename to feederhandlers/post_feed_system.go index 398f2b6..1b57473 100644 --- a/apifeederhandlers/post_feed_system.go +++ b/feederhandlers/post_feed_system.go @@ -1,4 +1,4 @@ -package apifeederhandlers +package feederhandlers import ( "fmt" @@ -10,7 +10,7 @@ import ( "github.com/opensvc/oc3/cachekeys" ) -func (a *Api) PostFeedSystem(c echo.Context) error { +func (f *Feeder) PostFeedSystem(c echo.Context) error { log := getLog(c) nodeID := nodeIDFromContext(c) if nodeID == "" { @@ -26,13 +26,13 @@ func (a *Api) PostFeedSystem(c echo.Context) error { s := fmt.Sprintf("HSET %s %s", cachekeys.FeedSystemH, nodeID) log.Info(s) - if _, err := a.Redis.HSet(reqCtx, cachekeys.FeedSystemH, nodeID, string(b)).Result(); err != nil { + if _, err := f.Redis.HSet(reqCtx, cachekeys.FeedSystemH, nodeID, string(b)).Result(); err != nil { s = fmt.Sprintf("%s: %s", s, err) log.Error(s) return JSONProblem(c, http.StatusInternalServerError, "", s) } - if err := a.pushNotPending(reqCtx, cachekeys.FeedSystemPendingH, cachekeys.FeedSystemQ, nodeID); err != nil { + if err := f.pushNotPending(reqCtx, cachekeys.FeedSystemPendingH, cachekeys.FeedSystemQ, nodeID); err != nil { log.Error(fmt.Sprintf("can't push %s %s: %s", cachekeys.FeedSystemQ, nodeID, err)) return JSONProblemf(c, http.StatusInternalServerError, "redis operation", "can't push %s %s: %s", cachekeys.FeedSystemQ, nodeID, err) } diff --git a/apihandlers/problems.go b/feederhandlers/problems.go similarity index 85% rename from apihandlers/problems.go rename to feederhandlers/problems.go index a30e4b2..72f7af9 100644 --- a/apihandlers/problems.go +++ b/feederhandlers/problems.go @@ -1,4 +1,4 @@ -package apihandlers +package feederhandlers import ( "fmt" @@ -6,7 +6,7 @@ import ( "github.com/labstack/echo/v4" - "github.com/opensvc/oc3/api" + "github.com/opensvc/oc3/feeder" ) func JSONProblemf(ctx echo.Context, code int, title, detail string, args ...any) error { @@ -17,7 +17,7 @@ func JSONProblem(ctx echo.Context, code int, title, detail string) error { if title == "" { title = http.StatusText(code) } - return ctx.JSON(code, api.Problem{ + return ctx.JSON(code, feeder.Problem{ Detail: detail, Title: title, Status: code, diff --git a/apifeederhandlers/put_feed_instance_action.go b/feederhandlers/put_feed_instance_action.go similarity index 85% rename from apifeederhandlers/put_feed_instance_action.go rename to feederhandlers/put_feed_instance_action.go index 2e5904f..d41e9a3 100644 --- a/apifeederhandlers/put_feed_instance_action.go +++ b/feederhandlers/put_feed_instance_action.go @@ -1,4 +1,4 @@ -package apifeederhandlers +package feederhandlers import ( "encoding/json" @@ -7,8 +7,8 @@ import ( "github.com/labstack/echo/v4" - api "github.com/opensvc/oc3/apifeeder" "github.com/opensvc/oc3/cachekeys" + "github.com/opensvc/oc3/feeder" ) /* @@ -26,7 +26,7 @@ import ( */ // PutFeedInstanceActionEnd handles PUT /feed/action -func (a *Api) PutFeedInstanceActionEnd(c echo.Context) error { +func (f *Feeder) PutFeedInstanceActionEnd(c echo.Context) error { keyH := cachekeys.FeedInstanceActionH keyQ := cachekeys.FeedInstanceActionQ keyPendingH := cachekeys.FeedInstanceActionPendingH @@ -44,7 +44,7 @@ func (a *Api) PutFeedInstanceActionEnd(c echo.Context) error { return JSONProblemf(c, http.StatusConflict, "Refused", "authenticated node doesn't define cluster id") } - var payload api.PutFeedInstanceActionEndJSONRequestBody + var payload feeder.PutFeedInstanceActionEndJSONRequestBody if err := c.Bind(&payload); err != nil { return JSONProblem(c, http.StatusBadRequest, "Failed to json decode request body", err.Error()) } @@ -59,13 +59,13 @@ func (a *Api) PutFeedInstanceActionEnd(c echo.Context) error { idx := fmt.Sprintf("%s@%s@%s:%s", payload.Path, nodeID, ClusterID, payload.Uuid) s := fmt.Sprintf("HSET %s %s", keyH, idx) - if _, err := a.Redis.HSet(reqCtx, keyH, idx, b).Result(); err != nil { + if _, err := f.Redis.HSet(reqCtx, keyH, idx, b).Result(); err != nil { s = fmt.Sprintf("%s: %s", s, err) log.Error(s) return JSONProblem(c, http.StatusInternalServerError, "", s) } - if err := a.pushNotPending(reqCtx, keyPendingH, keyQ, idx); err != nil { + if err := f.pushNotPending(reqCtx, keyPendingH, keyQ, idx); err != nil { log.Error(fmt.Sprintf("can't push %s %s: %s", keyQ, idx, err)) return JSONProblemf(c, http.StatusInternalServerError, "redis operation", "can't push %s %s: %s", keyQ, idx, err) } diff --git a/apifeederhandlers/redis.go b/feederhandlers/redis.go similarity index 69% rename from apifeederhandlers/redis.go rename to feederhandlers/redis.go index 0fcbddd..ec4e8f0 100644 --- a/apifeederhandlers/redis.go +++ b/feederhandlers/redis.go @@ -1,4 +1,4 @@ -package apifeederhandlers +package feederhandlers import ( "context" @@ -8,10 +8,10 @@ import ( "github.com/go-redis/redis/v8" ) -func (a *Api) pushUniqValue(ctx context.Context, key string, value string) error { +func (f *Feeder) pushUniqValue(ctx context.Context, key string, value string) error { s := fmt.Sprintf("LPOS %s %s", key, value) slog.Info(s) - _, err := a.Redis.LPos(ctx, key, value, redis.LPosArgs{}).Result() + _, err := f.Redis.LPos(ctx, key, value, redis.LPosArgs{}).Result() switch err { case nil: // already in queue @@ -20,7 +20,7 @@ func (a *Api) pushUniqValue(ctx context.Context, key string, value string) error // not in list try push s = fmt.Sprintf("LPUSH %s %s", key, value) slog.Info(s) - if _, err := a.Redis.LPush(ctx, key, value).Result(); err != nil { + if _, err := f.Redis.LPush(ctx, key, value).Result(); err != nil { return fmt.Errorf("%s: %w", s, err) } return nil @@ -36,10 +36,10 @@ func (a *Api) pushUniqValue(ctx context.Context, key string, value string) error // // It uses HGET O(1) instead of LPOS O(n). // LPOS requires redis 6.0.6, -func (a *Api) pushNotPending(ctx context.Context, pendingKey, queueKey string, value string) error { +func (f *Feeder) pushNotPending(ctx context.Context, pendingKey, queueKey string, value string) error { s := fmt.Sprintf("HGET %s %s", pendingKey, value) slog.Info(s) - _, err := a.Redis.HGet(ctx, pendingKey, value).Result() + _, err := f.Redis.HGet(ctx, pendingKey, value).Result() switch err { case nil: // already in the list @@ -48,12 +48,12 @@ func (a *Api) pushNotPending(ctx context.Context, pendingKey, queueKey string, v // not in try push s = fmt.Sprintf("HSET %s %s %s", pendingKey, value, value) slog.Info(s) - if _, err := a.Redis.HSet(ctx, pendingKey, value, value).Result(); err != nil { + if _, err := f.Redis.HSet(ctx, pendingKey, value, value).Result(); err != nil { return fmt.Errorf("%s: %w", s, err) } s = fmt.Sprintf("LPUSH %s %s", queueKey, value) slog.Info(s) - if _, err := a.Redis.LPush(ctx, queueKey, value).Result(); err != nil { + if _, err := f.Redis.LPush(ctx, queueKey, value).Result(); err != nil { return fmt.Errorf("%s: %w", s, err) } return nil diff --git a/apifeederhandlers/redis_object_config_to_feed.go b/feederhandlers/redis_object_config_to_feed.go similarity index 58% rename from apifeederhandlers/redis_object_config_to_feed.go rename to feederhandlers/redis_object_config_to_feed.go index 3b3e973..3cb6847 100644 --- a/apifeederhandlers/redis_object_config_to_feed.go +++ b/feederhandlers/redis_object_config_to_feed.go @@ -1,4 +1,4 @@ -package apifeederhandlers +package feederhandlers import ( "context" @@ -11,18 +11,18 @@ import ( "github.com/opensvc/oc3/cachekeys" ) -func (a *Api) getObjectConfigToFeed(ctx context.Context, clusterID string) ([]string, error) { +func (f *Feeder) getObjectConfigToFeed(ctx context.Context, clusterID string) ([]string, error) { keyName := cachekeys.FeedObjectConfigForClusterIDH - s, err := a.Redis.HGet(ctx, keyName, clusterID).Result() + s, err := f.Redis.HGet(ctx, keyName, clusterID).Result() if err == nil || errors.Is(err, redis.Nil) { return strings.Fields(s), nil } return nil, fmt.Errorf("HGET %s %s: %s", keyName, clusterID, err) } -func (a *Api) removeObjectConfigToFeed(ctx context.Context, clusterID string) error { +func (f *Feeder) removeObjectConfigToFeed(ctx context.Context, clusterID string) error { keyName := cachekeys.FeedObjectConfigForClusterIDH - if err := a.Redis.HDel(ctx, keyName, clusterID).Err(); err != nil { + if err := f.Redis.HDel(ctx, keyName, clusterID).Err(); err != nil { return fmt.Errorf("HDEL %s %s: %s", keyName, clusterID, err) } return nil diff --git a/api/api.yaml b/server/api.yaml similarity index 100% rename from api/api.yaml rename to server/api.yaml diff --git a/apifeeder/codegen_server.yaml b/server/codegen_server.yaml similarity index 83% rename from apifeeder/codegen_server.yaml rename to server/codegen_server.yaml index 9627e9a..cce6a01 100644 --- a/apifeeder/codegen_server.yaml +++ b/server/codegen_server.yaml @@ -1,4 +1,4 @@ -package: apifeeder +package: server generate: echo-server: true models: false diff --git a/api/codegen_server_gen.go b/server/codegen_server_gen.go similarity index 98% rename from api/codegen_server_gen.go rename to server/codegen_server_gen.go index e920b11..564f890 100644 --- a/api/codegen_server_gen.go +++ b/server/codegen_server_gen.go @@ -1,7 +1,7 @@ -// Package api provides primitives to interact with the openapi HTTP API. +// Package server provides primitives to interact with the openapi HTTP API. // // Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.5.1 DO NOT EDIT. -package api +package server import ( "bytes" diff --git a/api/codegen_type.yaml b/server/codegen_type.yaml similarity index 76% rename from api/codegen_type.yaml rename to server/codegen_type.yaml index 2d73f49..975a110 100644 --- a/api/codegen_type.yaml +++ b/server/codegen_type.yaml @@ -1,4 +1,4 @@ -package: api +package: server generate: models: true output: codegen_type_gen.go diff --git a/api/codegen_type_gen.go b/server/codegen_type_gen.go similarity index 91% rename from api/codegen_type_gen.go rename to server/codegen_type_gen.go index 77e1bb1..dc6f0a0 100644 --- a/api/codegen_type_gen.go +++ b/server/codegen_type_gen.go @@ -1,7 +1,7 @@ -// Package api provides primitives to interact with the openapi HTTP API. +// Package server provides primitives to interact with the openapi HTTP API. // // Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.5.1 DO NOT EDIT. -package api +package server // Problem defines model for Problem. type Problem struct { diff --git a/apifeeder/main.go b/server/main.go similarity index 89% rename from apifeeder/main.go rename to server/main.go index 6bbecce..b111546 100644 --- a/apifeeder/main.go +++ b/server/main.go @@ -1,4 +1,4 @@ //go:generate go tool oapi-codegen -config codegen_server.yaml ./api.yaml //go:generate go tool oapi-codegen -config codegen_type.yaml ./api.yaml -package apifeeder +package server diff --git a/apifeederhandlers/get_openapi.go b/serverhandlers/get_openapi.go similarity index 51% rename from apifeederhandlers/get_openapi.go rename to serverhandlers/get_openapi.go index 70db7df..70f3879 100644 --- a/apifeederhandlers/get_openapi.go +++ b/serverhandlers/get_openapi.go @@ -1,4 +1,4 @@ -package apifeederhandlers +package serverhandlers import ( "net/http" @@ -6,9 +6,9 @@ import ( "github.com/labstack/echo/v4" ) -func (a *Api) GetSwagger(ctx echo.Context) error { - if !a.UI { - return JSONProblem(ctx, http.StatusUnauthorized, "serve schema is disabled by configuration.", "listener_feed.ui.enable = false") +func (s *Server) GetSwagger(ctx echo.Context) error { + if !s.UI { + return JSONProblem(ctx, http.StatusUnauthorized, "serve schema is disabled by configuration.", "listener_server.ui.enable = false") } return ctx.JSON(http.StatusOK, SCHEMA) } diff --git a/apihandlers/get_version.go b/serverhandlers/get_version.go similarity index 73% rename from apihandlers/get_version.go rename to serverhandlers/get_version.go index 88570b4..1b09d4a 100644 --- a/apihandlers/get_version.go +++ b/serverhandlers/get_version.go @@ -1,4 +1,4 @@ -package apihandlers +package serverhandlers import ( "net/http" @@ -6,12 +6,12 @@ import ( "github.com/labstack/echo/v4" ) -func (a *Api) GetVersion(c echo.Context) error { +func (s *Server) GetVersion(c echo.Context) error { if SCHEMA.Info == nil { return JSONProblem(c, http.StatusInternalServerError, "invalid api schema", "missing schema info") } return c.JSON(http.StatusOK, map[string]string{ "version": SCHEMA.Info.Version, - "service": "apicollector", + "service": "apiserver", }) } diff --git a/apihandlers/log.go b/serverhandlers/log.go similarity index 87% rename from apihandlers/log.go rename to serverhandlers/log.go index 3e26869..941be70 100644 --- a/apihandlers/log.go +++ b/serverhandlers/log.go @@ -1,4 +1,4 @@ -package apihandlers +package serverhandlers import ( "log/slog" diff --git a/apifeederhandlers/main.go b/serverhandlers/main.go similarity index 71% rename from apifeederhandlers/main.go rename to serverhandlers/main.go index 44e7c75..f5b9a5b 100644 --- a/apifeederhandlers/main.go +++ b/serverhandlers/main.go @@ -1,4 +1,4 @@ -package apifeederhandlers +package serverhandlers import ( "database/sql" @@ -7,11 +7,11 @@ import ( "github.com/getkin/kin-openapi/openapi3" "github.com/go-redis/redis/v8" - api "github.com/opensvc/oc3/apifeeder" + "github.com/opensvc/oc3/server" ) type ( - Api struct { + Server struct { DB *sql.DB Redis *redis.Client UI bool @@ -26,7 +26,7 @@ var ( ) func init() { - if schema, err := api.GetSwagger(); err == nil { + if schema, err := server.GetSwagger(); err == nil { SCHEMA = *schema } } diff --git a/apihandlers/middleware-ui.go b/serverhandlers/middleware-ui.go similarity index 95% rename from apihandlers/middleware-ui.go rename to serverhandlers/middleware-ui.go index d32366d..d3d923b 100644 --- a/apihandlers/middleware-ui.go +++ b/serverhandlers/middleware-ui.go @@ -1,4 +1,4 @@ -package apihandlers +package serverhandlers import ( "context" diff --git a/apifeederhandlers/middleware.go b/serverhandlers/middleware.go similarity index 98% rename from apifeederhandlers/middleware.go rename to serverhandlers/middleware.go index 607ff72..14fe638 100644 --- a/apifeederhandlers/middleware.go +++ b/serverhandlers/middleware.go @@ -1,4 +1,4 @@ -package apifeederhandlers +package serverhandlers import ( "net/http" diff --git a/apifeederhandlers/problems.go b/serverhandlers/problems.go similarity index 84% rename from apifeederhandlers/problems.go rename to serverhandlers/problems.go index 4e32b5f..e120615 100644 --- a/apifeederhandlers/problems.go +++ b/serverhandlers/problems.go @@ -1,4 +1,4 @@ -package apifeederhandlers +package serverhandlers import ( "fmt" @@ -6,7 +6,7 @@ import ( "github.com/labstack/echo/v4" - api "github.com/opensvc/oc3/apifeeder" + "github.com/opensvc/oc3/server" ) func JSONProblemf(ctx echo.Context, code int, title, detail string, args ...any) error { @@ -17,7 +17,7 @@ func JSONProblem(ctx echo.Context, code int, title, detail string) error { if title == "" { title = http.StatusText(code) } - return ctx.JSON(code, api.Problem{ + return ctx.JSON(code, server.Problem{ Detail: detail, Title: title, Status: code, diff --git a/worker/job_feed_daemon_ping.go b/worker/job_feed_daemon_ping.go index 63cfb23..26dcf7f 100644 --- a/worker/job_feed_daemon_ping.go +++ b/worker/job_feed_daemon_ping.go @@ -6,9 +6,9 @@ import ( "fmt" "log/slog" - "github.com/opensvc/oc3/apifeeder" "github.com/opensvc/oc3/cachekeys" "github.com/opensvc/oc3/cdb" + "github.com/opensvc/oc3/feeder" ) type ( @@ -66,7 +66,7 @@ func (d *jobFeedDaemonPing) Operations() []operation { } func (d *jobFeedDaemonPing) getData(ctx context.Context) error { - var data apifeeder.PostFeedDaemonPing + var data feeder.PostFeedDaemonPing if b, err := d.redis.HGet(ctx, cachekeys.FeedDaemonPingH, d.nodeID).Bytes(); err != nil { return fmt.Errorf("getData: HGET %s %s: %w", cachekeys.FeedDaemonPingH, d.nodeID, err) } else if err = json.Unmarshal(b, &data); err != nil { diff --git a/worker/job_feed_instance_action.go b/worker/job_feed_instance_action.go index 3f39436..d64a095 100644 --- a/worker/job_feed_instance_action.go +++ b/worker/job_feed_instance_action.go @@ -10,9 +10,9 @@ import ( "github.com/google/uuid" - "github.com/opensvc/oc3/apifeeder" "github.com/opensvc/oc3/cachekeys" "github.com/opensvc/oc3/cdb" + "github.com/opensvc/oc3/feeder" ) type jobFeedInstanceAction struct { @@ -31,7 +31,7 @@ type jobFeedInstanceAction struct { objectID string // data is the posted action begin payload - data *apifeeder.PostFeedInstanceActionJSONRequestBody + data *feeder.PostFeedInstanceActionJSONRequestBody rawData []byte } @@ -68,7 +68,7 @@ func (d *jobFeedInstanceAction) Operations() []operation { func (d *jobFeedInstanceAction) getData(ctx context.Context) error { var ( - data apifeeder.PostFeedInstanceActionJSONRequestBody + data feeder.PostFeedInstanceActionJSONRequestBody ) if b, err := d.redis.HGet(ctx, cachekeys.FeedInstanceActionH, d.idX).Bytes(); err != nil { return fmt.Errorf("getData: HGET %s %s: %w", cachekeys.FeedInstanceActionH, d.idX, err) diff --git a/worker/job_feed_instance_resource_info.go b/worker/job_feed_instance_resource_info.go index 43797ed..d7571af 100644 --- a/worker/job_feed_instance_resource_info.go +++ b/worker/job_feed_instance_resource_info.go @@ -8,8 +8,8 @@ import ( "github.com/go-redis/redis/v8" - "github.com/opensvc/oc3/apifeeder" "github.com/opensvc/oc3/cachekeys" + "github.com/opensvc/oc3/feeder" ) type ( @@ -33,7 +33,7 @@ type ( clusterID string // data is the posted instance resource info - data apifeeder.InstanceResourceInfo + data feeder.InstanceResourceInfo } )