@@ -10,19 +10,25 @@ import (
1010
1111 "github.com/gorilla/mux"
1212
13+ "go.opentelemetry.io/otel"
14+ "go.opentelemetry.io/otel/exporters/otlp/otlptrace"
15+ "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
16+ "google.golang.org/grpc"
17+
1318 "github.com/hammer-code/lms-be/app"
1419 "github.com/hammer-code/lms-be/config"
1520 "github.com/hammer-code/lms-be/constants"
1621 _ "github.com/hammer-code/lms-be/docs"
1722 "github.com/hammer-code/lms-be/domain"
23+ "github.com/hammer-code/lms-be/pkg/ngelog"
1824 "github.com/hammer-code/lms-be/utils"
19- "github.com/sirupsen/logrus"
2025 httpSwagger "github.com/swaggo/http-swagger"
2126
2227 // _ "swagger-mux/docs"
2328 "github.com/rs/cors"
2429 "github.com/spf13/cobra"
2530 "github.com/swaggo/swag"
31+ sdktrace "go.opentelemetry.io/otel/sdk/trace"
2632)
2733
2834var serveHttpCmd = & cobra.Command {
@@ -33,13 +39,25 @@ var serveHttpCmd = &cobra.Command{
3339 // load add package serve http here
3440 ctx := context .Background ()
3541
42+ // Init OpenTelemetry
43+ exporter := newOTLPTraceExporter (ctx , "localhost:4317" )
44+
45+ tp := sdktrace .NewTracerProvider (
46+ sdktrace .WithBatcher (exporter ),
47+ sdktrace .WithSampler (sdktrace .AlwaysSample ()), // <--- force sampling
48+ )
49+
50+ otel .SetTracerProvider (tp )
51+
3652 cfg := config .GetConfig ()
3753
54+ ngelog .SetNameSpace (cfg .APP_NAME )
55+ ngelog .SetNameSpace (cfg .APP_ENV )
56+
3857 app := app .InitApp (cfg )
3958
4059 // route
4160 router := registerHandler (app )
42- router .Use (app .Middleware .LogMiddleware )
4361
4462 // build cors
4563 muxCorsWithRouter := cors .AllowAll ().Handler (router )
@@ -51,34 +69,21 @@ var serveHttpCmd = &cobra.Command{
5169
5270 go func () {
5371 done := make (chan os.Signal , 1 )
54-
5572 signal .Notify (done , os .Interrupt , syscall .SIGINT , syscall .SIGTERM )
5673 <- done
57- logrus .Info ("svr.Shutdown: start shutdown" )
74+ ngelog .Info (ctx , "service shutdown" )
5875 if err := srv .Shutdown (ctx ); err == context .DeadlineExceeded {
59- logrus .Error ("svr.Shutdown: context deadline exceeded" , err )
76+ ngelog .Error (ctx , "svr.Shutdown: context deadline exceeded" , err )
6077 }
61- logrus .Info ("svr.Shutdown: shutdown success" )
6278 }()
6379
64- logrus .Info (fmt .Sprintf ("server started, running on port %s" , cfg .APP_PORT ))
80+ ngelog .Info (ctx , fmt .Sprintf ("server started, running on port %s" , cfg .APP_PORT ))
6581 if err := srv .ListenAndServe (); err != nil && err != http .ErrServerClosed {
66- logrus .Fatal ("starting server failed" , err )
82+ ngelog .Fatal (ctx , "starting server failed" , err )
6783 }
6884 },
6985}
7086
71- // func LoadJSON(path string) string {
72- // jsonBytes, err := os.ReadFile(path)
73-
74- // // jsonBytes, err := os.ReadFile("documentation/users.json")
75- // if err != nil {
76- // fmt.Println("Error reading JSON file:", err)
77- // return ""
78- // }
79- // return string(jsonBytes)
80- // }
81-
8287func LoadJSON (path string ) string {
8388 jsonBytes , err := os .ReadFile (path )
8489
@@ -105,7 +110,13 @@ func init() {
105110
106111}
107112
108- func health (w http.ResponseWriter , _ * http.Request ) {
113+ func health (w http.ResponseWriter , r * http.Request ) {
114+ tracer := otel .Tracer ("Test Trace" )
115+
116+ ctx , span := tracer .Start (r .Context (), "health controller" )
117+ defer span .End ()
118+
119+ ngelog .Info (ctx , "service health good" )
109120 utils .Response (domain.HttpResponse {
110121 Code : 200 ,
111122 Message : "good" ,
@@ -116,6 +127,7 @@ func health(w http.ResponseWriter, _ *http.Request) {
116127func registerHandler (app app.App ) * mux.Router {
117128
118129 router := mux .NewRouter ()
130+ router .Use (app .Middleware .LogMiddleware )
119131 router .HandleFunc ("/health" , health )
120132
121133 router .PathPrefix ("/docs/" ).Handler (httpSwagger .WrapHandler )
@@ -168,3 +180,17 @@ func registerHandler(app app.App) *mux.Router {
168180
169181 return router
170182}
183+
184+ func newOTLPTraceExporter (ctx context.Context , otlpEndpoint string ) * otlptrace.Exporter {
185+ traceClient := otlptracegrpc .NewClient (
186+ otlptracegrpc .WithInsecure (),
187+ otlptracegrpc .WithEndpoint (otlpEndpoint ),
188+ otlptracegrpc .WithDialOption (grpc .WithBlock ()))
189+ traceExp , err := otlptrace .New (ctx , traceClient )
190+ if err != nil {
191+ // ngelog.Fatal().Err(err).Msgf("Failed to create the collector trace exporter")
192+ ngelog .FatalPanic (ctx , "Failed to create the collector trace exporter" , err )
193+ }
194+
195+ return traceExp
196+ }
0 commit comments