Changeset 498:eb90db2d0287

Show
Ignore:
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
  • ChangeLog

    r497 r498  
    112008-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. 
    25 
    36        * foolscap/logging/web.py (Reload): add a 'Reload Logfile' button 
  • foolscap/logging/web.py

    r497 r498  
    9696                             (lfnum, level, len(levels[level]), 
    9797                              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" 
    98109                data += " </ul>\n" 
    99110            data += "</ul>\n" 
     
    220231        if 'parent' in e['d']: 
    221232            self.parent_index = (e['from'], e['d']['parent']) 
     233        self.is_trigger = False 
    222234 
    223235    LEVELMAP = { 
     
    250262        if level >= log.UNUSUAL: 
    251263            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' \ 
    253265               % (time_s, 
    254266                  self.anchor_index, href_base, self.anchor_index, d['num'], 
    255267                  level_s, msg) 
     268        if self.is_trigger: 
     269            data += " [INCIDENT-TRIGGER]" 
     270        return data 
    256271 
    257272class Reload(resource.Resource): 
     
    307322    def load_logfiles(self): 
    308323        #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) 
    311328 
    312329    def process_logfiles(self, logfiles): 
     
    315332        number_map = {} 
    316333        roots = [] 
     334        trigger_numbers = [] 
     335        first_event_from = None 
    317336 
    318337        for lf in logfiles: 
     
    323342 
    324343            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"]) 
    325348                if "d" not in e: 
    326349                    continue # skip headers 
     350                if not first_event_from: 
     351                    first_event_from = e['from'] 
    327352                le = LogEvent(e) 
    328353                if le.index: 
     
    337362                number = d.get("num", None) 
    338363                when = d.get("time") 
     364                if number in trigger_numbers: 
     365                    le.is_trigger = True 
    339366 
    340367                if False: 
     
    372399            summaries[lf] = summary 
    373400 
    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 
    375404 
    376405    def get_events(self, fn):