]> git.ipfire.org Git - people/jschlag/pbs.git/blob - src/buildservice/logs.py
Rename credits to scores
[people/jschlag/pbs.git] / src / buildservice / logs.py
1 #!/usr/bin/python
2
3 import os
4
5 from . import base
6
7 _ = lambda x: x
8
9 class LogEntry(base.Object):
10 type = None
11
12 def __init__(self, pakfire, data):
13 base.Object.__init__(self, pakfire)
14
15 self.data = data
16
17 self._user = None
18
19 def __cmp__(self, other):
20 return cmp(other.time, self.time)
21
22 @property
23 def time(self):
24 return self.data.time
25
26 def get_user(self):
27 user_id = getattr(self.data, "user_id", None)
28
29 if user_id is None:
30 return
31
32 return self.pakfire.users.get_by_id(self.data.user_id)
33
34 @property
35 def user(self):
36 if self._user is None:
37 self._user = self.get_user()
38
39 return self._user
40
41 def get_title(self, user=None):
42 return None
43
44 def get_message(self, user=None):
45 raise NotImplementedError
46
47 def get_footer(self, user=None):
48 return None
49
50
51 class CreatedLogEntry(LogEntry):
52 type = "created"
53
54 @property
55 def build(self):
56 return self.data
57
58 @property
59 def time(self):
60 return self.build.created
61
62 def get_user(self):
63 if self.build.type == "scratch":
64 return self.build.owner
65
66 def get_message(self, user=None):
67 return _("Build has been created")
68
69
70 class CommentLogEntry(LogEntry):
71 type = "comment"
72
73 @property
74 def time(self):
75 return self.data.time_created
76
77 @property
78 def score(self):
79 return self.data.score
80
81 @property
82 def build_id(self):
83 return self.data.build_id
84
85 @property
86 def build(self):
87 return self.pakfire.builds.get_by_id(self.build_id)
88
89 @property
90 def vote(self):
91 if self.score > 0:
92 return "up"
93 elif self.score < 0:
94 return "down"
95
96 return "none"
97
98 def get_message(self, user=None):
99 return self.data.text
100
101
102 class RepositoryLogEntry(LogEntry):
103 type = "repo"
104
105 def get_message(self, user=None):
106 msg = _("Unknown action.")
107
108 # See if we have done the action by ourself.
109 you = self.user == user
110
111 args = {}
112
113 # Add information about the user.
114 if self.user:
115 args["user"] = self.user.realname
116 else:
117 args["user"] = _("Unknown")
118
119 # Add information about the repositories.
120 if self.data.from_repo_id:
121 repo = self.pakfire.repos.get_by_id(self.data.from_repo_id)
122 args["from_repo"] = repo.name
123 else:
124 args["from_repo"] = _("N/A")
125
126 if self.data.to_repo_id:
127 repo = self.pakfire.repos.get_by_id(self.data.to_repo_id)
128 args["to_repo"] = repo.name
129 else:
130 args["to_repo"] = _("N/A")
131
132 action = self.data.action
133
134 if action == "added":
135 if not self.user:
136 msg = _("This build was pushed to the repository '%(to_repo)s'.")
137 elif you:
138 msg = _("You pushed this build to the repository '%(to_repo)s'.")
139 else:
140 msg = _("%(user)s pushed this build to the repository '%(to_repo)s'.")
141
142 elif action == "removed":
143 if not self.user:
144 msg = _("This build was unpushed from the repository '%(from_repo)s'.")
145 elif you:
146 msg = _("You unpushed this build from the repository '%(from_repo)s'.")
147 else:
148 msg = _("%(user)s unpushed this build from the repository '%(from_repo)s'.")
149
150 elif action == "moved":
151 if not self.user:
152 msg = _("This build was pushed from the repository '%(from_repo)s' to '%(to_repo)s'.")
153 elif you:
154 msg = _("You pushed this build from the repository '%(from_repo)s' to '%(to_repo)s'.")
155 else:
156 msg = _("%(user)s pushed this build from the repository '%(from_repo)s' to '%(to_repo)s'.")
157
158 return msg % args
159
160
161 class BuilderLogEntry(LogEntry):
162 type = "builder"
163
164 def get_builder(self):
165 assert self.data.builder_id
166
167 return self.pakfire.builders.get_by_id(self.data.builder_id)
168
169 def get_message(self, user=None):
170 msg = _("Unknown action.")
171
172 # See if we have done the action by ourself.
173 you = self.user == user
174
175 builder = self.get_builder()
176 assert builder
177
178 args = {
179 "builder" : builder.hostname,
180 }
181
182 # Add information about the user.
183 if self.user:
184 args["user"] = self.user.realname
185 else:
186 args["user"] = _("Unknown")
187
188 action = self.data.action
189
190 if action == "enabled":
191 if not self.user:
192 msg = _("Builder '%(builder)s' has been enabled.")
193 elif you:
194 msg = _("You enabled builder '%(builder)s'.")
195 else:
196 msg = _("%(user)s enabled builder '%(builder)s'.")
197
198 elif action == "disabled":
199 if not self.user:
200 msg = _("Builder '%(builder)s' has been disabled.")
201 elif you:
202 msg = _("You disabled builder '%(builder)s'.")
203 else:
204 msg = _("%(user)s disabled builder '%(builder)s'.")
205
206 elif action == "deleted":
207 if you:
208 msg = _("You deleted builder '%(builder)s'.")
209 else:
210 msg = _("%(user)s deleted builder '%(builder)s'.")
211
212 elif action == "created":
213 if you:
214 msg = _("You created builder '%(builder)s'.")
215 else:
216 msg = _("%(user)s created builder '%(builder)s'.")
217
218 return msg % args
219
220
221 class JobLogEntry(LogEntry):
222 type = "job"
223
224 def get_job(self):
225 assert self.data.job_id
226
227 return self.pakfire.jobs.get_by_id(self.data.job_id)
228
229 def get_message(self, user=None):
230 msg = _("Unknown action.")
231
232 # See if we have done the action by ourself.
233 you = self.user == user
234
235 job = self.get_job()
236 assert job
237
238 args = {
239 "job" : job.name,
240 "state" : self.data.state,
241 }
242
243 # Add information about the user.
244 if self.user:
245 args["user"] = self.user.realname
246 else:
247 args["user"] = _("Unknown")
248
249 action = self.data.action
250
251 if action == "created":
252 if not self.user:
253 msg = _("Job '%(job)s' has been created.")
254 elif you:
255 msg = _("You created job '%(job)s'.")
256 else:
257 msg = _("%(user)s created job '%(job)s'.")
258
259 elif action == "state_change":
260 if not self.user:
261 msg = _("Job '%(job)s' has changed its state to: %(state)s.")
262 elif you:
263 msg = _("You changed the state of job '%(job)s' to: %(state)s.")
264 else:
265 msg = _("%(user)s changed the state of job '%(job)s' to: %(state)s.")
266
267 elif action == "reset":
268 if not self.user:
269 msg = _("Job '%(job)s' has been reset.")
270 elif you:
271 msg = _("You reset job '%(job)s'.")
272 else:
273 msg = _("%(user)s has reset job '%(job)s'.")
274
275 elif action == "schedule_rebuild":
276 if not self.user:
277 msg = _("Job '%(job)s' has been scheduled for rebuild.")
278 elif you:
279 msg = _("You scheduled job '%(job)s' for rebuild.")
280 else:
281 msg = _("%(user)s scheduled job '%(job)s' for rebuild.")
282
283 elif action == "schedule_test_job":
284 # XXX add link to the test job
285
286 if not self.user:
287 msg = _("A test job for '%(job)s' has been scheduled.")
288 elif you:
289 msg = _("You scheduled a test job for '%(job)s'.")
290 else:
291 msg = _("%(user)s scheduled a test job for '%(job)s'.")
292
293 return msg % args
294
295
296 class MirrorLogEntry(LogEntry):
297 type = "mirror"
298
299 def get_mirror(self):
300 assert self.data.mirror_id
301
302 return self.pakfire.mirrors.get_by_id(self.data.mirror_id)
303
304 def get_message(self, user=None):
305 msg = _("Unknown action.")
306
307 # See if we have done the action by ourself.
308 you = self.user == user
309
310 mirror = self.get_mirror()
311 assert mirror
312
313 args = {
314 "mirror" : mirror.hostname,
315 }
316
317 # Add information about the user.
318 if self.user:
319 args["user"] = self.user.realname
320 else:
321 args["user"] = _("Unknown")
322
323 action = self.data.action
324
325 if action == "enabled":
326 if not self.user:
327 msg = _("Mirror '%(mirror)s' has been enabled.")
328 elif you:
329 msg = _("You enabled mirror '%(mirror)s'.")
330 else:
331 msg = _("%(user)s enabled mirror '%(mirror)s'.")
332
333 elif action == "disabled":
334 if not self.user:
335 msg = _("Mirror '%(mirror)s' has been disabled.")
336 elif you:
337 msg = _("You disabled mirror '%(mirror)s'.")
338 else:
339 msg = _("%(user)s disabled mirror '%(mirror)s'.")
340
341 elif action == "deleted":
342 if you:
343 msg = _("You deleted mirror '%(mirror)s'.")
344 else:
345 msg = _("%(user)s deleted mirror '%(mirror)s'.")
346
347 elif action == "created":
348 if you:
349 msg = _("You created mirror '%(mirror)s'.")
350 else:
351 msg = _("%(user)s created mirror '%(mirror)s'.")
352
353 return msg % args
354
355
356 class LogFile(base.Object):
357 def __init__(self, pakfire, id):
358 base.Object.__init__(self, pakfire)
359
360 # Save the ID of the item.
361 self.id = id
362
363 # Cache.
364 self._data = None
365 self._job = None
366
367 @property
368 def data(self):
369 if self._data is None:
370 self._data = self.db.get("SELECT * FROM logfiles WHERE id = %s", self.id)
371 assert self._data
372
373 return self._data
374
375 @property
376 def name(self):
377 return os.path.basename(self.path)
378
379 @property
380 def path(self):
381 return self.data.path
382
383 @property
384 def job(self):
385 if self._job is None:
386 self._job = self.pakfire.jobs.get_by_id(self.data.job_id)
387 assert self._job
388
389 return self._job
390
391 @property
392 def build(self):
393 return self.job.build
394
395 @property
396 def download_url(self):
397 return "/".join((self.build.download_prefix, self.path))
398
399 @property
400 def filesize(self):
401 return self.data.filesize