Skip to content

Commit d6eae69

Browse files
committed
Upgrade Go Version and added added observability
1 parent e051015 commit d6eae69

File tree

10 files changed

+417
-33
lines changed

10 files changed

+417
-33
lines changed

.env.example

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,9 @@ MIGRATE_VERSION=v4.16.2
2525
LINT_VERSION=v1.59.1
2626
IMPORTS_VERSION=v0.24.0
2727
VULN_VERSION=v1.1.3
28+
29+
# ───────────────────────────────────────────────
30+
# 🌟 Jaeger Configruation
31+
# ───────────────────────────────────────────────
32+
JAEGER_AGENT_HOST=localhost
33+
JAEGER_AGENT_PORT=6831

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# ───────────────────────────────────────────────────────────
22
# 🌟 STAGE 1: BUILD GO APPLICATION
33
# ───────────────────────────────────────────────────────────
4-
FROM golang:1.21 AS builder
4+
FROM golang:1.23 AS builder
55

66
# Accept build arguments
77
ARG SERVER_PORT

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ The main ones are:
3434
- [mockery](https://vektra.github.io/mockery/) for generating mock interfaces
3535
- [uber/zap](go.uber.org/zap) for structured logging
3636
- [prometheus/client_golang](https://github.com/prometheus/client_golang) for metrics
37+
- [otel](https://opentelemetry.io/) for observability
38+
- [jaeger](https://www.jaegertracing.io/) for distributed tracing
3739

3840
## Project Structure
3941

config/config.go

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,28 @@ import (
55
"net/http"
66
"os"
77
"os/signal"
8+
"strconv"
89
"syscall"
910
"time"
1011

1112
"github.com/MitulShah1/golang-rest-api-template/internal/handlers"
1213
"github.com/MitulShah1/golang-rest-api-template/package/database"
1314
"github.com/MitulShah1/golang-rest-api-template/package/logger"
14-
15+
"github.com/MitulShah1/golang-rest-api-template/package/middleware"
1516
"github.com/joho/godotenv"
17+
tracesdk "go.opentelemetry.io/otel/sdk/trace"
1618
)
1719

1820
// Config holds application configuration
1921
type Service struct {
20-
Name string
21-
Logger *logger.Logger
22-
Server *handlers.Server
23-
dbEnv DBConfig
24-
srvConfg ServerConf
25-
db *database.Database
22+
Name string
23+
Logger *logger.Logger
24+
Server *handlers.Server
25+
dbEnv DBConfig
26+
srvConfg ServerConf
27+
jaegerConfig JaegerConfig
28+
db *database.Database
29+
tp *tracesdk.TracerProvider
2630
}
2731

2832
type DBConfig struct {
@@ -38,6 +42,11 @@ type ServerConf struct {
3842
Port string
3943
}
4044

45+
type JaegerConfig struct {
46+
AgentHost string
47+
AgentPort string
48+
}
49+
4150
func NewService() *Service {
4251
return &Service{
4352
Name: "go-rest-api-template",
@@ -71,9 +80,24 @@ func (cnf *Service) Init() (err error) {
7180

7281
cnf.Logger.Info("Database connection successful")
7382

83+
agentPort, _ := strconv.Atoi(cnf.jaegerConfig.AgentPort)
84+
tmCnfg := middleware.TelemetryConfig{
85+
Host: cnf.jaegerConfig.AgentHost,
86+
Port: agentPort,
87+
ServiceName: "go-rest-api-template",
88+
}
89+
90+
// initialize tracer
91+
cnf.tp, err = tmCnfg.InitTracer()
92+
if err != nil {
93+
return err
94+
}
95+
96+
cnf.Logger.Info("Tracer initialized")
97+
7498
//initiale server
7599
serverAddr := cnf.srvConfg.Address + ":" + cnf.srvConfg.Port
76-
if cnf.Server, err = handlers.NewServer(serverAddr, cnf.Logger, cnf.db); err != nil {
100+
if cnf.Server, err = handlers.NewServer(serverAddr, cnf.Logger, cnf.db, tmCnfg); err != nil {
77101
return err
78102
}
79103

@@ -106,6 +130,11 @@ func (cnf *Service) Run() error {
106130
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
107131
defer cancel()
108132

133+
// Shutdown the tracer provider
134+
if err := cnf.tp.Shutdown(ctx); err != nil {
135+
cnf.Logger.Error("Failed to shutdown tracer provider", "error", err)
136+
}
137+
109138
if err := cnf.Server.ServerDown(ctx); err != nil {
110139
cnf.Logger.Error("Server shutdown failed", "error", err)
111140
} else {
@@ -134,6 +163,12 @@ func (cnf *Service) LoadConfig() error {
134163
Port: getEnv("SERVER_PORT", "8080"),
135164
}
136165

166+
//Jaeger config
167+
cnf.jaegerConfig = JaegerConfig{
168+
AgentHost: getEnv("JAEGER_AGENT_HOST", "localhost"),
169+
AgentPort: getEnv("JAEGER_AGENT_PORT", "6831"),
170+
}
171+
137172
return nil
138173
}
139174

docker-compose.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ services:
5050
LINT_VERSION: ${LINT_VERSION}
5151
IMPORTS_VERSION: ${IMPORTS_VERSION}
5252
VULN_VERSION: ${VULN_VERSION}
53+
JAEGER_AGENT_HOST: ${JAEGER_AGENT_HOST}
54+
JAEGER_AGENT_PORT: ${JAEGER_AGENT_PORT}
5355
container_name: go_app
5456
restart: always
5557
depends_on:
@@ -62,6 +64,25 @@ services:
6264
networks:
6365
- app_network
6466

67+
# ───────────────────────────────────────────────────────────
68+
# 🌟 JAEGER
69+
# ───────────────────────────────────────────────────────────
70+
jaeger:
71+
image: jaegertracing/all-in-one:1.6
72+
environment:
73+
- LOG_LEVEL=debug
74+
ports:
75+
- 5775:5775/udp
76+
- 6831:6831/udp
77+
- 6832:6832/udp
78+
- 5778:5778
79+
- 16686:16686
80+
- 14268:14268
81+
- 9411:9411
82+
networks:
83+
- app_network
84+
85+
6586
# ───────────────────────────────────────────────────────────
6687
# 🌟 NETWORK & VOLUME CONFIGURATION
6788
# ───────────────────────────────────────────────────────────

go.mod

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,26 @@
11
module github.com/MitulShah1/golang-rest-api-template
22

3-
go 1.21.0
3+
go 1.23.0
4+
5+
toolchain go1.23.8
46

57
require (
68
github.com/DATA-DOG/go-sqlmock v1.5.2
79
github.com/Masterminds/squirrel v1.5.4
8-
github.com/go-playground/validator/v10 v10.25.0
10+
github.com/go-playground/validator/v10 v10.26.0
911
github.com/go-sql-driver/mysql v1.9.1
1012
github.com/gorilla/mux v1.8.1
1113
github.com/jmoiron/sqlx v1.4.0
1214
github.com/joho/godotenv v1.5.1
1315
github.com/prometheus/client_golang v1.21.1
16+
github.com/prometheus/client_model v0.6.1
1417
github.com/stretchr/testify v1.10.0
1518
github.com/swaggo/http-swagger/v2 v2.0.2
1619
github.com/swaggo/swag v1.16.4
20+
go.opentelemetry.io/otel v1.35.0
21+
go.opentelemetry.io/otel/exporters/jaeger v1.17.0
22+
go.opentelemetry.io/otel/sdk v1.35.0
23+
go.opentelemetry.io/otel/trace v1.35.0
1724
go.uber.org/zap v1.27.0
1825
)
1926

@@ -24,12 +31,15 @@ require (
2431
github.com/cespare/xxhash/v2 v2.3.0 // indirect
2532
github.com/davecgh/go-spew v1.1.1 // indirect
2633
github.com/gabriel-vasile/mimetype v1.4.8 // indirect
34+
github.com/go-logr/logr v1.4.2 // indirect
35+
github.com/go-logr/stdr v1.2.2 // indirect
2736
github.com/go-openapi/jsonpointer v0.19.5 // indirect
2837
github.com/go-openapi/jsonreference v0.20.0 // indirect
2938
github.com/go-openapi/spec v0.20.6 // indirect
3039
github.com/go-openapi/swag v0.19.15 // indirect
3140
github.com/go-playground/locales v0.14.1 // indirect
3241
github.com/go-playground/universal-translator v0.18.1 // indirect
42+
github.com/google/uuid v1.6.0 // indirect
3343
github.com/josharian/intern v1.0.0 // indirect
3444
github.com/klauspost/compress v1.17.11 // indirect
3545
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect
@@ -38,16 +48,17 @@ require (
3848
github.com/mailru/easyjson v0.7.6 // indirect
3949
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
4050
github.com/pmezard/go-difflib v1.0.0 // indirect
41-
github.com/prometheus/client_model v0.6.1 // indirect
4251
github.com/prometheus/common v0.62.0 // indirect
4352
github.com/prometheus/procfs v0.15.1 // indirect
4453
github.com/stretchr/objx v0.5.2 // indirect
4554
github.com/swaggo/files/v2 v2.0.0 // indirect
55+
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
56+
go.opentelemetry.io/otel/metric v1.35.0 // indirect
4657
go.uber.org/multierr v1.10.0 // indirect
47-
golang.org/x/crypto v0.32.0 // indirect
58+
golang.org/x/crypto v0.33.0 // indirect
4859
golang.org/x/net v0.34.0 // indirect
49-
golang.org/x/sys v0.29.0 // indirect
50-
golang.org/x/text v0.21.0 // indirect
60+
golang.org/x/sys v0.30.0 // indirect
61+
golang.org/x/text v0.22.0 // indirect
5162
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect
5263
google.golang.org/protobuf v1.36.1 // indirect
5364
gopkg.in/yaml.v2 v2.4.0 // indirect

go.sum

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
1616
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1717
github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM=
1818
github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8=
19+
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
20+
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
21+
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
22+
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
23+
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
1924
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
2025
github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY=
2126
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
@@ -32,13 +37,15 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o
3237
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
3338
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
3439
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
35-
github.com/go-playground/validator/v10 v10.25.0 h1:5Dh7cjvzR7BRZadnsVOzPhWsrwUr0nmsZJxEAnFLNO8=
36-
github.com/go-playground/validator/v10 v10.25.0/go.mod h1:GGzBIJMuE98Ic/kJsBXbz1x/7cByt++cQ+YOuDM5wus=
40+
github.com/go-playground/validator/v10 v10.26.0 h1:SP05Nqhjcvz81uJaRfEV0YBSSSGMc/iMaVtFbr3Sw2k=
41+
github.com/go-playground/validator/v10 v10.26.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo=
3742
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
3843
github.com/go-sql-driver/mysql v1.9.1 h1:FrjNGn/BsJQjVRuSa8CBrM5BWA9BWoXXat3KrtSb/iI=
3944
github.com/go-sql-driver/mysql v1.9.1/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
40-
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
41-
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
45+
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
46+
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
47+
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
48+
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
4249
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
4350
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
4451
github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o=
@@ -86,8 +93,8 @@ github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ
8693
github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I=
8794
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
8895
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
89-
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
90-
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
96+
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
97+
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
9198
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
9299
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
93100
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
@@ -102,24 +109,36 @@ github.com/swaggo/http-swagger/v2 v2.0.2 h1:FKCdLsl+sFCx60KFsyM0rDarwiUSZ8DqbfSy
102109
github.com/swaggo/http-swagger/v2 v2.0.2/go.mod h1:r7/GBkAWIfK6E/OLnE8fXnviHiDeAHmgIyooa4xm3AQ=
103110
github.com/swaggo/swag v1.16.4 h1:clWJtd9LStiG3VeijiCfOVODP6VpHtKdQy9ELFG3s1A=
104111
github.com/swaggo/swag v1.16.4/go.mod h1:VBsHJRsDvfYvqoiMKnsdwhNV9LEMHgEDZcyVYX0sxPg=
112+
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
113+
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
114+
go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ=
115+
go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y=
116+
go.opentelemetry.io/otel/exporters/jaeger v1.17.0 h1:D7UpUy2Xc2wsi1Ras6V40q806WM07rqoCWzXu7Sqy+4=
117+
go.opentelemetry.io/otel/exporters/jaeger v1.17.0/go.mod h1:nPCqOnEH9rNLKqH/+rrUjiMzHJdV1BlpKcTwRTyKkKI=
118+
go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M=
119+
go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE=
120+
go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY=
121+
go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg=
122+
go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs=
123+
go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc=
105124
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
106125
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
107126
go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
108127
go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
109128
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
110129
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
111-
golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=
112-
golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
130+
golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus=
131+
golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M=
113132
golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
114133
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
115134
golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=
116135
golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
117-
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
118-
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
119-
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
120-
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
121-
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
122-
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
136+
golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
137+
golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
138+
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
139+
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
140+
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
141+
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
123142
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg=
124143
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
125144
google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk=

internal/handlers/server.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ type Server struct {
2828
logger *logger.Logger
2929
}
3030

31-
func NewServer(address string, logger *logger.Logger, db *database.Database) (*Server, error) {
31+
func NewServer(address string, logger *logger.Logger, db *database.Database, tm middleware.TelemetryConfig) (*Server, error) {
3232

3333
// Create a new router
3434
router := mux.NewRouter()
@@ -39,11 +39,16 @@ func NewServer(address string, logger *logger.Logger, db *database.Database) (*S
3939

4040
// Promotheus metrics
4141
promotheuseMiddleware := middleware.NewPrometheusMiddleware(middleware.Config{
42-
Namespace: "golang_rest_api_template",
43-
Subsystem: "http",
42+
DoNotUseRequestPathFor404: true,
4443
})
4544

46-
router.Use(promotheuseMiddleware.Middleware)
45+
mw := func(handler http.Handler) http.Handler {
46+
return promotheuseMiddleware.Middleware(
47+
tm.OpenTelemetryMiddleware(handler),
48+
)
49+
}
50+
51+
router.Use(mw)
4752

4853
router.Handle("/metrics", promhttp.Handler())
4954

0 commit comments

Comments
 (0)