Remove dispatcher and eventsubscribers modules, remove statsd integration, remove event bus usage. Overall cleanup before otel integration

This commit is contained in:
ErickSkrauch
2024-02-07 17:34:57 +01:00
parent 5d7a66311d
commit cecd07c113
23 changed files with 29 additions and 863 deletions

View File

@@ -5,7 +5,7 @@ import (
"github.com/spf13/viper"
)
var config = di.Options(
var configDiOptions = di.Options(
di.Provide(newConfig),
)

View File

@@ -5,21 +5,18 @@ import (
"fmt"
"github.com/defval/di"
"github.com/etherlabsio/healthcheck/v2"
"github.com/spf13/viper"
db2 "ely.by/chrly/internal/db"
"ely.by/chrly/internal/db"
"ely.by/chrly/internal/db/redis"
es "ely.by/chrly/internal/eventsubscribers"
"ely.by/chrly/internal/mojang"
"ely.by/chrly/internal/profiles"
)
// v4 had the idea that it would be possible to separate backends for storing skins and capes.
// But in v5 the storage will be unified, so this is just temporary constructors before large reworking.
//
// Since there are no options for selecting target backends,
// all constants in this case point to static specific implementations.
var db = di.Options(
var dbDeOptions = di.Options(
di.Provide(newRedis,
di.As(new(profiles.ProfilesRepository)),
di.As(new(profiles.ProfilesFinder)),
@@ -34,7 +31,7 @@ func newRedis(container *di.Container, config *viper.Viper) (*redis.Redis, error
conn, err := redis.New(
context.Background(),
db2.NewZlibEncoder(&db2.JsonSerializer{}),
db.NewZlibEncoder(&db.JsonSerializer{}),
fmt.Sprintf("%s:%d", config.GetString("storage.redis.host"), config.GetInt("storage.redis.port")),
config.GetInt("storage.redis.poolSize"),
)
@@ -45,7 +42,7 @@ func newRedis(container *di.Container, config *viper.Viper) (*redis.Redis, error
if err := container.Provide(func() *namedHealthChecker {
return &namedHealthChecker{
Name: "redis",
Checker: es.DatabaseChecker(conn),
Checker: healthcheck.CheckerFunc(conn.Ping),
}
}); err != nil {
return nil, err

View File

@@ -4,14 +4,13 @@ import "github.com/defval/di"
func New() (*di.Container, error) {
return di.New(
config,
dispatcher,
logger,
db,
mojangTextures,
handlers,
profilesDi,
server,
configDiOptions,
loggerDiOptions,
dbDeOptions,
mojangDiOptions,
handlersDiOptions,
profilesDiOptions,
serverDiOptions,
securityDiOptions,
)
}

View File

@@ -1,34 +0,0 @@
package di
import (
"github.com/defval/di"
"github.com/mono83/slf"
d "ely.by/chrly/internal/dispatcher"
"ely.by/chrly/internal/eventsubscribers"
"ely.by/chrly/internal/http"
)
var dispatcher = di.Options(
di.Provide(newDispatcher,
di.As(new(d.Emitter)),
di.As(new(d.Subscriber)),
di.As(new(http.Emitter)),
di.As(new(eventsubscribers.Subscriber)),
),
di.Invoke(enableEventsHandlers),
)
func newDispatcher() d.Dispatcher {
return d.New()
}
func enableEventsHandlers(
dispatcher d.Subscriber,
logger slf.Logger,
statsReporter slf.StatsReporter,
) {
// TODO: use idea from https://github.com/defval/di/issues/10#issuecomment-615869852
(&eventsubscribers.Logger{Logger: logger}).ConfigureWithDispatcher(dispatcher)
(&eventsubscribers.StatsReporter{StatsReporter: statsReporter}).ConfigureWithDispatcher(dispatcher)
}

View File

@@ -1,8 +1,8 @@
package di
import (
"errors"
"net/http"
"slices"
"strings"
"github.com/defval/di"
@@ -13,7 +13,7 @@ import (
. "ely.by/chrly/internal/http"
)
var handlers = di.Options(
var handlersDiOptions = di.Options(
di.Provide(newHandlerFactory, di.As(new(http.Handler))),
di.Provide(newSkinsystemHandler, di.WithName("skinsystem")),
di.Provide(newApiHandler, di.WithName("api")),
@@ -22,7 +22,6 @@ var handlers = di.Options(
func newHandlerFactory(
container *di.Container,
config *viper.Viper,
emitter Emitter,
) (*mux.Router, error) {
enabledModules := config.GetStringSlice("modules")
@@ -31,7 +30,7 @@ func newHandlerFactory(
// if you set an empty prefix. Since the main application should be mounted at the root prefix,
// we use it as the base router
var router *mux.Router
if hasValue(enabledModules, "skinsystem") {
if slices.Contains(enabledModules, "skinsystem") {
if err := container.Resolve(&router, di.Name("skinsystem")); err != nil {
return nil, err
}
@@ -40,13 +39,13 @@ func newHandlerFactory(
}
router.StrictSlash(true)
requestEventsMiddleware := CreateRequestEventsMiddleware(emitter, "skinsystem")
requestEventsMiddleware := CreateRequestEventsMiddleware()
router.Use(requestEventsMiddleware)
// NotFoundHandler doesn't call for registered middlewares, so we must wrap it manually.
// See https://github.com/gorilla/mux/issues/416#issuecomment-600079279
router.NotFoundHandler = requestEventsMiddleware(http.HandlerFunc(NotFoundHandler))
if hasValue(enabledModules, "api") {
if slices.Contains(enabledModules, "api") {
var apiRouter *mux.Router
if err := container.Resolve(&apiRouter, di.Name("api")); err != nil {
return nil, err
@@ -62,11 +61,6 @@ func newHandlerFactory(
mount(router, "/api", apiRouter)
}
err := container.Invoke(enableReporters)
if err != nil && !errors.Is(err, di.ErrTypeNotExists) {
return nil, err
}
// Resolve health checkers last, because all the services required by the application
// must first be initialized and each of them can publish its own checkers
var healthCheckers []*namedHealthChecker
@@ -108,16 +102,6 @@ func newApiHandler(profilesManager ProfilesManager) *mux.Router {
}).Handler()
}
func hasValue(slice []string, needle string) bool {
for _, value := range slice {
if value == needle {
return true
}
}
return false
}
func mount(router *mux.Router, path string, handler http.Handler) {
router.PathPrefix(path).Handler(
http.StripPrefix(

View File

@@ -1,26 +1,21 @@
package di
import (
"os"
"github.com/defval/di"
"github.com/getsentry/raven-go"
"github.com/mono83/slf"
"github.com/mono83/slf/rays"
"github.com/mono83/slf/recievers/sentry"
"github.com/mono83/slf/recievers/statsd"
"github.com/mono83/slf/recievers/writer"
"github.com/mono83/slf/wd"
"github.com/spf13/viper"
"ely.by/chrly/internal/eventsubscribers"
"ely.by/chrly/internal/version"
)
var logger = di.Options(
var loggerDiOptions = di.Options(
di.Provide(newLogger),
di.Provide(newSentry),
di.Provide(newStatsReporter),
)
type loggerParams struct {
@@ -71,34 +66,3 @@ func newSentry(config *viper.Viper) (*raven.Client, error) {
return ravenClient, nil
}
func newStatsReporter(config *viper.Viper) (slf.StatsReporter, error) {
dispatcher := &slf.Dispatcher{}
statsdAddr := config.GetString("statsd.addr")
if statsdAddr != "" {
hostname, err := os.Hostname()
if err != nil {
return nil, err
}
statsdReceiver, err := statsd.NewReceiver(statsd.Config{
Address: statsdAddr,
Prefix: "ely.skinsystem." + hostname + ".app.",
FlushEvery: 1,
})
if err != nil {
return nil, err
}
dispatcher.AddReceiver(statsdReceiver)
}
return wd.Custom("", "", dispatcher), nil
}
func enableReporters(reporter slf.StatsReporter, factories []eventsubscribers.Reporter) {
for _, factory := range factories {
factory.Enable(reporter)
}
}

View File

@@ -12,7 +12,7 @@ import (
"ely.by/chrly/internal/profiles"
)
var mojangTextures = di.Options(
var mojangDiOptions = di.Options(
di.Provide(newMojangApi),
di.Provide(newMojangTexturesProviderFactory),
di.Provide(newMojangTexturesProvider),

View File

@@ -7,7 +7,7 @@ import (
"ely.by/chrly/internal/profiles"
)
var profilesDi = di.Options(
var profilesDiOptions = di.Options(
di.Provide(newProfilesManager, di.As(new(ProfilesManager))),
di.Provide(newProfilesProvider, di.As(new(ProfilesProvider))),
)

View File

@@ -15,7 +15,7 @@ import (
"ely.by/chrly/internal/security"
)
var server = di.Options(
var serverDiOptions = di.Options(
di.Provide(newAuthenticator, di.As(new(Authenticator))),
di.Provide(newServer),
)