@@ -20,11 +20,12 @@ import (
20
20
"context"
21
21
"errors"
22
22
"fmt"
23
- posthogTelemetry "github.com/devtron-labs/common-lib/telemetry"
24
23
"net/http"
25
24
"os"
26
25
"time"
27
26
27
+ posthogTelemetry "github.com/devtron-labs/common-lib/telemetry"
28
+
28
29
authMiddleware "github.com/devtron-labs/authenticator/middleware"
29
30
"github.com/devtron-labs/common-lib/middlewares"
30
31
"github.com/devtron-labs/devtron/client/telemetry"
@@ -71,21 +72,31 @@ func (app *App) Start() {
71
72
app .MuxRouter .Init ()
72
73
//authEnforcer := casbin2.Create()
73
74
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
+ }()
79
82
server := & http.Server {Addr : fmt .Sprintf (":%d" , port ), Handler : authMiddleware .Authorizer (app .sessionManager , user .WhitelistChecker , app .userService .CheckUserStatusAndUpdateLoginAudit )(app .MuxRouter .Router )}
80
83
app .MuxRouter .Router .Use (middleware .PrometheusMiddleware )
81
84
app .MuxRouter .Router .Use (middlewares .Recovery )
82
85
app .server = server
83
86
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" )
89
100
}
90
101
91
102
func (app * App ) Stop () {
@@ -98,7 +109,10 @@ func (app *App) Stop() {
98
109
99
110
timeoutContext , _ := context .WithTimeout (context .Background (), 5 * time .Second )
100
111
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
+ }
102
116
if err != nil {
103
117
app .Logger .Errorw ("error in mux router shutdown" , "err" , err )
104
118
}
0 commit comments