Skip to content

Commit 1ae65fb

Browse files
authored
Merge pull request #6824 from devtron-labs/ea-fail-fix-main
fix: error handler correction
2 parents fb357a5 + f397703 commit 1ae65fb

File tree

2 files changed

+48
-18
lines changed

2 files changed

+48
-18
lines changed

client/telemetry/TelemetryEventClient.go

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -133,17 +133,29 @@ func NewTelemetryEventClientImpl(logger *zap.SugaredLogger, client *http.Client,
133133

134134
func (impl *TelemetryEventClientImpl) GetCloudProvider() (string, error) {
135135
// assumption: the IMDS server will be reachable on startup
136+
// Return cached value or "unknown" if identification is still in progress
136137
if len(impl.telemetryConfig.cloudProvider) == 0 {
137-
provider, err := impl.cloudProviderIdentifierService.IdentifyProvider()
138-
if err != nil {
139-
impl.logger.Errorw("exception while getting cluster provider", "error", err)
140-
return "", err
141-
}
142-
impl.telemetryConfig.cloudProvider = provider
138+
// Return unknown for now, background identification will update this
139+
return "unknown", nil
143140
}
144141
return impl.telemetryConfig.cloudProvider, nil
145142
}
146143

144+
// identifyCloudProviderAsync runs cloud provider identification in background
145+
func (impl *TelemetryEventClientImpl) identifyCloudProviderAsync() {
146+
impl.logger.Info("Starting cloud provider identification in background")
147+
148+
provider, err := impl.cloudProviderIdentifierService.IdentifyProvider()
149+
if err != nil {
150+
impl.logger.Errorw("exception while getting cluster provider", "error", err)
151+
impl.telemetryConfig.cloudProvider = "unknown"
152+
return
153+
}
154+
155+
impl.telemetryConfig.cloudProvider = provider
156+
impl.logger.Infow("Cloud provider identified", "provider", provider)
157+
}
158+
147159
func (impl *TelemetryEventClientImpl) StopCron() {
148160
impl.cron.Stop()
149161
}
@@ -341,6 +353,10 @@ func (impl *TelemetryEventClientImpl) GetTelemetryMetaInfo() (*TelemetryMetaInfo
341353

342354
func (impl *TelemetryEventClientImpl) SendTelemetryInstallEventEA() (*TelemetryEventType, error) {
343355
ucid, err := impl.getUCIDAndCheckIsOptedOut(context.Background())
356+
357+
// Start cloud provider identification in background to avoid blocking startup
358+
go impl.identifyCloudProviderAsync()
359+
344360
if err != nil {
345361
impl.logger.Errorw("exception while getting unique client id", "error", err)
346362
return nil, err

cmd/external-app/externalApp.go

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@ import (
2020
"context"
2121
"errors"
2222
"fmt"
23-
posthogTelemetry "github.com/devtron-labs/common-lib/telemetry"
2423
"net/http"
2524
"os"
2625
"time"
2726

27+
posthogTelemetry "github.com/devtron-labs/common-lib/telemetry"
28+
2829
authMiddleware "github.com/devtron-labs/authenticator/middleware"
2930
"github.com/devtron-labs/common-lib/middlewares"
3031
"github.com/devtron-labs/devtron/client/telemetry"
@@ -71,21 +72,31 @@ func (app *App) Start() {
7172
app.MuxRouter.Init()
7273
//authEnforcer := casbin2.Create()
7374

74-
_, err := app.telemetry.SendTelemetryInstallEventEA()
75-
76-
if err != nil {
77-
app.Logger.Warnw("telemetry installation success event failed", "err", err)
78-
}
75+
// Send telemetry event asynchronously to avoid blocking startup
76+
go func() {
77+
_, err := app.telemetry.SendTelemetryInstallEventEA()
78+
if err != nil {
79+
app.Logger.Warnw("telemetry installation success event failed", "err", err)
80+
}
81+
}()
7982
server := &http.Server{Addr: fmt.Sprintf(":%d", port), Handler: authMiddleware.Authorizer(app.sessionManager, user.WhitelistChecker, app.userService.CheckUserStatusAndUpdateLoginAudit)(app.MuxRouter.Router)}
8083
app.MuxRouter.Router.Use(middleware.PrometheusMiddleware)
8184
app.MuxRouter.Router.Use(middlewares.Recovery)
8285
app.server = server
8386

84-
err = server.ListenAndServe()
85-
if err != nil && !errors.Is(err, http.ErrServerClosed) {
86-
app.Logger.Errorw("error in startup", "err", err)
87-
os.Exit(2)
88-
}
87+
// Start server in goroutine to make it non-blocking
88+
go func() {
89+
app.Logger.Info("HTTP server starting to listen")
90+
err := server.ListenAndServe()
91+
if err != nil && !errors.Is(err, http.ErrServerClosed) {
92+
app.Logger.Errorw("error in startup", "err", err)
93+
os.Exit(2)
94+
}
95+
}()
96+
97+
// Give server a moment to start listening
98+
time.Sleep(1 * time.Second)
99+
app.Logger.Info("HTTP server should be ready for health checks")
89100
}
90101

91102
func (app *App) Stop() {
@@ -98,7 +109,10 @@ func (app *App) Stop() {
98109

99110
timeoutContext, _ := context.WithTimeout(context.Background(), 5*time.Second)
100111
app.Logger.Infow("closing router")
101-
err := app.server.Shutdown(timeoutContext)
112+
var err error
113+
if app.server != nil {
114+
err = app.server.Shutdown(timeoutContext)
115+
}
102116
if err != nil {
103117
app.Logger.Errorw("error in mux router shutdown", "err", err)
104118
}

0 commit comments

Comments
 (0)