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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
# File 'lib/logstash/filters/ua_parser.rb', line 19
def filter(event)
useragent = event.get(@source)
return if useragent.nil? || !useragent.is_a?(String) || useragent.strip == ""
begin
data = UserAgentParser.parse useragent
rescue StandardError => e
@logger.error("Uknown error while parsing device data", :exception => e, :field => @source, :event => event)
return
end
return unless data
event.remove(@source) if @target == @source
begin
is_bot = false
spider = ""
platform = "Other"
browser = ""
browser_version = ""
os_name = ""
os_version = ""
device_name = ""
device_brand = ""
if data.family
browser = data.family.to_s
end
if data.version
browser_version = data.version.to_s
end
if data.os
os = data.os.to_s
os_arr = os.split(" ")
os_name = os_arr.at(0)
if os_arr.length > 1
os_version = os_arr.at(1)
end
end
if data.device
device_brand = data.device.brand.to_s
device_name = data.device.to_s
platform = data.device.model.to_s
end
bot = CrawlerDetect.new(useragent)
if bot.is_crawler?
is_bot = true
spider = bot.crawler_name
end
target_hash = {
"browser" => {
"name" => browser,
"version" => browser_version
},
"os" => {
"name" => os_name,
"version" => os_version
},
"device" => {
"name" => device_name,
"brand" => device_brand,
"type" => platform
},
"isBot" => is_bot
}
if is_bot
target_hash['botName'] = spider
end
event.set("#{@target}", target_hash)
rescue StandardError => e
@logger.error("Uknown error while setting device data", :exception => e, :field => @source, :event => event)
return
end
filter_matched(event)
end
|