-
-
Notifications
You must be signed in to change notification settings - Fork 89
/
collection_helper.rb
61 lines (57 loc) · 1.76 KB
/
collection_helper.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
module NewRelic::Agent::CollectionHelper
# Transform parameter hash into a hash whose values are strictly
# strings
def normalize_params(params)
case params
when Symbol, FalseClass, TrueClass, nil
params
when Numeric
truncate(params.to_s)
when String
truncate(params)
when Hash
new_params = {}
params.each do | key, value |
new_params[truncate(normalize_params(key),32)] = normalize_params(value)
end
new_params
when Array
params.first(20).map{|item| normalize_params(item)}
else
truncate(flatten(params))
end
end
# Return an array of strings (backtrace), cleaned up for readability
# Return nil if there is no backtrace
def strip_nr_from_backtrace(backtrace)
if backtrace
# this is for 1.9.1, where strings no longer have Enumerable
backtrace = backtrace.split("\n") if String === backtrace
# strip newrelic from the trace
backtrace = backtrace.reject {|line| line =~ /new_relic\/agent\// }
# rename methods back to their original state
backtrace = backtrace.collect {|line| line.gsub(/_without_(newrelic|trace)/, "")}
end
backtrace
end
private
# Convert any kind of object to a short string.
def flatten(object)
s = case object
when nil then ''
when object.instance_of?(String) then object
when String then String.new(object) # convert string subclasses to strings
else "#<#{object.class.to_s}>"
end
end
def truncate(string, len=256)
case string
when Symbol then string
when nil then ""
when String
string.to_s.gsub(/^(.{#{len}})(.*)/) {$2.blank? ? $1 : $1 + "..."}
else
truncate(flatten(string), len)
end
end
end