Using crash-stats-api-magic
Monday, April 20th, 2015A while back, I wrote the tool crash-stats-api-magic which allows custom processing of results from the crash-stats API. This tool is not user-friendly, but it can be used to answer some pretty complicated questions.
As an example and demonstration, see a bug that Matthew Gregan filed this morning asking for a custom report from crash-stats:
In trying to debug bug 1135562, it’s hard to guess the severity of the problem or look for any type of version/etc. correlation because there are many types of hangs caught under the same mozilla::MediaShutdownManager::Shutdown stack. I’d like a report that contains only those with mozilla::MediaShutdownManager::Shutdown in the hung (main thread) stack *and* has wasapi_stream_init on one of the other threads, please.
To build this report, start with a basic query and then refine it in the tool:
- Construct a supersearch query to select the crashes we’re interested in. The only criteria for this query was “signature contains ‘MediaShutdownManager::Shutdown`. When possible, filter on channel, OS, and version to reduce noise.
- After the supersearch query is constructed, choose “More Options” from the results page and copy the “Public API URL” link.
- Load crash-stats-api-magic and paste the query URL. Choose “Fetch” to fetch the results. Look through the raw data to get a sense for its structure. Link
- The meat of this function is to filter out the crashes that don’t have “wasapi_stream_init” on a thread. Choose “New Rule” and create a filter rule:
function(d) { var ok = false; d.json_dump.threads.forEach(function(thread) { thread.frames.forEach(function(frame) { if (frame.function && frame.function.indexOf("wasapi_stream_init") != -1) { ok = true; } }); }); return ok; }
Choose “Execute” to run the filter. Link
- To get the final report we output only the signature and the crash ID for each result. Choose “New Rule” again and create a mapping rule:
function(d) { return [d.uuid, d.signature]; }
One of the advantages of this tool is that it is possible to iterate quickly on the data without constantly re-querying, but at the end it should be possible to permalink to the results in bugzilla or email exchanges.
If you need to do complex crash-stats analysis, please try it out! email me if you have questions, and pull requests are welcome.