示例#1
0
 def run(self):
     while True:
         self.manage_data()
         shutdown_event.wait(1.)
         if shutdown_event.isSet():
             logger.info("%s thread has catched *shutdown_event*" %
                         self.__class__.__name__)
             sys.exit(0)
示例#2
0
 def run(self):
     """ Main loop. """
     while True:
         self.manage_data()
         shutdown_event.wait(self.refresh_rate)
         if shutdown_event.isSet():
             logger.info("%s thread has catched *shutdown_event*" %
                         self.__class__.__name__)
             sys.exit(0)
示例#3
0
    def run(self):
        """ Run unless shutdown signal is received. """

        timeout = 0.1  # sec
        wait_time = 0  # sec

        while True:
            try:
                trace = q.get(timeout=timeout)
            except Queue.Empty:
                # process queue before shutdown
                if q.empty() and shutdown_event.isSet():
                    logger.info("%s thread has caught *shutdown_event*" %
                                self.__class__.__name__)
                    sys.exit(0)

                wait_time += timeout
                if wait_time > self.flushtime:
                    if len(self.data) == 0:
                        # no data from seedlink thread
                        logger.info('Flush timer reached (%ds)' %
                                    self.flushtime +
                                    '. No data coming from seedlink thread!' +
                                    ' Network/connection down ?')
                    else:
                        # force data flush to influxdb
                        # even if data block is not completed
                        logger.info('Flush timer reached (%ds)' %
                                    self.flushtime +
                                    '. Force data flush to influxdb ' +
                                    '(bsize=%d/%d)' %
                                    (len(self.data), self.nb_data_max))

                    now = datetime.utcnow()
                    self.make_stats(now)
                    try:
                        self.send_points()
                    except Exception as e:
                        logger.critical(e)
                        shutdown_event.set()
                        # self.force_shutdown(e)
                    wait_time = 0
            else:
                data_pushed = self.manage_data(trace)
                q.task_done()
                if data_pushed:
                    wait_time = 0
示例#4
0
    def on_data(self, trace):
        """Implement the on_data callback"""
        channel = trace.get_id()
        if channel not in self.selected_streams:
            return

        try:
            timeout = 15
            q.put(trace, block=True, timeout=timeout)
        except Queue.Full:
            logger.error("Queue is full and timeout(%ds) reached !" % timeout)
            logger.error("Ignoring data !")

        if shutdown_event.isSet():
            logger.info("%s thread has catched *shutdown_event*" %
                        self.__class__.__name__)
            self.stop_seedlink()
示例#5
0
    def run(self):
        """Run unless shutdown signal is received.  """

        # time in seconds
        timeout = 0.1
        max_cumulated_wait_time = 15
        wait_time = 0

        while True:
            try:
                trace = q.get(timeout=timeout)
            except Queue.Empty:
                # process queue before shutdown
                if q.empty() and shutdown_event.isSet():
                    logger.info("%s thread has catched *shutdown_event*" %
                                self.__class__.__name__)
                    sys.exit(0)

                wait_time += timeout
                if wait_time > max_cumulated_wait_time:
                    # force data flush to influxdb
                    # even if data block is not completed
                    logger.info('Timer reached (%ds)' % max_cumulated_wait_time
                                + '. Force data flush to influxdb '
                                + '(bsize=%d/%d)!'
                                % (len(self.data), self.nb_data_max))
                    now = datetime.utcnow()
                    self.make_stats(now)
                    try:
                        self.send_points()
                    except BaseException as e:
                        self.force_shutdown(e)
                    wait_time = 0
            else:
                data_pushed = self.manage_data(trace)
                q.task_done()
                if data_pushed:
                    wait_time = 0
示例#6
0
    def on_data(self, trace):
        """Implement the on_data callback."""
        channel = trace.get_id()
        if channel not in self.selected_streams:
            return

        now = datetime.utcnow()
        endtime = trace.stats['endtime']
        sample_rate = trace.stats['sampling_rate']

        # filter out too old data
        latency = UTCDateTime(now) - endtime
        if self.SL_PACKET_TIME_MAX and latency > self.SL_PACKET_TIME_MAX:
            if logger.getEffectiveLevel() <= logging.INFO:
                # Show when a channel becomes unavailable
                # ie. latency > threshold
                if channel not in self.show_too_old_packet_msg or \
                   self.show_too_old_packet_msg[channel] is True:
                    msg = "[%s] latency too high (%.1f s), " % \
                           (channel, latency) + \
                           "trace disabled until latency < %.1f s" % \
                           (self.SL_PACKET_TIME_MAX)
                    logger.info(msg)
                    self.show_too_old_packet_msg[channel] = False

            if shutdown_event.isSet():
                logger.info("%s thread has catched *shutdown_event*" %
                            self.__class__.__name__)
                self.stop_seedlink()
            return

        if logger.getEffectiveLevel() <= logging.INFO:
            # Show when a channel becomes available ie. latency < threshold
            if channel not in self.show_too_old_packet_msg or \
               self.show_too_old_packet_msg[channel] is False:
                self.show_too_old_packet_msg[channel] = True
                msg = "[%s] latency is %.1f  < %.1f s, " % \
                      (channel, latency, self.SL_PACKET_TIME_MAX) + \
                      "trace enabled"
                logger.info(msg)

        # resample data
        if self.resample_rate:
            try:
                trace.resample(self.resample_rate)
            except Exception:
                msg = "Can't resample %s(%.2f Hz) to %.2f Hz" % \
                    (channel, sample_rate, self.resample_rate)
                logger.warning(msg)

        try:
            q.put(trace, block=True, timeout=self.queue_timeout)
        except Queue.Full:
            logger.error("Queue is full and timeout(%ds) reached !" %
                         self.queue_timeout)
            logger.error("Ignoring data !")

        if shutdown_event.isSet():
            logger.info("%s thread has catched *shutdown_event*" %
                        self.__class__.__name__)
            self.stop_seedlink()