1 # Integration with the oestats build statistics server, see:
3 # http://opensource.bolloretelecom.eu/projects/oestats
5 # To make use of this class, add to your local.conf:
7 # INHERIT += "oestats-client"
8 # OESTATS_SERVER = "some.server.org:8000"
9 # OESTATS_BUILDER = "some title"
11 def oestats_revision(dir):
14 f = file("%s/_MTN/revision" % dir)
15 m = re.search(r"old_revision \[(.*)\]", f.read())
20 def oestats_send(server, action, vars = {}):
21 import httplib, urllib
23 params = urllib.urlencode(vars)
24 headers = {"Content-type": "application/x-www-form-urlencoded",
25 "Accept": "text/plain"}
26 conn = httplib.HTTPConnection(server)
27 conn.request("POST", action, params, headers)
28 response = conn.getresponse()
32 def oestats_start(server, builder, d):
36 # collect information about revisions
37 path_bb = bb.data.getVar('BBPATH', d, 1)
38 for p in (path_bb or "").split(':'):
39 revision = oestats_revision(p)
44 response = oestats_send(server, "/builds/start/", {
47 'machine': bb.data.getVar( 'MACHINE', d, True ),
48 'distro': bb.data.getVar( 'DISTRO', d, True ),
53 bb.note("Stats id: %s" % id)
54 f = file(bb.data.getVar('TMPDIR', d, True)+"/oestats.id", 'w')
57 def oestats_stop(server, d, status):
61 f = file(bb.data.getVar('TMPDIR',d,True)+"/oestats.id", 'r')
65 response = oestats_send(server, "/builds/stop/%s/" % id, {
69 def oestats_task(server, d, task, status):
73 f = file(bb.data.getVar('TMPDIR',d,True)+"/oestats.id", 'r')
77 response = oestats_send(server, "/builds/task/%s/" % id, {
78 'package': bb.data.getVar('PN', d, True),
79 'version': bb.data.getVar('PV', d, True),
80 'revision': bb.data.getVar('PR', d, True),
85 addhandler oestats_eventhandler
86 python oestats_eventhandler () {
87 from bb.event import getName
90 if e.data is None or getName(e) == "MsgNote":
93 server = bb.data.getVar('OESTATS_SERVER', e.data, True)
94 builder = bb.data.getVar('OESTATS_BUILDER', e.data, True)
95 if not server or not builder:
98 if getName(e) == 'BuildStarted':
99 oestats_start(server, builder, e.data)
100 elif getName(e) == 'BuildCompleted':
101 oestats_stop(server, e.data, 'Completed')
102 elif getName(e) == 'TaskSucceeded':
103 oestats_task(server, e.data, e.task, 'Succeeded')
104 elif getName(e) == 'TaskFailed':
105 oestats_task(server, e.data, e.task, 'Failed')