@@ -142,37 +142,73 @@ def delete_old_search_queries_from_db():
142
142
143
143
144
144
@app .task (queue = 'web' )
145
- def record_search_query (project_slug , version_slug , query , total_results ):
146
- """Record search query in database."""
147
- if not project_slug or not version_slug or not query or not total_results :
145
+ def record_search_query (project_slug , version_slug , query , total_results , time ):
146
+ """Record/update search query in database."""
147
+ if not project_slug or not version_slug or not query :
148
148
log .debug (
149
149
'Not recording the search query. Passed arguments: '
150
- 'project_slug: %s, version_slug: %s, query: %s, total_results: %s' % (
151
- project_slug , version_slug , query , total_results
150
+ 'project_slug: %s, version_slug: %s, query: %s, total_results: %s, time: %s ' % (
151
+ project_slug , version_slug , query , total_results , time
152
152
)
153
153
)
154
154
return
155
155
156
- project_qs = Project .objects .filter (slug = project_slug )
157
-
158
- if not project_qs .exists ():
159
- log .debug (
160
- 'Not recording the search query because project does not exist. '
161
- 'project_slug: %s' % (
162
- project_slug
163
- )
164
- )
156
+ before_10_sec = time - timezone .timedelta (seconds = 10 )
157
+ partial_query_qs = SearchQuery .objects .filter (
158
+ project__slug = project_slug ,
159
+ version__slug = version_slug ,
160
+ query__startswith = query ,
161
+ created__gte = before_10_sec ,
162
+ ).order_by ('-created' )
163
+
164
+ # if partial query exists,
165
+ # just update it instead of creating new SearchQuery object.
166
+ if partial_query_qs .exists ():
167
+ obj = partial_query_qs .first ()
168
+ obj .created = time
169
+ obj .query = query
170
+ obj .save ()
165
171
return
166
-
167
- project = project_qs .first ()
168
- version_qs = Version .objects .filter (project = project , slug = version_slug )
169
-
170
- if not version_qs .exists ():
171
- return
172
-
173
- version = version_qs .first ()
174
- SearchQuery .objects .create (
175
- project = project ,
176
- version = version ,
177
- query = query ,
178
- )
172
+ else :
173
+ # don't record query with zero results.
174
+ if not total_results :
175
+ log .debug (
176
+ 'Not recording search query because of zero results. Passed arguments: '
177
+ 'project_slug: %s, version_slug: %s, query: %s, total_results: %s, time: %s' % (
178
+ project_slug , version_slug , query , total_results , time
179
+ )
180
+ )
181
+ return
182
+ else :
183
+ project_qs = Project .objects .filter (slug = project_slug )
184
+ if not project_qs .exists ():
185
+ log .debug (
186
+ 'Not recording the search query because project does not exist. '
187
+ 'project_slug: %s' % (
188
+ project_slug
189
+ )
190
+ )
191
+ return
192
+
193
+ project = project_qs .first ()
194
+ version_qs = Version .objects .filter (project = project , slug = version_slug )
195
+
196
+ if not version_qs .exists ():
197
+ log .debug (
198
+ 'Not recording the search query because version does not exist. '
199
+ 'project_slug: %s, version_slug: %s' % (
200
+ project_slug , version_slug
201
+ )
202
+ )
203
+ return
204
+
205
+ version = version_qs .first ()
206
+
207
+ # make a new SearchQuery object.
208
+ obj = SearchQuery .objects .create (
209
+ project = project ,
210
+ version = version ,
211
+ query = query ,
212
+ )
213
+ obj .created = time
214
+ obj .save ()
0 commit comments