def POST(self):
        '''
        Method:post
        '''
        try:
            log.info("CI:Post")
            query = HTTPAdaptor.format_query(web.ctx.env["QUERY_STRING"])
            body = HTTPAdaptor.format_form_data(web.data())
            if not (query.has_key("action") and query.has_key("commit_id")):
                raise "Invalid query string"

            commit_id = query["commit_id"]

            sopt = SQLAdaptor()
            if query["action"] == "Revoke":
                sopt.SetCommitStatus(commit_id, 6)
            elif query["action"] == "Ignore":
                sopt.SetCommitStatus(commit_id, 5)
                
            author = "mxu"
            
            request_num = sopt.GetUnprocessedRequest(author)
            
            request_url = "/".join([config.server["cvproxy"],"myunprocessedrequests"])
                        
            author_info = {"name":author,
                           "request_url":request_url,
                           "request_num":request_num}
            
            dashboard_url = "/".join([config.server["cvproxy"], "dashboard"])
            navi = [
                    {"name":"Dashboard",
                     "url":dashboard_url,
                     "theme":"unselected"
                    },
                    {"name":"Current review request",
                     "url":"#",
                     "theme":"selected"
                    }
                    ]

            
            result = {
                      "category": body["category"],
                      "comment": body["comment"],
                      "choice": query["action"]
                      }
            
            sopt.InsertActionInfo(commit_id, author, query["action"], body["category"], body["comment"])
            
            return render.render_template('current_review_result.tmpl',
                                            author = author_info,
                                            navi = navi, 
                                            commit_id = commit_id,
                                            result = result
               )
            
        except Exception, e:
            log.error(e)
            return HTTPAdaptor.format_response("error", "Request processing failed.")
    def GET(self):
        '''
        Method:get
        '''
        try:
            log.info("CI:Get")
            query = HTTPAdaptor.format_query(web.ctx.env["QUERY_STRING"])
            if not (query.has_key("action") and query.has_key("commit_id")):
                raise "Invalid query string"

            sopt = SQLAdaptor()

            author = "mxu"
            commit_id = query["commit_id"]
            sopt.SetCommitStatus(commit_id, 6)
            request_num = sopt.GetUnprocessedRequest(author)

            request_url = "/".join(
                [config.server["cvproxy"], "myunprocessedrequests"])

            author_info = {
                "name": author,
                "request_url": request_url,
                "request_num": request_num
            }

            dashboard_url = "/".join([config.server["cvproxy"], "dashboard"])
            navi = [{
                "name": "Dashboard",
                "url": dashboard_url,
                "theme": "unselected"
            }, {
                "name": "Current review request",
                "url": "#",
                "theme": "selected"
            }]

            sopt.InsertActionInfo(commit_id, query["action"], author, comment)

            result = {
                "category": "An issue",
                "comment": "Haha!",
                "choice": query["action"]
            }

            return render.render_template('current_review_result.tmpl',
                                          author=author_info,
                                          navi=navi,
                                          commit_id=commit_id,
                                          result=result)

        except Exception, e:
            log.error(e)
            return HTTPAdaptor.format_response("error",
                                               "Request processing failed.")
 def GET(self):
     '''
     Method:get
     '''
     try:
         log.info("Ajax:Get")
         query = HTTPAdaptor.format_query(web.ctx.env["QUERY_STRING"])
         if not (query.has_key("commit_id")):
             raise "Invalid query string"
         commit_id = query.get("commit_id")
         return {"s1":[3,4],"s2":[3,10]}
     except Exception, e:
         log.error(e)
         return HTTPAdaptor.format_response("error", "Request processing failed.")
Beispiel #4
0
 def GET(self):
     '''
     Method:get
     '''
     try:
         log.info("Ajax:Get")
         query = HTTPAdaptor.format_query(web.ctx.env["QUERY_STRING"])
         if not (query.has_key("commit_id")):
             raise "Invalid query string"
         commit_id = query.get("commit_id")
         return {"s1": [3, 4], "s2": [3, 10]}
     except Exception, e:
         log.error(e)
         return HTTPAdaptor.format_response("error",
                                            "Request processing failed.")
def TriggerJobs(jobs):
    is_triggered = False
    for job_name, job_content in jobs.iteritems():
        urlprefix = config.ciserver["urlprefix"]
        urlsuffix = config.ciserver["urlsuffix"]
        auth = [job_content["author"], job_content["token"]]
        log.debug("auth: %s token: %s" % (job_content["author"], job_content["token"]))
        if not urlprefix:            
            raise IncorrectCIServerPrefixError            
        elif not urlsuffix:
            raise IncorrectCIServerSuffixError
        else:
            job_url = "".join([urlprefix, job_name, urlsuffix])
            log.debug("Job url: %s" % job_url)
            body = utils.format_body_for_ci(job_content)
            code = HTTPAdaptor.get_url(job_url , auth = auth, body = body)
            if not code == 200:
                dbopts = SQLAdaptor()
                dbopts.SetBuildToInvalid(job_name, job_content)
                log.error("Code: %s" % code)
            else:
                is_triggered = True
                log.info("trigger request sent for job '%s'. code returned is %s" % (job_name, code))
    if not is_triggered:
        raise NoJobTriggeredError       
Beispiel #6
0
    def POST(self):
        '''
        Method: post
        '''   
        try:                  
            try:
                data = web.data()
                build_info = utils.json_load_to_str(data)
                log.debug("build info: %s" % build_info)           
            except Exception, e:
                log.error(e)
                raise UnableParsePostDataError
            
            # update status 
            dbopts = SQLAdaptor()
#            commit_id = dbopts.SetBuildStatus(build_info)            
            
            # if all results are failures, send email to commitor
            #
            
            phase_id, failure_list, commit_id = dbopts.CheckBuildFailures(build_info)
            
            if failure_list:
                if not opts.SendEmailToCommitor(build_info, commit_id):
                    dbopts.SetCommitStatus(commit_id, 10)
                else:
                    dbopts.SetCommitStatus(commit_id, 4)
            elif (not failure_list) and (phase_id == 3):
            
                dbopts.SetCommitStatus(commit_id, 1)
            else:
                dbopts.SetCommitStatus(commit_id, 3)
                 
            return HTTPAdaptor.format_response("ok", "003", "Update status based on CI")
class SVNCallBack:
    '''
    API for submitting call back request
    '''
    def POST(self):
        try:
            #@Step 1: Parse commit info
            try:
                data = web.data()
                callback = utils.json_load_to_str(data)
                log.debug("callback: %s" % callback)
                uuid = callback["uuid"]
                txn = callback["transaction"]
                status = callback["status"]
                           
            except Exception, e:
                log.error(e)
                raise UnableParsePostDataError     
            dbopts = SQLAdaptor()
            dbopts.UpdateStatusByTxn(uuid, txn, status)
            
            return HTTPAdaptor.format_response("ok", "00", "Jobs are triggered. Please wait for the response.")
        
        except Error, e:
            return HTTPAdaptor.format_response("err", code = e.status, msg = e.message)
def TriggerJobs(jobs):
    is_triggered = False
    for job_name, job_content in jobs.iteritems():
        urlprefix = config.ciserver["urlprefix"]
        urlsuffix = config.ciserver["urlsuffix"]
        auth = [job_content["author"], job_content["token"]]
        log.debug("auth: %s token: %s" %
                  (job_content["author"], job_content["token"]))
        if not urlprefix:
            raise IncorrectCIServerPrefixError
        elif not urlsuffix:
            raise IncorrectCIServerSuffixError
        else:
            job_url = "".join([urlprefix, job_name, urlsuffix])
            log.debug("Job url: %s" % job_url)
            body = utils.format_body_for_ci(job_content)
            code = HTTPAdaptor.get_url(job_url, auth=auth, body=body)
            if not code == 200:
                dbopts = SQLAdaptor()
                dbopts.SetBuildToInvalid(job_name, job_content)
                log.error("Code: %s" % code)
            else:
                is_triggered = True
                log.info(
                    "trigger request sent for job '%s'. code returned is %s" %
                    (job_name, code))
    if not is_triggered:
        raise NoJobTriggeredError
    def GET(self):
        '''
        Method: get
        '''  
        try:
            query = HTTPAdaptor.format_query(web.ctx.env["QUERY_STRING"])
            transaction = query["transaction"] if query.has_key("transaction") else ""
            revision = query["revision"] if query.has_key("revision") else ""
            if not transaction and not revision:
                raise "Invalid query string"

            sopt = SQLAdaptor()
            status = sopt.CheckCommitStatus(transaction, revision)
            return HTTPAdaptor.format_response("ok", status_id = status, msg = "Status %s returned" % status)
        
        except Error, e:
            return HTTPAdaptor.format_response("err", code = e.status, msg = e.message)
 def GET(self):
     '''
     Method:post
     '''
     try:
         log.info("Dashboard:Get")
         render.render_template("layout.tmpl")
     except Exception, e:
         log.error(e)
         return HTTPAdaptor.format_response("error", "Request processing failed.")
 def GET(self):
     '''
     Method:post
     '''
     try:
         log.info("Dashboard:Get")
         render.render_template("layout.tmpl")
     except Exception, e:
         log.error(e)
         return HTTPAdaptor.format_response("error",
                                            "Request processing failed.")
Beispiel #12
0
    def POST(self):
        '''
        Method:post
        '''       
        try:
            #@Step 1: Parse commit info
            try:
                data = web.data()
                commit_info = utils.json_load_to_str(data)
                commit_info = opts.FormatChangeSet(commit_info)
                log.debug("commit info: %s" % commit_info)           
            except Exception, e:
                log.error(e)
                raise UnableParsePostDataError               
            
            #@Step 2: Check author info
            if not opts.CheckAuthorInfo(commit_info["author"]):
                return HTTPAdaptor.format_response("pass", "001", "No authors available.")
                
#                log.error(NoAuthorFoundError.message)
#                raise NoAuthorFoundError
            #@Step 3: Check jobs needed to be triggerred
            jobs = opts.GetJobs(commit_info)
            if not jobs:
                log.warning(NoValidJobFoundError().message)
                return HTTPAdaptor.format_response("pass", "001", "No tests can be executed.")
            
            #@Step 4: Insert commit info
            
            dbopts = SQLAdaptor()
            dbopts.InsertCommitInfo(commit_info)
            dbopts.InsertJobInfo(jobs)
            log.debug("set status id to :%s" % 7)
            #@Step 5: Trigger jobs 
            opts.TriggerJobs(jobs) 
            
            return HTTPAdaptor.format_response("ok", "003", "Jobs are triggered. Please wait for the response.")
Beispiel #13
0
class SubmitStatus:
    '''
    API for submitting CI build status 
    '''
    def POST(self):
        '''
        Method: post
        '''
        try:
            try:
                data = web.data()
                build_info = utils.json_load_to_str(data)
                log.debug("build info: %s" % build_info)
            except Exception, e:
                log.error(e)
                raise UnableParsePostDataError

            # update status
            dbopts = SQLAdaptor()
            #            commit_id = dbopts.SetBuildStatus(build_info)

            # if all results are failures, send email to commitor
            #

            phase_id, failure_list, commit_id = dbopts.CheckBuildFailures(
                build_info)

            if failure_list:
                if not opts.SendEmailToCommitor(build_info, commit_id):
                    dbopts.SetCommitStatus(commit_id, 10)
                else:
                    dbopts.SetCommitStatus(commit_id, 4)
            elif (not failure_list) and (phase_id == 3):

                dbopts.SetCommitStatus(commit_id, 1)
            else:
                dbopts.SetCommitStatus(commit_id, 3)

            return HTTPAdaptor.format_response("ok", "003",
                                               "Update status based on CI")

        except Error, e:
            return HTTPAdaptor.format_response("err",
                                               code=e.status,
                                               msg=e.message)
Beispiel #14
0
 def POST(self):
     try:
         #@Step 1: Parse commit info
         try:
             data = web.data()
             callback = utils.json_load_to_str(data)
             log.debug("callback: %s" % callback)
             uuid = callback["uuid"]
             txn = callback["transaction"]
             status = callback["status"]
                        
         except Exception, e:
             log.error(e)
             raise UnableParsePostDataError     
         dbopts = SQLAdaptor()
         dbopts.UpdateStatusByTxn(uuid, txn, status)
         
         return HTTPAdaptor.format_response("ok", "00", "Jobs are triggered. Please wait for the response.")
    def GET(self):
        '''
        Method:get
        '''
        try:
            log.info("CI:Get")
            query = HTTPAdaptor.format_query(web.ctx.env["QUERY_STRING"])
            if not (query.has_key("author") and query.has_key("commit_id") and query.has_key("token")):
                raise InvalidQueryStringError
            author = query.get("author")
            commit_id = query.get("commit_id")
            token = query.get("token")
#            if not utils.validate_token( author = author, commit_id = commit_id, url = config.server["cvproxy"],token = token):
#                raise AuthenticationError
            
            sopt = SQLAdaptor()
            request_num = sopt.GetUnprocessedRequest(author)
            request_url = "/".join([config.server["cvproxy"],"myunprocessedrequests"])
                        
            author_info = {"name":author,
                           "request_url":request_url,
                           "request_num":request_num}
            
            dashboard_url = "/".join([config.server["cvproxy"], "dashboard"])
            navi = [
#                    {"name":"Dashboard",
#                     "url":dashboard_url,
#                     "theme":"unselected"
#                    },
                    {"name":"Current review request",
                     "url":"#",
                     "theme":"selected"
                    }
                    ]
            

            
            url = {"ignore":
                    {"absolute": "/".join([config.server["cvproxy"],"submitaction?action=ignore&commit_id=%s" % commit_id]),
                     "relative": "submitaction?action=Ignore&commit_id=%s" % commit_id},
                   "revoke":
                    {"absolute": "/".join([config.server["cvproxy"],"submitaction?action=revoke&commit_id=%s" % commit_id]),
                     "relative": "submitaction?action=Revoke&commit_id=%s" % commit_id}
                   }
            
            cijob = sopt.GetJobNameByCommit(commit_id)
            files_committed = sopt.GetCommitedFilesNum(commit_id)
            
            
            downstreamjobs = sopt.GetDownstreamJobs(cijob)
            if downstreamjobs:                
                project_info = sopt.GetProjectInfo(downstreamjobs[0])
                test_info = sopt.GetTestSummary(downstreamjobs)
                results, failed_jobs = sopt.GetTestResult(downstreamjobs)
                            
            else:
                project_info = sopt.GetProjectInfo(cijob) 
                test_info = sopt.GetTestSummary([cijob])
                results, failed_jobs = sopt.GetTestResult([cijob])
                    
            log.debug("downstream jobs: %s" % downstreamjobs)
            log.debug("project_info: %s" % project_info) 
            log.debug("test_info: %s" % test_info)
            
            
            info = {"product": project_info["product"],
                    "platform":project_info["platform"],
                    "version":project_info["version"],
                    "files_committed": files_committed,
                    "tests_executed": test_info["tests"],
                    "failures":test_info["failures"]}             

            ci_url = config.ciserver["urlprefix"]
            jobs = []

            jobs.append(
                       {"jobpage":"/".join([ci_url,cijob[0]]),
                        "name":cijob[0],
                        "overview": "/".join([ci_url,cijob[0],cijob[1]]),
                        "console": "/".join([ci_url,cijob[0],cijob[1],"console"]),
                        "workspace": "/".join([ci_url,cijob[0],"ws"]),
                        "testresult": "/".join([ci_url,cijob[0],cijob[1],"TestReport/?"]),
                        "logs": "/".join([ci_url,cijob[0],cijob[1],"artifact/logs"]),
                        "results": results,
                        "failed_jobs": opts.FormatFailedJobs(failed_jobs)
                        }                               
                        )    
                           
                  
                               
            categories = sopt.GetCategory()
            
            diff_list = sopt.GetDiffSetByCommit(commit_id)
            codes = opts.FormatDiffs(diff_list)
        
            return render.render_template('current_review_request.tmpl',
                           author = author_info,
                           navi = navi, 
                           url = url, 
                           commit_id = commit_id,
                           info = info,
                           categories = categories,
                           jobs = jobs,
                           codes = codes)
        except Exception, e:
            log.error(e)
            return HTTPAdaptor.format_response("error", "Request processing failed.")
Beispiel #16
0
                txn = callback["transaction"]
                status = callback["status"]
                           
            except Exception, e:
                log.error(e)
                raise UnableParsePostDataError     
            dbopts = SQLAdaptor()
            dbopts.UpdateStatusByTxn(uuid, txn, status)
            
            return HTTPAdaptor.format_response("ok", "00", "Jobs are triggered. Please wait for the response.")
        
        except Error, e:
            return HTTPAdaptor.format_response("err", code = e.status, msg = e.message)
        
        except Exception, e:
            return HTTPAdaptor.format_response("err", msg = "Server execution failed")
            
            
                   
    
class TriggerRequest:
    '''
    API for submitting trigger request
    '''    
    def POST(self):
        '''
        Method:post
        '''       
        try:
            #@Step 1: Parse commit info
            try:
    def GET(self):
        '''
        Method:get
        '''
        try:
            log.info("CI:Get")
            query = HTTPAdaptor.format_query(web.ctx.env["QUERY_STRING"])
            if not (query.has_key("author") and query.has_key("commit_id")
                    and query.has_key("token")):
                raise InvalidQueryStringError
            author = query.get("author")
            commit_id = query.get("commit_id")
            token = query.get("token")
            #            if not utils.validate_token( author = author, commit_id = commit_id, url = config.server["cvproxy"],token = token):
            #                raise AuthenticationError

            sopt = SQLAdaptor()
            request_num = sopt.GetUnprocessedRequest(author)
            request_url = "/".join(
                [config.server["cvproxy"], "myunprocessedrequests"])

            author_info = {
                "name": author,
                "request_url": request_url,
                "request_num": request_num
            }

            dashboard_url = "/".join([config.server["cvproxy"], "dashboard"])
            navi = [
                #                    {"name":"Dashboard",
                #                     "url":dashboard_url,
                #                     "theme":"unselected"
                #                    },
                {
                    "name": "Current review request",
                    "url": "#",
                    "theme": "selected"
                }
            ]

            url = {
                "ignore": {
                    "absolute":
                    "/".join([
                        config.server["cvproxy"],
                        "submitaction?action=ignore&commit_id=%s" % commit_id
                    ]),
                    "relative":
                    "submitaction?action=Ignore&commit_id=%s" % commit_id
                },
                "revoke": {
                    "absolute":
                    "/".join([
                        config.server["cvproxy"],
                        "submitaction?action=revoke&commit_id=%s" % commit_id
                    ]),
                    "relative":
                    "submitaction?action=Revoke&commit_id=%s" % commit_id
                }
            }

            cijob = sopt.GetJobNameByCommit(commit_id)
            files_committed = sopt.GetCommitedFilesNum(commit_id)

            downstreamjobs = sopt.GetDownstreamJobs(cijob)
            if downstreamjobs:
                project_info = sopt.GetProjectInfo(downstreamjobs[0])
                test_info = sopt.GetTestSummary(downstreamjobs)
                results, failed_jobs = sopt.GetTestResult(downstreamjobs)

            else:
                project_info = sopt.GetProjectInfo(cijob)
                test_info = sopt.GetTestSummary([cijob])
                results, failed_jobs = sopt.GetTestResult([cijob])

            log.debug("downstream jobs: %s" % downstreamjobs)
            log.debug("project_info: %s" % project_info)
            log.debug("test_info: %s" % test_info)

            info = {
                "product": project_info["product"],
                "platform": project_info["platform"],
                "version": project_info["version"],
                "files_committed": files_committed,
                "tests_executed": test_info["tests"],
                "failures": test_info["failures"]
            }

            ci_url = config.ciserver["urlprefix"]
            jobs = []

            jobs.append({
                "jobpage":
                "/".join([ci_url, cijob[0]]),
                "name":
                cijob[0],
                "overview":
                "/".join([ci_url, cijob[0], cijob[1]]),
                "console":
                "/".join([ci_url, cijob[0], cijob[1], "console"]),
                "workspace":
                "/".join([ci_url, cijob[0], "ws"]),
                "testresult":
                "/".join([ci_url, cijob[0], cijob[1], "TestReport/?"]),
                "logs":
                "/".join([ci_url, cijob[0], cijob[1], "artifact/logs"]),
                "results":
                results,
                "failed_jobs":
                opts.FormatFailedJobs(failed_jobs)
            })

            categories = sopt.GetCategory()

            diff_list = sopt.GetDiffSetByCommit(commit_id)
            codes = opts.FormatDiffs(diff_list)

            return render.render_template('current_review_request.tmpl',
                                          author=author_info,
                                          navi=navi,
                                          url=url,
                                          commit_id=commit_id,
                                          info=info,
                                          categories=categories,
                                          jobs=jobs,
                                          codes=codes)
        except Exception, e:
            log.error(e)
            return HTTPAdaptor.format_response("error",
                                               "Request processing failed.")