5
5
require "yabeda/gauge"
6
6
require "yabeda/histogram"
7
7
require "yabeda/group"
8
+ require "yabeda/global_group"
8
9
require "yabeda/dsl/metric_builder"
9
10
10
11
module Yabeda
@@ -30,6 +31,7 @@ def collect(&block)
30
31
# (like NewRelic) it is treated individually and has a special meaning.
31
32
def group ( group_name )
32
33
@group = group_name
34
+ Yabeda . groups [ @group ] ||= Yabeda ::Group . new ( @group )
33
35
return unless block_given?
34
36
35
37
yield
@@ -58,24 +60,30 @@ def histogram(*args, **kwargs, &block)
58
60
#
59
61
# @param name [Symbol] Name of default tag
60
62
# @param value [String] Value of default tag
61
- def default_tag ( name , value )
62
- ::Yabeda . default_tags [ name ] = value
63
+ def default_tag ( name , value , group : @group )
64
+ if group
65
+ Yabeda . groups [ group ] ||= Yabeda ::Group . new ( group )
66
+ Yabeda . groups [ group ] . default_tag ( name , value )
67
+ else
68
+ Yabeda . default_tags [ name ] = value
69
+ end
63
70
end
64
71
65
72
# Redefine default tags for a limited amount of time
66
73
# @param tags Hash{Symbol=>#to_s}
67
74
def with_tags ( **tags )
68
- Thread . current [ :yabeda_temporary_tags ] = tags
75
+ previous_temp_tags = temporary_tags
76
+ Thread . current [ :yabeda_temporary_tags ] = Thread . current [ :yabeda_temporary_tags ] . merge ( tags )
69
77
yield
70
78
ensure
71
- Thread . current [ :yabeda_temporary_tags ] = { }
79
+ Thread . current [ :yabeda_temporary_tags ] = previous_temp_tags
72
80
end
73
81
74
82
# Get tags set by +with_tags+
75
83
# @api private
76
84
# @return Hash
77
85
def temporary_tags
78
- Thread . current [ :yabeda_temporary_tags ] || { }
86
+ Thread . current [ :yabeda_temporary_tags ] ||= { }
79
87
end
80
88
81
89
private
@@ -95,9 +103,10 @@ def register_group_for(metric)
95
103
if group . nil?
96
104
group = Group . new ( metric . group )
97
105
::Yabeda . groups [ metric . group ] = group
98
- ::Yabeda . define_singleton_method ( metric . group ) { group }
99
106
end
100
107
108
+ ::Yabeda . define_singleton_method ( metric . group ) { group } unless ::Yabeda . respond_to? ( metric . group )
109
+
101
110
group . register_metric ( metric )
102
111
end
103
112
end
0 commit comments