Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(163)

Side by Side Diff: appengine/findit/util_scripts/crash_queries/crash_iterator.py

Issue 2391823006: [Findit] Add iterator and crash_iterator for delta test (Closed)
Patch Set: Update doc strings. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright 2016 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 from datetime import date
6 from datetime import datetime
7 from datetime import timedelta
8
9 from crash.type_enums import CrashClient
10 import iterator
11 from model.crash.cracas_crash_analysis import CracasCrashAnalysis
12 from model.crash.fracas_crash_analysis import FracasCrashAnalysis
13 import remote_api
14
15 _DEFAULT_BATCH_SIZE = 1000
16 _TODAY = date.today().strftime('%Y-%m-%d')
17 _A_YEAR_AGO = (date.today() - timedelta(days=365)).strftime('%Y-%m-%d')
18
19 COMMON_CRASH_FIELDS = ['crashed_version', 'stack_trace', 'signature',
20 'platform', 'client_id', 'customized_data']
21
22
23 # TODO(katesonia): Switch to use fuction of objects encapsulating CrashClients,
24 # after the refactoring is done.
25 def GetAnalysisClassForClient(client_id):
26 if client_id == CrashClient.FRACAS:
27 return FracasCrashAnalysis
28 elif client_id == CrashClient.CRACAS:
29 return CracasCrashAnalysis
30 elif client_id == CrashClient.CLUSTERFUZZ:
31 # TODO(katesonia): Define ClusterfuzzCrashAnalysis.
32 return None
33
34 return None
35
36
37 def GetQueryForClient(client_id, property_values, start_date, end_date,
38 datetime_pattern='%Y-%m-%d'):
39 if property_values is None:
40 property_values = {}
41
42 start_date = datetime.strptime(start_date, datetime_pattern)
43 end_date = datetime.strptime(end_date, datetime_pattern)
44 cls = GetAnalysisClassForClient(client_id)
45 query = cls.query()
46 for property_name, value in property_values.iteritems():
47 query = query.filter(getattr(cls, property_name) == value)
48
49 return query.filter(
50 cls.requested_time >= start_date).filter(
51 cls.requested_time < end_date)
52
53
54 def IterateCrashes(client_id,
55 app_id,
56 fields=None,
57 property_values=None,
58 start_date=_A_YEAR_AGO,
59 end_date=_TODAY,
60 batch_size=_DEFAULT_BATCH_SIZE,
61 batch_run=False):
62 """Genrates query to query crashes and iterates crashes.
63
64 Args:
65 client_id (CrashClient): One of CrashClient.FRACAS, CrashClient.CRACAS,
66 CrashClient.CLUSTERFUZZ.
67 app_id (str): App engine app id.
68 fields (list): Field names of CrashAnalysis entity to project.
69 property_values (dict): Property values to filter.
70 start_date (str): Only iterate testcases after this date including this
71 date, format '%Y-%m-%d'.
72 end_date (str): Only iterate testcases before this date excluding this date,
73 format '%Y-%m-%d'.
74 batch_size (int): The number of crashes to query at one time.
75 batch_run (bool): If True, iterate batches of crashes, if
76 False, iterate each crash.
77
78 An example is available in crash_printer/print_crash.py.
79 """
80 if fields is None:
81 fields = COMMON_CRASH_FIELDS
82
83 if property_values is None:
84 property_values = {}
85
86 query = GetQueryForClient(client_id, property_values, start_date, end_date)
87 for crash in iterator.Iterate(query, fields, app_id, batch_size=batch_size,
88 batch_run=batch_run):
89 yield crash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698