Revision: | 1.7 |
Committed: | Tue May 26 10:23:00 2009 UTC (15 years, 11 months ago) by spiga |
Content type: | text/x-python |
Branch: | MAIN |
CVS Tags: | CRAB_2_9_1, CRAB_2_9_1_pre2, CRAB_2_9_1_pre1, CRAB_2_9_0, CRAB_2_9_0_pre2, CRAB_2_9_0_pre1, CRAB_2_8_8, CRAB_2_8_8_pre1, CRAB_2_8_7_patch3, CRAB_2_8_7_patch2, CRAB_2_8_7_patch1, CRAB_2_8_7, CRAB_2_8_7_pre2, CRAB_2_8_7_pre1, CRAB_2_8_6, CRAB_2_8_6_pre1, CRAB_2_8_5_patch3, CRAB_2_8_5_patch2, CRAB_2_8_5_patch1, CRAB_2_8_5, CRAB_2_8_5_pre5, CRAB_2_8_5_pre4, CRAB_2_8_5_pre3, CRAB_2_8_4_patch3, CRAB_2_8_5_pre2, CRAB_2_8_4_patch2, CRAB_2_8_5_pre1, CRAB_2_8_4_patch1, CRAB_2_8_4, CRAB_2_8_4_pre5, CRAB_2_8_4_pre4, CRAB_2_8_4_pre3, CRAB_2_8_4_pre2, CRAB_2_8_4_pre1, CRAB_2_8_3, CRAB_2_8_3_pre4, CRAB_2_8_3_pre3, CRAB_2_8_3_pre2, CRAB_2_8_3_pre1, CRAB_2_8_2_patch1, CRAB_2_8_2, CRAB_2_8_2_pre5, CRAB_2_8_2_pre4, CRAB_2_8_2_pre3, CRAB_2_8_2_pre2, CRAB_2_8_2_pre1, CRAB_2_8_1, CRAB_2_8_0, CRAB_2_8_0_pre1, CRAB_2_7_10_pre3, CRAB_2_7_9_patch2_pre1, CRAB_2_7_10_pre2, CRAB_2_7_10_pre1, CRAB_2_7_9_patch1, CRAB_2_7_9, CRAB_2_7_9_pre5, CRAB_2_7_9_pre4, CRAB_2_7_9_pre3, CRAB_2_7_9_pre2, CRAB_2_7_8_patch2, CRAB_2_7_9_pre1, CRAB_2_7_8_patch2_pre1, CRAB_2_7_8_patch1, CRAB_2_7_8_patch1_pre1, CRAB_2_7_8, CRAB_2_7_8_pre3, CRAB_2_7_8_pre2, CRAB_2_7_8_dash3, CRAB_2_7_8_dash2, CRAB_2_7_8_dash, CRAB_2_7_7_patch1, CRAB_2_7_7_patch1_pre1, CRAB_2_7_8_pre1, CRAB_2_7_7, CRAB_2_7_7_pre2, CRAB_2_7_7_pre1, CRAB_2_7_6_patch1, CRAB_2_7_6, CRAB_2_7_6_pre1, CRAB_2_7_5_patch1, CRAB_2_7_5, CRAB_2_7_5_pre3, CRAB_2_7_5_pre2, CRAB_2_7_5_pre1, CRAB_2_7_4_patch1, CRAB_2_7_4, CRAB_2_7_4_pre6, CRAB_2_7_4_pre5, CRAB_2_7_4_pre4, CRAB_2_7_4_pre3, CRAB_2_7_4_pre2, CRAB_2_7_4_pre1, CRAB_2_7_3, CRAB_2_7_3_pre3, CRAB_2_7_3_pre3_beta, CRAB_2_7_3_pre2, CRAB_2_7_3_pre2_beta, CRAB_2_7_3_pre1, CRAB_2_7_3_beta3, CRAB_2_7_3_beta2, CRAB_2_7_3_beta1, CRAB_2_7_3_beta, CRAB_2_7_2_p1, CRAB_2_7_1_branch_firstMERGE, CRAB_2_7_2, CRAB_2_7_2_pre4, CRAB_2_7_2_pre3, CRAB_2_7_2_pre2, CRAB_2_7_2_pre1, CRAB_2_7_1, fede_170310, CRAB_2_7_1_pre12, CRAB_2_7_1_pre11, CRAB_2_7_1_pre10, CRAB_2_7_1_pre9, CRAB_LumiMask, CRAB_2_7_lumi, from_LimiMask, CRAB_2_7_1_pre8, CRAB_2_7_1_pre6, CRAB_2_7_1_pre5, CRAB_2_7_1_wmbs_pre4, CRAB_2_7_1_pre4, CRAB_2_7_1_pre3, CRAB_2_6_6_pre6, CRAB_2_7_1_pre2, CRAB_2_6_6_pre5, CRAB_2_7_1_pre1, CRAB_2_6_6_pre4, CRAB_2_6_6_pre3, CRAB_2_6_6_pre2, CRAB_2_6_6_check, CRAB_2_6_6, CRAB_2_6_6_pre1, CRAB_2_7_0, CRAB_2_6_5, CRAB_2_7_0_pre8, CRAB_2_6_5_pre1, CRAB_2_7_0_pre7, CRAB_2_6_4, CRAB_2_7_0_pre6, CRAB_2_6_4_pre1, CRAB_2_7_0_pre5, CRAB_2_6_3_patch_2, CRAB_2_6_3_patch_2_pre2, CRAB_2_6_3_patch_2_pre1, CRAB_2_6_3_patch_1, CRAB_2_7_0_pre4, CRAB_2_7_0_pre3, CRAB_2_6_3, CRAB_2_6_3_pre5, CRAB_2_6_3_pre4, CRAB_2_6_3_pre3, CRAB_2_6_3_pre2, CRAB_2_7_0_pre2, CRAB_2_6_3_pre1, test_1, CRAB_2_7_0_pre1, CRAB_2_6_2, CRAB_2_6_2_pre2, CRAB_2_6_2_pre1, CRAB_2_6_1_pre4, CRAB_2_6_1_pre3, CRAB_2_6_1_pre2, CRAB_2_6_1_pre1, CRAB_2_6_1, CRAB_2_6_0, CRAB_2_6_0_pre14, CRAB_2_6_0_pre13, CRAB_2_6_0_pre12, CRAB_2_6_0_pre11, CRAB_2_6_0_pre10, CRAB_2_6_0_pre9, CRAB_2_6_0_pre8, CRAB_2_6_0_pre7, CRAB_2_6_0_pre6, CRAB_2_6_0_pre5, CRAB_2_6_0_pre4, CRAB_2_6_0_pre3, HEAD |
Branch point for: | CRAB_multiout, CRAB_2_7_1_branch, Lumi2_8, CRAB_2_6_X_br |
Changes since 1.6: | +1 -1 lines |
Log Message: | adapting code to logging usage. (crab_logger removed) |
# | User | Rev | Content |
---|---|---|---|
1 | gutsche | 1.1 | #!/usr/bin/env python |
2 | |||
3 | mcinquil | 1.5 | import sys , re #DS |
4 | EXIT_CODE_RE = re.compile('^\s*-\s*[Ee]xit.[Cc]ode\s*=\s*(.*?)\s*$') | ||
5 | gutsche | 1.1 | |
6 | class EdgLoggingInfo: | ||
7 | def __init__(self) : | ||
8 | self._events = ['Running', 'Done', 'Abort'] | ||
9 | self._errors = ['Maradona', 'Globus error', | ||
10 | 'gridmanager error', 'CondorG', | ||
11 | 'BrokerInfo', 'Cannot download', | ||
12 | 'Cannot upload'] | ||
13 | self._categories = ['Resource unavailable', | ||
14 | 'Grid error before job started', | ||
15 | 'Grid error after job started', | ||
16 | 'Aborted by user', | ||
17 | 'Application error', | ||
18 | spiga | 1.6 | 'Success', |
19 | 'Failure while executing job wrapper' ] | ||
20 | gutsche | 1.1 | self.category = '' |
21 | self.reason = '' | ||
22 | |||
23 | def parse_reason(self,reason) : | ||
24 | error = reason | ||
25 | if reason.count('Cannot download') >= 1 : | ||
26 | error = 'Cannot download ... from ...' | ||
27 | if reason.count('cannot retrieve previous matches') >= 1 : | ||
28 | error = 'Harmless warning' | ||
29 | if reason.count('RetryCount') >= 1 : | ||
30 | error = 'Harmless warning' | ||
31 | if reason.count('There were some warnings') >= 1 : | ||
32 | error = 'Harmless warning' | ||
33 | return error; | ||
34 | |||
35 | def parseFile(self,filename) : | ||
36 | |||
37 | # open file | ||
38 | try: | ||
39 | file = open(filename) | ||
40 | except IOError: | ||
41 | spiga | 1.7 | common.logger.info('Could not open file: '+filename) |
42 | gutsche | 1.1 | return '' |
43 | |||
44 | return self.decodeReason(file.readlines()) | ||
45 | |||
46 | def decodeReason(self, input) : | ||
47 | """ | ||
48 | extract meaningful message from edg-job-get-logging-info -v 2 | ||
49 | """ | ||
50 | # init final variables | ||
51 | final_done_code = 0 | ||
52 | final_abort_msg = '' | ||
53 | final_done_msg = '' | ||
54 | final_category = '' | ||
55 | final_abort = 0 | ||
56 | final_done = 0 | ||
57 | final_running = 0 | ||
58 | |||
59 | # init variable used in loop | ||
60 | event = '' | ||
61 | reason = '' | ||
62 | exit_code = '' | ||
63 | |||
64 | lines = input.split('\n') | ||
65 | for line in lines : | ||
66 | if line.count('Event:') >= 1 : | ||
67 | event = line.split(':')[1].strip() | ||
68 | if event == 'Abort' : | ||
69 | final_abort = 1 | ||
70 | if event == 'Running' : | ||
71 | final_running = 1 | ||
72 | if event == 'Done' : | ||
73 | final_done = 1 | ||
74 | spiga | 1.6 | if line.count('Reason') >= 1 : |
75 | gutsche | 1.1 | reason = self.parse_reason(line.split('=')[1].strip()) |
76 | mcinquil | 1.5 | match = EXIT_CODE_RE.match(line) #DS |
77 | if match: #DS | ||
78 | exit_code = match.groups()[0] #DS | ||
79 | #if line.count('exit_code') >= 1 : | ||
80 | # exit_code = line.split('=')[1].strip() | ||
81 | slacapra | 1.3 | # if line.count('time') >= 1 : |
82 | # time = line.split('=')[1].strip() | ||
83 | gutsche | 1.1 | if ( line.count('---') >= 1 or line.count('***') >= 1 ) and event != '' : |
84 | if event in self._events : | ||
85 | if event == 'Done' : | ||
86 | final_done_code = int(exit_code) | ||
87 | if final_done_msg == '' : | ||
88 | final_done_msg = reason | ||
89 | if final_done_msg != reason : | ||
90 | final_done_msg += '. '+reason | ||
91 | elif event == 'Abort' : | ||
92 | final_abort_msg = reason | ||
93 | spiga | 1.6 | |
94 | if final_abort_msg.count('Failure while executing job wrapper') >= 1 and \ | ||
95 | ( final_running == 1 ) : | ||
96 | final_category = self._categories[6] | ||
97 | gutsche | 1.1 | |
98 | if final_abort_msg.count('no compatible resources') >= 1 : | ||
99 | final_category = self._categories[0] | ||
100 | |||
101 | if ( final_running == 0 ) and \ | ||
102 | ( final_abort == 1 ) and \ | ||
103 | ( final_abort_msg.count('no compatible resources') >= 1 ) : | ||
104 | final_category = self._categories[1] | ||
105 | |||
106 | if ( final_running == 0 ) : | ||
107 | for error in self._errors : | ||
108 | if final_done_msg.count(error) >= 1 : | ||
109 | final_category = self._categories[1] | ||
110 | |||
111 | if ( final_running == 1 ) and \ | ||
112 | ( final_done_code != 0 ) and \ | ||
113 | ( final_done == 0 ) : | ||
114 | final_category = self._categories[2] | ||
115 | |||
116 | |||
117 | if ( final_running == 1 ) and \ | ||
118 | ( final_done_code != 0 ) : | ||
119 | for error in self._errors : | ||
120 | if final_done_msg.count(error) >= 1 : | ||
121 | final_category = self._categories[2] | ||
122 | |||
123 | if ( final_done == 1 ) and \ | ||
124 | ( final_done_msg.count('Aborted by user') >= 1 ) : | ||
125 | final_category = self._categories[3] | ||
126 | |||
127 | if ( final_running == 1 ) and \ | ||
128 | ( final_abort == 0 ) and \ | ||
129 | ( final_done == 1 ) and \ | ||
130 | ( final_done_code != 0 ) : | ||
131 | check = 0 | ||
132 | for error in self._errors : | ||
133 | if final_done_msg.count(error) >= 1 : | ||
134 | check = 1 | ||
135 | if check == 0 : | ||
136 | final_category = self._categories[4] | ||
137 | |||
138 | if ( final_running == 1 ) and \ | ||
139 | ( final_abort == 0 ) and \ | ||
140 | ( final_done_code == 0 ) and \ | ||
141 | ( final_done_msg.count('Aborted by user') == 0 ) : | ||
142 | final_category = self._categories[5] | ||
143 | |||
144 | msg = '' | ||
145 | if final_category == self._categories[0] : | ||
146 | msg = 'aborted because: "'+self._categories[0]+'". Abort msg: "'+final_abort_msg+'".' | ||
147 | self.reason = final_abort_msg | ||
148 | self.category = self._categories[0] | ||
149 | elif final_category == self._categories[1] : | ||
150 | if final_done == 1 : | ||
151 | msg = 'aborted with "'+self._categories[1]+'". Abort msg: "'+final_done_msg+'".' | ||
152 | self.reason = final_done_msg | ||
153 | self.category = self._categories[1] | ||
154 | else : | ||
155 | msg = 'aborted with "'+self._categories[1]+'". Abort msg: "'+final_abort_msg+'".' | ||
156 | self.reason = final_abort_msg | ||
157 | self.category = self._categories[1] | ||
158 | elif final_category == self._categories[2] : | ||
159 | msg = 'aborted with "'+self._categories[2]+'". Abort msg: "'+final_done_msg+'".' | ||
160 | self.reason = final_done_msg | ||
161 | self.category = self._categories[2] | ||
162 | elif final_category == self._categories[3] : | ||
163 | msg = 'was "'+self._categories[3]+'".' | ||
164 | self.reason = self._categories[3] | ||
165 | self.category = self._categories[3] | ||
166 | elif final_category == self._categories[4] : | ||
167 | corvo | 1.2 | msg = 'finished correctly but failed with error code: ', final_done_code |
168 | gutsche | 1.1 | self.reason = msg |
169 | self.category = self._categories[4] | ||
170 | elif final_category == self._categories[5] : | ||
171 | msg = 'succeeded' | ||
172 | self.reason = msg | ||
173 | self.category = self._categories[5] | ||
174 | spiga | 1.6 | elif final_category == self._categories[6] : |
175 | msg = 'aborted with msg "'+final_abort_msg+'".' | ||
176 | self.reason = msg | ||
177 | self.category = self._categories[5] | ||
178 | gutsche | 1.1 | |
179 | return msg | ||
180 | |||
181 | def getCategory(self) : | ||
182 | return self.category | ||
183 | |||
184 | def getReason(self) : | ||
185 | return self.reason | ||
186 | |||
187 | |||
188 | if __name__ == '__main__' : | ||
189 | |||
190 | info = EdgLoggingInfo() | ||
191 | print info.parseFile(sys.argv[1]) |