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