Ejemplo n.º 1
0
class SpacebrewClient(object):
    def __init__(self, name, server):
        # configure the spacebrew client
        self.brew = SpacebrewApp(name, server=server)
        self.osc_paths = [
            {'address': "/muse/eeg", 'arguments': 4},
            {'address': "/muse/eeg/quantization", 'arguments': 4},
            {'address': "/muse/eeg/dropped_samples", 'arguments': 1},
            {'address': "/muse/acc", 'arguments': 3},
            {'address': "/muse/acc/dropped_samples", 'arguments': 1},
            {'address': "/muse/batt", 'arguments': 4},
            {'address': "/muse/drlref", 'arguments': 2},
            {'address': "/muse/elements/low_freqs_absolute", 'arguments': 4},
            {'address': "/muse/elements/delta_absolute", 'arguments': 4},
            {'address': "/muse/elements/theta_absolute", 'arguments': 4},
            {'address': "/muse/elements/alpha_absolute", 'arguments': 4},
            {'address': "/muse/elements/beta_absolute", 'arguments': 4},
            {'address': "/muse/elements/gamma_absolute", 'arguments': 4},
            {'address': "/muse/elements/delta_relative", 'arguments': 4},
            {'address': "/muse/elements/theta_relative", 'arguments': 4},
            {'address': "/muse/elements/alpha_relative", 'arguments': 4},
            {'address': "/muse/elements/beta_relative", 'arguments': 4},
            {'address': "/muse/elements/gamma_relative", 'arguments': 4},
            {'address': "/muse/elements/delta_session_score", 'arguments': 4},
            {'address': "/muse/elements/theta_session_score", 'arguments': 4},
            {'address': "/muse/elements/alpha_session_score", 'arguments': 4},
            {'address': "/muse/elements/beta_session_score", 'arguments': 4},
            {'address': "/muse/elements/gamma_session_score", 'arguments': 4},
            {'address': "/muse/elements/touching_forehead", 'arguments': 1},
            {'address': "/muse/elements/horseshoe", 'arguments': 4},
            {'address': "/muse/elements/is_good", 'arguments': 4},
            {'address': "/muse/elements/blink", 'arguments': 1},
            {'address': "/muse/elements/jaw_clench", 'arguments': 1},
            {'address': "/muse/elements/experimental/concentration", 'arguments': 1},
            {'address': "/muse/elements/experimental/mellow", 'arguments': 1}
        ]

        for path in self.osc_paths:
            spacebrew_name = self.calculate_spacebrew_name(path['address'])
            self.brew.add_subscriber(spacebrew_name, "string")
            self.brew.subscribe(spacebrew_name, self.handle_value)

    def handle_value(self, value):
        print value
        # YOUR CODE HERE


    def start(self):
        self.brew.start()

    def calculate_spacebrew_name(self, osc_path):
        spacebrew_name = osc_path.split('/')[-1]
        return self.disambiguate_name_collisions(spacebrew_name, osc_path)


    def disambiguate_name_collisions(self, spacebrew_name, osc_path):
        if spacebrew_name == 'dropped_samples':
            return osc_path.split('/')[-2] + '_' + osc_path.split('/')[-1]
        else:
            return spacebrew_name
Ejemplo n.º 2
0
class SpacebrewClient(object):
    def __init__(self, name, server, paths):
        # configure the spacebrew client
        self.brew = SpacebrewApp(name, server=server)

        for spacebrew_name in paths:
            self.brew.add_subscriber(spacebrew_name, "string")
            self.brew.subscribe(spacebrew_name, self.handle_value)

        self.number_of_packets = 0
        self.start_time = time.time()

    def handle_value(self, value):
        self.number_of_packets += 1
        current_time = time.time()

        if (current_time - self.start_time) % 10 == 0:
            print "current time : %s" % current_time
            print "start time : %s" % self.start_time
            print "==> rate: %" % (self.number_of_packets /
                                   (current_time - self.start_time))

    def start(self):
        self.brew.start()
Ejemplo n.º 3
0
class CassandraSpacebrewClient(object):
    def __init__(self, name, server):

        start = time.time()

        # configure cassandra cluster
        self.cluster = Cluster()
        self.session = self.cluster.connect('cloudbrain')
        
        # configure the spacebrew client
        self.brew = SpacebrewApp(name, server=server)
        for path in CASSANDRA_METRICS:
            publisher_metric_name = calculate_spacebrew_name(path)
            for muse_port in MUSE_PORTS:

                # add subscriber
                subscriber_metric_name = '%s-muse-%s' % (publisher_metric_name, muse_port)
                self.brew.add_subscriber(subscriber_metric_name, "string")

                # handle value
                handle_value = self.handle_value_factory(publisher_metric_name, muse_port)
                self.brew.subscribe(subscriber_metric_name, handle_value)


        end = time.time()

        print 'configuration took %s s' % (end - start)

    def handle_value_factory(self, metric, muse_port):

        def handle_value(csv_string):

            values = csv_string.split(',')
            # For metric 'eeg', the two last values are "timestamp in s"
            # and "timestamp remainder in ms". Those values are not in the
            # cassandra schema so they are discarded.
            if metric == 'eeg':
                values = values[:-2]

            # numerical values
            num_arguments = len(values)
            numerical_columns = ''.join([", value_%s" % i for i in range(num_arguments)])

            # column values
            timestamp = int(time.time() * 1000)
            column_values = "'%s', '%s', %s" % (muse_port, timestamp, values[0])
            if len(values) > 1:
                for value in values[1:]:
                    column_values += ", %s" % value

            insert_template = "INSERT INTO %s (muse_id, timestamp%s) VALUES (%s);"
            insert_values = insert_template % (metric, numerical_columns, column_values)

            try:
                self.session.execute(insert_values)
            except:
                print "DEBUG: num_arguments: %s" %num_arguments
                print "DEBUG: values: %s" %values
                print "DEBUG: numerical_columns: %s" %numerical_columns
                print "DEBUG: insert_values: %s" %insert_values
        return handle_value

    def start(self):
        self.brew.start()
Ejemplo n.º 4
0
class SpacebrewClient(object):
    def __init__(self, name, server):
        # get app name and server from query string
        self.name = name
        server = server

        # configure the spacebrew client
        self.brew = SpacebrewApp(name, server=server)

        # cassandra
        self.muse_cassandra_repo = CassandraRepository(KEYSPACE,
                                                       MUSE_COLUMN_FAMILY)
        self.batches = {}
        self.osc_paths = [{
            'address': "/muse/eeg",
            'arguments': 4
        }, {
            'address': "/muse/eeg/quantization",
            'arguments': 4
        }, {
            'address': "/muse/eeg/dropped_samples",
            'arguments': 1
        }, {
            'address': "/muse/acc",
            'arguments': 3
        }, {
            'address': "/muse/acc/dropped_samples",
            'arguments': 1
        }, {
            'address': "/muse/batt",
            'arguments': 4
        }, {
            'address': "/muse/drlref",
            'arguments': 2
        }, {
            'address': "/muse/elements/low_freqs_absolute",
            'arguments': 4
        }, {
            'address': "/muse/elements/delta_absolute",
            'arguments': 4
        }, {
            'address': "/muse/elements/theta_absolute",
            'arguments': 4
        }, {
            'address': "/muse/elements/alpha_absolute",
            'arguments': 4
        }, {
            'address': "/muse/elements/beta_absolute",
            'arguments': 4
        }, {
            'address': "/muse/elements/gamma_absolute",
            'arguments': 4
        }, {
            'address': "/muse/elements/delta_relative",
            'arguments': 4
        }, {
            'address': "/muse/elements/theta_relative",
            'arguments': 4
        }, {
            'address': "/muse/elements/alpha_relative",
            'arguments': 4
        }, {
            'address': "/muse/elements/beta_relative",
            'arguments': 4
        }, {
            'address': "/muse/elements/gamma_relative",
            'arguments': 4
        }, {
            'address': "/muse/elements/delta_session_score",
            'arguments': 4
        }, {
            'address': "/muse/elements/theta_session_score",
            'arguments': 4
        }, {
            'address': "/muse/elements/alpha_session_score",
            'arguments': 4
        }, {
            'address': "/muse/elements/beta_session_score",
            'arguments': 4
        }, {
            'address': "/muse/elements/gamma_session_score",
            'arguments': 4
        }, {
            'address': "/muse/elements/touching_forehead",
            'arguments': 1
        }, {
            'address': "/muse/elements/horseshoe",
            'arguments': 4
        }, {
            'address': "/muse/elements/is_good",
            'arguments': 4
        }, {
            'address': "/muse/elements/blink",
            'arguments': 1
        }, {
            'address': "/muse/elements/jaw_clench",
            'arguments': 1
        },
                          {
                              'address':
                              "/muse/elements/experimental/concentration",
                              'arguments':
                              1
                          },
                          {
                              'address': "/muse/elements/experimental/mellow",
                              'arguments': 1
                          }]

        for path in self.osc_paths:
            spacebrew_name = path['address'].split('/')[-1]
            self.brew.add_subscriber(spacebrew_name, "string")
            self.brew.subscribe(spacebrew_name, self.handle_value)

    def handle_value(self, value):
        path = value[0]
        if path in self.paths:
            row_key, column = convert_muse_data_to_cassandra_column(
                path, value)

            if len(self.batches[path]) < BATCH_MAX_SIZE:
                self.batches[path][row_key] = column

                # time stats
                timestamp = row_key.split('_')[1]
                print "column added to batch for %s -- %s ms" % (path,
                                                                 timestamp)

            elif len(self.batches[path]) == BATCH_MAX_SIZE:
                self.muse_cassandra_repo.add_batch(self.batches[path])
                self.batches[path] = {}

                # time stats
                timestamp = row_key.split('_')[1]
                print "column batch stored in cassandra for %s -- %s ms" % (
                    path, timestamp)

    def start(self):
        self.brew.start()
Ejemplo n.º 5
0
class SpacebrewClient(object):
    def __init__(self, name, server):
        # get app name and server from query string
        self.name = name
        server = server

        # configure the spacebrew client
        self.brew = SpacebrewApp(name, server=server)

        # cassandra
        self.muse_cassandra_repo = CassandraRepository(KEYSPACE,
                                                       MUSE_COLUMN_FAMILY)
        self.batches = {}
        self.osc_paths = [{
            'address': "/muse/eeg",
            'arguments': 4
        }, {
            'address': "/muse/eeg/quantization",
            'arguments': 4
        }, {
            'address': "/muse/eeg/dropped_samples",
            'arguments': 1
        }, {
            'address': "/muse/acc",
            'arguments': 3
        }, {
            'address': "/muse/acc/dropped_samples",
            'arguments': 1
        }, {
            'address': "/muse/batt",
            'arguments': 4
        }, {
            'address': "/muse/drlref",
            'arguments': 2
        }, {
            'address': "/muse/elements/low_freqs_absolute",
            'arguments': 4
        }, {
            'address': "/muse/elements/delta_absolute",
            'arguments': 4
        }, {
            'address': "/muse/elements/theta_absolute",
            'arguments': 4
        }, {
            'address': "/muse/elements/alpha_absolute",
            'arguments': 4
        }, {
            'address': "/muse/elements/beta_absolute",
            'arguments': 4
        }, {
            'address': "/muse/elements/gamma_absolute",
            'arguments': 4
        }, {
            'address': "/muse/elements/delta_relative",
            'arguments': 4
        }, {
            'address': "/muse/elements/theta_relative",
            'arguments': 4
        }, {
            'address': "/muse/elements/alpha_relative",
            'arguments': 4
        }, {
            'address': "/muse/elements/beta_relative",
            'arguments': 4
        }, {
            'address': "/muse/elements/gamma_relative",
            'arguments': 4
        }, {
            'address': "/muse/elements/delta_session_score",
            'arguments': 4
        }, {
            'address': "/muse/elements/theta_session_score",
            'arguments': 4
        }, {
            'address': "/muse/elements/alpha_session_score",
            'arguments': 4
        }, {
            'address': "/muse/elements/beta_session_score",
            'arguments': 4
        }, {
            'address': "/muse/elements/gamma_session_score",
            'arguments': 4
        }, {
            'address': "/muse/elements/touching_forehead",
            'arguments': 1
        }, {
            'address': "/muse/elements/horseshoe",
            'arguments': 4
        }, {
            'address': "/muse/elements/is_good",
            'arguments': 4
        }, {
            'address': "/muse/elements/blink",
            'arguments': 1
        }, {
            'address': "/muse/elements/jaw_clench",
            'arguments': 1
        }, {
            'address': "/muse/elements/experimental/concentration",
            'arguments': 1
        }, {
            'address': "/muse/elements/experimental/mellow",
            'arguments': 1
        }]

        for path in self.osc_paths:
            spacebrew_name = path['address'].split('/')[-1]
            self.brew.add_subscriber(spacebrew_name, "string")
            self.brew.subscribe(spacebrew_name, self.handle_value)

    def handle_value(self, value):
        path = value[0]
        if path in self.paths:
            row_key, column = convert_muse_data_to_cassandra_column(
                path, value)

            if len(self.batches[path]) < BATCH_MAX_SIZE:
                self.batches[path][row_key] = column

                # time stats
                timestamp = row_key.split('_')[1]
                print "column added to batch for %s -- %s ms" % (path,
                                                                 timestamp)

            elif len(self.batches[path]) == BATCH_MAX_SIZE:
                self.muse_cassandra_repo.add_batch(self.batches[path])
                self.batches[path] = {}

                # time stats
                timestamp = row_key.split('_')[1]
                print "column batch stored in cassandra for %s -- %s ms" % (
                    path, timestamp)

    def start(self):
        self.brew.start()
Ejemplo n.º 6
0
class SpacebrewClient(object):
    def __init__(self, name, server):
        # configure the spacebrew client
        self.brew = SpacebrewApp(name, server=server)
        self.osc_paths = [{
            'address': "/muse/eeg",
            'arguments': 4
        }, {
            'address': "/muse/eeg/quantization",
            'arguments': 4
        }, {
            'address': "/muse/eeg/dropped_samples",
            'arguments': 1
        }, {
            'address': "/muse/acc",
            'arguments': 3
        }, {
            'address': "/muse/acc/dropped_samples",
            'arguments': 1
        }, {
            'address': "/muse/batt",
            'arguments': 4
        }, {
            'address': "/muse/drlref",
            'arguments': 2
        }, {
            'address': "/muse/elements/low_freqs_absolute",
            'arguments': 4
        }, {
            'address': "/muse/elements/delta_absolute",
            'arguments': 4
        }, {
            'address': "/muse/elements/theta_absolute",
            'arguments': 4
        }, {
            'address': "/muse/elements/alpha_absolute",
            'arguments': 4
        }, {
            'address': "/muse/elements/beta_absolute",
            'arguments': 4
        }, {
            'address': "/muse/elements/gamma_absolute",
            'arguments': 4
        }, {
            'address': "/muse/elements/delta_relative",
            'arguments': 4
        }, {
            'address': "/muse/elements/theta_relative",
            'arguments': 4
        }, {
            'address': "/muse/elements/alpha_relative",
            'arguments': 4
        }, {
            'address': "/muse/elements/beta_relative",
            'arguments': 4
        }, {
            'address': "/muse/elements/gamma_relative",
            'arguments': 4
        }, {
            'address': "/muse/elements/delta_session_score",
            'arguments': 4
        }, {
            'address': "/muse/elements/theta_session_score",
            'arguments': 4
        }, {
            'address': "/muse/elements/alpha_session_score",
            'arguments': 4
        }, {
            'address': "/muse/elements/beta_session_score",
            'arguments': 4
        }, {
            'address': "/muse/elements/gamma_session_score",
            'arguments': 4
        }, {
            'address': "/muse/elements/touching_forehead",
            'arguments': 1
        }, {
            'address': "/muse/elements/horseshoe",
            'arguments': 4
        }, {
            'address': "/muse/elements/is_good",
            'arguments': 4
        }, {
            'address': "/muse/elements/blink",
            'arguments': 1
        }, {
            'address': "/muse/elements/jaw_clench",
            'arguments': 1
        }, {
            'address': "/muse/elements/experimental/concentration",
            'arguments': 1
        }, {
            'address': "/muse/elements/experimental/mellow",
            'arguments': 1
        }]

        for path in self.osc_paths:
            spacebrew_name = self.calculate_spacebrew_name(path['address'])
            self.brew.add_subscriber(spacebrew_name, "string")
            self.brew.subscribe(spacebrew_name, self.handle_value)

    def handle_value(self, value):
        print value
        # YOUR CODE HERE

    def start(self):
        self.brew.start()

    def calculate_spacebrew_name(self, osc_path):
        spacebrew_name = osc_path.split('/')[-1]
        return self.disambiguate_name_collisions(spacebrew_name, osc_path)

    def disambiguate_name_collisions(self, spacebrew_name, osc_path):
        if spacebrew_name == 'dropped_samples':
            return osc_path.split('/')[-2] + '_' + osc_path.split('/')[-1]
        else:
            return spacebrew_name
class CassandraSpacebrewClient(object):
    def __init__(self, name, server):

        start = time.time()

        # configure cassandra cluster
        self.cluster = Cluster()
        self.session = self.cluster.connect('cloudbrain')

        # configure the spacebrew client
        self.brew = SpacebrewApp(name, server=server)
        for path in CASSANDRA_METRICS:
            publisher_metric_name = calculate_spacebrew_name(path)
            for muse_port in MUSE_PORTS:

                # add subscriber
                subscriber_metric_name = '%s-muse-%s' % (publisher_metric_name,
                                                         muse_port)
                self.brew.add_subscriber(subscriber_metric_name, "string")

                # handle value
                handle_value = self.handle_value_factory(
                    publisher_metric_name, muse_port)
                self.brew.subscribe(subscriber_metric_name, handle_value)

        end = time.time()

        print 'configuration took %s s' % (end - start)

    def handle_value_factory(self, metric, muse_port):
        def handle_value(csv_string):

            values = csv_string.split(',')
            # For metric 'eeg', the two last values are "timestamp in s"
            # and "timestamp remainder in ms". Those values are not in the
            # cassandra schema so they are discarded.
            if metric == 'eeg':
                values = values[:-2]

            # numerical values
            num_arguments = len(values)
            numerical_columns = ''.join(
                [", value_%s" % i for i in range(num_arguments)])

            # column values
            timestamp = int(time.time() * 1000)
            column_values = "'%s', '%s', %s" % (muse_port, timestamp,
                                                values[0])
            if len(values) > 1:
                for value in values[1:]:
                    column_values += ", %s" % value

            insert_template = "INSERT INTO %s (muse_id, timestamp%s) VALUES (%s);"
            insert_values = insert_template % (metric, numerical_columns,
                                               column_values)

            try:
                self.session.execute(insert_values)
            except:
                print "DEBUG: num_arguments: %s" % num_arguments
                print "DEBUG: values: %s" % values
                print "DEBUG: numerical_columns: %s" % numerical_columns
                print "DEBUG: insert_values: %s" % insert_values

        return handle_value

    def start(self):
        self.brew.start()