def main():
    parser = optparse.OptionParser()
    parser.add_option('--pulse-cfg',
                      dest='pulse_cfg',
                      default='',
                      help='Pulse config')
    parser.add_option('--pulse-cfg-section',
                      dest='pulse_cfg_section',
                      default='pulse',
                      help='Pulse config section')
    options, args = parser.parse_args()

    pulse = NormalizedBuildConsumer(applabel='translator_test_consumer_%s' %
                                    uuid.uuid4(),
                                    connect=False)
    pulse.configure(topic=['build.#', 'unittest.#', 'talos.#'],
                    callback=on_pulse_message,
                    durable=False)
    if options.pulse_cfg:
        if not os.path.exists(options.pulse_cfg):
            print 'Config file does not exist!'
            return
        cfg = ConfigParser.ConfigParser()
        cfg.read(options.pulse_cfg)
        pulse.config = PulseConfiguration.read_from_config(
            cfg, options.pulse_cfg_section)

    pulse.listen()
Пример #2
1
    def __init__(self,
                 configfile,
                 pulse_authfile,
                 debug,
                 log_folder,
                 logger,
                 message=None,
                 display_only=False):

        self.config = JSONFile(configfile).read()
        self.debug = debug
        self.log_folder = log_folder
        self.logger = logger
        self.display_only = display_only
        self.test_message = message

        self.jenkins = jenkins.Jenkins(self.config['jenkins']['url'],
                                       self.config['jenkins']['username'],
                                       self.config['jenkins']['password'])

        # When a local pulse message is used, return immediately
        if self.test_message:
            data = JSONFile(self.test_message).read()
            self.on_build(data)
            return

        # Load Pulse Guardian authentication from config file
        if not os.path.exists(pulse_authfile):
            print 'Config file for Mozilla Pulse does not exist!'
            return

        pulse_cfgfile = ConfigParser.ConfigParser()
        pulse_cfgfile.read(pulse_authfile)
        pulse_cfg = PulseConfiguration.read_from_config(pulse_cfgfile)

        label = '%s/%s' % (socket.getfqdn(), self.config['pulse']['applabel'])
        self.monitor = start_pulse_monitor(
            buildCallback=self.on_build,
            testCallback=None,
            pulseCallback=self.on_debug if self.debug else None,
            label=label,
            trees=self.config['pulse']['branches'],
            platforms=self.config['pulse']['platforms'],
            products=self.config['pulse']['products'],
            buildtypes=None,
            tests=None,
            buildtags=self.config['pulse']['tags'],
            logger=self.logger,
            pulse_cfg=pulse_cfg)

        try:
            while self.monitor.is_alive():
                self.monitor.join(1.0)
        except (KeyboardInterrupt, SystemExit):
            self.logger.info('Shutting down Pulse listener')
Пример #3
0
 def __init__(self, cfg, cb):
     threading.Thread.__init__(self)
     self.cb = cb
     self.consumer = GenericConsumer(
         PulseConfiguration(**cfg),
         ['exchange/bugzilla/simple', 'exchange/bugzilla/simple/dev'],
         **cfg)
Пример #4
0
def main():
    parser = optparse.OptionParser()
    parser.add_option('--pidfile', dest='pidfile',
                      default='translator.pid',
                      help='path to file for logging pid')
    parser.add_option('--logfile', dest='logfile',
                      default='stdout.log',
                      help='path to file for stdout logging')
    parser.add_option('--logdir', dest='logdir',
                      default='logs',
                      help='directory to store other log files')
    parser.add_option('--daemon', dest='daemon', action='store_true',
                      help='run as daemon (posix only)')
    parser.add_option('--durable',
                      dest='durable',
                      action='store_true',
                      default=False,
                      help='register a durable queue')
    parser.add_option('--display-only',
                      dest='display_only',
                      action='store_true',
                      default=False,
                      help='only display build properties and don\'t add '
                      'jobs to the queue')
    parser.add_option('--pulse-cfg',
                      dest='pulse_cfg',
                      default='',
                      help='optional config file containing optional sections '
                      '[consumer] and [publisher] for nondefault Pulse '
                      'configs')
    options, args = parser.parse_args()

    pulse_cfgs = {'consumer': None, 'publisher': None}
    if options.pulse_cfg:
        if not os.path.exists(options.pulse_cfg):
            print 'Config file does not exist!'
            return
        pulse_cfgfile = ConfigParser.ConfigParser()
        pulse_cfgfile.read(options.pulse_cfg)
        for section in pulse_cfgs.keys():
            pulse_cfgs[section] = PulseConfiguration.read_from_config(
                pulse_cfgfile, section)

    if options.daemon:
        if os.access(options.logfile, os.F_OK):
            os.remove(options.logfile)
        createDaemon(options.pidfile, options.logfile)

        f = open(options.pidfile, 'w')
        f.write("%d\n" % os.getpid())
        f.close()

    service = PulseBuildbotTranslator(durable=options.durable,
                                      logdir=options.logdir,
                                      display_only=options.display_only,
                                      consumer_cfg=pulse_cfgs['consumer'],
                                      publisher_cfg=pulse_cfgs['publisher'])
    service.start()
Пример #5
0
 def test_config(self):
     cfg = ConfigParser.ConfigParser()
     pulse_cfg = PulseConfiguration.read_from_config(cfg)
     self.verify_defaults(pulse_cfg)
     cfg.add_section('pulse')
     pulse_cfg = PulseConfiguration.read_from_config(cfg)
     self.verify_defaults(pulse_cfg)
     cfg.set('pulse', 'user', 'foo')
     pulse_cfg = PulseConfiguration.read_from_config(cfg)
     self.assertEqual(pulse_cfg.user, 'foo')
     self.assertEqual(pulse_cfg.port, DEFAULT_SSL_PORT)
     self.verify_defaults(pulse_cfg, ['user'])
     cfg.set('pulse', 'ssl', 'off')
     pulse_cfg = PulseConfiguration.read_from_config(cfg)
     self.assertEqual(pulse_cfg.ssl, False)
     self.assertEqual(pulse_cfg.port, DEFAULT_PORT)
     self.verify_defaults(pulse_cfg, ['user', 'ssl', 'port'])
     cfg.set('pulse', 'port', '5555')
     pulse_cfg = PulseConfiguration.read_from_config(cfg)
     self.assertEqual(pulse_cfg.port, 5555)
     self.verify_defaults(pulse_cfg, ['user', 'ssl', 'port'])
 def test_config(self):
     cfg = configparser.ConfigParser()
     pulse_cfg = PulseConfiguration.read_from_config(cfg)
     self.verify_defaults(pulse_cfg)
     cfg.add_section('pulse')
     pulse_cfg = PulseConfiguration.read_from_config(cfg)
     self.verify_defaults(pulse_cfg)
     cfg.set('pulse', 'user', 'foo')
     pulse_cfg = PulseConfiguration.read_from_config(cfg)
     self.assertEqual(pulse_cfg.user, 'foo')
     self.assertEqual(pulse_cfg.port, DEFAULT_SSL_PORT)
     self.verify_defaults(pulse_cfg, ['user'])
     cfg.set('pulse', 'ssl', 'off')
     pulse_cfg = PulseConfiguration.read_from_config(cfg)
     self.assertEqual(pulse_cfg.ssl, False)
     self.assertEqual(pulse_cfg.port, DEFAULT_PORT)
     self.verify_defaults(pulse_cfg, ['user', 'ssl', 'port'])
     cfg.set('pulse', 'port', '5555')
     pulse_cfg = PulseConfiguration.read_from_config(cfg)
     self.assertEqual(pulse_cfg.port, 5555)
     self.verify_defaults(pulse_cfg, ['user', 'ssl', 'port'])
Пример #7
0
    def __init__(self, configfile, pulse_authfile, debug, log_folder, logger,
                 message=None, display_only=False):

        self.config = JSONFile(configfile).read()
        self.debug = debug
        self.log_folder = log_folder
        self.logger = logger
        self.display_only = display_only
        self.test_message = message

        self.jenkins = jenkins.Jenkins(self.config['jenkins']['url'],
                                       self.config['jenkins']['username'],
                                       self.config['jenkins']['password'])

        # When a local pulse message is used, return immediately
        if self.test_message:
            data = JSONFile(self.test_message).read()
            self.on_build(data)
            return

        # Load Pulse Guardian authentication from config file
        if not os.path.exists(pulse_authfile):
            print 'Config file for Mozilla Pulse does not exist!'
            return

        pulse_cfgfile = ConfigParser.ConfigParser()
        pulse_cfgfile.read(pulse_authfile)
        pulse_cfg = PulseConfiguration.read_from_config(pulse_cfgfile)

        label = '%s/%s' % (socket.getfqdn(), self.config['pulse']['applabel'])
        self.monitor = start_pulse_monitor(buildCallback=self.on_build,
                                           testCallback=None,
                                           pulseCallback=self.on_debug if self.debug else None,
                                           label=label,
                                           trees=self.config['pulse']['branches'],
                                           platforms=self.config['pulse']['platforms'],
                                           products=self.config['pulse']['products'],
                                           buildtypes=None,
                                           tests=None,
                                           buildtags=self.config['pulse']['tags'],
                                           logger=self.logger,
                                           pulse_cfg=pulse_cfg)

        try:
            while self.monitor.is_alive():
                self.monitor.join(1.0)
        except (KeyboardInterrupt, SystemExit):
            self.logger.info('Shutting down Pulse listener')
Пример #8
0
def main():
    parser = optparse.OptionParser()
    parser.add_option('--pulse-cfg', dest='pulse_cfg', default='',
                      help='Pulse config')
    parser.add_option('--pulse-cfg-section', dest='pulse_cfg_section',
                      default='pulse', help='Pulse config section')
    options, args = parser.parse_args()

    pulse = NormalizedBuildConsumer(applabel='translator_test_consumer_%s'
                                    % uuid.uuid4(), connect=False)
    pulse.configure(topic=['build.#', 'unittest.#', 'talos.#'],
                    callback=on_pulse_message,
                    durable=False)
    if options.pulse_cfg:
        if not os.path.exists(options.pulse_cfg):
            print 'Config file does not exist!'
            return
        cfg = ConfigParser.ConfigParser()
        cfg.read(options.pulse_cfg)
        pulse.config = PulseConfiguration.read_from_config(
            cfg, options.pulse_cfg_section)

    pulse.listen()
Пример #9
0
 def __init__(self, exchange, **kwargs):
     super(PulseConsumer, self).__init__(
         PulseConfiguration(**kwargs), exchange, **kwargs)
Пример #10
0
 def __init__(self, **kwargs):
     super(B2GPulseConsumer,
           self).__init__(PulseConfiguration(**kwargs),
                          'org.mozilla.exchange.b2g', **kwargs)
Пример #11
0
def main():
    from optparse import OptionParser
    from mozillapulse.publishers import GenericPublisher
    from mozillapulse.config import PulseConfiguration
    import logging.handlers
    parser = OptionParser()
    parser.set_defaults(
        verbosity=0,
        logfile=None,
        max_retries=5,
        retry_time=60,
    )
    parser.add_option("--passwords", dest="passwords")
    parser.add_option("-q", "--queuedir", dest="queuedir")
    parser.add_option("-v",
                      "--verbose",
                      dest="verbosity",
                      action="count",
                      help="increase verbosity")
    parser.add_option("-l",
                      "--logfile",
                      dest="logfile",
                      help="where to send logs")
    parser.add_option("-r",
                      "--max_retries",
                      dest="max_retries",
                      type="int",
                      help="number of times to retry")
    parser.add_option("-t",
                      "--retry_time",
                      dest="retry_time",
                      type="int",
                      help="seconds to wait between retries")

    options, args = parser.parse_args()

    # Set up logging
    if options.verbosity == 0:
        log_level = logging.WARNING
    elif options.verbosity == 1:
        log_level = logging.INFO
    else:
        log_level = logging.DEBUG

    if not options.logfile:
        logging.basicConfig(level=log_level,
                            format="%(asctime)s - %(message)s")
    else:
        logger = logging.getLogger()
        logger.setLevel(log_level)
        handler = logging.handlers.RotatingFileHandler(options.logfile,
                                                       maxBytes=1024**2,
                                                       backupCount=5)
        formatter = logging.Formatter("%(asctime)s - %(message)s")
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    if not options.passwords:
        parser.error("--passwords is required")
    if not options.queuedir:
        parser.error("-q/--queuedir is required")

    passwords = {}
    execfile(options.passwords, passwords, passwords)

    publisher = GenericPublisher(PulseConfiguration(
        user=passwords['PULSE_USERNAME'],
        password=passwords['PULSE_PASSWORD'],
    ),
                                 exchange=passwords['PULSE_EXCHANGE'])

    pusher = PulsePusher(options.queuedir,
                         publisher,
                         max_retries=options.max_retries,
                         retry_time=options.retry_time)
    pusher.loop()
Пример #12
0
 def __init__(self, **kwargs):
     super(PulseMetaConsumer, self).__init__(PulseConfiguration(**kwargs),
                                             'exchange/pulse/', **kwargs)
def main():
    parser = optparse.OptionParser()
    parser.add_option('--pidfile',
                      dest='pidfile',
                      default='translator.pid',
                      help='path to file for logging pid')
    parser.add_option('--logfile',
                      dest='logfile',
                      default='stdout.log',
                      help='path to file for stdout logging')
    parser.add_option('--logdir',
                      dest='logdir',
                      default='logs',
                      help='directory to store other log files')
    parser.add_option('--daemon',
                      dest='daemon',
                      action='store_true',
                      help='run as daemon (posix only)')
    parser.add_option('--durable',
                      dest='durable',
                      action='store_true',
                      default=False,
                      help='register a durable queue')
    parser.add_option('--display-only',
                      dest='display_only',
                      action='store_true',
                      default=False,
                      help='only display build properties and don\'t add '
                      'jobs to the queue')
    parser.add_option('--pulse-cfg',
                      dest='pulse_cfg',
                      default='',
                      help='optional config file containing optional sections '
                      '[consumer] and [publisher] for nondefault Pulse '
                      'configs')
    parser.add_option('--push-message',
                      dest='message',
                      help='path to file of a Pulse message to process')
    parser.add_option('--label',
                      dest='label',
                      help='label to use for pulse queue')

    options, args = parser.parse_args()

    pulse_cfgs = {'consumer': None, 'publisher': None}
    if options.pulse_cfg:
        if not os.path.exists(options.pulse_cfg):
            print 'Config file does not exist!'
            return
        pulse_cfgfile = ConfigParser.ConfigParser()
        pulse_cfgfile.read(options.pulse_cfg)
        for section in pulse_cfgs.keys():
            pulse_cfgs[section] = PulseConfiguration.read_from_config(
                pulse_cfgfile, section)
        if os.environ.get('pulseuser'):
            setattr(pulse_cfgs['consumer'], 'user', os.environ['pulseuser'])
            setattr(pulse_cfgs['publisher'], 'user', os.environ['pulseuser'])
        if os.environ.get('pulsepassword'):
            setattr(pulse_cfgs['consumer'], 'password',
                    os.environ['pulsepassword'])
            setattr(pulse_cfgs['publisher'], 'password',
                    os.environ['pulsepassword'])

    if options.daemon:
        if os.access(options.logfile, os.F_OK):
            os.remove(options.logfile)
        createDaemon(options.pidfile, options.logfile)

        f = open(options.pidfile, 'w')
        f.write("%d\n" % os.getpid())
        f.close()

    service = PulseBuildbotTranslator(durable=options.durable,
                                      logdir=options.logdir,
                                      message=options.message,
                                      label=options.label,
                                      display_only=options.display_only,
                                      consumer_cfg=pulse_cfgs['consumer'],
                                      publisher_cfg=pulse_cfgs['publisher'])
    service.start()
Пример #14
0
 def __init__(self, **kwargs):
     exchange = 'exchange/bugzilla/simple'
     if kwargs.get('dev'):
         exchange += '/dev'
     super(SimpleBugzillaConsumer,
           self).__init__(PulseConfiguration(**kwargs), exchange, **kwargs)
Пример #15
0
 def __init__(self, **kwargs):
     super(MozReviewConsumer,
           self).__init__(PulseConfiguration(**kwargs),
                          'exchange/mozreview/', **kwargs)
Пример #16
0
 def __init__(self, **kwargs):
     super(QAConsumer, self).__init__(PulseConfiguration(**kwargs),
                                      'exchange/qa/', **kwargs)
Пример #17
0
 def __init__(self, **kwargs):
     super(NormalizedBuildConsumer,
           self).__init__(PulseConfiguration(**kwargs),
                          'exchange/build/normalized', **kwargs)