Пример #1
0
    def __init__(self, device_name, device_id, rabbitmq_address, metric):
        self.subscriber = PikaSubscriber(device_name=device_name,
                                         device_id=device_id,
                                         rabbitmq_address=rabbitmq_address,
                                         metric_name=metric)
        self.metric = metric
        self.device_name = device_name
        self.device_id = device_id
        self.num_channels = get_num_channels(device_name, metric)

        self.cassandra_dao = CassandraDAL()
Пример #2
0
  def __init__(self, device_name, device_id, rabbitmq_address, metric):
    self.subscriber = PikaSubscriber(device_name=device_name,
                                     device_id=device_id,
                                     rabbitmq_address=rabbitmq_address,
                                     metric_name=metric)
    self.metric = metric
    self.device_name = device_name
    self.device_id = device_id

    self.csv_writer = None
    self.file = None
    self.headers = None
Пример #3
0
    def __init__(self,
                 device_name,
                 device_id,
                 metric,
                 subscriber_type="pika",
                 rabbitmq_address=None,
                 pipe_name=None):
        if subscriber_type == "pika" and rabbitmq_address is None:
            raise ValueError(
                "Pika subscriber needs to have a rabbitmq address!")

        if subscriber_type == "pika":
            self.subscriber = PikaSubscriber(device_name=device_name,
                                             device_id=device_id,
                                             rabbitmq_address=rabbitmq_address,
                                             metric_name=metric)
        elif subscriber_type == "pipe":
            self.subscriber = PipeSubscriber(device_name=device_name,
                                             device_id=device_id,
                                             metric_name=metric,
                                             pipe_name=pipe_name)
        else:
            raise ValueError(
                "'%s' is not a valid subscriber type. Valid types are %s." %
                (subscriber_type, "pika, pipe"))
        self.metric = metric
        self.device_name = device_name
        self.device_id = device_id

        self.subscriber_type = subscriber_type

        self.csv_writer = None
        self.file = None
        self.headers = None
  def __init__(self, device_name, device_id, rabbitmq_address, metric):
    self.subscriber = PikaSubscriber(device_name=device_name,
                                     device_id=device_id,
                                     rabbitmq_address=rabbitmq_address,
                                     metric_name=metric)
    self.metric = metric
    self.device_name = device_name
    self.device_id = device_id
    self.num_channels = get_num_channels(device_name, metric)

    self.cassandra_dao = CassandraDAO()
    def start(self):
        self.cassandra_dao.connect()
        metrics = get_metrics_names(self.device_type)
        for metric in metrics:
            self.subscribers[metric] = PikaSubscriber(
                device_name=self.device_type,
                device_id=self.device_id,
                rabbitmq_address=self.rabbitmq_address,
                metric_name=metric)
            self.subscribers[metric].connect()

            t = threading.Thread(target=self.subscribers[metric].consume_messages,
                                 args=(self.write_to_cassandra_factory(metric),))
            self.threads.append(t)
            t.start()
Пример #6
0
class CassandraSubscriber(object):
    """
  Subscribes and writes data to a file
  """
    def __init__(self, device_name, device_id, rabbitmq_address, metric):
        self.subscriber = PikaSubscriber(device_name=device_name,
                                         device_id=device_id,
                                         rabbitmq_address=rabbitmq_address,
                                         metric_name=metric)
        self.metric = metric
        self.device_name = device_name
        self.device_id = device_id
        self.num_channels = get_num_channels(device_name, metric)

        self.cassandra_dao = CassandraDAL()

    def start(self):
        """
    Consume and write data to file
    :return:
    """

        self.cassandra_dao.connect()
        self.subscriber.connect()
        self.subscriber.consume_messages(self.write_to_cassandra)

    def stop(self):
        """
    Unsubscribe and close file
    :return:
    """
        self.subscriber.disconnect()
        self.file.close_file(self.write_to_cassandra)

    def write_to_cassandra(self, ch, method, properties, body):
        buffer_content = json.loads(body)
        for record in buffer_content:
            timestamp = record["timestamp"]
            channel_data = [
                record["channel_%s" % i] for i in xrange(self.num_channels)
            ]

            self.cassandra_dao.store_data(timestamp, self.device_id,
                                          self.device_name, self.metric,
                                          channel_data)
class CassandraSubscriber(object):
  """
  Subscribes and writes data to a file
  """

  def __init__(self, device_name, device_id, rabbitmq_address, metric):
    self.subscriber = PikaSubscriber(device_name=device_name,
                                     device_id=device_id,
                                     rabbitmq_address=rabbitmq_address,
                                     metric_name=metric)
    self.metric = metric
    self.device_name = device_name
    self.device_id = device_id
    self.num_channels = get_num_channels(device_name, metric)

    self.cassandra_dao = CassandraDAO()


  def start(self):
    """
    Consume and write data to file
    :return:
    """

    self.cassandra_dao.connect()
    self.subscriber.connect()
    self.subscriber.consume_messages(self.write_to_cassandra)


  def stop(self):
    """
    Unsubscribe and close file
    :return:
    """
    self.subscriber.disconnect()
    self.file.close_file(self.write_to_cassandra)


  def write_to_cassandra(self, ch, method, properties, body):
    buffer_content = json.loads(body)
    for record in buffer_content:
      timestamp = record["timestamp"]
      channel_data = [record["channel_%s" % i] for i in xrange(self.num_channels)]

      self.cassandra_dao.store_data(timestamp, self.device_id, self.device_name, self.metric, channel_data)
Пример #8
0
        # print(row)
        d.append(float(row['channel_5']) - float(row['channel_3']))

    # print(msg['left'])
    # print(len(msg))

    data.extend(d)
    data = data[-N_points-extra:]

    if count == 1:
        update_plot()
        count = 0
    else:
        count += 1

eeg_subscriber = PikaSubscriber(device_name, device_id, host, metric)
eeg_subscriber.connect()

eeg_subscriber.consume_messages(consume_eeg)

# # loop to update the data
# while True:
#     try:
#         try:
#             x = float(s.readline().strip())
#         except ValueError:
#             continue

#         data.append(x)
#         data = data[-100:]
Пример #9
0
import time

device_id = "brainsquared"
device_name = "openbci"
metric = 'tag'

host = RABBITMQ_ADDRESS
buffer_size = 100

fname = 'test_{}.csv'.format(int(time.time()))
fieldnames = ['timestamp',
              'channel_0', 'channel_1', 'channel_2', 'channel_3',
              'channel_4', 'channel_5', 'channel_6', 'channel_7',
              'tag']

tag_subscriber = PikaSubscriber('module1', 'brainsquared', host, 'tag')
tag_subscriber.connect()

eeg_subscriber = PikaSubscriber(device_name, device_id, host, 'eeg')
eeg_subscriber.connect()

f_out = open(fname, 'w')
writer = csv.DictWriter(f_out, fieldnames=fieldnames)
writer.writeheader()

tag = "baseline"


def consume_tag(connection,deliver,properties,msg_s):
    global tag
Пример #10
0
class FileWriterSubscriber(object):
  """
  Subscribes and writes data to a file
  """

  def __init__(self, device_name, device_id, rabbitmq_address, metric):
    self.subscriber = PikaSubscriber(device_name=device_name,
                                     device_id=device_id,
                                     rabbitmq_address=rabbitmq_address,
                                     metric_name=metric)
    self.metric = metric
    self.device_name = device_name
    self.device_id = device_id

    self.csv_writer = None
    self.file = None
    self.headers = None


  def get_headers(self):
    """
    Generate the CSV headers for that metric.
    :return: CSV headers
    """

    num_channels = get_num_channels(self.device_name,self.metric)
    headers = ['timestamp'] + ['channel_%s' % i for i in xrange(num_channels)]
    return headers


  def init_file(self):
    """
    Open file and write headers.
    :return:
    """
    if not os.path.exists("data"):
      os.mkdir("data")
    file_path = os.path.join("data", "%s_%s_%s.csv" % (self.device_id, self.device_name, self.metric))
    self.file = open(file_path, 'wb')
    self.csv_writer = csv.writer(self.file)
    self.csv_writer.writerow(self.headers)


  def start(self):
    """
    Consume and write data to file
    :return:
    """

    self.headers = self.get_headers()
    self.init_file()
    self.subscriber.connect()
    self.subscriber.consume_messages(self.write)


  def stop(self):
    """
    Unsubscribe and close file
    :return:
    """
    self.subscriber.disconnect()
    self.file.close_file()


  def write(self, ch, method, properties, body):
    buffer_content = json.loads(body)
    for record in buffer_content:
      self.csv_writer.writerow([record[column_name] for column_name in self.headers])