Ejemplo n.º 1
0
    def __init__(self, messenger: Messenger, node_name='data_collector', file_header='sys_id_data',
                 data_collect_period=1.0, create_new_log=True, log_save_freq=2.0, logger_sleep_time=0.01,
                 **variables):
        super(Data_Collector_Node, self).__init__(messenger, node_name=node_name)

        # defining the input variables
        for var_name, var in variables.items():
            if isinstance(var, Var):
                self.in_var[var_name] = var
            else:
                raise TypeError("Variables must be of Var type!")

        self.data_collect_period = data_collect_period

        # setting up the data collector
        log_dir_path = os.path.join(os.getcwd(), 'data_log')

        # create new entry folder if creating new log
        if create_new_log or not os.path.exists(log_dir_path):
            latest_log_dir = None
        # add a new session folder if continuing from old log
        else:
            # use the latest data log
            all_log_dir = []
            for dir in os.listdir(log_dir_path):
                dir_path = os.path.join(log_dir_path, dir)
                if os.path.isdir(dir_path):
                    all_log_dir.append(dir_path)

            if len(all_log_dir) > 0:
                latest_log_dir = max(all_log_dir, key=os.path.getmtime)
            else:
                latest_log_dir = None

        # create the data_collector
        self.data_collect = DataLogger(log_dir=log_dir_path, log_header=file_header, log_path=latest_log_dir,
                                       sleep_time=logger_sleep_time, save_freq=log_save_freq)
Ejemplo n.º 2
0
class Data_Collector_Node(Node):

    def __init__(self, messenger: Messenger, node_name='data_collector', file_header='sys_id_data',
                 data_collect_period=1.0, create_new_log=True, log_save_freq=2.0, logger_sleep_time=0.01,
                 **variables):
        super(Data_Collector_Node, self).__init__(messenger, node_name=node_name)

        # defining the input variables
        for var_name, var in variables.items():
            if isinstance(var, Var):
                self.in_var[var_name] = var
            else:
                raise TypeError("Variables must be of Var type!")

        self.data_collect_period = data_collect_period

        # setting up the data collector
        log_dir_path = os.path.join(os.getcwd(), 'data_log')

        # create new entry folder if creating new log
        if create_new_log or not os.path.exists(log_dir_path):
            latest_log_dir = None
        # add a new session folder if continuing from old log
        else:
            # use the latest data log
            all_log_dir = []
            for dir in os.listdir(log_dir_path):
                dir_path = os.path.join(log_dir_path, dir)
                if os.path.isdir(dir_path):
                    all_log_dir.append(dir_path)

            if len(all_log_dir) > 0:
                latest_log_dir = max(all_log_dir, key=os.path.getmtime)
            else:
                latest_log_dir = None

        # create the data_collector
        self.data_collect = DataLogger(log_dir=log_dir_path, log_header=file_header, log_path=latest_log_dir,
                                       sleep_time=logger_sleep_time, save_freq=log_save_freq)

    def run(self):

        self.data_collect.start()

        loop_count = 0
        while self.alive:
            loop_count += 1
            data_packets = defaultdict(OrderedDict)

            for var_name, var in self.in_var.items():
                var_split = var_name.split('.')
                teensy_name = var_split[0]
                device_name = var_split[1]
                point_name = var_split[2]
                data_packets['%s.%s' % (teensy_name, device_name)][point_name] = copy(var.val)

            for packet_name, data_packet in data_packets.items():
                data_packet['packet_time'] = perf_counter()
                data_packet['step'] = loop_count

                self.data_collect.append_data_packet(packet_name, data_packet)

            sleep(max(self.messenger.estimated_msg_period*2, self.data_collect_period))

        self.data_collect.end_data_collection()
        self.data_collect.join()