Beispiel #1
0
def masterConfig():
    c = {}
    from buildbot.config import BuilderConfig
    from buildbot.process.factory import BuildFactory
    from buildbot.plugins import steps, schedulers, reporters
    c['schedulers'] = [
        schedulers.AnyBranchScheduler(name="sched", builderNames=["testy"])
    ]
    f = BuildFactory()
    f.addStep(steps.ShellCommand(command='echo hello'))
    c['builders'] = [
        BuilderConfig(name="testy", workernames=["local1"], factory=f)
    ]
    notifier = reporters.PushoverNotifier(
        '1234',
        'abcd',
        mode="all",
        watchedWorkers=['local1'],
        messageFormatter=MessageFormatter(template='This is a message.'),
        messageFormatterMissingWorker=MessageFormatterMissingWorker(
            template='No worker.'))
    c['services'] = [
        reporters.MailNotifier("*****@*****.**", mode="all"), notifier
    ]
    return c
Beispiel #2
0
    def reconfigService(self, user_key, api_token,
                        mode=("failing", "passing", "warnings"),
                        tags=None, builders=None,
                        buildSetSummary=False, messageFormatter=None,
                        subject="Buildbot %(result)s in %(title)s on %(builder)s",
                        schedulers=None, branches=None,
                        priorities=None, otherParams=None,
                        watchedWorkers=None, messageFormatterMissingWorker=None):

        if messageFormatter is None:
            messageFormatter = DefaultMessageFormatter(template_type='html',
                template_filename='default_notification.txt')
        if messageFormatterMissingWorker is None:
            messageFormatterMissingWorker = MessageFormatterMissingWorker(
                template_filename='missing_notification.txt')
        super(PushoverNotifier, self).reconfigService(mode, tags, builders,
                                                      buildSetSummary, messageFormatter,
                                                      subject, False, False,
                                                      schedulers, branches,
                                                      watchedWorkers, messageFormatterMissingWorker)
        self.user_key = user_key
        self.api_token = api_token
        if priorities is None:
            self.priorities = {}
        else:
            self.priorities = priorities
        if otherParams is None:
            self.otherParams = {}
        else:
            self.otherParams = otherParams
        self._http = yield httpclientservice.HTTPClientService.getService(
            self.master, 'https://api.pushover.net')
Beispiel #3
0
    def reconfigService(
            self,
            mode=("failing", "passing", "warnings"),
            tags=None,
            builders=None,
            buildSetSummary=False,
            messageFormatter=None,
            subject="Buildbot %(result)s in %(title)s on %(builder)s",
            addLogs=False,
            addPatch=False,
            schedulers=None,
            branches=None,
            watchedWorkers=None,
            messageFormatterMissingWorker=None):

        self.mode = self.computeShortcutModes(mode)
        self.tags = tags
        self.builders = builders
        self.schedulers = schedulers
        self.branches = branches
        self.subject = subject
        self.addLogs = addLogs
        self.addPatch = addPatch
        if messageFormatter is None:
            messageFormatter = DefaultMessageFormatter()
        self.messageFormatter = messageFormatter
        if messageFormatterMissingWorker is None:
            messageFormatterMissingWorker = MessageFormatterMissingWorker()
        self.messageFormatterMissingWorker = messageFormatterMissingWorker
        self.buildSetSummary = buildSetSummary
        self._buildset_complete_consumer = None
        if watchedWorkers is None:
            self.watchedWorkers = ()
        else:
            self.watchedWorkers = watchedWorkers
Beispiel #4
0
 def reconfigService(self, secret,
                     mode=("failing", "passing", "warnings"),
                     tags=None, builders=None,
                     buildSetSummary=False, messageFormatter=None,
                     subject="Buildbot %(result)s in %(title)s on %(builder)s",
                     schedulers=None, branches=None,
                     levels=None, base_url='https://api.pushjet.io',
                     watchedWorkers=None, messageFormatterMissingWorker=None):
     secret = yield self.renderSecrets(secret)
     if messageFormatter is None:
         messageFormatter = DefaultMessageFormatter(template_type='html',
             template_filename='default_notification.txt')
     if messageFormatterMissingWorker is None:
         messageFormatterMissingWorker = MessageFormatterMissingWorker(
             template_filename='missing_notification.txt')
     yield super().reconfigService(mode, tags, builders,
                                   buildSetSummary, messageFormatter,
                                   subject, False, False,
                                   schedulers, branches,
                                   watchedWorkers, messageFormatterMissingWorker)
     self.secret = secret
     if levels is None:
         self.levels = {}
     else:
         self.levels = levels
     self._http = yield httpclientservice.HTTPClientService.getService(
         self.master, base_url)
Beispiel #5
0
class WorkerMissingGenerator(util.ComparableMixin):

    compare_attrs = ['workers', 'formatter']

    wanted_event_keys = [
        ('workers', None, 'missing'),
    ]

    def __init__(self, workers=None, message_formatter=None):
        self.workers = workers
        self.formatter = message_formatter
        if self.formatter is None:
            self.formatter = MessageFormatterMissingWorker()

    def check(self):
        if not (self.workers == 'all' or self.workers is None
                or isinstance(self.workers, (list, tuple, set))):
            config.error(
                "workers must be 'all', None, or list of worker names")

    @defer.inlineCallbacks
    def generate(self, master, reporter, key, worker):
        if not self._is_message_needed(worker):
            return None

        msg = yield self.formatter.formatMessageForMissingWorker(
            master, worker)
        body = msg['body'].encode(ENCODING)
        if 'subject' in msg:
            subject = msg['subject']
        else:
            subject = "Buildbot worker {name} missing".format(**worker)
        assert msg['type'] in ('plain', 'html'), \
            "'{}' message type must be 'plain' or 'html'.".format(msg['type'])

        return {
            'body': body,
            'subject': subject,
            'type': msg['type'],
            'builder_name': None,
            'results': None,
            'builds': None,
            'users': worker['notify'],
            'patches': None,
            'logs': None,
            'worker': worker['name']
        }

    def generate_name(self):
        name = self.__class__.__name__
        if self.workers is not None:
            name += "_workers_" + "+".join(self.workers)
        return name

    def _is_message_needed(self, worker):
        return (self.workers == 'all'
                or worker['name'] in self.workers) and worker['notify']
Beispiel #6
0
 def _create_default_generators(self):
     return [
         BuildStatusGenerator(
             add_patch=True,
             message_formatter=MessageFormatter(template_type='html')),
         WorkerMissingGenerator(
             workers='all',
             message_formatter=MessageFormatterMissingWorker(template_type='html')),
     ]
Beispiel #7
0
    def reconfigService(self, fromaddr, mode=("failing", "passing", "warnings"),
                        tags=None, builders=None, addLogs=False,
                        relayhost="localhost", buildSetSummary=False,
                        subject="buildbot %(result)s in %(title)s on %(builder)s",
                        lookup=None, extraRecipients=None,
                        sendToInterestedUsers=True,
                        messageFormatter=None, extraHeaders=None,
                        addPatch=True, useTls=False, useSmtps=False,
                        smtpUser=None, smtpPassword=None, smtpPort=25,
                        name=None, schedulers=None, branches=None,
                        messageFormatterMissingWorker=None):

        if extraRecipients is None:
            extraRecipients = []

        self.extraRecipients = extraRecipients
        self.sendToInterestedUsers = sendToInterestedUsers
        self.fromaddr = fromaddr
        self.mode = self.computeShortcutModes(mode)
        self.tags = tags
        self.builders = builders
        self.schedulers = schedulers
        self.branches = branches
        self.addLogs = addLogs
        self.relayhost = relayhost
        self.subject = subject
        if lookup is not None:
            if isinstance(lookup, string_types):
                lookup = Domain(str(lookup))

        self.lookup = lookup
        if messageFormatter is None:
            messageFormatter = DefaultMessageFormatter()
        self.messageFormatter = messageFormatter
        if messageFormatterMissingWorker is None:
            messageFormatterMissingWorker = MessageFormatterMissingWorker()
        self.messageFormatterMissingWorker = messageFormatterMissingWorker
        self.extraHeaders = extraHeaders
        self.addPatch = addPatch
        self.useTls = useTls
        self.useSmtps = useSmtps
        self.smtpUser = smtpUser
        self.smtpPassword = smtpPassword
        self.smtpPort = smtpPort
        self.buildSetSummary = buildSetSummary
        self._buildset_complete_consumer = None
        self.watched = []
Beispiel #8
0
def masterConfig(build_set_summary):
    c = {}
    from buildbot.config import BuilderConfig
    from buildbot.process.factory import BuildFactory
    from buildbot.plugins import steps, schedulers, reporters
    c['schedulers'] = [
        schedulers.AnyBranchScheduler(
            name="sched",
            builderNames=["testy"])
    ]
    f = BuildFactory()
    f.addStep(steps.ShellCommand(command='echo hello'))
    c['builders'] = [
        BuilderConfig(name="testy",
                      workernames=["local1"],
                      factory=f)
    ]

    formatter = MessageFormatter(template='This is a message.')
    formatter_worker = MessageFormatterMissingWorker(template='No worker.')

    if build_set_summary:
        generators_mail = [
            BuildSetStatusGenerator(mode='all'),
            WorkerMissingGenerator(workers='all'),
        ]
        generators_pushover = [
            BuildSetStatusGenerator(mode='all', message_formatter=formatter),
            WorkerMissingGenerator(workers=['local1'], message_formatter=formatter_worker),
        ]
    else:
        generators_mail = [
            BuildStatusGenerator(mode='all'),
            WorkerMissingGenerator(workers='all'),
        ]
        generators_pushover = [
            BuildStatusGenerator(mode='all', message_formatter=formatter),
            WorkerMissingGenerator(workers=['local1'], message_formatter=formatter_worker),
        ]

    c['services'] = [
        reporters.MailNotifier("*****@*****.**", generators=generators_mail),
        reporters.PushoverNotifier('1234', 'abcd', generators=generators_pushover)
    ]
    return c
Beispiel #9
0
 def __init__(self, workers=None, message_formatter=None):
     self.workers = workers
     self.formatter = message_formatter
     if self.formatter is None:
         self.formatter = MessageFormatterMissingWorker()