mirror of
https://github.com/elyby/chrly.git
synced 2025-05-31 14:11:51 +05:30
Remove dispatcher and eventsubscribers modules, remove statsd integration, remove event bus usage. Overall cleanup before otel integration
This commit is contained in:
@@ -5,7 +5,7 @@ import (
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
var config = di.Options(
|
||||
var configDiOptions = di.Options(
|
||||
di.Provide(newConfig),
|
||||
)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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(
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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),
|
||||
@@ -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))),
|
||||
)
|
||||
|
||||
@@ -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),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user