示例#1
0
    def getBuildStatus(self, which, short=False):
        response = f'`{which}`: '

        builder = yield self.getBuilder(buildername=which)
        builderid = builder['builderid']
        runningBuilds = yield self.getRunningBuilds(builderid)

        # pylint: disable=too-many-nested-blocks
        if not runningBuilds:
            onlineBuilders = yield self.getOnlineBuilders()
            if builderid in onlineBuilders:
                response += self.idle_string
                lastBuild = yield self.getLastCompletedBuild(builderid)
                if lastBuild:
                    complete_at = lastBuild['complete_at']
                    if complete_at:
                        complete_at = util.datetime2epoch(complete_at)
                        ago = util.fuzzyInterval(
                            int(reactor.seconds() - complete_at))
                    else:
                        ago = "??"
                    status = self.format_build_status(lastBuild, short=short)
                    if not short:
                        status = ", " + status
                        if lastBuild['results'] != SUCCESS:
                            status_string = lastBuild.get('status_string')
                            if status_string:
                                status += ": " + status_string
                    response += f'  last build {ago} ago{status}'
            else:
                response += self.offline_string
        else:
            response += self.running_string
            buildInfo = []
            for build in runningBuilds:
                step = yield self.getCurrentBuildstep(build)
                if step:
                    s = f"({step[-1]['state_string']})"
                else:
                    s = "(no current step)"
                bnum = build['number']
                url = utils.getURLForBuild(self.master, builderid, bnum)
                buildInfo.append(f"build [#{bnum}]({url}) {s}")

            response += ' ' + ', '.join(buildInfo)

        return response
示例#2
0
    def command_LAST(self, args, **kwargs):
        """list last build status for a builder"""
        # FIXME: NEED TO THINK ABOUT!
        args = self.splitArgs(args)

        if not args:
            builders = yield self.bot.getAllBuilders()
            online_builderids = yield self.bot.getOnlineBuilders()
            builders = [
                b for b in builders if b['builderid'] in online_builderids
            ]
        elif len(args) == 1:
            arg = args[0]
            if arg == 'all':
                builders = yield self.bot.getAllBuilders()
            else:
                builder = yield self.bot.getBuilder(buildername=arg)
                if not builder:
                    raise UsageError("no such builder")
                builders = [builder]
        else:
            raise UsageError("Try '" + self.bot.commandPrefix +
                             "last _builder_'.")

        messages = []

        for builder in builders:
            lastBuild = yield self.bot.getLastCompletedBuild(
                builder['builderid'])
            if not lastBuild:
                status = "no builds run since last restart"
            else:
                complete_at = lastBuild['complete_at']
                if complete_at:
                    complete_at = util.datetime2epoch(complete_at)
                    ago = util.fuzzyInterval(
                        int(reactor.seconds() - complete_at))
                else:
                    ago = "??"
                status = self.bot.format_build_status(lastBuild)
                status = f'last build {status} ({ago} ago)'
                if lastBuild['results'] != SUCCESS:
                    status += f": {lastBuild['state_string']}"
            messages.append(f"`{builder['name']}`: {status}")
        if messages:
            self.send('\n'.join(messages))
示例#3
0
 def test_years(self):
     self.assertEqual(util.fuzzyInterval((2 * 365 + 96) * 24 * 3600),
                      "2 years")
示例#4
0
 def test_months(self):
     self.assertEqual(util.fuzzyInterval(86 * 24 * 3600 + 124), "3 months")
示例#5
0
 def test_year(self):
     self.assertEqual(util.fuzzyInterval(370 * 24 * 3600), "a year")
示例#6
0
 def test_days(self):
     self.assertEqual(util.fuzzyInterval((19 + 24) * 3600 + 124), "2 days")
示例#7
0
 def test_month(self):
     self.assertEqual(util.fuzzyInterval(36 * 24 * 3600 + 124), "a month")
示例#8
0
 def test_hours(self):
     self.assertEqual(util.fuzzyInterval(9 * 3600 - 720), "9 hours")
示例#9
0
 def test_day(self):
     self.assertEqual(util.fuzzyInterval(32 * 3600 + 124), "a day")
示例#10
0
 def test_minutes_rounded(self):
     self.assertEqual(util.fuzzyInterval(32 * 60 + 24), "30 minutes")
示例#11
0
 def test_hour(self):
     self.assertEqual(util.fuzzyInterval(3600 + 1200), "an hour")
示例#12
0
 def test_minutes(self):
     self.assertEqual(util.fuzzyInterval(3 * 60 + 24), "3 minutes")
示例#13
0
 def test_minute(self):
     self.assertEqual(util.fuzzyInterval(58), "a minute")
示例#14
0
 def test_seconds_rounded(self):
     self.assertEqual(util.fuzzyInterval(48), "50 seconds")
示例#15
0
 def test_seconds(self):
     self.assertEqual(util.fuzzyInterval(17), "17 seconds")
示例#16
0
 def test_moment(self):
     self.assertEqual(util.fuzzyInterval(1), "a moment")