@@ -51,13 +51,35 @@ class GeoIp(InnerDoc):
51
51
location = GeoPoint ()
52
52
53
53
54
+ class UserAgentBrowser (InnerDoc ):
55
+ Family = Keyword ()
56
+ Version = Keyword ()
57
+
58
+
59
+ class UserAgentOS (UserAgentBrowser ):
60
+ pass
61
+
62
+
63
+ class UserAgentDevice (InnerDoc ):
64
+ Family = Keyword ()
65
+ Brand = Keyword ()
66
+ Model = Keyword ()
67
+
68
+
69
+ class UserAgent (InnerDoc ):
70
+ browser = Object (UserAgentBrowser , required = False )
71
+ os = Object (UserAgentOS , required = False )
72
+ device = Object (UserAgentDevice , required = False )
73
+ string = Text ()
74
+
75
+
54
76
class ElapsedTimeDocument (Document ):
55
77
url = Keyword ()
56
78
time_taken = Long ()
57
79
log_datetime = Date ()
58
- useragent = Text (analyzer = 'ik_max_word' , search_analyzer = 'ik_smart' )
59
80
ip = Keyword ()
60
81
geoip = Object (GeoIp , required = False )
82
+ useragent = Object (UserAgent , required = False )
61
83
62
84
class Index :
63
85
name = 'performance'
@@ -80,11 +102,25 @@ def delete_index():
80
102
@staticmethod
81
103
def create (url , time_taken , log_datetime , useragent , ip ):
82
104
from elasticsearch import Elasticsearch
83
- es = Elasticsearch (settings .ELASTICSEARCH_DSL ['default' ]['hosts' ])
105
+ client = Elasticsearch (settings .ELASTICSEARCH_DSL ['default' ]['hosts' ])
84
106
85
- res = es .indices .exists (index = "performance" )
107
+ res = client .indices .exists (index = "performance" )
86
108
if not res :
87
109
ElapsedTimeDocument .init ()
110
+ ua = UserAgent ()
111
+ ua .browser = UserAgentBrowser ()
112
+ ua .browser .Family = useragent .browser .family
113
+ ua .browser .Version = useragent .browser .version_string
114
+
115
+ ua .os = UserAgentOS ()
116
+ ua .os .Family = useragent .os .family
117
+ ua .os .Version = useragent .os .version_string
118
+
119
+ ua .device = UserAgentDevice ()
120
+ ua .device .Family = useragent .device .family
121
+ ua .device .Brand = useragent .device .brand
122
+ ua .device .Model = useragent .device .model
123
+ ua .string = useragent .ua_string
88
124
89
125
doc = ElapsedTimeDocument (
90
126
meta = {
@@ -96,7 +132,7 @@ def create(url, time_taken, log_datetime, useragent, ip):
96
132
url = url ,
97
133
time_taken = time_taken ,
98
134
log_datetime = log_datetime ,
99
- useragent = useragent , ip = ip )
135
+ useragent = ua , ip = ip )
100
136
doc .save (pipeline = "geoip" )
101
137
102
138
0 commit comments