Bug 1178331 - kill ship it notifier r=Callek draft
authorRail Aliiev <rail@mozilla.com>
Mon, 18 Jul 2016 14:59:56 -0400
changeset 7024 92e6e5d32dde32365fb9ccc18b05271753fe4f09
parent 7023 d3820907e7712ad59d2e07c7c47dcfc9c2a7b696
push id93
push userbmo:rail@mozilla.com
push dateMon, 18 Jul 2016 19:00:06 +0000
reviewersCallek
bugs1178331
Bug 1178331 - kill ship it notifier r=Callek MozReview-Commit-ID: LM0yGBaXMph
buildfarm/release/shipit-notifier.ini.example
buildfarm/release/shipit-notifier.py
lib/python/kickoff/api.py
deleted file mode 100644
--- a/buildfarm/release/shipit-notifier.ini.example
+++ /dev/null
@@ -1,12 +0,0 @@
-[api]
-api_root: http://127.0.0.1:5000
-username: admin
-password: password
-
-[shipit-notifier]
-verbose: true
-
-[pulse]
-user: pulseuser
-password: pulseuserpw
-ssl: false
deleted file mode 100755
--- a/buildfarm/release/shipit-notifier.py
+++ /dev/null
@@ -1,130 +0,0 @@
-#!/usr/bin/env python
-"""shipit-agent.py [options]
-
-Listens for buildbot release messages from pulse and then sends them
-to the shipit REST API."""
-
-import pytz
-import site
-
-from optparse import OptionParser
-from ConfigParser import ConfigParser
-from mozillapulse import consumers
-from mozillapulse import config as pconf
-from os import path
-from dateutil import parser
-
-site.addsitedir(path.join(path.dirname(__file__), "../../lib/python"))
-from kickoff.api import Status
-from release.info import getReleaseName
-
-import logging as log
-
-NAME_KEYS = ('product', 'version', 'build_number')
-PROPERTIES_KEYS = ('platform', 'chunkTotal', 'chunkNum', 'event_group')
-
-
-def get_properties_dict(props):
-    """Convert properties tuple into dict"""
-    props_dict = {}
-    for prop in props:
-        props_dict[prop[0]] = prop[1]
-    return props_dict
-
-
-def receive_message(config, data, message):
-    buildername = data["payload"]["build"]["builderName"]
-    properties = data["payload"]["build"]["properties"]
-    results = data["payload"]["results"]
-
-    if not buildername.startswith('release-') or \
-            ' test ' in buildername:
-        return
-    if results != 0:
-        log.debug("Non zero results from %s", buildername)
-        return
-    if not properties:
-        log.exception("No properties set by %s", buildername)
-        return
-
-    log.info("Processing %s", buildername)
-    properties_dict = get_properties_dict(properties)
-
-    payload = {}
-    for k, v in properties_dict.iteritems():
-        if k in PROPERTIES_KEYS:
-            payload[k] = v
-    if "event_group" not in payload:
-        log.debug("Ignoring message without event_group set")
-        return
-    # rename event_group to group
-    payload["group"] = payload.pop("event_group")
-    payload["results"] = results
-    payload["event_name"] = buildername
-    # Convert sent to UTC
-    timestamp = parser.parse(data["_meta"]["sent"]).astimezone(pytz.utc)
-    payload["sent"] = timestamp.strftime("%Y-%m-%d %H:%M:%S")
-
-    name = getReleaseName(
-        properties_dict["product"], properties_dict["version"],
-        properties_dict["build_number"])
-
-    log.info("Adding new release event for %s with event_name %s", name,
-             buildername)
-    status_api = Status(
-        (config.get('api', 'username'), config.get('api', 'password')),
-        api_root=config.get('api', 'api_root'))
-    status_api.update(name, data=payload)
-
-
-def main():
-    parser = OptionParser()
-    parser.add_option("-c", "--config", dest="config",
-                      help="Configuration file")
-    options = parser.parse_args()[0]
-    config = ConfigParser()
-    try:
-        config.read(options.config)
-    except:
-        parser.error("Could not open configuration file")
-
-    def got_message(data, message):
-        try:
-            receive_message(config, data, message)
-        finally:
-            message.ack()
-
-    if not options.config:
-        parser.error('Configuration file is required')
-
-    if not all([config.has_section('pulse'),
-                config.has_option('pulse', 'user'),
-                config.has_option('pulse', 'password')]):
-        log.critical('Config file must have a [pulse] section containing and '
-                     'least "user" and "password" options.')
-        exit(1)
-
-    verbosity = {True: log.DEBUG, False: log.WARN}
-    log.basicConfig(
-        format='%(asctime)s %(message)s',
-        level=verbosity[config.getboolean('shipit-notifier', 'verbose')]
-    )
-
-    pulse_cfg = pconf.PulseConfiguration.read_from_config(config)
-
-    # Adjust applabel when wanting to run shipit on multiple machines
-    pulse = consumers.BuildConsumer(applabel='shipit-notifier', connect=False)
-    pulse.config = pulse_cfg
-    pulse.configure(topic='build.#.finished',
-                    durable=True, callback=got_message)
-
-    log.info('listening for pulse messages')
-    pulse.listen()
-
-if __name__ == "__main__":
-    try:
-        main()
-    except Exception:
-        # Supervisor disables a service if it fails too often and too fast.
-        import time
-        time.sleep(120)
--- a/lib/python/kickoff/api.py
+++ b/lib/python/kickoff/api.py
@@ -60,18 +60,18 @@ class API(object):
                     r.raise_for_status()
                 return r
 
             return retry(_req, sleeptime=5, max_sleeptime=15,
                          retry_exceptions=(requests.HTTPError,
                                            requests.ConnectionError),
                          attempts=self.retries)
         except requests.HTTPError, e:
-            log.error('Caught HTTPError: %d %s' % 
-                     (e.response.status_code, e.response.content), 
+            log.error('Caught HTTPError: %d %s' %
+                     (e.response.status_code, e.response.content),
                      exc_info=True)
             raise
 
 
 class Releases(API):
     url_template = '/releases'
 
     def getReleases(self, ready=1, complete=0):
@@ -99,25 +99,17 @@ class Release(API):
             log.error('Caught error while getting release', exc_info=True)
             if resp:
                 log.error(resp.content)
                 log.error('Response code: %d' % resp.status_code)
             raise
 
     def update(self, name, **data):
         url_template_vars = {'name': name}
-        return self.request(method='POST', data=data, 
+        return self.request(method='POST', data=data,
                             url_template_vars=url_template_vars).content
 
 
 class ReleaseL10n(API):
     url_template = '/releases/%(name)s/l10n'
 
     def getL10n(self, name):
         return self.request(url_template_vars={'name': name}).content
-
-
-class Status(API):
-    url_template = '/releases/%(name)s/status'
-
-    def update(self, name, data):
-        return self.request(method='POST', data=data,
-                            url_template_vars={'name': name}).content