Esempio n. 1
0
    def content(self, req, cxt):
        status = self.getStatus(req)

        cxt['path_to_codebases'] = path_to_codebases(req, self.project.name)
        cxt['selectedproject'] = self.project.name

        codebases = {}
        getCodebasesArg(req, codebases)
        project_json = SingleProjectJsonResource(status, self.project)
        project_dict = yield project_json.asDict(req)
        url = status.getBuildbotURL() + path_to_json_builders(req, self.project.name)
        filters = {
            "project": self.project.name,
            "sources": codebases
        }
        cxt['instant_json']['builders'] = {"url": url,
                                           "data": json.dumps(project_dict, separators=(',', ':')),
                                           "waitForPush": status.master.config.autobahn_push,
                                           "pushFilters": {
                                               "buildStarted": filters,
                                               "buildFinished": filters,
                                               "requestSubmitted": filters,
                                               "requestCancelled": filters,
                                               "stepStarted": filters,
                                               "stepFinished": filters,
                                           }}


        template = req.site.buildbot_service.templates.get_template("builders.html")
        defer.returnValue(template.render(**cxt))
Esempio n. 2
0
        def set_instant_json(json_name, cmp_info):
            # Create our instant json for the given builders
            for bName, branch in cmp_info["codebases"].iteritems():
                request.args[bName + "_branch"] = branch

            url = status.getBuildbotURL() + path_to_json_builders(
                request, self.project.name)

            # Remove the extra array we don't need for autobahn
            sources = {}
            for n, src in cmp_info["codebases"].iteritems():
                sources[n] = src[0]

            filters = {"project": self.project.name, "sources": sources}

            cxt['instant_json'][json_name] = \
                {
                    "url": url,
                    "data": json.dumps(cmp_info["output"], separators=(',', ':')),
                    "waitForPush": status.master.config.autobahn_push,
                    "pushFilters": {
                        "buildFinished": filters,
                    }
                }

            # Remove from the object as we no longer need these values
            del cmp_info["output"]
Esempio n. 3
0
class ForceAction(ActionResource):
    @defer.inlineCallbacks
    def force(self, req, builderNames):
        master = self.getBuildmaster(req)
        owner = self.getAuthz(req).getUsernameFull(req)
        schedulername = req.args.get("forcescheduler", ["<unknown>"])[0]
        if schedulername == "<unknown>":
            try:
                for scheduler in master.allSchedulers():
                    if isinstance(
                            scheduler, ForceScheduler
                    ) and builderNames[0] in scheduler.builderNames:
                        schedulername = scheduler.name
                        break
                else:
                    raise RuntimeError("Could not find force scheduler")
            except:
                defer.returnValue((path_to_builder(
                    req, self.builder_status
                ), "forcescheduler arg not found, and could not find a default force scheduler for builderName"
                                   ))
                return

        args = {}
        # decode all of the args
        encoding = getRequestCharset(req)
        for name, argl in req.args.iteritems():
            if name == "checkbox":
                # damn html's ungeneric checkbox implementation...
                for cb in argl:
                    args[cb.decode(encoding)] = True
            else:
                args[name] = [arg.decode(encoding) for arg in argl]

        for scheduler in master.allSchedulers():
            if schedulername == scheduler.name:
                try:
                    yield scheduler.force(owner, builderNames, **args)
                    msg = ""
                except ValidationError, e:
                    msg = html.escape(e.message.encode('ascii', 'ignore'))
                break

        # send the user back to the proper page
        returnpage = args.get("returnpage", None)
        if "builders" in returnpage:
            defer.returnValue(
                (path_to_builders(req, self.builder_status.getProject())))
        elif "builders_json" in returnpage:
            s = self.getStatus(req)
            defer.returnValue(
                (s.getBuildbotURL() +
                 path_to_json_builders(req, self.builder_status.getProject())))
        elif "pending_json" in returnpage and builderNames > 0:
            s = self.getStatus(req)
            defer.returnValue((s.getBuildbotURL() +
                               path_to_json_pending(req, builderNames[0])))
        defer.returnValue((path_to_builder(req, self.builder_status)))
Esempio n. 4
0
    def performAction(self, req):
        try:
            request_id = req.args.get("id", [None])[0]
            if request_id == "all":
                cancel_all = True
            else:
                cancel_all = False
                request_id = int(request_id)
        except:
            request_id = None

        authz = self.getAuthz(req)
        if request_id:
            c = interfaces.IControl(self.getBuildmaster(req))
            builder_control = c.getBuilder(self.builder_status.getName())

            brcontrols = yield builder_control.getPendingBuildRequestControls()

            for build_req in brcontrols:
                if cancel_all or (build_req.brid == request_id):
                    log.msg("Cancelling %s" % build_req)
                    res = yield authz.actionAllowed('cancelPendingBuild', req,
                                                    build_req)
                    if res:
                        yield build_req.cancel()
                    else:
                        defer.returnValue(path_to_authzfail(req))
                        return
                    if not cancel_all:
                        break
        args = req.args.copy()

        returnpage = args.get("returnpage", None)

        if returnpage is None:
            defer.returnValue((path_to_builder(req, self.builder_status)))
        elif "builders" in returnpage:
            defer.returnValue(
                (path_to_builders(req, self.builder_status.getProject())))
        elif "buildqueue" in returnpage:
            defer.returnValue(path_to_buildqueue(req))
        elif "builders_json":
            s = self.getStatus(req)
            defer.returnValue(
                (s.getBuildbotURL() +
                 path_to_json_builders(req, self.builder_status.getProject())))
Esempio n. 5
0
    def force(self, req, builderNames):
        master = self.getBuildmaster(req)
        owner = self.getAuthz(req).getUsernameFull(req)
        scheduler_name = req.args.get("forcescheduler", ["<unknown>"])[0]

        args = self.decode_request_arguments(req)

        if scheduler_name == "<unknown>":
            scheduler = master.scheduler_manager.findSchedulerByBuilderName(
                builderNames[0],
                scheduler_type=ForceScheduler,
            )
        else:
            scheduler = master.scheduler_manager.findSchedulerByName(
                name=scheduler_name)

        try:
            yield scheduler.force(owner, builderNames, **args)
        except ValidationError:
            pass
        except AttributeError:
            if scheduler_name == '<unknown>':
                defer.returnValue((
                    path_to_builder(req, self.builder_status),
                    'forcescheduler arg not found, and could not find a default force scheduler for builderName',
                ), )

        # send the user back to the proper page
        returnpage = args.get("returnpage", {})
        if "builders" in returnpage:
            defer.returnValue(
                (path_to_builders(req, self.builder_status.getProject())))
        elif "builders_json" in returnpage:
            s = self.getStatus(req)
            defer.returnValue(
                (s.getBuildbotURL() +
                 path_to_json_builders(req, self.builder_status.getProject())))
        elif "pending_json" in returnpage and builderNames > 0:
            s = self.getStatus(req)
            defer.returnValue((s.getBuildbotURL() +
                               path_to_json_pending(req, builderNames[0])))
        defer.returnValue((path_to_builder(req, self.builder_status)))