add the feature for observability

This commit is contained in:
Manendra Pal Singh
2025-11-13 13:16:34 +05:30
parent ac27fa0666
commit 610353aac1
8 changed files with 373 additions and 31 deletions

View File

@@ -16,6 +16,7 @@ import (
"github.com/beckn-one/beckn-onix/core/module"
"github.com/beckn-one/beckn-onix/core/module/handler"
"github.com/beckn-one/beckn-onix/pkg/log"
"github.com/beckn-one/beckn-onix/pkg/metrics"
"github.com/beckn-one/beckn-onix/pkg/plugin"
)
@@ -23,6 +24,7 @@ import (
type Config struct {
AppName string `yaml:"appName"`
Log log.Config `yaml:"log"`
Metrics metrics.Config `yaml:"metrics"`
PluginManager *plugin.ManagerConfig `yaml:"pluginManager"`
Modules []module.Config `yaml:"modules"`
HTTP httpConfig `yaml:"http"`
@@ -94,6 +96,16 @@ func validateConfig(cfg *Config) error {
// newServer creates and initializes the HTTP server.
func newServer(ctx context.Context, mgr handler.PluginManager, cfg *Config) (http.Handler, error) {
mux := http.NewServeMux()
// Register /metrics endpoint if metrics are enabled
if metrics.IsEnabled() {
metricsHandler := metrics.MetricsHandler()
if metricsHandler != nil {
mux.Handle("/metrics", metricsHandler)
log.Infof(ctx, "Metrics endpoint registered at /metrics")
}
}
err := module.Register(ctx, cfg.Modules, mux, mgr)
if err != nil {
return nil, fmt.Errorf("failed to register modules: %w", err)
@@ -117,6 +129,24 @@ func run(ctx context.Context, configPath string) error {
return fmt.Errorf("failed to initialize logger: %w", err)
}
// Initialize metrics.
log.Infof(ctx, "Initializing metrics with config: %+v", cfg.Metrics)
if err := metrics.InitMetrics(cfg.Metrics); err != nil {
return fmt.Errorf("failed to initialize metrics: %w", err)
}
if err := metrics.InitAllMetrics(); err != nil {
return err
}
if metrics.IsEnabled() {
closers = append(closers, func() {
shutdownCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := metrics.Shutdown(shutdownCtx); err != nil {
log.Errorf(ctx, err, "Failed to shutdown metrics: %v", err)
}
})
}
// Initialize plugin manager.
log.Infof(ctx, "Initializing plugin manager")
mgr, closer, err := newManagerFunc(ctx, cfg.PluginManager)