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

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

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

Powered by Google App Engine
This is Rietveld 408576698