ezmetrics 2.0.1 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ezmetrics.rb +9 -9
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: df2d108f37b4f0a5988f72ad465c531d0559ef651c78e3f58aa72f7c9fcc0a3c
|
4
|
+
data.tar.gz: a1b871a56189e2035289a976e508dd437125c8a6bc9fa29dfbb47402096faf1b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ad8ce6744522f55b65029bffeb8d56491ce188c29870a5560389ea44795131999bbe6f9d11d3a444831c49c2c0aad2f2b8bca448cdd2c18c5a11ba8d04216889
|
7
|
+
data.tar.gz: 80c76c1709db877c71063650db012b423116232a32f6ff5d9c17262e43e80e8696d4a0fc687b798291551ca5f0f6b84f3f7ae7a635ecad644f09628daf842cd1
|
data/lib/ezmetrics.rb
CHANGED
@@ -176,16 +176,16 @@ class EZmetrics
|
|
176
176
|
|
177
177
|
percentile = aggregation_function.match(/percentile_(?<value>\d+)/)
|
178
178
|
|
179
|
-
if percentile && percentile["value"]
|
179
|
+
if percentile && percentile["value"].to_i.between?(1, 99)
|
180
180
|
sorted_values = send("sorted_#{metrics}_values")
|
181
|
-
percentile(sorted_values, percentile["value"].to_i)
|
181
|
+
percentile(sorted_values, percentile["value"].to_i)
|
182
182
|
end
|
183
183
|
end
|
184
184
|
|
185
185
|
METRICS.each do |metrics|
|
186
186
|
define_method "sorted_#{metrics}_values" do
|
187
187
|
instance_variable_get("@sorted_#{metrics}_values") || instance_variable_set(
|
188
|
-
"@sorted_#{metrics}_values", interval_metrics.map { |array| array[schema["#{metrics}_values"]] }.flatten.compact
|
188
|
+
"@sorted_#{metrics}_values", interval_metrics.map { |array| array[schema["#{metrics}_values"]] }.flatten.compact.sort
|
189
189
|
)
|
190
190
|
end
|
191
191
|
end
|
@@ -234,12 +234,12 @@ class EZmetrics
|
|
234
234
|
interval_metrics.max { |array| array[schema[metrics]] }[schema[metrics]].round
|
235
235
|
end
|
236
236
|
|
237
|
-
def percentile(
|
238
|
-
|
237
|
+
def percentile(sorted_array, pcnt)
|
238
|
+
array_length = sorted_array.length
|
239
239
|
|
240
|
-
return
|
240
|
+
return "not enough data (requests: #{array_length}, required: #{pcnt})" if array_length < pcnt
|
241
241
|
|
242
|
-
rank = (pcnt.to_f / 100) * (
|
242
|
+
rank = (pcnt.to_f / 100) * (array_length + 1)
|
243
243
|
whole = rank.truncate
|
244
244
|
|
245
245
|
# if has fractional part
|
@@ -249,9 +249,9 @@ class EZmetrics
|
|
249
249
|
|
250
250
|
f = (rank - rank.truncate).abs
|
251
251
|
|
252
|
-
return (f * (s1 - s0)) + s0
|
252
|
+
return ((f * (s1 - s0)) + s0)&.round
|
253
253
|
else
|
254
|
-
return sorted_array[whole - 1]
|
254
|
+
return (sorted_array[whole - 1])&.round
|
255
255
|
end
|
256
256
|
end
|
257
257
|
|