Exemple #1
0
    def _handle_log_stream(self, stream):
        log_lines = []
        last_emit_time = time.time()
        last_heart_beat = time.time()
        status = True
        try:
            for log_line in stream:
                new_log_lines, new_status = self._prepare_log_lines(log_line)
                log_lines += new_log_lines
                if not new_status:
                    status = new_status
                publish_cond = (len(log_lines) == publisher.MESSAGES_COUNT
                                or (log_lines and time.time() - last_emit_time
                                    > publisher.MESSAGES_TIMEOUT))
                if publish_cond:
                    self._handle_logs(log_lines)
                    log_lines = []
                    last_emit_time = time.time()
                if time.time() - last_heart_beat > self.HEART_BEAT_INTERVAL:
                    last_heart_beat = time.time()
                    RedisHeartBeat.build_ping(build_id=self.build_job.id)
            if log_lines:
                self._handle_logs(log_lines)
        except (BuildError, APIError) as e:
            self._handle_logs(
                LogSpec(log_line='Build Error {}'.format(e),
                        log_level=publisher.ERROR))
            return False

        return status
    def test_build_jobs_check_heartbeat(self):
        build1 = BuildJobFactory()
        BuildJobStatusFactory(job=build1, status=JobLifeCycle.RUNNING)
        RedisHeartBeat.build_ping(build_id=build1.id)
        build2 = BuildJobFactory()
        BuildJobStatusFactory(job=build2, status=JobLifeCycle.RUNNING)

        build_jobs_check_heartbeat(build1.id)
        build1.refresh_from_db()
        self.assertEqual(build1.last_status, JobLifeCycle.RUNNING)

        build_jobs_check_heartbeat(build2.id)
        build2.refresh_from_db()
        self.assertEqual(build2.last_status, JobLifeCycle.FAILED)
    def test_redis_heartbeat_build(self):
        heartbeat = RedisHeartBeat(build=1)
        self.assertEqual(heartbeat.redis_key, RedisHeartBeat.KEY_BUILD.format(1))
        self.assertEqual(heartbeat.is_alive(), False)
        self.assertEqual(RedisHeartBeat.build_is_alive(1), False)

        heartbeat.ping()
        self.assertEqual(heartbeat.is_alive(), True)
        self.assertEqual(RedisHeartBeat.build_is_alive(1), True)

        heartbeat.clear()
        self.assertEqual(heartbeat.is_alive(), False)
        self.assertEqual(RedisHeartBeat.build_is_alive(1), False)

        RedisHeartBeat.build_ping(1)
        self.assertEqual(heartbeat.is_alive(), True)
        self.assertEqual(RedisHeartBeat.build_is_alive(1), True)
Exemple #4
0
    def _handle_log_stream(self, stream):
        log_lines = []
        last_heart_beat = time.time()
        status = True
        try:
            for log_line in stream:
                new_log_lines, new_status = self._prepare_log_lines(log_line)
                log_lines += new_log_lines
                if not new_status:
                    status = new_status
                self._handle_logs(log_lines)
                log_lines = []
                if time.time() - last_heart_beat > self.HEART_BEAT_INTERVAL:
                    last_heart_beat = time.time()
                    RedisHeartBeat.build_ping(build_id=self.build_job.id)
            if log_lines:
                self._handle_logs(log_lines)
        except (BuildError, APIError) as e:
            self._handle_logs('{}: Could not build the image, '
                              'encountered {}'.format(LogLevels.ERROR, e))
            return False

        return status
Exemple #5
0
 def _ping_heartbeat(self) -> None:
     RedisHeartBeat.build_ping(self.id)
Exemple #6
0
 def post(self, request, *args, **kwargs):
     RedisHeartBeat.build_ping(build_id=self.build.id)
     return Response(status=status.HTTP_200_OK)