Changeset 498:eb90db2d0287
- Timestamp:
- 10/14/08 17:31:02
(3 months ago)
- Author:
- Brian Warner <warner@allmydata.com>
- branch:
- default
- Message:
web-viewer: mark incident triggers, and add hyperlinks to them from the welcome page. Closes #79.
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r497 |
r498 |
|
| 1 | 1 | 2008-10-14 Brian Warner <warner@allmydata.com> |
|---|
| | 2 | |
|---|
| | 3 | * foolscap/logging/web.py: mark any incident triggers in the |
|---|
| | 4 | logfile, and add links to them from the welcome page. Closes #79. |
|---|
| 2 | 5 | |
|---|
| 3 | 6 | * foolscap/logging/web.py (Reload): add a 'Reload Logfile' button |
|---|
| r497 |
r498 |
|
| 96 | 96 | (lfnum, level, len(levels[level]), |
|---|
| 97 | 97 | level)) |
|---|
| | 98 | if self.viewer.triggers: |
|---|
| | 99 | data += " <li>Incident Triggers:\n" |
|---|
| | 100 | data += " <ul>\n" |
|---|
| | 101 | for t in self.viewer.triggers: |
|---|
| | 102 | le = self.viewer.number_map[t] |
|---|
| | 103 | data += " <li>" |
|---|
| | 104 | href_base = "/all-events" |
|---|
| | 105 | data += le.to_html(href_base) |
|---|
| | 106 | data += " </li>\n" |
|---|
| | 107 | data += " </ul>\n" |
|---|
| | 108 | data += " </li>\n" |
|---|
| 98 | 109 | data += " </ul>\n" |
|---|
| 99 | 110 | data += "</ul>\n" |
|---|
| … | … | |
| 220 | 231 | if 'parent' in e['d']: |
|---|
| 221 | 232 | self.parent_index = (e['from'], e['d']['parent']) |
|---|
| | 233 | self.is_trigger = False |
|---|
| 222 | 234 | |
|---|
| 223 | 235 | LEVELMAP = { |
|---|
| … | … | |
| 250 | 262 | if level >= log.UNUSUAL: |
|---|
| 251 | 263 | level_s = self.LEVELMAP.get(level, "") + " " |
|---|
| 252 | | return '%s [<span id="E%s"><a href="%s#E%s">%d</a></span>]: %s%s' \ |
|---|
| | 264 | data = '%s [<span id="E%s"><a href="%s#E%s">%d</a></span>]: %s%s' \ |
|---|
| 253 | 265 | % (time_s, |
|---|
| 254 | 266 | self.anchor_index, href_base, self.anchor_index, d['num'], |
|---|
| 255 | 267 | level_s, msg) |
|---|
| | 268 | if self.is_trigger: |
|---|
| | 269 | data += " [INCIDENT-TRIGGER]" |
|---|
| | 270 | return data |
|---|
| 256 | 271 | |
|---|
| 257 | 272 | class Reload(resource.Resource): |
|---|
| … | … | |
| 307 | 322 | def load_logfiles(self): |
|---|
| 308 | 323 | #self.summary = {} # keyed by logfile name |
|---|
| 309 | | (self.summaries, self.root_events, self.number_map) = \ |
|---|
| 310 | | self.process_logfiles(self.logfiles) |
|---|
| | 324 | (self.summaries, |
|---|
| | 325 | self.root_events, |
|---|
| | 326 | self.number_map, |
|---|
| | 327 | self.triggers) = self.process_logfiles(self.logfiles) |
|---|
| 311 | 328 | |
|---|
| 312 | 329 | def process_logfiles(self, logfiles): |
|---|
| … | … | |
| 315 | 332 | number_map = {} |
|---|
| 316 | 333 | roots = [] |
|---|
| | 334 | trigger_numbers = [] |
|---|
| | 335 | first_event_from = None |
|---|
| 317 | 336 | |
|---|
| 318 | 337 | for lf in logfiles: |
|---|
| … | … | |
| 323 | 342 | |
|---|
| 324 | 343 | for e in self.get_events(lf): |
|---|
| | 344 | if "header" in e: |
|---|
| | 345 | if e["header"]["type"] == "incident": |
|---|
| | 346 | t = e["header"]["trigger"] |
|---|
| | 347 | trigger_numbers.append(t["num"]) |
|---|
| 325 | 348 | if "d" not in e: |
|---|
| 326 | 349 | continue # skip headers |
|---|
| | 350 | if not first_event_from: |
|---|
| | 351 | first_event_from = e['from'] |
|---|
| 327 | 352 | le = LogEvent(e) |
|---|
| 328 | 353 | if le.index: |
|---|
| … | … | |
| 337 | 362 | number = d.get("num", None) |
|---|
| 338 | 363 | when = d.get("time") |
|---|
| | 364 | if number in trigger_numbers: |
|---|
| | 365 | le.is_trigger = True |
|---|
| 339 | 366 | |
|---|
| 340 | 367 | if False: |
|---|
| … | … | |
| 372 | 399 | summaries[lf] = summary |
|---|
| 373 | 400 | |
|---|
| 374 | | return summaries, roots, number_map |
|---|
| | 401 | triggers = [(first_event_from, num) for num in trigger_numbers] |
|---|
| | 402 | |
|---|
| | 403 | return summaries, roots, number_map, triggers |
|---|
| 375 | 404 | |
|---|
| 376 | 405 | def get_events(self, fn): |
|---|