3232
3333from daisy import config , utils
3434from daisy .metrics import get_metrics
35+ from errortracker .cassandra import cassandra_session
3536from oopsrepository import config as oopsconfig
3637from oopsrepository import oopses
3738
@@ -118,7 +119,10 @@ def try_to_repair_sas(data):
118119 metrics .meter ("repair.failed_sas" )
119120
120121
121- def submit (_session , environ , system_token ):
122+ def submit (request , system_token ):
123+ logger .info ("Submit handler" )
124+ logger .info (f"request: { request } " )
125+ _session = cassandra_session ()
122126 # N.B. prepared statements do the hexlify() conversion on their own
123127 global counters_update
124128 if not counters_update :
@@ -131,7 +135,7 @@ def submit(_session, environ, system_token):
131135 'UPDATE "CountersForProposed" SET value = value +1 WHERE key = ? and column1 = ?'
132136 )
133137 try :
134- data = environ ["wsgi.input" ].read ()
138+ data = request ["wsgi.input" ].read ()
135139 except IOError as e :
136140 if e .message == "request data read error" :
137141 # The client disconnected while sending the report.
@@ -156,14 +160,14 @@ def submit(_session, environ, system_token):
156160
157161 # Keep a reference to the decoded report data. If we crash, we'll
158162 # potentially attach it to the OOPS report.
159- environ ["wsgi.input.decoded" ] = data
163+ request ["wsgi.input.decoded" ] = data
160164
161165 oops_id = str (uuid .uuid1 ())
162166
163167 # In theory one should be able to use map_environ with make_app in
164168 # oops_wsgi to write arbitary data to the OOPS report but I couldn't get
165169 # that to work so cheat and uses HTTP_ which always gets written.
166- environ ["HTTP_Z_CRASH_ID" ] = oops_id
170+ request ["HTTP_Z_CRASH_ID" ] = oops_id
167171
168172 day_key = time .strftime ("%Y%m%d" , time .gmtime ())
169173
@@ -184,10 +188,8 @@ def submit(_session, environ, system_token):
184188 # we want to try and find out which releases are sending reports with
185189 # a missing SystemIdentifier
186190 try :
187- whoopsie_version = environ ["HTTP_X_WHOOPSIE_VERSION" ]
188- metrics .meter (
189- "missing.missing_system_token_%s" % whoopsie_version .replace ("." , "_" )
190- )
191+ whoopsie_version = request ["HTTP_X_WHOOPSIE_VERSION" ]
192+ metrics .meter ("missing.missing_system_token_%s" % whoopsie_version .replace ("." , "_" ))
191193 except KeyError :
192194 pass
193195 metrics .meter ("missing.missing_system_token" )
@@ -224,10 +226,9 @@ def submit(_session, environ, system_token):
224226 if crash_id in reported_crash_ids :
225227 return (False , "Crash already reported." )
226228 try :
227- whoopsie_version = environ ["HTTP_X_WHOOPSIE_VERSION" ]
229+ whoopsie_version = request ["HTTP_X_WHOOPSIE_VERSION" ]
228230 metrics .meter (
229- "invalid.duplicate_report.whoopise_%s"
230- % whoopsie_version .replace ("." , "_" )
231+ "invalid.duplicate_report.whoopise_%s" % whoopsie_version .replace ("." , "_" )
231232 )
232233 except KeyError :
233234 pass
@@ -248,9 +249,9 @@ def submit(_session, environ, system_token):
248249 # wonky with apport
249250 src_package = data .get ("SourcePackage" , "" )
250251 src_package = src_package .encode ("ascii" , errors = "replace" )
251- environ ["HTTP_Z_SRC_PKG" ] = src_package
252+ request ["HTTP_Z_SRC_PKG" ] = src_package
252253 problem_type = data .get ("ProblemType" , "" )
253- environ ["HTTP_Z_PROBLEMTYPE" ] = problem_type
254+ request ["HTTP_Z_PROBLEMTYPE" ] = problem_type
254255 apport_version = data .get ("ApportVersion" , "" )
255256 third_party = False
256257 if not utils .retraceable_package (package ):
@@ -286,7 +287,7 @@ def submit(_session, environ, system_token):
286287 return (True , "Crash report successfully submitted." )
287288
288289 package , version = utils .split_package_and_version (package )
289- environ ["HTTP_Z_PKG" ] = package
290+ request ["HTTP_Z_PKG" ] = package
290291 # src_version is None and is never used, nor should it be.
291292 src_package , src_version = utils .split_package_and_version (src_package )
292293 fields = utils .get_fields_for_bucket_counters (
@@ -297,9 +298,7 @@ def submit(_session, environ, system_token):
297298 # phased-updater and only includes official Ubuntu packages and not those
298299 # crahses from systems under auto testing.
299300 if not third_party and not automated_testing and problem_type == "Crash" :
300- update_counters (
301- _session , release = release , src_package = src_package , date = day_key
302- )
301+ update_counters (_session , release = release , src_package = src_package , date = day_key )
303302 if version == "" :
304303 metrics .meter ("missing.missing_package_version" )
305304 else :
@@ -359,9 +358,7 @@ def submit(_session, environ, system_token):
359358 if utils .blocklisted_device (system_token ):
360359 # If the device stops appearing in the log file then the offending
361360 # crash file may have been removed and it could be unblocklisted.
362- logger .info (
363- "Blocklisted device %s disallowed from sending a crash." % system_token
364- )
361+ logger .info ("Blocklisted device %s disallowed from sending a crash." % system_token )
365362 return (False , "Device blocked from sending crash reports." )
366363
367364 try :
@@ -382,9 +379,7 @@ def submit(_session, environ, system_token):
382379 msg = "%s: WriteTimeout with %s keys." % (system_token , len (list (data .keys ())))
383380 logger .info (msg )
384381 logger .info ("%s: The keys are %s" % (system_token , list (data .keys ())))
385- logger .info (
386- "%s: The crash has a ProblemType of: %s" % (system_token , problem_type )
387- )
382+ logger .info ("%s: The crash has a ProblemType of: %s" % (system_token , problem_type ))
388383 if "Traceback" in data :
389384 logger .info ("%s: The crash has a python traceback." % system_token )
390385 raise
@@ -477,9 +472,7 @@ def bucket(_session, oops_config, oops_id, data, day_key):
477472 stacktrace = False
478473 if cql_addr_sig :
479474 try :
480- stacktraces = _session .execute (
481- stacktrace_select , [cql_addr_sig , "Stacktrace" ]
482- )
475+ stacktraces = _session .execute (stacktrace_select , [cql_addr_sig , "Stacktrace" ])
483476 stacktrace = [stacktrace [0 ] for stacktrace in stacktraces ][0 ]
484477 threadstacktraces = _session .execute (
485478 stacktrace_select , [cql_addr_sig , "ThreadStacktrace" ]
@@ -506,9 +499,7 @@ def bucket(_session, oops_config, oops_id, data, day_key):
506499 # The crash is a duplicate so we don't need this data.
507500 # Stacktrace, and ThreadStacktrace were already not accepted
508501 if "ProcMaps" in data :
509- oops_delete = _session .prepare (
510- 'DELETE FROM "OOPS" WHERE key = ? AND column1 = ?'
511- )
502+ oops_delete = _session .prepare ('DELETE FROM "OOPS" WHERE key = ? AND column1 = ?' )
512503 unneeded_columns = (
513504 "Disassembly" ,
514505 "ProcMaps" ,
0 commit comments