Class: TingYun::Metrics::Stats
- Inherits:
-
Object
- Object
- TingYun::Metrics::Stats
- Includes:
- Support::Coerce
- Defined in:
- lib/ting_yun/metrics/stats.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#call_count ⇒ Object
(also: #apdex_s)
Returns the value of attribute call_count.
-
#max_call_time ⇒ Object
Returns the value of attribute max_call_time.
-
#min_call_time ⇒ Object
Returns the value of attribute min_call_time.
-
#sum_of_squares ⇒ Object
Returns the value of attribute sum_of_squares.
-
#total_call_time ⇒ Object
(also: #apdex_t)
Returns the value of attribute total_call_time.
-
#total_exclusive_time ⇒ Object
(also: #apdex_f)
Returns the value of attribute total_exclusive_time.
Class Method Summary collapse
Instance Method Summary collapse
- #==(other) ⇒ Object
-
#increment_count(value = 1) ⇒ Object
increments the call_count by one.
-
#initialize ⇒ Stats
constructor
A new instance of Stats.
- #is_reset? ⇒ Boolean
-
#merge(other_stats) ⇒ Object
self不变.
-
#merge!(other) ⇒ Object
self变化.
- #metrics(stat_key) ⇒ Object
- #record(value = nil, aux = nil, &blk) ⇒ Object
- #record_apdex(bucket, apdex_t) ⇒ Object
-
#record_data_point(value, exclusive_time = value) ⇒ Object
(also: #trace_call)
record a single data point into the statistical gatherer.
- #reset ⇒ Object
- #to_json(*_) ⇒ Object
- #to_s ⇒ Object
Methods included from Support::Coerce
event_params, float, int, int_or_nil, log_failure, string, url_encode
Constructor Details
#initialize ⇒ Stats
Returns a new instance of Stats.
28 29 30 |
# File 'lib/ting_yun/metrics/stats.rb', line 28 def initialize reset end |
Instance Attribute Details
#call_count ⇒ Object Also known as: apdex_s
Returns the value of attribute call_count.
8 9 10 |
# File 'lib/ting_yun/metrics/stats.rb', line 8 def call_count @call_count end |
#max_call_time ⇒ Object
Returns the value of attribute max_call_time.
10 11 12 |
# File 'lib/ting_yun/metrics/stats.rb', line 10 def max_call_time @max_call_time end |
#min_call_time ⇒ Object
Returns the value of attribute min_call_time.
9 10 11 |
# File 'lib/ting_yun/metrics/stats.rb', line 9 def min_call_time @min_call_time end |
#sum_of_squares ⇒ Object
Returns the value of attribute sum_of_squares.
13 14 15 |
# File 'lib/ting_yun/metrics/stats.rb', line 13 def sum_of_squares @sum_of_squares end |
#total_call_time ⇒ Object Also known as: apdex_t
Returns the value of attribute total_call_time.
11 12 13 |
# File 'lib/ting_yun/metrics/stats.rb', line 11 def total_call_time @total_call_time end |
#total_exclusive_time ⇒ Object Also known as: apdex_f
Returns the value of attribute total_exclusive_time.
12 13 14 |
# File 'lib/ting_yun/metrics/stats.rb', line 12 def total_exclusive_time @total_exclusive_time end |
Class Method Details
.create_from_hash(hash_value) ⇒ Object
16 17 18 19 20 21 22 23 24 25 |
# File 'lib/ting_yun/metrics/stats.rb', line 16 def self.create_from_hash(hash_value) stats = Stats.new stats.call_count = hash_value[:count] if hash_value[:count] stats.total_call_time = hash_value[:total] if hash_value[:total] stats.total_exclusive_time = hash_value[:total] if hash_value[:total] stats.min_call_time = hash_value[:min] if hash_value[:min] stats.max_call_time = hash_value[:max] if hash_value[:max] stats.sum_of_squares = hash_value[:sum_of_squares] if hash_value[:sum_of_squares] stats end |
Instance Method Details
#==(other) ⇒ Object
137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/ting_yun/metrics/stats.rb', line 137 def ==(other) other.class == self.class && ( @min_call_time == other.min_call_time && @max_call_time == other.max_call_time && @total_call_time == other.total_call_time && @total_exclusive_time == other.total_exclusive_time && @sum_of_squares == other.sum_of_squares && @call_count == other.call_count ) end |
#increment_count(value = 1) ⇒ Object
increments the call_count by one
133 134 135 |
# File 'lib/ting_yun/metrics/stats.rb', line 133 def increment_count(value = 1) @call_count += value end |
#is_reset? ⇒ Boolean
46 47 48 |
# File 'lib/ting_yun/metrics/stats.rb', line 46 def is_reset? call_count == 0 && total_call_time == 0.0 && total_exclusive_time == 0.0 end |
#merge(other_stats) ⇒ Object
self不变
51 52 53 54 |
# File 'lib/ting_yun/metrics/stats.rb', line 51 def merge(other_stats) stats = self.clone stats.merge!(other_stats) end |
#merge!(other) ⇒ Object
self变化
57 58 59 60 61 62 63 64 65 |
# File 'lib/ting_yun/metrics/stats.rb', line 57 def merge!(other) @min_call_time = other.min_call_time if min_time_less?(other) @max_call_time = other.max_call_time if max_time?(other) @total_call_time += other.total_call_time @total_exclusive_time += other.total_exclusive_time @sum_of_squares += other.sum_of_squares @call_count += other.call_count self end |
#metrics(stat_key) ⇒ Object
151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/ting_yun/metrics/stats.rb', line 151 def metrics(stat_key) metrics = [] metrics << int(call_count, stat_key) if max_call_time != 0.0 #apedx metrics << float(total_call_time, stat_key) metrics << float(total_exclusive_time, stat_key) metrics << float(max_call_time, stat_key) end if min_call_time !=0.0 # metrics << float(min_call_time, stat_key) metrics << float(sum_of_squares, stat_key) end metrics end |
#record(value = nil, aux = nil, &blk) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/ting_yun/metrics/stats.rb', line 86 def record(value=nil, aux=nil, &blk) if blk yield self else case value when Numeric aux ||= value self.record_data_point(value, aux) when :apdex_s, :apdex_t, :apdex_f self.record_apdex(value, aux) when TingYun::Metrics::Stats self.merge!(value) end end end |
#record_apdex(bucket, apdex_t) ⇒ Object
102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/ting_yun/metrics/stats.rb', line 102 def record_apdex(bucket, apdex_t) case bucket when :apdex_s then @call_count += 1 when :apdex_t then @total_call_time += 1 when :apdex_f then @total_exclusive_time += 1 end if apdex_t @max_call_time = apdex_t else ::TingYun::Agent.logger.warn("Attempted to set apdex_t to #{apdex_t.inspect}, backtrace = #{caller.join("\n")}") end end |
#record_data_point(value, exclusive_time = value) ⇒ Object Also known as: trace_call
record a single data point into the statistical gatherer. The gatherer will aggregate all data points collected over a specified period and upload its data to the TingYun server
119 120 121 122 123 124 125 126 127 128 |
# File 'lib/ting_yun/metrics/stats.rb', line 119 def record_data_point(value, exclusive_time = value) @call_count += 1 @total_call_time += value @min_call_time = exclusive_time if exclusive_time < @min_call_time || @call_count == 1 @max_call_time = exclusive_time if exclusive_time > @max_call_time @total_exclusive_time += exclusive_time @sum_of_squares += (exclusive_time * exclusive_time) self end |
#reset ⇒ Object
32 33 34 35 36 37 38 39 |
# File 'lib/ting_yun/metrics/stats.rb', line 32 def reset @call_count = 0 @total_call_time = 0.0 @total_exclusive_time = 0.0 @min_call_time = 0.0 @max_call_time = 0.0 @sum_of_squares = 0.0 end |
#to_json(*_) ⇒ Object
71 72 73 74 75 76 77 78 79 80 |
# File 'lib/ting_yun/metrics/stats.rb', line 71 def to_json(*_) { 'call_count' => call_count.to_i, 'min_call_time' => min_call_time.to_f, 'max_call_time' => max_call_time.to_f, 'total_call_time' => total_call_time.to_f, 'total_exclusive_time' => total_exclusive_time.to_f, 'sum_of_squares' => sum_of_squares.to_f }.to_json(*_) end |
#to_s ⇒ Object
67 68 69 |
# File 'lib/ting_yun/metrics/stats.rb', line 67 def to_s "[#{'%2i' % call_count.to_i} calls #{'%.4f' % total_call_time.to_f}s / #{'%.4f' % total_exclusive_time.to_f}s ex]" end |