Skip to content

Commit 62254e5

Browse files
authored
Metrics (#7)
* adding open telemetry * metrics cleanup and engine version * remove unwanted spaces
1 parent b0f502d commit 62254e5

21 files changed

Lines changed: 683 additions & 147 deletions

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99
### Added
1010
- Upcoming changes...
1111

12+
## [1.3.0] - 2023-08-31
13+
### Added
14+
- Added Open Telemetry (OTEL) support
15+
- Requires an OTEL Collector running gRPC
16+
1217
## [1.2.3] - 2023-08-25
1318
### Added
1419
- Added HEAD support for the following endpoints:
@@ -72,3 +77,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7277
[1.2.1]: https://github.com/scanoss/api.go/compare/v1.2.0...v1.2.1
7378
[1.2.2]: https://github.com/scanoss/api.go/compare/v1.2.1...v1.2.2
7479
[1.2.3]: https://github.com/scanoss/api.go/compare/v1.2.2...v1.2.3
80+
[1.3.0]: https://github.com/scanoss/api.go/compare/v1.2.3...v1.3.0

Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ int_test: clean_testcache ## Run all integration tests in the tests folder
3939
lint_local: ## Run local instance of linting across the code base
4040
golangci-lint run ./...
4141

42+
lint_local_fix: ## Run local instance of linting across the code base with FIX option
43+
golangci-lint run ./... --fix
44+
4245
lint_docker: ## Run docker instance of linting across the code base
4346
docker run --rm -v $(pwd):/app -v ~/.cache/golangci-lint/v1.50.1:/root/.cache -w /app golangci/golangci-lint:v1.50.1 golangci-lint run ./...
4447

README.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,19 @@ The order in which these are loaded is as follows:
8080

8181
The most up-to-date configuration options can be found in [server_config.go](pkg/config/server_config.go).
8282

83+
### Observability
84+
85+
This service supports emitting metrics/traces using the Open Telemetry framework (OTEL).
86+
By default, this is disabled. It can be switched on from the configuration (`Telemetry -> Enabled`).
87+
88+
The service emits the following to [OLTP gRPC collector](https://github.com/open-telemetry/opentelemetry-collector):
89+
- Traces
90+
- HTTP requests
91+
- Including traces/spans in logging
92+
- Metrics
93+
- Request counts
94+
- Request duration
95+
8396
## Development
8497

8598
### Run Local

config/app-config-prod.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
],
1616
"ConfigFile": ""
1717
},
18+
"Telemetry": {
19+
"Enabled": false,
20+
"OltpExporter": "0.0.0.0:4317"
21+
},
1822
"Scanning": {
1923
"WfpLoc": "",
2024
"ScanBinary": "scanoss",

go.mod

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,52 @@ module scanoss.com/go-api
33
go 1.19
44

55
require (
6-
github.com/go-co-op/gocron v1.31.0
6+
github.com/go-co-op/gocron v1.33.0
77
github.com/golobby/config/v3 v3.4.2
8-
github.com/google/uuid v1.3.0
8+
github.com/google/uuid v1.3.1
99
github.com/gorilla/mux v1.8.0
1010
github.com/jpillora/ipfilter v1.2.9
1111
github.com/scanoss/zap-logging-helper v0.2.0
1212
github.com/stretchr/testify v1.8.4
13-
go.uber.org/zap v1.24.0
13+
go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux v0.43.0
14+
go.opentelemetry.io/otel v1.17.0
15+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.40.0
16+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.17.0
17+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.17.0
18+
go.opentelemetry.io/otel/metric v1.17.0
19+
go.opentelemetry.io/otel/sdk v1.17.0
20+
go.opentelemetry.io/otel/sdk/metric v0.40.0
21+
go.opentelemetry.io/otel/trace v1.17.0
22+
go.uber.org/zap v1.25.0
1423
)
1524

1625
require (
17-
github.com/BurntSushi/toml v1.2.1 // indirect
26+
github.com/BurntSushi/toml v1.3.2 // indirect
27+
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
1828
github.com/davecgh/go-spew v1.1.1 // indirect
29+
github.com/felixge/httpsnoop v1.0.3 // indirect
30+
github.com/go-logr/logr v1.2.4 // indirect
31+
github.com/go-logr/stdr v1.2.2 // indirect
32+
github.com/golang/protobuf v1.5.3 // indirect
1933
github.com/golobby/cast v1.3.3 // indirect
2034
github.com/golobby/dotenv v1.3.2 // indirect
2135
github.com/golobby/env/v2 v2.2.4 // indirect
22-
github.com/phuslu/iploc v1.0.20230201 // indirect
36+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.17.1 // indirect
37+
github.com/phuslu/iploc v1.0.20230630 // indirect
2338
github.com/pmezard/go-difflib v1.0.0 // indirect
2439
github.com/robfig/cron/v3 v3.0.1 // indirect
2540
github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce // indirect
26-
go.uber.org/atomic v1.9.0 // indirect
27-
go.uber.org/multierr v1.6.0 // indirect
41+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.40.0 // indirect
42+
go.opentelemetry.io/proto/otlp v1.0.0 // indirect
43+
go.uber.org/atomic v1.11.0 // indirect
44+
go.uber.org/multierr v1.11.0 // indirect
45+
golang.org/x/net v0.14.0 // indirect
46+
golang.org/x/sys v0.11.0 // indirect
47+
golang.org/x/text v0.12.0 // indirect
48+
google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect
49+
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
50+
google.golang.org/grpc v1.57.0 // indirect
51+
google.golang.org/protobuf v1.31.0 // indirect
2852
gopkg.in/yaml.v3 v3.0.1 // indirect
2953
)
3054

go.sum

Lines changed: 74 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,26 @@
1-
github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak=
21
github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
3-
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
2+
github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
3+
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
4+
github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A=
5+
github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
6+
github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
47
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
58
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
69
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
710
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
8-
github.com/go-co-op/gocron v1.31.0 h1:8VaWk7ARDpsVYFP8SmjvHrBZQkcPQ7HyAzF7acG57yE=
9-
github.com/go-co-op/gocron v1.31.0/go.mod h1:39f6KNSGVOU1LO/ZOoZfcSxwlsJDQOKSu8erN0SH48Y=
11+
github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk=
12+
github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
13+
github.com/go-co-op/gocron v1.33.0 h1:lqQMwewbTIlh2/3l+1ieEjgseZ1AITe6YQQ5bCf0mhY=
14+
github.com/go-co-op/gocron v1.33.0/go.mod h1:NLi+bkm4rRSy1F8U7iacZOz0xPseMoIOnvabGoSe/no=
15+
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
16+
github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ=
17+
github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
18+
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
19+
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
20+
github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE=
21+
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
22+
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
23+
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
1024
github.com/golobby/cast v1.3.3 h1:s2Lawb9RMz7YyYf8IrfMQY4IFmA1R/lgfmj97Vc6fig=
1125
github.com/golobby/cast v1.3.3/go.mod h1:0oDO5IT84HTXcbLDf1YXuk0xtg/cRDrxhbpWKxwtJCY=
1226
github.com/golobby/config/v3 v3.4.2 h1:oIOSo24mC0A8f93ZTL24NDNw0hZ3Tbb34wc1ckn2CsA=
@@ -15,10 +29,14 @@ github.com/golobby/dotenv v1.3.2 h1:9vA8XqXXIB3cX/5xQ1CTbOCPegioHtHXIxeFng+uOqQ=
1529
github.com/golobby/dotenv v1.3.2/go.mod h1:9MMVXqzLNluhVxCv3X/DLYBNUb289f05tr+df1+7278=
1630
github.com/golobby/env/v2 v2.2.4 h1:sjdTe+bScPRWUIA1AQH95RHv52jM5Mns2XHwLyEbkzk=
1731
github.com/golobby/env/v2 v2.2.4/go.mod h1:HDJW+dHHwLxkb8FZMjBTBiZUFl1iAA4F9YX15kBC84c=
18-
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
19-
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
32+
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
33+
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
34+
github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
35+
github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
2036
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
2137
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
38+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.17.1 h1:LSsiG61v9IzzxMkqEr6nrix4miJI62xlRjwT7BYD2SM=
39+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.17.1/go.mod h1:Hbb13e3/WtqQ8U5hLGkek9gJvBLasHuPFI0UEGfnQ10=
2240
github.com/jpillora/ipfilter v1.2.9 h1:vjjcI1JpxZ6HvIj1MZfomhrfzXW/67QNdE449ZZfon8=
2341
github.com/jpillora/ipfilter v1.2.9/go.mod h1:QUYQLXQU0myCdxZVbYBZ5+An/qtSB2m1OBRiwqTa9pk=
2442
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
@@ -30,18 +48,18 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
3048
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
3149
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
3250
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
33-
github.com/phuslu/iploc v1.0.20230201 h1:AMhy7j8z0N5iI0jaqh514KTDEB7wVdQJ4Y4DJPCvKBU=
3451
github.com/phuslu/iploc v1.0.20230201/go.mod h1:gsgExGWldwv1AEzZm+Ki9/vGfyjkL33pbSr9HGpt2Xg=
52+
github.com/phuslu/iploc v1.0.20230630 h1:GK+3DJNqdvCNm7OU6sqfjEr4Sx1acx0DPaYxzzwWgbw=
53+
github.com/phuslu/iploc v1.0.20230630/go.mod h1:gsgExGWldwv1AEzZm+Ki9/vGfyjkL33pbSr9HGpt2Xg=
3554
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
36-
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
3755
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
3856
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
3957
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
4058
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
4159
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
4260
github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o=
43-
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
4461
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
62+
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
4563
github.com/scanoss/zap-logging-helper v0.2.0 h1:r1HM/lalRZkkZU/3RQoIQJmZtzWsoAQr6Eqy/FRxWR8=
4664
github.com/scanoss/zap-logging-helper v0.2.0/go.mod h1:5AGYjct4soPR/1wGE5AmL2M7sgCcOSlnWrTliF5d2Xw=
4765
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -56,14 +74,54 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU
5674
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
5775
github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce h1:fb190+cK2Xz/dvi9Hv8eCYJYvIGUTN2/KLq1pT6CjEc=
5876
github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4=
59-
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
60-
go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
77+
go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux v0.43.0 h1:1S+AB8v6zJf52DsSI/6SGH0uVeYhosHZ9Vpw2poIo2M=
78+
go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux v0.43.0/go.mod h1:lWkJ2qSWnz7y0hVKFWcDzmdZy5h+DTBeQKZHotTvqPI=
79+
go.opentelemetry.io/otel v1.17.0 h1:MW+phZ6WZ5/uk2nd93ANk/6yJ+dVrvNWUjGhnnFU5jM=
80+
go.opentelemetry.io/otel v1.17.0/go.mod h1:I2vmBGtFaODIVMBSTPVDlJSzBDNf93k60E6Ft0nyjo0=
81+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.40.0 h1:MZbjiZeMmn5wFMORhozpouGKDxj9POHTuU5UA8msBQk=
82+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.40.0/go.mod h1:C7tOYVCJmrDTCwxNny0MuUtnDIR3032vFHYke0F2ZrU=
83+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.40.0 h1:q3FNPi8FLQVjLlmV+WWHQfH9ZCCtQIS0O/+dn1+4cJ4=
84+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.40.0/go.mod h1:rmx4n0uSIAkKBeQYkygcv9dENAlL2/tv3OSq68h1JAo=
85+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.17.0 h1:U5GYackKpVKlPrd/5gKMlrTlP2dCESAAFU682VCpieY=
86+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.17.0/go.mod h1:aFsJfCEnLzEu9vRRAcUiB/cpRTbVsNdF3OHSPpdjxZQ=
87+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.17.0 h1:iGeIsSYwpYSvh5UGzWrJfTDJvPjrXtxl3GUppj6IXQU=
88+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.17.0/go.mod h1:1j3H3G1SBYpZFti6OI4P0uRQCW20MXkG5v4UWXppLLE=
89+
go.opentelemetry.io/otel/metric v1.17.0 h1:iG6LGVz5Gh+IuO0jmgvpTB6YVrCGngi8QGm+pMd8Pdc=
90+
go.opentelemetry.io/otel/metric v1.17.0/go.mod h1:h4skoxdZI17AxwITdmdZjjYJQH5nzijUUjm+wtPph5o=
91+
go.opentelemetry.io/otel/sdk v1.17.0 h1:FLN2X66Ke/k5Sg3V623Q7h7nt3cHXaW1FOvKKrW0IpE=
92+
go.opentelemetry.io/otel/sdk v1.17.0/go.mod h1:U87sE0f5vQB7hwUoW98pW5Rz4ZDuCFBZFNUBlSgmDFQ=
93+
go.opentelemetry.io/otel/sdk/metric v0.40.0 h1:qOM29YaGcxipWjL5FzpyZDpCYrDREvX0mVlmXdOjCHU=
94+
go.opentelemetry.io/otel/sdk/metric v0.40.0/go.mod h1:dWxHtdzdJvg+ciJUKLTKwrMe5P6Dv3FyDbh8UkfgkVs=
95+
go.opentelemetry.io/otel/trace v1.17.0 h1:/SWhSRHmDPOImIAetP1QAeMnZYiQXrTy4fMMYOdSKWQ=
96+
go.opentelemetry.io/otel/trace v1.17.0/go.mod h1:I/4vKTgFclIsXRVucpH25X0mpFSczM7aHeaz0ZBLWjY=
97+
go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I=
98+
go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM=
6199
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
62-
go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI=
63-
go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
64-
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
65-
go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60=
66-
go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg=
100+
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
101+
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
102+
go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
103+
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
104+
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
105+
go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c=
106+
go.uber.org/zap v1.25.0/go.mod h1:JIAUzQIH94IC4fOJQm7gMmBJP5k7wQfdcnYdPoEXJYk=
107+
golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14=
108+
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
109+
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
110+
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
111+
golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc=
112+
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
113+
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
114+
google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 h1:L6iMMGrtzgHsWofoFcihmDEMYeDR9KN/ThbPWGrh++g=
115+
google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q=
116+
google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk=
117+
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
118+
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
119+
google.golang.org/grpc v1.57.0 h1:kfzNeI/klCGD2YPMUlaGNT3pxvYfga7smW3Vth8Zsiw=
120+
google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo=
121+
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
122+
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
123+
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
124+
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
67125
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
68126
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
69127
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=

pkg/cmd/server.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,5 +127,5 @@ func RunServer() error {
127127
zlog.S.Infof("Running with config: %+v", *cfg)
128128
// Setup custom URL if requested
129129
setupCustomURL(cfg)
130-
return rest.RunServer(cfg)
130+
return rest.RunServer(cfg, version)
131131
}

pkg/config/server_config.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import (
2323
"os"
2424
"strings"
2525

26+
"go.opentelemetry.io/otel/sdk/trace"
27+
2628
"github.com/golobby/config/v3"
2729
"github.com/golobby/config/v3/pkg/feeder"
2830
)
@@ -47,6 +49,10 @@ type ServerConfig struct {
4749
ConfigFile string `env:"LOG_JSON_CONFIG"` // Json logging config file
4850
OutputPaths []string `env:"LOG_OUTPUT_PATHS"` // List of outputs for logging (default stderr)
4951
}
52+
Telemetry struct {
53+
Enabled bool `env:"OTEL_ENABLED"` // true/false
54+
OltpExporter string `env:"OTEL_EXPORTER_OLTP"` // OTEL OLTP exporter (default 0.0.0.0:4317)
55+
}
5056
Scanning struct {
5157
WfpLoc string `env:"SCAN_WFP_TMP"` // specific location to write temporary WFP files to
5258
ScanBinary string `env:"SCAN_BINARY"` // Binary to use for scanning
@@ -103,6 +109,8 @@ func setServerConfigDefaults(cfg *ServerConfig) {
103109
cfg.Scanning.ScanTimeout = 120 // Default scan engine timeout to 2 minutes
104110
cfg.Scanning.WfpGrouping = 3 // Default number of WFPs to group into a single scan request (when Workers > 1)
105111
cfg.Scanning.HPSMEnabled = true
112+
cfg.Telemetry.Enabled = false
113+
cfg.Telemetry.OltpExporter = "0.0.0.0:4317" // Default OTEL OLTP gRPC Exporter endpoint
106114
}
107115

108116
// LoadFile loads the specified file and returns its contents in a string array.
@@ -128,3 +136,15 @@ func LoadFile(filename string) ([]string, error) {
128136
}
129137
return list, nil
130138
}
139+
140+
// GetTraceSampler determines what level of trace sampling to run.
141+
func GetTraceSampler(cfg *ServerConfig) trace.Sampler {
142+
switch cfg.App.Mode {
143+
case "dev":
144+
return trace.AlwaysSample()
145+
case "prod":
146+
return trace.ParentBased(trace.TraceIDRatioBased(0.5))
147+
default:
148+
return trace.AlwaysSample()
149+
}
150+
}

pkg/config/server_config_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,3 +111,29 @@ func TestServerConfigLoadFile(t *testing.T) {
111111
fmt.Printf("Data File details: %+v\n", res)
112112
}
113113
}
114+
115+
func TestServerConfigSampling(t *testing.T) {
116+
appAddr := "localhost"
117+
err := os.Setenv("APP_ADDR", appAddr)
118+
if err != nil {
119+
t.Fatalf("an error '%s' was not expected when creating new config instance", err)
120+
}
121+
cfg, err := NewServerConfig(nil)
122+
if err != nil {
123+
t.Fatalf("an error '%s' was not expected when creating new config instance", err)
124+
}
125+
tracing := GetTraceSampler(cfg)
126+
if tracing == nil {
127+
t.Fatalf("Failed to determine OLTP trace sampling mode 1.")
128+
}
129+
cfg.App.Mode = "prod"
130+
tracing = GetTraceSampler(cfg)
131+
if tracing == nil {
132+
t.Fatalf("Failed to determine OLTP trace sampling mode 2.")
133+
}
134+
cfg.App.Mode = "unknown"
135+
tracing = GetTraceSampler(cfg)
136+
if tracing == nil {
137+
t.Fatalf("Failed to determine OLTP trace sampling mode 3.")
138+
}
139+
}

0 commit comments

Comments
 (0)