traces 0.3.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 861c8515f80fb555c1bf5015a90c6120f966e56bc9317deb3ab0fc706f222681
4
- data.tar.gz: 41273d76845bb95d39632623270425a2a932fccff831d73d268b3f9d04fc9a16
3
+ metadata.gz: 284452f4bfc37587b942b74918b2807ad6c51ee09d5a93bd39d5eefa6ba66aa1
4
+ data.tar.gz: 7f2d42000701312aeeb5015b19f888d5ed5acb4d4c79322e894b584292c0aed1
5
5
  SHA512:
6
- metadata.gz: cf177547ceee5e884fd4672d00fcb1db5ba0a8c4e85c4a05076b7a97b046d4f5e70998fdc5adae5b58089070a0e9c6bff161d58db6e6560fb41988297cf1467b
7
- data.tar.gz: 8bdead1ff01e654ef7aa6fd0ff3dee3387652262b955a45d5c8ab90cfca1f8820fb0710248164d581961277a36220741e52f6ff8980450f5d28e88abf1fc6f2a
6
+ metadata.gz: b32ad9f2018cce91b418907c052b6f9c8b63b2fad08ccdc4e1abcf3dd623e0209ad3bed87b5dfdf4138c20110e0e1806caec1a1b62bbd064b2699498822e7e24
7
+ data.tar.gz: 41e7cd96fb1dcb21f727d2753854ba77c08378fee1ad459b9f696d2bdecc857841c7fda0f3cf2d3e3b03647bfbe6cd137a846cb1c6230a5cbcc1d149899ea031
checksums.yaml.gz.sig CHANGED
Binary file
@@ -31,6 +31,7 @@ end
31
31
 
32
32
  module Traces
33
33
  module Backend
34
+ # A backend which logs all spans to the console logger output.
34
35
  module Console
35
36
  # A span which validates tag assignment.
36
37
  class Span
@@ -50,41 +51,40 @@ module Traces
50
51
  end
51
52
  end
52
53
 
53
- private
54
-
55
- # Trace the given block of code and log the execution.
56
- # @parameter name [String] A useful name/annotation for the recorded span.
57
- # @parameter attributes [Hash] Metadata for the recorded span.
58
- def trace(name, attributes: {}, &block)
59
- context = Context.nested(Fiber.current.traces_backend_context)
60
- Fiber.current.traces_backend_context = context
61
-
62
- ::Console.logger.info(self, name, attributes)
54
+ module Interface
55
+ # Trace the given block of code and log the execution.
56
+ # @parameter name [String] A useful name/annotation for the recorded span.
57
+ # @parameter attributes [Hash] Metadata for the recorded span.
58
+ def trace(name, resource: self, attributes: {}, &block)
59
+ context = Context.nested(Fiber.current.traces_backend_context)
60
+ Fiber.current.traces_backend_context = context
61
+
62
+ ::Console.logger.info(resource, name, attributes)
63
+
64
+ if block.arity.zero?
65
+ yield
66
+ else
67
+ yield Span.new(context, self, name)
68
+ end
69
+ end
63
70
 
64
- if block.arity.zero?
65
- yield
66
- else
67
- yield Span.new(context, self, name)
71
+ # Assign a trace context to the current execution scope.
72
+ def trace_context= context
73
+ Fiber.current.traces_backend_context = context
68
74
  end
69
- end
70
-
71
- # Assign a trace context to the current execution scope.
72
- def trace_context= context
73
- Fiber.current.traces_backend_context = context
74
- end
75
-
76
- # Get a trace context from the current execution scope.
77
- # @parameter span [Span] An optional span from which to extract the context.
78
- def trace_context(span = nil)
79
- if span
80
- span.context
81
- else
82
- Fiber.current.traces_backend_context
75
+
76
+ # Get a trace context from the current execution scope.
77
+ # @parameter span [Span] An optional span from which to extract the context.
78
+ def trace_context(span = nil)
79
+ if span
80
+ span.context
81
+ else
82
+ Fiber.current.traces_backend_context
83
+ end
83
84
  end
84
85
  end
85
86
  end
86
87
 
87
- # This is the default.
88
- self.include(Console)
88
+ Interface = Console::Interface
89
89
  end
90
90
  end
@@ -29,6 +29,7 @@ end
29
29
 
30
30
  module Traces
31
31
  module Backend
32
+ # A backend which validates interface usage.
32
33
  module Test
33
34
  # A span which validates tag assignment.
34
35
  class Span
@@ -43,52 +44,57 @@ module Traces
43
44
  # @parameter value [Object] The metadata value. Should be coercable to a string.
44
45
  def []= key, value
45
46
  unless key.is_a?(String)
46
- raise ArgumentError, "Invalid name!"
47
+ raise ArgumentError, "Invalid name (must be String): #{key.inspect}!"
47
48
  end
48
49
 
49
50
  unless String(value)
50
- raise ArgumentError, "Invalid value!"
51
+ raise ArgumentError, "Invalid value (must be String): #{value.inspect}!"
51
52
  end
52
53
  end
53
54
  end
54
55
 
55
- private
56
-
57
- # Trace the given block of code and validate the interface usage.
58
- # @parameter name [String] A useful name/annotation for the recorded span.
59
- # @parameter attributes [Hash] Metadata for the recorded span.
60
- def trace(name, attributes: nil, &block)
61
- unless name.is_a?(String)
62
- raise ArgumentError, "Invalid name!"
56
+ module Interface
57
+ # Trace the given block of code and validate the interface usage.
58
+ # @parameter name [String] A useful name/annotation for the recorded span.
59
+ # @parameter attributes [Hash] Metadata for the recorded span.
60
+ def trace(name, resource: self.class.name, attributes: nil, &block)
61
+ unless name.is_a?(String)
62
+ raise ArgumentError, "Invalid name (must be String): #{name.inspect}!"
63
+ end
64
+
65
+ if resource
66
+ # It should be convertable:
67
+ resource = resource.to_s
68
+ end
69
+
70
+ context = Context.nested(Fiber.current.traces_backend_context)
71
+ Fiber.current.traces_backend_context = context
72
+
73
+ if block.arity.zero?
74
+ yield
75
+ else
76
+ span = Span.new(context)
77
+ yield span
78
+ end
63
79
  end
64
80
 
65
- context = Context.nested(Fiber.current.traces_backend_context)
66
- Fiber.current.traces_backend_context = context
67
-
68
- if block.arity.zero?
69
- yield
70
- else
71
- span = Span.new(context)
72
- yield span
81
+ # Assign a trace context to the current execution scope.
82
+ def trace_context= context
83
+ Fiber.current.traces_backend_context = context
73
84
  end
74
- end
75
-
76
- # Assign a trace context to the current execution scope.
77
- def trace_context= context
78
- Fiber.current.traces_backend_context = context
79
- end
80
-
81
- # Get a trace context from the current execution scope.
82
- # @parameter span [Span] An optional span from which to extract the context.
83
- def trace_context(span = nil)
84
- if span
85
- span.context
86
- else
87
- Fiber.current.traces_backend_context
85
+
86
+ # Get a trace context from the current execution scope.
87
+ # @parameter span [Span] An optional span from which to extract the context.
88
+ def trace_context(span = nil)
89
+ if span
90
+ span.context
91
+ else
92
+ Fiber.current.traces_backend_context
93
+ end
88
94
  end
89
95
  end
90
96
  end
91
97
 
92
- self.include(Test)
98
+ Interface = Test::Interface
93
99
  end
94
- end
100
+ end
@@ -23,10 +23,6 @@
23
23
  module Traces
24
24
  # Require a specific trace backend.
25
25
  def self.require_backend(env = ENV)
26
- if const_defined?(:Backend)
27
- raise RuntimeError, "Backend already required!"
28
- end
29
-
30
26
  if backend = env['TRACES_BACKEND']
31
27
  require(backend)
32
28
  end
@@ -49,7 +49,7 @@ module Traces
49
49
  # Create a local trace context which is likley to be globally unique.
50
50
  # @parameter flags [Integer] Any trace context flags.
51
51
  def self.local(flags = 0, **options)
52
- self.new(SecureRandom.hex(16), SecureRandom.hex(8), flags, options)
52
+ self.new(SecureRandom.hex(16), SecureRandom.hex(8), flags, **options)
53
53
  end
54
54
 
55
55
  # Nest a local trace context in an optional parent context.
@@ -23,6 +23,11 @@
23
23
  require_relative 'backend'
24
24
 
25
25
  module Traces
26
+ # @returns [Boolean] Whether there is an active backend.
27
+ def self.enabled?
28
+ self.const_defined?(:Backend)
29
+ end
30
+
26
31
  # A module which contains tracing specific wrappers.
27
32
  module Provider
28
33
  def traces_provider
@@ -31,13 +36,13 @@ module Traces
31
36
  end
32
37
 
33
38
  # Bail out if there is no backend configured.
34
- if self.const_defined?(:Backend)
39
+ if self.enabled?
35
40
  # Extend the specified class in order to emit traces.
36
41
  def self.Provider(klass, &block)
37
42
  klass.extend(Provider)
38
43
 
39
44
  provider = klass.traces_provider
40
- provider.prepend(Backend)
45
+ provider.prepend(Backend::Interface)
41
46
 
42
47
  klass.prepend(provider)
43
48
 
@@ -21,5 +21,5 @@
21
21
  # THE SOFTWARE.
22
22
 
23
23
  module Traces
24
- VERSION = "0.3.1"
24
+ VERSION = "0.5.0"
25
25
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: traces
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
@@ -36,7 +36,7 @@ cert_chain:
36
36
  RAOsIl+HOBTb252nx1kIRN5hqQx272AJCbCjKx8egcUQKffFVVCI0nye09v5CK+a
37
37
  HiLJ8VOFx6w=
38
38
  -----END CERTIFICATE-----
39
- date: 2021-10-18 00:00:00.000000000 Z
39
+ date: 2022-01-27 00:00:00.000000000 Z
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
metadata.gz.sig CHANGED
Binary file