Update drivers
[vuplus_openembedded] / classes / oestats-client.bbclass
index ed81a03..e4e6206 100644 (file)
@@ -5,8 +5,9 @@
 # To make use of this class, add to your local.conf:
 #
 # INHERIT += "oestats-client"
-# OESTATS_SERVER = "some.server.org"
+# OESTATS_SERVER = "http://some.server.org"
 # OESTATS_BUILDER = "some_nickname"
+# 
 
 def oestats_setid(d, val):
        import bb
@@ -18,8 +19,9 @@ def oestats_getid(d):
        f = file(bb.data.getVar('TMPDIR', d, True) + '/oestats.id', 'r')
        return f.read()
        
-def oestats_send(server, action, vars = {}, files = {}):
-       import httplib
+def oestats_send(d, server, action, vars = {}, files = {}):
+       import bb
+       import urllib2
 
        # build body
        output = []
@@ -44,16 +46,21 @@ def oestats_send(server, action, vars = {}, files = {}):
 
        # build headers
        headers = {
-               "User-agent": "oestats-client/0.4",
+               "User-agent": "oestats-client/0.5",
                "Content-type": "multipart/form-data; boundary=%s" % bound,
                "Content-length": str(len(body))}
 
-       # send request
-       conn = httplib.HTTPConnection(server)
-       conn.request("POST", action, body, headers)
-       response = conn.getresponse()
+       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()
-       conn.close()
+       
        return data
 
 def oestats_start(server, builder, d):
@@ -64,10 +71,11 @@ def oestats_start(server, builder, d):
        # send report
        id = ""
        try:
-               data = oestats_send(server, "/builds/", {
+               data = oestats_send(d, server, "/builds/", {
                        'builder': builder,
-                       'branch': bb.data.getVar('METADATA_BRANCH', d, True),
-                       'revision': bb.data.getVar('METADATA_REVISION', d, True),
+                       '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),
                })
@@ -96,15 +104,18 @@ def oestats_stop(server, d, failures):
                status = "Succeeded"                  
 
        try:
-               response = oestats_send(server, "/builds/%s/" % id, {
+               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
@@ -117,30 +128,45 @@ def oestats_task(server, d, task, status):
        except:
                elapsed = 0
        
-       # send the log for failures
+       # 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]
-                       bb.note("oestats: sending log file : %s" % log)
                        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(server, "/tasks/", {
-                       '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),
-               }, files)
+               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, "")
@@ -155,6 +181,8 @@ python oestats_eventhandler () {
                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