update the as per the comment

This commit is contained in:
Manendra Pal Singh
2025-12-15 12:12:33 +05:30
parent c367a970d1
commit 17d9ca865d
8 changed files with 96 additions and 81 deletions

View File

@@ -17,7 +17,6 @@ import (
"github.com/beckn-one/beckn-onix/core/module/handler"
"github.com/beckn-one/beckn-onix/pkg/log"
"github.com/beckn-one/beckn-onix/pkg/plugin"
"github.com/beckn-one/beckn-onix/pkg/telemetry"
)
// ApplicationPlugins holds application-level plugin configurations.
@@ -99,29 +98,24 @@ func validateConfig(cfg *Config) error {
}
// initPlugins initializes application-level plugins including telemetry.
func initPlugins(ctx context.Context, mgr *plugin.Manager, otelSetupCfg *plugin.Config) (*telemetry.Provider, error) {
func initPlugins(ctx context.Context, mgr *plugin.Manager, otelSetupCfg *plugin.Config) error {
if otelSetupCfg == nil {
log.Info(ctx, "Telemetry config not provided; skipping OpenTelemetry setup")
return nil, nil
return nil
}
log.Infof(ctx, "Initializing telemetry via plugin id=%s", otelSetupCfg.ID)
otelProvider, err := mgr.OtelSetup(ctx, otelSetupCfg)
_, err := mgr.OtelSetup(ctx, otelSetupCfg)
if err != nil {
return nil, fmt.Errorf("failed to initialize telemetry plugin: %w", err)
return fmt.Errorf("failed to initialize telemetry plugin: %w", err)
}
return otelProvider, nil
return nil
}
// newServer creates and initializes the HTTP server.
func newServer(ctx context.Context, mgr handler.PluginManager, cfg *Config, otelProvider *telemetry.Provider) (http.Handler, error) {
func newServer(ctx context.Context, mgr handler.PluginManager, cfg *Config) (http.Handler, error) {
mux := http.NewServeMux()
if otelProvider != nil && otelProvider.MetricsHandler != nil {
mux.Handle("/metrics", otelProvider.MetricsHandler)
log.Infof(ctx, "Metrics endpoint registered at /metrics")
}
if err := module.Register(ctx, cfg.Modules, mux, mgr); err != nil {
return nil, fmt.Errorf("failed to register modules: %w", err)
}
@@ -154,14 +148,13 @@ func run(ctx context.Context, configPath string) error {
log.Debug(ctx, "Plugin manager loaded.")
// Initialize plugins including telemetry.
otelProvider, err := initPlugins(ctx, mgr, cfg.Plugins.OtelSetup)
if err != nil {
if err := initPlugins(ctx, mgr, cfg.Plugins.OtelSetup); err != nil {
return fmt.Errorf("failed to initialize plugins: %w", err)
}
// Initialize HTTP server.
log.Infof(ctx, "Initializing HTTP server")
srv, err := newServerFunc(ctx, mgr, cfg, otelProvider)
srv, err := newServerFunc(ctx, mgr, cfg)
if err != nil {
return fmt.Errorf("failed to initialize server: %w", err)
}

View File

@@ -15,7 +15,6 @@ import (
"github.com/beckn-one/beckn-onix/core/module/handler"
"github.com/beckn-one/beckn-onix/pkg/plugin"
"github.com/beckn-one/beckn-onix/pkg/plugin/definition"
"github.com/beckn-one/beckn-onix/pkg/telemetry"
"github.com/stretchr/testify/mock"
)
@@ -125,7 +124,7 @@ func TestRunSuccess(t *testing.T) {
defer func() { newManagerFunc = originalNewManager }()
originalNewServer := newServerFunc
newServerFunc = func(ctx context.Context, mgr handler.PluginManager, cfg *Config, provider *telemetry.Provider) (http.Handler, error) {
newServerFunc = func(ctx context.Context, mgr handler.PluginManager, cfg *Config) (http.Handler, error) {
return http.NewServeMux(), nil
}
defer func() { newServerFunc = originalNewServer }()
@@ -176,14 +175,19 @@ func TestRunFailure(t *testing.T) {
// Mock dependencies
originalNewManager := newManagerFunc
// newManagerFunc = func(ctx context.Context, cfg *plugin.ManagerConfig) (*plugin.Manager, func(), error) {
// return tt.mockMgr()
// }
newManagerFunc = nil
// Ensure newManagerFunc is never nil to avoid panic if invoked.
newManagerFunc = func(ctx context.Context, cfg *plugin.ManagerConfig) (*plugin.Manager, func(), error) {
_, closer, err := tt.mockMgr()
if err != nil {
return nil, closer, err
}
// Return a deterministic error so the code path exits cleanly if reached.
return nil, closer, errors.New("mock manager error")
}
defer func() { newManagerFunc = originalNewManager }()
originalNewServer := newServerFunc
newServerFunc = func(ctx context.Context, mgr handler.PluginManager, cfg *Config, provider *telemetry.Provider) (http.Handler, error) {
originalNewServer := newServerFunc
newServerFunc = func(ctx context.Context, mgr handler.PluginManager, cfg *Config) (http.Handler, error) {
return tt.mockServer(ctx, mgr, cfg)
}
defer func() { newServerFunc = originalNewServer }()
@@ -314,7 +318,7 @@ func TestNewServerSuccess(t *testing.T) {
},
}
handler, err := newServer(context.Background(), mockMgr, cfg, nil)
handler, err := newServer(context.Background(), mockMgr, cfg)
if err != nil {
t.Errorf("Expected no error, but got: %v", err)
@@ -359,7 +363,7 @@ func TestNewServerFailure(t *testing.T) {
},
}
handler, err := newServer(context.Background(), mockMgr, cfg, nil)
handler, err := newServer(context.Background(), mockMgr, cfg)
if err == nil {
t.Errorf("Expected an error, but got nil")

View File

@@ -2,7 +2,6 @@ package main
import (
"context"
"net/http/httptest"
"testing"
"github.com/beckn-one/beckn-onix/pkg/plugin/implementation/otelsetup"
@@ -21,12 +20,6 @@ func TestMetricsEndpointExposesPrometheus(t *testing.T) {
require.NoError(t, err)
defer provider.Shutdown(context.Background())
rec := httptest.NewRecorder()
req := httptest.NewRequest("GET", "/metrics", nil)
provider.MetricsHandler.ServeHTTP(rec, req)
require.Equal(t, 200, rec.Code)
body := rec.Body.String()
require.Contains(t, body, "# HELP")
require.Contains(t, body, "# TYPE")
// Metrics are served by the plugins own HTTP server; just ensure provider is initialized.
require.NotNil(t, provider.MeterProvider)
}