gitlab-labkit 0.25.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.env.example.sh +7 -0
- data/.gitignore +1 -0
- data/.gitlab-ci.yml +0 -5
- data/README.md +14 -0
- data/lib/labkit/context.rb +6 -2
- data/lib/labkit/logging/json_logger.rb +44 -0
- data/lib/labkit/logging.rb +1 -0
- data/lib/labkit/tracing/jaeger_factory.rb +29 -5
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 79846c3feb1b3287ef00d0f55b81ee788745bd5e9834849686061d3ec533cd8a
|
4
|
+
data.tar.gz: 527270e43d3a430155932fa3fd133be491ae572196f830e1f3464ff3fe0d4144
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bdf9d4b68fa887ddaf7763a21637cdafe0937dd6f6aef355c71178e8f52c960b7726f9060364c4d254e75e83014764baddfa8545a27818b92fb0409fb422dabd
|
7
|
+
data.tar.gz: 1926fbefa4446482eb4a9ed7af240eecb2c6b5af6a8e6cc444d67ca7c95bb252853729b771bf29984437e0843396bfac9e188031a29f29913cf61d9f97f6a183
|
data/.env.example.sh
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
export CI_PROJECT_ID=10947578
|
2
|
+
export CI_API_V4_URL="https://gitlab.com/api/v4"
|
3
|
+
export CI_PROJECT_URL="https://gitlab.com/gitlab-org/ruby/gems/labkit-ruby"
|
4
|
+
# Don't keep secrets in plaintext files. Use a keyring or 1password to load
|
5
|
+
# it instead and export it as an env var.
|
6
|
+
token=$(load-your-token)
|
7
|
+
export GITLAB_TOKEN=$token
|
data/.gitignore
CHANGED
data/.gitlab-ci.yml
CHANGED
@@ -20,16 +20,11 @@ workflow:
|
|
20
20
|
test:3.0:
|
21
21
|
image: ruby:3.0
|
22
22
|
<<: *test_definition
|
23
|
-
allow_failure: true # until we resolve grpc compatibility, see https://gitlab.com/gitlab-org/labkit-ruby/-/merge_requests/81
|
24
23
|
|
25
24
|
test:2.7:
|
26
25
|
image: ruby:2.7
|
27
26
|
<<: *test_definition
|
28
27
|
|
29
|
-
test:2.6:
|
30
|
-
image: ruby:2.6
|
31
|
-
<<: *test_definition
|
32
|
-
|
33
28
|
static-analysis:
|
34
29
|
before_script:
|
35
30
|
- bundle install
|
data/README.md
CHANGED
@@ -44,6 +44,20 @@ Note that LabKit-Ruby uses the [`rufo`](https://github.com/ruby-formatter/rufo)
|
|
44
44
|
|
45
45
|
Please also review the [development section of the LabKit (go) README](https://gitlab.com/gitlab-org/labkit#developing-labkit) for details of the LabKit architectural philosophy.
|
46
46
|
|
47
|
+
To work on some of the scripts we use for releasing a new version,
|
48
|
+
make sure to add a new `.env.sh`.
|
49
|
+
|
50
|
+
```console
|
51
|
+
cp .env.example.sh .env.sh`
|
52
|
+
```
|
53
|
+
|
54
|
+
Inside `.env.sh`, add a personal acccess token for the `GITLAB_TOKEN`
|
55
|
+
environment variable. Next source the file:
|
56
|
+
|
57
|
+
```console
|
58
|
+
. .env.sh
|
59
|
+
```
|
60
|
+
|
47
61
|
### Releasing a new version
|
48
62
|
|
49
63
|
Releasing a new version can be done by pushing a new tag, or creating
|
data/lib/labkit/context.rb
CHANGED
@@ -123,7 +123,7 @@ module Labkit
|
|
123
123
|
data.merge!(attributes)
|
124
124
|
|
125
125
|
# Remove keys that had their values set to `nil` in the new attributes
|
126
|
-
data.keep_if { |_, value| value
|
126
|
+
data.keep_if { |_, value| valid_data?(value) }
|
127
127
|
|
128
128
|
# Assign a correlation if it was missing in the first context or when
|
129
129
|
# explicitly removed
|
@@ -146,12 +146,16 @@ module Labkit
|
|
146
146
|
data.transform_values do |value|
|
147
147
|
value = call_or_value(value)
|
148
148
|
|
149
|
-
value
|
149
|
+
value if valid_data?(value)
|
150
150
|
end.compact
|
151
151
|
end
|
152
152
|
|
153
153
|
def new_id
|
154
154
|
SecureRandom.hex
|
155
155
|
end
|
156
|
+
|
157
|
+
def valid_data?(value)
|
158
|
+
value == false || value.present?
|
159
|
+
end
|
156
160
|
end
|
157
161
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "time"
|
3
|
+
require "logger"
|
4
|
+
require "json"
|
5
|
+
|
6
|
+
module Labkit
|
7
|
+
module Logging
|
8
|
+
class JsonLogger < ::Logger
|
9
|
+
def self.log_level(fallback: ::Logger::DEBUG)
|
10
|
+
ENV.fetch("GITLAB_LOG_LEVEL", fallback)
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize(path, level: JsonLogger.log_level)
|
14
|
+
super
|
15
|
+
end
|
16
|
+
|
17
|
+
def format_message(severity, timestamp, progname, message)
|
18
|
+
data = default_attributes
|
19
|
+
data[:severity] = severity
|
20
|
+
data[:time] = timestamp.utc.iso8601(3)
|
21
|
+
data[Labkit::Correlation::CorrelationId::LOG_KEY] = Labkit::Correlation::CorrelationId.current_id
|
22
|
+
|
23
|
+
case message
|
24
|
+
when String
|
25
|
+
data[:message] = message
|
26
|
+
when Hash
|
27
|
+
data.merge!(message)
|
28
|
+
end
|
29
|
+
|
30
|
+
dump_json(data) << "\n"
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def default_attributes
|
36
|
+
{}
|
37
|
+
end
|
38
|
+
|
39
|
+
def dump_json(data)
|
40
|
+
JSON.generate(data)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/labkit/logging.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "active_support"
|
4
|
+
require "active_support/core_ext"
|
5
|
+
|
3
6
|
require "jaeger/client"
|
4
7
|
|
5
8
|
module Labkit
|
@@ -22,10 +25,13 @@ module Labkit
|
|
22
25
|
# The service_name parameter from GITLAB_TRACING takes precedence over the application one
|
23
26
|
service_name = options[:service_name] if options[:service_name]
|
24
27
|
|
28
|
+
# parse reporter headers as necessary
|
29
|
+
headers = build_headers(options)
|
30
|
+
|
25
31
|
kwargs = {
|
26
32
|
service_name: service_name,
|
27
33
|
sampler: get_sampler(options[:sampler], options[:sampler_param]),
|
28
|
-
reporter: get_reporter(service_name, options[:http_endpoint], options[:udp_endpoint]),
|
34
|
+
reporter: get_reporter(service_name, options[:http_endpoint], options[:udp_endpoint], headers),
|
29
35
|
}.compact
|
30
36
|
|
31
37
|
extra_params = options.except(:sampler, :sampler_param, :http_endpoint, :udp_endpoint, :strict_parsing, :debug)
|
@@ -40,6 +46,24 @@ module Labkit
|
|
40
46
|
Jaeger::Client.build(**kwargs)
|
41
47
|
end
|
42
48
|
|
49
|
+
def self.build_headers(options)
|
50
|
+
return unless options&.key?(:http_endpoint)
|
51
|
+
|
52
|
+
http_endpoint = options[:http_endpoint]
|
53
|
+
parsed = URI.parse(http_endpoint)
|
54
|
+
|
55
|
+
headers = {}
|
56
|
+
# add basic auth header only when both user and password are setup correctly
|
57
|
+
user = parsed.user
|
58
|
+
password = parsed.password
|
59
|
+
if user.present? && password.present?
|
60
|
+
headers["Authorization"] = "Basic " + Base64.strict_encode64("#{user}:#{password}")
|
61
|
+
end
|
62
|
+
|
63
|
+
return headers
|
64
|
+
end
|
65
|
+
private_class_method :build_headers
|
66
|
+
|
43
67
|
def self.get_sampler(sampler_type, sampler_param)
|
44
68
|
case sampler_type
|
45
69
|
when "probabilistic"
|
@@ -52,11 +76,11 @@ module Labkit
|
|
52
76
|
end
|
53
77
|
private_class_method :get_sampler
|
54
78
|
|
55
|
-
def self.get_reporter(service_name, http_endpoint, udp_endpoint)
|
79
|
+
def self.get_reporter(service_name, http_endpoint, udp_endpoint, headers)
|
56
80
|
encoder = Jaeger::Encoders::ThriftEncoder.new(service_name: service_name)
|
57
81
|
|
58
82
|
if http_endpoint.present?
|
59
|
-
sender = get_http_sender(encoder, http_endpoint)
|
83
|
+
sender = get_http_sender(encoder, http_endpoint, headers)
|
60
84
|
elsif udp_endpoint.present?
|
61
85
|
sender = get_udp_sender(encoder, udp_endpoint)
|
62
86
|
else
|
@@ -67,8 +91,8 @@ module Labkit
|
|
67
91
|
end
|
68
92
|
private_class_method :get_reporter
|
69
93
|
|
70
|
-
def self.get_http_sender(encoder, address)
|
71
|
-
Jaeger::HttpSender.new(url: address, encoder: encoder, logger: Logger.new(STDOUT))
|
94
|
+
def self.get_http_sender(encoder, address, headers)
|
95
|
+
Jaeger::HttpSender.new(url: address, headers: headers, encoder: encoder, logger: Logger.new(STDOUT))
|
72
96
|
end
|
73
97
|
private_class_method :get_http_sender
|
74
98
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitlab-labkit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.27.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Newdigate
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-10-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionpack
|
@@ -357,6 +357,7 @@ executables: []
|
|
357
357
|
extensions: []
|
358
358
|
extra_rdoc_files: []
|
359
359
|
files:
|
360
|
+
- ".env.example.sh"
|
360
361
|
- ".gitignore"
|
361
362
|
- ".gitlab-ci.yml"
|
362
363
|
- ".gitlab/CODEOWNERS"
|
@@ -386,6 +387,7 @@ files:
|
|
386
387
|
- lib/labkit/logging.rb
|
387
388
|
- lib/labkit/logging/grpc.rb
|
388
389
|
- lib/labkit/logging/grpc/server_interceptor.rb
|
390
|
+
- lib/labkit/logging/json_logger.rb
|
389
391
|
- lib/labkit/logging/sanitizer.rb
|
390
392
|
- lib/labkit/middleware.rb
|
391
393
|
- lib/labkit/middleware/rack.rb
|