Add statsd.

Reports statistics on job runtime, number/rate of jobs run, and
number/rate of individual gerrit events to statsd.

Change-Id: I0db9352610b4c268c95da98fd282d7f463945f90
Reviewed-on: https://review.openstack.org/18628
Reviewed-by: Monty Taylor <mordred@inaugust.com>
Reviewed-by: Jeremy Stanley <fungi@yuggoth.org>
Approved: James E. Blair <corvus@inaugust.com>
Tested-by: Jenkins
This commit is contained in:
James E. Blair 2012-12-24 17:53:08 -08:00 committed by Jenkins
parent c44b138d42
commit 71e9412d9c
3 changed files with 22 additions and 0 deletions

View File

@ -7,3 +7,4 @@ GitPython>=0.3.2.RC1
lockfile
python-daemon
extras
statsd==1.0.0

View File

@ -436,6 +436,8 @@ class Build(object):
self.result = None
self.build_set = None
self.launch_time = time.time()
self.start_time = None
self.end_time = None
def __repr__(self):
return '<Build %s of %s>' % (self.uuid, self.job.name)

View File

@ -12,6 +12,7 @@
# License for the specific language governing permissions and limitations
# under the License.
import extras
import json
import logging
import os
@ -19,12 +20,15 @@ import pickle
import Queue
import re
import threading
import time
import yaml
import model
from model import Pipeline, Job, Project, ChangeQueue, EventFilter
import merger
statsd = extras.try_import('statsd.statsd')
class Scheduler(threading.Thread):
log = logging.getLogger("zuul.Scheduler")
@ -214,6 +218,8 @@ class Scheduler(threading.Thread):
def addEvent(self, event):
self.log.debug("Adding trigger event: %s" % event)
if statsd:
statsd.incr('gerrit.event.%s' % event.type)
self.queue_lock.acquire()
self.trigger_event_queue.put(event)
self.queue_lock.release()
@ -221,6 +227,7 @@ class Scheduler(threading.Thread):
def onBuildStarted(self, build):
self.log.debug("Adding start event for build: %s" % build)
build.start_time = time.time()
self.queue_lock.acquire()
self.result_event_queue.put(('started', build))
self.queue_lock.release()
@ -228,6 +235,13 @@ class Scheduler(threading.Thread):
def onBuildCompleted(self, build):
self.log.debug("Adding complete event for build: %s" % build)
build.end_time = time.time()
if statsd:
dt = int((build.end_time - build.start_time) * 1000)
key = 'zuul.job.%s' % build.job.name
if build.result in ['SUCCESS', 'FAILURE']:
statsd.timing(key, dt)
statsd.incr(key)
self.queue_lock.acquire()
self.result_event_queue.put(('completed', build))
self.queue_lock.release()
@ -325,6 +339,11 @@ class Scheduler(threading.Thread):
return False
def run(self):
if statsd:
self.log.debug("Statsd enabled")
else:
self.log.debug("Statsd disabled because python statsd "
"package not found")
while True:
self.log.debug("Run handler sleeping")
self.wake_event.wait()