Changeset c914e1d in rtems-source-builder


Ignore:
Timestamp:
May 1, 2013, 12:08:36 AM (6 years ago)
Author:
Chris Johns <chrisj@…>
Branches:
4.10, 4.11, 4.9, master
Children:
df56f7e
Parents:
3c69de0
Message:

Add tail support to the log. Email the log tail in a failure.

Location:
source-builder/sb
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • source-builder/sb/log.py

    r3c69de0 rc914e1d  
    8989class log:
    9090    """Log output to stdout or a file."""
    91     def __init__(self, streams = None):
     91    def __init__(self, streams = None, tail_size = 100):
     92        self.tail = []
     93        self.tail_size = tail_size
    9294        self.fhs = [None, None]
    9395        if streams:
     
    108110            self.fhs[f].close()
    109111
     112    def __str__(self):
     113        t = ''
     114        for tl in self.tail:
     115            t += tl + os.linesep
     116        return t[:-len(os.linesep)]
     117
     118    def _tail(self, text):
     119        if type(text) is not list:
     120            text = text.splitlines()
     121        self.tail += text
     122        if len(self.tail) > self.tail_size:
     123            self.tail = self.tail[-self.tail_size:]
     124
    110125    def has_stdout(self):
    111126        return self.fhs[0] is not None
     
    117132        """Output the text message to all the logs."""
    118133        # Reformat the text to have local line types.
     134        text = text.replace(chr(13), '').splitlines()
     135        self._tail(text)
    119136        out = ''
    120         for l in text.replace(chr(13), '').splitlines():
     137        for l in text:
    121138            out += l + os.linesep
    122139        for f in range(0, len(self.fhs)):
     
    132149
    133150if __name__ == "__main__":
    134     l = log(['stdout', 'log.txt'])
     151    l = log(['stdout', 'log.txt'], tail_size = 20)
    135152    for i in range(0, 10):
    136153        l.output('log: hello world: %d\n' % (i))
     
    138155    l.output('log: hello world NONE')
    139156    l.flush()
     157    print '=-' * 40
     158    print 'tail: %d' % (len(l.tail))
     159    print l
     160    print '=-' * 40
     161    for i in range(0, 10):
     162        l.output('log: hello world 2: %d\n' % (i))
     163    l.flush()
     164    print '=-' * 40
     165    print 'tail: %d' % (len(l.tail))
     166    print l
     167    print '=-' * 40
    140168    for i in [0, 1]:
    141169        quiet = False
     
    160188        notice('notice with quiet on and trace on')
    161189        default = l
     190    print '=-' * 40
     191    print 'tail: %d' % (len(l.tail))
     192    print l
     193    print '=-' * 40
    162194    del l
  • source-builder/sb/setbuilder.py

    r3c69de0 rc914e1d  
    6161        self.bset = bset
    6262        self.bset_pkg = '%s-%s-set' % (self.macros.expand('%{_target}'), self.bset)
     63        self.mail_header = ''
    6364        self.mail_report = ''
     65        self.build_failed = False
     66
     67    def write_mail_header(self, text, prepend = False):
     68        if len(text) == 0 or text[-1] != '\n' or text[-1] != '\r':
     69            text += os.linesep
     70        if prepend:
     71            self.mail_header = text + self.mail_header
     72        else:
     73            self.mail_header += text
    6474
    6575    def write_mail_report(self, text, prepend = False):
     
    125135                r.introduction(_build.config.file_name())
    126136                r.config(_build.config, _build.opts, _build.macros)
    127                 self.mail_report += r.out
     137                self.write_mail_report(r.out)
    128138                del r
    129139
     
    279289        if self.opts.get_arg('--mail'):
    280290            mail_report_subject = \
    281                 'Build Set: %s %s (%s)' % (self.bset,
    282                                            self.macros.expand('%{_host}'),
    283                                            datetime.datetime.now().ctime())
     291                '%s %s (%s)' % (self.bset,
     292                                self.macros.expand('%{_host}'),
     293                                datetime.datetime.now().ctime())
    284294
    285295        configs = self.load()
     
    321331                        raise error.general('invalid config type: %s' % (configs[s]))
    322332                except error.general, gerr:
    323                     self.write_mail_report(str(gerr))
     333                    self.build_failed = True
     334                    self.write_mail_header('')
     335                    self.write_mail_header('= ' * 40)
     336                    self.write_mail_header('Build FAILED: %s' % (b.name()))
     337                    self.write_mail_header('- ' * 40)
     338                    self.write_mail_header(str(log.default))
     339                    self.write_mail_header('- ' * 40)
    324340                    if self.opts.keep_going():
    325341                        print gerr
     
    341357                del b
    342358        except:
     359            self.build_failed = True
     360            raise
     361        finally:
     362            end = datetime.datetime.now()
    343363            os.environ['PATH'] = current_path
    344             raise
    345 
    346         end = datetime.datetime.now()
    347 
    348         os.environ['PATH'] = current_path
    349 
    350         build_time = str(end - start)
    351 
    352         if self.opts.get_arg('--mail'):
    353             to_addr = self.opts.get_arg('--mail-to')
    354             if to_addr is not None:
    355                 to_addr = to_addr[1]
    356             else:
    357                 to_addr = self.macros.expand('%{_mail_tools_to}')
    358             log.notice('Mailing report: %s' % (to_addr))
    359             self.write_mail_report('Build Time %s' % (build_time), True)
    360             m = mailer.mail(self.opts)
    361             if not self.opts.dry_run():
    362                 m.send(to_addr, mail_report_subject, self.mail_report)
    363 
    364         log.notice('Build Set: Time %s' % (build_time))
     364            build_time = str(end - start)
     365            if self.opts.get_arg('--mail'):
     366                to_addr = self.opts.get_arg('--mail-to')
     367                if to_addr is not None:
     368                    to_addr = to_addr[1]
     369                else:
     370                    to_addr = self.macros.expand('%{_mail_tools_to}')
     371                log.notice('Mailing report: %s' % (to_addr))
     372                self.write_mail_header('Build Time %s' % (build_time), True)
     373                self.write_mail_header('')
     374                m = mailer.mail(self.opts)
     375                if self.build_failed:
     376                    pass_fail = 'FAILED '
     377                else:
     378                    pass_fail = ''
     379                mail_report_subject = 'Build: %s%s' % (pass_fail, mail_report_subject)
     380                if not self.opts.dry_run():
     381                    m.send(to_addr, mail_report_subject, self.mail_header + self.mail_report)
     382            log.notice('Build Set: Time %s' % (build_time))
    365383
    366384def list_bset_cfg_files(opts, configs):
Note: See TracChangeset for help on using the changeset viewer.