summaryrefslogtreecommitdiff
path: root/classes/oestats-client.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'classes/oestats-client.bbclass')
-rw-r--r--classes/oestats-client.bbclass202
1 files changed, 202 insertions, 0 deletions
diff --git a/classes/oestats-client.bbclass b/classes/oestats-client.bbclass
new file mode 100644
index 0000000000..e4e6206ac4
--- /dev/null
+++ b/classes/oestats-client.bbclass
@@ -0,0 +1,202 @@
+# Integration with the oestats build statistics server, see:
+#
+# http://opensource.bolloretelecom.eu/projects/oestats
+#
+# To make use of this class, add to your local.conf:
+#
+# INHERIT += "oestats-client"
+# OESTATS_SERVER = "http://some.server.org"
+# OESTATS_BUILDER = "some_nickname"
+#
+
+def oestats_setid(d, val):
+ import bb
+ f = file(bb.data.getVar('TMPDIR', d, True) + '/oestats.id', 'w')
+ f.write(val)
+
+def oestats_getid(d):
+ import bb
+ f = file(bb.data.getVar('TMPDIR', d, True) + '/oestats.id', 'r')
+ return f.read()
+
+def oestats_send(d, server, action, vars = {}, files = {}):
+ import bb
+ import urllib2
+
+ # build body
+ output = []
+ bound = '----------ThIs_Is_tHe_bouNdaRY_$'
+ for key in vars:
+ assert vars[key]
+ output.append('--' + bound)
+ output.append('Content-Disposition: form-data; name="%s"' % key)
+ output.append('')
+ output.append(vars[key])
+ for key in files:
+ assert files[key]
+ output.append('--' + bound)
+ output.append('Content-Disposition: form-data; name="%s"; filename="%s"' % (key, files[key]['filename']))
+ output.append('Content-Type: %s' % files[key]['content-type'])
+
+ output.append('')
+ output.append(files[key]['content'])
+ output.append('--' + bound + '--')
+ output.append('')
+ body = "\r\n".join(output)
+
+ # build headers
+ headers = {
+ "User-agent": "oestats-client/0.5",
+ "Content-type": "multipart/form-data; boundary=%s" % bound,
+ "Content-length": str(len(body))}
+
+ proxy = bb.data.getVar('HTTP_PROXY', d, True )
+ if (proxy):
+ phl = urllib2.ProxyHandler({'http' : proxy})
+ opener = urllib2.build_opener(phl)
+ urllib2.install_opener(opener)
+
+ actionURL = "%s%s" %(server, action)
+ req = urllib2.Request(actionURL, body, headers);
+ response = urllib2.urlopen(req)
+ data = response.read()
+
+ return data
+
+def oestats_start(server, builder, d):
+ import bb
+ import os.path
+ import re
+
+ # send report
+ id = ""
+ try:
+ data = oestats_send(d, server, "/builds/", {
+ 'builder': builder,
+ 'build_arch': bb.data.getVar('BUILD_ARCH', d, True),
+ 'metadata_branch': bb.data.getVar('METADATA_BRANCH', d, True),
+ 'metadata_revision': bb.data.getVar('METADATA_REVISION', d, True),
+ 'machine': bb.data.getVar('MACHINE', d, True),
+ 'distro': bb.data.getVar('DISTRO', d, True),
+ })
+ if re.match("^\d+$", data): id=data
+ except:
+ pass
+
+ # save the build id
+ if id:
+ bb.note("oestats: build %s" % id)
+ else:
+ bb.note("oestats: error starting build, disabling stats")
+ oestats_setid(d, id)
+
+def oestats_stop(server, d, failures):
+ import bb
+
+ # retrieve build id
+ id = oestats_getid(d)
+ if not id: return
+
+ # send report
+ if failures > 0:
+ status = "Failed"
+ else:
+ status = "Succeeded"
+
+ try:
+ response = oestats_send(d, server, "/builds/%s/" % id, {
+ 'status': status,
+ })
+ if status == 'Failed':
+ bb.note("oestats: build failed, see %s%s" % (server, response))
+ except:
+ bb.note("oestats: error stopping build")
+
+def oestats_task(server, d, task, status):
+ import bb
+ import glob
+ import os.path
+ import time
+
+ # retrieve build id
+ id = oestats_getid(d)
+ if not id: return
+
+ # calculate build time
+ try:
+ elapsed = time.time() - float(bb.data.getVar('OESTATS_STAMP', d, True))
+ except:
+ elapsed = 0
+
+ # prepare files
+ files = {}
+ if status == 'Failed':
+ logs = glob.glob("%s/log.%s.*" % (bb.data.getVar('T', d, True), task))
+ if len(logs) > 0:
+ log = logs[0]
+ files['log'] = {
+ 'filename': 'log.txt',
+ 'content': file(log).read(),
+ 'content-type': 'text/plain'}
+ if task == 'do_package':
+ qalog = "%s/log.qa_package" % bb.data.getVar('T', d, True)
+ if os.path.exists(qalog):
+ files['qalog'] = {
+ 'filename': 'qalog.txt',
+ 'content': file(qalog).read(),
+ 'content-type': 'text/plain'}
+
+ # prepare report
+ vars = {
+ 'build': id,
+ 'package': bb.data.getVar('PN', d, True),
+ 'version': bb.data.getVar('PV', d, True),
+ 'revision': bb.data.getVar('PR', d, True),
+ 'depends': bb.data.getVar('DEPENDS', d, True),
+ 'task': task,
+ 'status': status,
+ 'time': str(elapsed)}
+ bug_number = bb.data.getVar('OESTATS_BUG_NUMBER', d, True)
+ bug_tracker = bb.data.getVar('OESTATS_BUG_TRACKER', d, True)
+ if bug_number and bug_tracker:
+ vars['bug_number'] = bug_number
+ vars['bug_tracker'] = bug_tracker
+
+ # send report
+ try:
+ response = oestats_send(d, server, "/tasks/", vars, files)
+ if status == 'Failed':
+ bb.note("oestats: task failed, see %s%s" % (server, response))
+ except:
+ bb.note("oestats: error sending task, disabling stats")
+ oestats_setid(d, "")
+
+addhandler oestats_eventhandler
+python oestats_eventhandler () {
+ from bb.event import getName
+ import bb
+ import time
+
+ if e.data is None or getName(e) == "MsgNote":
+ return NotHandled
+
+ server = bb.data.getVar('OESTATS_SERVER', e.data, True)
+ if not server.startswith('http://') and not server.startswith('https://'):
+ server = "http://%s" %(server)
+ builder = bb.data.getVar('OESTATS_BUILDER', e.data, True)
+ if not server or not builder:
+ return NotHandled
+
+ if getName(e) == 'BuildStarted':
+ oestats_start(server, builder, e.data)
+ elif getName(e) == 'BuildCompleted':
+ oestats_stop(server, e.data, e.getFailures())
+ elif getName(e) == 'TaskStarted':
+ bb.data.setVar('OESTATS_STAMP', repr(time.time()), e.data)
+ elif getName(e) == 'TaskSucceeded':
+ oestats_task(server, e.data, e.task, 'Succeeded')
+ elif getName(e) == 'TaskFailed':
+ oestats_task(server, e.data, e.task, 'Failed')
+
+ return NotHandled
+}
classes/debian.bbclass26
-rw-r--r--classes/devshell.bbclass22
-rw-r--r--classes/dietlibc.bbclass30
-rw-r--r--classes/distutils-base.bbclass11
-rw-r--r--classes/distutils-common-base.bbclass30
-rw-r--r--classes/distutils-native-base.bbclass3
-rw-r--r--classes/distutils.bbclass67
-rw-r--r--classes/dsmg600-image.bbclass19
-rw-r--r--classes/e.bbclass41
-rw-r--r--classes/efl.bbclass91
-rw-r--r--classes/failure-cleanup.bbclass18
-rw-r--r--classes/flow-lossage.bbclass4
-rw-r--r--classes/fso-plugin.bbclass4
-rw-r--r--classes/gconf.bbclass13
-rw-r--r--classes/gettext.bbclass18
-rw-r--r--classes/gitver.bbclass64
-rw-r--r--classes/glibc-package.bbclass305
-rw-r--r--classes/glx-use-tls.bbclass7
-rw-r--r--classes/gnome.bbclass18
-rw-r--r--classes/gpephone.bbclass7
-rw-r--r--classes/gtk-binver.bbclass9
-rw-r--r--classes/gtk-doc.bbclass4
-rw-r--r--classes/gtk-icon-cache.bbclass32
-rw-r--r--classes/icecc.bbclass324
-rw-r--r--classes/image.bbclass280
-rw-r--r--classes/image_ipk.bbclass99
-rw-r--r--classes/insane.bbclass508
-rw-r--r--classes/java-library.bbclass70
-rw-r--r--classes/java-native.bbclass11
-rw-r--r--classes/java.bbclass195
-rw-r--r--classes/kernel-arch.bbclass29
-rw-r--r--classes/kernel.bbclass318
-rw-r--r--classes/lib_package.bbclass11
-rw-r--r--classes/linux-kernel-base.bbclass10
-rw-r--r--classes/lockdown.bbclass41
-rw-r--r--classes/magicbox-image.bbclass37
-rw-r--r--classes/manifest.bbclass2
-rw-r--r--classes/meta.bbclass4
-rw-r--r--classes/mime.bbclass56
-rw-r--r--classes/module-base.bbclass8
-rw-r--r--classes/module.bbclass35
-rw-r--r--classes/module_strip.bbclass28
-rw-r--r--classes/mono.bbclass174
-rw-r--r--classes/mozilla.bbclass14
-rw-r--r--classes/multimachine.bbclass22
-rw-r--r--classes/n2100-image.bbclass32
-rw-r--r--classes/nas100d-image.bbclass19
-rw-r--r--classes/native.bbclass123
-rw-r--r--classes/nativesdk.bbclass78
-rw-r--r--classes/nslu2-image.bbclass23
-rw-r--r--classes/nslu2-jffs2-image.bbclass18
-rw-r--r--classes/nslu2-mirrors.bbclass4
-rw-r--r--classes/nslu2-ramdisk-image.bbclass18
-rw-r--r--classes/nylon-image.bbclass17
-rw-r--r--classes/nylon-mirrors.bbclass8
-rw-r--r--classes/oelint.bbclass2
-rw-r--r--classes/oestats-client.bbclass202
-rw-r--r--classes/openmoko-base.bbclass19
-rw-r--r--classes/openmoko-panel-plugin.bbclass6
-rw-r--r--classes/openmoko.bbclass3
-rw-r--r--classes/openmoko2.bbclass31
-rw-r--r--classes/opie.bbclass17
-rw-r--r--classes/opie_i18n.bbclass20
-rw-r--r--classes/oplinux-mirrors.bbclass14
-rw-r--r--classes/own-mirrors.bbclass4
-rw-r--r--classes/package.bbclass1026
-rw-r--r--classes/package_dbg.bbclass125
-rw-r--r--classes/package_deb.bbclass276
-rw-r--r--classes/package_ipk.bbclass201
-rw-r--r--classes/package_rpm.bbclass167
-rw-r--r--classes/package_tar.bbclass41
-rw-r--r--classes/packaged-staging.bbclass593
-rw-r--r--classes/packagedata.bbclass73
-rw-r--r--classes/packagehistory.bbclass97
-rw-r--r--classes/palmtop.bbclass10
-rw-r--r--classes/patch.bbclass170
-rw-r--r--classes/pkgconfig.bbclass32
-rw-r--r--classes/qemu.bbclass15
-rw-r--r--classes/qmake-base.bbclass44
-rw-r--r--classes/qmake.bbclass66
-rw-r--r--classes/qmake2.bbclass23
-rw-r--r--classes/qmake_base.bbclass91
-rw-r--r--classes/qpf.bbclass36
-rw-r--r--classes/qt3e.bbclass10
-rw-r--r--classes/qt3x11.bbclass12
-rw-r--r--classes/qt4e.bbclass17
-rw-r--r--classes/qt4x11.bbclass23
-rw-r--r--classes/recipe_sanity.bbclass179
-rw-r--r--classes/rm_work.bbclass40
-rw-r--r--classes/rootfs_deb.bbclass162
-rw-r--r--classes/rootfs_ipk.bbclass194
-rw-r--r--classes/rootfs_rpm.bbclass210
-rw-r--r--classes/rpm_core.bbclass16
-rw-r--r--classes/rubyextension.bbclass6
-rw-r--r--classes/sanity.bbclass145
-rw-r--r--classes/scons.bbclass13
-rw-r--r--classes/scratchbox-compat.bbclass13
-rw-r--r--classes/sdk.bbclass52
-rw-r--r--classes/sdl.bbclass38
-rw-r--r--classes/seppuku.bbclass395
-rw-r--r--classes/setuptools.bbclass8
-rw-r--r--classes/singlemachine.bbclass12
-rw-r--r--classes/sip.bbclass16
-rw-r--r--classes/sip3.bbclass60
-rw-r--r--classes/sip4.bbclass58
-rw-r--r--classes/siteinfo.bbclass145
-rw-r--r--classes/sourcepkg.bbclass15
-rw-r--r--classes/src_distribute.bbclass74
-rw-r--r--classes/src_distribute_local.bbclass58
-rw-r--r--classes/srctree.bbclass115
-rw-r--r--classes/srec.bbclass2
-rw-r--r--classes/storcenter-image.bbclass30
-rw-r--r--classes/task-metadata-track.bbclass96
-rw-r--r--classes/task.bbclass27
-rw-r--r--classes/test.bbclass2
-rw-r--r--classes/testlab.bbclass65