This commit is contained in:
PB
2023-10-01 21:35:21 +02:00
parent 380fe41d1a
commit 1909744c79
23 changed files with 790 additions and 320 deletions

View File

@@ -3,25 +3,20 @@ package common
import (
"os"
cnf "git.pbiernat.dev/egommerce/identity-service/pkg/config"
srv "git.pbiernat.dev/egommerce/identity-service/pkg/server"
cnf "git.pbiernat.dev/egosport/identity-svc/pkg/config"
srv "git.pbiernat.dev/egosport/identity-svc/pkg/server"
)
const (
defAppName = "identity-svc"
defAppDomain = "identity-svc"
defPathPrefix = "/identity"
defNetAddr = ":80"
defLoggerAddr = "api-logger:24224"
defRegistryAddr = "api-registry:8500"
defDbURL = "postgres://postgres:12345678@postgres-db:5432/egommerce"
defCacheAddr = "api-cache:6379"
defCachePassword = "12345678"
defMongoDbURL = "mongodb://mongodb:12345678@mongo-db:27017"
defEventBusURL = "amqp://guest:guest@api-gateway:5672"
defEbEventsExchange = "api-events"
defEbEventsQueue = "identity-svc"
defKVNmspc = "dev.egommerce/service/identity-svc"
defAppName = "api-svc"
defAppDomain = "api-svc"
defCacheAddr = "cache:6379"
defCachePassword = "12345678"
defDbURL = "postgres://egosport:12345678@db.egosport:5432/egosport"
defKVNmspc = "egosport/api"
defLoggerAddr = "logger.egosport:24224"
defNetAddr = ":80"
defPathPrefix = "/api"
)
type Config struct {
@@ -52,11 +47,9 @@ func NewConfig(name string) *Config {
c.CacheAddr = cnf.GetEnv("CACHE_ADDR", defCacheAddr)
c.CachePassword = cnf.GetEnv("CACHE_PASSWORD", defCachePassword)
c.DbURL = cnf.GetEnv("DATABASE_URL", defDbURL)
c.EventBusExchange = defEbEventsExchange
c.EventBusURL = cnf.GetEnv("EVENTBUS_URL", defEventBusURL)
c.KVNamespace = cnf.GetEnv("APP_KV_NAMESPACE", defKVNmspc)
c.LoggerAddr = cnf.GetEnv("LOGGER_ADDR", defLoggerAddr)
c.RegistryAddr = cnf.GetEnv("REGISTRY_ADDR", defRegistryAddr)
// c.RegistryAddr = cnf.GetEnv("REGISTRY_ADDR", defRegistryAddr)
return c
}

View File

@@ -1,7 +1,7 @@
package server
import (
"git.pbiernat.dev/egommerce/identity-service/internal/service"
"git.pbiernat.dev/egosport/identity-svc/internal/service"
"github.com/gofiber/fiber/v2"
)

View File

@@ -15,6 +15,7 @@ var (
func SetupRouter(s *Server) {
s.Base.Options("*", defaultCORS)
s.Base.Use(defaultCORS)
s.Base.Get("/health", s.HealthHandler)
s.Base.Get("/config", s.ConfigHandler)

View File

@@ -1,13 +1,8 @@
package server
import (
"bytes"
"context"
"encoding/json"
"log"
"os"
"strconv"
"time"
"github.com/go-redis/redis/v8"
"github.com/jackc/pgx/v5/pgxpool"
@@ -15,15 +10,15 @@ import (
"git.pbiernat.dev/egommerce/go-api-pkg/consul"
"git.pbiernat.dev/egommerce/go-api-pkg/fluentd"
db "git.pbiernat.dev/egommerce/identity-service/pkg/database"
srv "git.pbiernat.dev/egommerce/identity-service/pkg/server"
db "git.pbiernat.dev/egosport/identity-svc/pkg/database"
p "git.pbiernat.dev/egosport/identity-svc/pkg/server"
cnf "git.pbiernat.dev/egommerce/identity-service/internal/config"
cnf "git.pbiernat.dev/egosport/identity-svc/internal/config"
)
type (
Server struct {
Base *srv.Server
Base *p.Server
Config *cnf.Config
Cache *redis.Client
@@ -37,10 +32,12 @@ type (
func New(c *cnf.Config, opts ...OptionFn) *Server {
svr := &Server{
Base: srv.New(c.Base),
Base: p.New(c.Base),
Config: c,
}
svr.Base.PurgeFn = svr.Shutdown()
for _, opt := range opts {
if err := opt(svr); err != nil {
log.Fatalf("Failed to attach extension to the server. Err: %v\n", err)
@@ -99,45 +96,45 @@ func WithLogger(c *cnf.Config) OptionFn {
}
}
func WithRegistry(c *cnf.Config) OptionFn {
return func(s *Server) error {
port, _ := strconv.Atoi(c.Base.NetAddr[1:]) // FIXME: can be IP:PORT which will cause error
registry, err := consul.NewService(c.RegistryAddr, c.Base.AppID, c.Base.AppName, c.Base.AppID, c.Base.AppName, c.Base.PathPrefix, port)
if err != nil {
log.Fatalf("Failed to connect to the Consul on: %s. Err: %v", c.RegistryAddr, err)
}
// func WithRegistry(c *cnf.Config) OptionFn {
// return func(s *Server) error {
// port, _ := strconv.Atoi(c.Base.NetAddr[1:]) // FIXME: can be IP:PORT which will cause error
// registry, err := consul.NewService(c.RegistryAddr, c.Base.AppID, c.Base.AppName, c.Base.AppID, c.Base.AppName, c.Base.PathPrefix, port)
// if err != nil {
// log.Fatalf("Failed to connect to the Consul on: %s. Err: %v", c.RegistryAddr, err)
// }
err = registry.Register()
if err != nil {
log.Fatalf("Failed to register in the Consul service. Err: %v", err)
}
// err = registry.Register()
// if err != nil {
// log.Fatalf("Failed to register in the Consul service. Err: %v", err)
// }
s.Registry = registry
// s.Registry = registry
go func() { // Consul KV updater
ticker := time.NewTicker(time.Second * 15)
for range ticker.C {
fetchKVConfig(s) // FIXME: duplicated in worker
}
}()
// go func() { // Consul KV updater
// ticker := time.NewTicker(time.Second * 15)
// for range ticker.C {
// fetchKVConfig(s) // FIXME: duplicated in worker
// }
// }()
go func() { // Server metadata cache updater
ticker := time.NewTicker(time.Second * 5)
for range ticker.C {
s.cacheMetadata()
}
}()
// go func() { // Server metadata cache updater
// ticker := time.NewTicker(time.Second * 5)
// for range ticker.C {
// s.cacheMetadata()
// }
// }()
return nil
}
}
// return nil
// }
// }
func (s *Server) Shutdown() srv.PurgeFn {
return func(srv *srv.Server) error {
func (s *Server) Shutdown() p.PurgeFn {
return func() error {
s.Logger.Log("Server %s is going down...", s.Base.AppID)
s.Registry.Unregister()
s.clearMetadataCache()
// s.Registry.Unregister()
// s.clearMetadataCache()
s.Database.Close()
s.Logger.Log("Gone.")
s.Logger.Close()
@@ -147,38 +144,38 @@ func (s *Server) Shutdown() srv.PurgeFn {
}
// @CHECK: merge s.Config and s.Base.Config to display all config as one array/map
func fetchKVConfig(s *Server) { // @FIXME: merge duplication in server.go and worker.go
config, _, err := s.Registry.KV().Get(s.Config.KVNamespace, nil)
if err != nil || config == nil {
return
}
// func fetchKVConfig(s *Server) { // @FIXME: merge duplication in server.go and worker.go
// config, _, err := s.Registry.KV().Get(s.Config.KVNamespace, nil)
// if err != nil || config == nil {
// return
// }
kvCnf := bytes.NewBuffer(config.Value)
decoder := json.NewDecoder(kvCnf)
if err := decoder.Decode(&s.Config); err != nil {
return
}
}
// kvCnf := bytes.NewBuffer(config.Value)
// decoder := json.NewDecoder(kvCnf)
// if err := decoder.Decode(&s.Config); err != nil {
// return
// }
// }
func (s *Server) cacheMetadata() {
ctx := context.Background()
key, address := s.getMetadataIPsKey(), s.Base.Config.AppID
// func (s *Server) cacheMetadata() {
// ctx := context.Background()
// key, address := s.getMetadataIPsKey(), s.Base.Config.AppID
pos := s.Cache.LPos(ctx, key, address, redis.LPosArgs{}).Val()
if pos >= 0 {
s.Cache.LRem(ctx, key, 0, address)
}
// pos := s.Cache.LPos(ctx, key, address, redis.LPosArgs{}).Val()
// if pos >= 0 {
// s.Cache.LRem(ctx, key, 0, address)
// }
s.Cache.LPush(ctx, key, address).Err()
}
// s.Cache.LPush(ctx, key, address).Err()
// }
func (s *Server) clearMetadataCache() {
ctx := context.Background()
key, address := s.getMetadataIPsKey(), s.Config.Base.AppID
// func (s *Server) clearMetadataCache() {
// ctx := context.Background()
// key, address := s.getMetadataIPsKey(), s.Config.Base.AppID
s.Cache.LRem(ctx, key, 0, address)
}
// s.Cache.LRem(ctx, key, 0, address)
// }
func (s *Server) getMetadataIPsKey() string {
return "internal__" + s.Base.Config.AppName + "__ips"
}
// func (s *Server) getMetadataIPsKey() string {
// return "internal__" + s.Base.Config.AppName + "__ips"
// }

View File

@@ -3,7 +3,7 @@ package server
import (
"net/http"
"git.pbiernat.dev/egommerce/identity-service/internal/service"
"git.pbiernat.dev/egosport/identity-svc/internal/service"
"github.com/gofiber/fiber/v2"
)
@@ -13,14 +13,14 @@ type TraefikAuthResponse struct {
}
func (s *Server) TraefikHandler(c *fiber.Ctx) error {
cookie := service.AuthService.Cookie("traefik", "tmp-dummy-traefik-token")
cookie := service.AuthService.Cookie("traefik", "dummy-traefik-token")
c.Cookie(cookie)
s.Logger.Log("Traefik action set cookie. done.")
c.Response().Header.Add("Server", "identity-svc/traefik")
reqCookie := c.Request().Header.Cookie("basket_id")
s.Logger.Log("Request cookie: %v", reqCookie)
s.Logger.Log("Request cookie: %s", reqCookie)
return c.
Status(http.StatusOK).

View File

@@ -4,7 +4,7 @@ import (
"errors"
"strconv"
"git.pbiernat.dev/egommerce/identity-service/pkg/config"
"git.pbiernat.dev/egosport/identity-svc/pkg/config"
"github.com/gofiber/fiber/v2"
)

View File

@@ -5,7 +5,7 @@ import (
"strconv"
"time"
"git.pbiernat.dev/egommerce/identity-service/pkg/config"
"git.pbiernat.dev/egosport/identity-svc/pkg/config"
"github.com/golang-jwt/jwt"
)