def __init__(self): config = read_config() self._path = os.path.abspath(config.get('directories', 'sessions')) self._recorder = None self._display_index = 0 # Text to show in root menu self._fan = Fan() self.create_menu()
def plot_all(session_dir, image_dir, timestamp): print "Plotting timestamp", timestamp if os.path.isdir(os.path.join(image_dir, timestamp)) == False: os.makedirs(os.path.join(image_dir, timestamp)) datafilename = os.path.join(session_dir, '{0}.data'.format(timestamp)) q = Queue() workers = [] for i in range(8): w = QueueWorker(process_timestamp, queue = q) workers.append(w) w.start() conf = read_config() power_min = conf.getfloat('recorder', 'power_min') power_max = conf.getfloat('recorder', 'power_max') with open(datafilename, "r") as f: for line in f: values = line.split(";") power = float(values[1]) level = float(values[2]) if level > 0 or power < power_min or power > power_max: print "Ignoring ", values[0], "Power:", power continue outputfilename = os.path.join(image_dir, '{0}.png'.format(values[0])) if os.path.isfile(outputfilename): print "Ignoring ", values[0] else: logger.info("Plotting timestamp %s", values[0]) q.put((session_dir, image_dir, timestamp, values[0])) print "Finished plotting timestamp", timestamp for i in range(8): q.put(None) while not q.empty(): sleep(0.01)
def main(): config = helper.read_config('.config.yml') s3_client = boto3.resource(service_name='s3', aws_access_key_id=config['AWS_ACCESS'], aws_secret_access_key=config['AWS_SECRET']) try: # Connect to bucket # http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Bucket.objects bucket = s3_client.Bucket(config['S3_SOURCE_BUCKET']) # Access bucket and delete contents bucket.objects.all().delete() # Ensure that the objects have been deleted assert len(list(bucket.objects.all())) == 0 # Delete the bucket bucket.delete() except ClientError as e: # Don't throw error if the bucke is already deleted if e.response['Error']['Code'] != 'NoSuchBucket': print("Unexpected error: %s" % e) finally: # Ensure that the bucket isn't there in either case # http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.list_buckets for current_bucket in s3_client.buckets.all(): assert current_bucket.name != config['S3_SOURCE_BUCKET']
def dream_summary(timestamp): conf = read_config() session_dir = conf.get('directories', 'sessions') filename = os.path.join(session_dir, timestamp + '.data') NOT_IN_BED = 0 AWAKE = 1 LIGHT_SLEEP = 2 DEEP_SLEEP = 3 result = [{'Name': 'Not in bed', 'Total':0, 'Percent': 0.0, 'Transitions': 0}, {'Name': 'Awake', 'Total':0, 'Percent': 0.0, 'Transitions': 0}, {'Name': 'Light sleep', 'Total':0, 'Percent': 0.0, 'Transitions': 0}, {'Name': 'Deep sleep', 'Total':0, 'Percent': 0.0, 'Transitions': 0}] totaltime = 0 previous_time = long(timestamp) previous_state = 0 with open(filename, 'r') as f: for line in f: fields = line.split(';') timestamp = long(fields[0]) state = int(fields[6]) diff = timestamp - previous_time current_state = result[state] current_state['Total']+=diff if state <> previous_state: current_state['Transitions']+=1 totaltime += diff previous_time = timestamp previous_state = state for state in result: state['Percent'] = float(state['Total']) / float(totaltime) * 100.0 return result
def main(argv): def help(): print "Usage: plotter -t <timestamp>" timestamp = '' try: opts, args = getopt.getopt(argv, "ht:", ["timestamp="]) except getopt.GetoptError: help() sys.exit(2) if len(opts)==0: help() else: for opt, arg in opts: if opt == '-h': help() sys.exit() elif opt in ("-t", "--timestamp"): timestamp = arg else: help() sys.exit() conf = read_config() logger.info("Plotting timestamp {0}".format(timestamp)) plot_all( conf.get('directories', 'sessions'), conf.get('directories', 'images'), timestamp) logger.info("Finished plotting.")
def main(argv): def help(): print "Usage: plotter -t <timestamp>" timestamp = '' try: opts, args = getopt.getopt(argv, "ht:", ["timestamp="]) except getopt.GetoptError: help() sys.exit(2) if len(opts) == 0: help() else: for opt, arg in opts: if opt == '-h': help() sys.exit() elif opt in ("-t", "--timestamp"): timestamp = arg else: help() sys.exit() conf = read_config() logger.info("Plotting timestamp {0}".format(timestamp)) plot_all(conf.get('directories', 'sessions'), conf.get('directories', 'images'), timestamp) logger.info("Finished plotting.")
def _run(self): logger.info("Importing numpy...") global np import numpy as np logger.info("Recording to %s", self.data_filename) self._config = read_config() self._config.set('recorder', 'is_recording', str(True)) self._config.set('recorder', 'current_session', str(self._timestamp)) save_config(self._config) try: self._worker.start() with open(self.marker_filename, "w") as f: pass with open(self.motion_filename, "w") as f: pass self.record() except KeyboardInterrupt: logger.info("Keyboard interrupt") except: logger.error("Unhandled exception: %s", sys.exc_info()[1]) finally: self._worker.stop() self._config.set('recorder', 'current_session',str(0)) self._config.set('recorder', 'is_recording', str(False)) save_config(self._config) os.remove(self.status_filename) logger.info("Finished recording")
def prepare_plot_for_fft(session_dir, image_dir, timestamp): conf = read_config() datafilename = os.path.join(session_dir, '{0}.data'.format(timestamp)) t, power, level = read_input_file(datafilename) dates = matplotlib.dates.date2num(t) logging.info("Plotting...") fig, (ax1, ax2) = plt.subplots(2, sharex=False) ax1.set_ylim([5, 7]) ax1.axhline(y=conf.getfloat('recorder', 'power_min'), color='b') ax1.axhline(y=conf.getfloat('recorder', 'power_max'), color='r') ax1.plot_date(dates, np.array(power), 'k.') ax1.set_title('Signal power') logger.info("Drawing markers...") markerfilename = os.path.join(session_dir, '{0}.markers'.format(timestamp)) markers = read_marker_file(markerfilename) for timestamp, color, comment in markers: t = datetime.fromtimestamp(long(timestamp)) logger.info("Drawing marker at %s", timestamp) ax1.axvline(x=t, color=color) return fig, (ax1, ax2)
def __init__(self): config = read_config() self._path = os.path.abspath( config.get('directories', 'sessions')) self._recorder = None self._fan = Fan() self.create_menu()
def recorder(): conf = read_config() if request.method == 'PUT': conf.set('recorder', 'is_recording', str(request.json['is_recording'])) save_config(conf) return jsonify( {'is_recording': conf.getboolean('recorder', 'is_recording')})
def plot(): logger.info("Plotting %s", timestamp) config = read_config() self.menu.message = "Plotting..." plotter.plot(config.get('directories', 'sessions'), config.get('directories', 'images'), timestamp) self.menu.current_item = self._root_item
def __init__(self): config = read_config() self._path = os.path.abspath( config.get('directories', 'sessions')) self._recorder = None self._display_index = 0 # Text to show in root menu self._fan = Fan() self.create_menu()
def recorder(): conf = read_config() if request.method == 'PUT': conf.set('recorder', 'is_recording', str(request.json['is_recording'])) save_config(conf) return jsonify({'is_recording': conf.getboolean('recorder', 'is_recording')})
def plot(): logger.info("Plotting %s", timestamp) config = read_config() self.menu.message = "Plotting..." plotter.plot( config.get('directories', 'sessions'), config.get('directories', 'images'), timestamp) self.menu.current_item = self._root_item
def start_recording(): try: config = read_config() r = Recorder(config.get('directories', 'sessions')) r._run() except KeyboardInterrupt: logger.info("KeyboardInterrupt") except: logger.error(sys.exc_info()[1]) logger.info("Finished recording.")
def __init__(self): app_name = os.path.basename(os.path.dirname(os.getcwd())) app_config = shared.read_config()[app_name] self._name = app_name self._ports = app_config['ports'] self._remote_user = app_config['remote_user'] # Absolute path to the home directory of the remote user account being # used to deploy the app. self._remote_home = app_config['remote_home'] self._build_repo = shared.BuildRepo(app_name, app_config['build_repo'])
def dream_summary(timestamp): conf = read_config() session_dir = conf.get('directories', 'sessions') filename = os.path.join(session_dir, timestamp + '.data') NOT_IN_BED = 0 AWAKE = 1 LIGHT_SLEEP = 2 DEEP_SLEEP = 3 result = [{ 'Name': 'Not in bed', 'Total': 0, 'Percent': 0.0, 'Transitions': 0 }, { 'Name': 'Awake', 'Total': 0, 'Percent': 0.0, 'Transitions': 0 }, { 'Name': 'Light sleep', 'Total': 0, 'Percent': 0.0, 'Transitions': 0 }, { 'Name': 'Deep sleep', 'Total': 0, 'Percent': 0.0, 'Transitions': 0 }] totaltime = 0 previous_time = long(timestamp) previous_state = 0 with open(filename, 'r') as f: for line in f: fields = line.split(';') timestamp = long(fields[0]) state = int(fields[6]) diff = timestamp - previous_time current_state = result[state] current_state['Total'] += diff if state <> previous_state: current_state['Transitions'] += 1 totaltime += diff previous_time = timestamp previous_state = state for state in result: state['Percent'] = float(state['Total']) / float(totaltime) * 100.0 return result
def state(self): config = read_config() min = config.getfloat('recorder', 'power_min') pow = self.signal_power if pow < min: return Recorder.STATE_NOT_IN_BED else: level = self.sleep_level if level > 0: return Recorder.STATE_AWAKE elif level > -0.5: return Recorder.STATE_LIGHT_SLEEP else: return Recorder.STATE_DEEP_SLEEP
def be_clever(): config = read_config() min = config.getfloat('recorder', 'power_min') pow = self._recorder.signal_power if pow < min: return "Thinking:\nNot in bed." else: level = self._recorder.sleep_level if level > 0: return "Thinking:\nAwake." elif level > -0.5: return "Thinking:\nLight sleep." else: return "Thinking:\nSleeping."
def plot(session_dir, image_dir, timestamp): conf = read_config() datafilename = os.path.join(session_dir, '{0}.data'.format(timestamp)) t, power, level, breath, hb = read_input_file(datafilename) dates = matplotlib.dates.date2num(t) logging.info("Plotting...") fig, (ax1, ax2, ax3) = plt.subplots(3, sharex=True) header = "Session recorded {0} {1}-{2}".format( t[0].strftime('%a %d.%m.%Y'), t[0].strftime('%H:%M:%S'), t[-1].strftime('%H:%M:%S')) fig.suptitle(header) fig.autofmt_xdate() ax1.set_title('Signal power') ax1.set_ylim([5, 7]) ax1.axhline(y=conf.getfloat('recorder', 'power_min'), color='b') ax1.axhline(y=conf.getfloat('recorder', 'power_max'), color='r') ax2.set_title('Estimated sleep level') ax2.axhline(y=0, color='k') ax1.plot_date(dates, np.array(power), 'k.') ax2.plot_date(dates, np.array(level) , 'r.') ax3.set_title('Breath & HB') ax3.plot_date(dates, np.array(breath) , 'b.') ax3.set_ylim([0, 20]) for tl in ax3.get_yticklabels(): tl.set_color('b') ax4 = ax3.twinx() ax4.plot_date(dates, np.array(hb) , 'r.') ax4.set_ylim([50, 120]) for tl in ax4.get_yticklabels(): tl.set_color('r') logger.info("Drawing markers...") markerfilename = os.path.join(session_dir, '{0}.markers'.format(timestamp)) markers = read_marker_file(markerfilename) for timestamp, color, comment in markers: t = datetime.fromtimestamp(long(timestamp)) logger.info("Drawing marker at %s", timestamp) ax1.axvline(x=t, color=color) ax2.axvline(x=t, color=color) ax3.axvline(x=t, color=color) outputfilename = os.path.join(image_dir, '{0}.png'.format(timestamp)) logging.info("Saving output file %s", outputfilename) plt.savefig(outputfilename) logging.info("Finished plotting")
def plot(session_dir, image_dir, timestamp): conf = read_config() datafilename = os.path.join(session_dir, '{0}.data'.format(timestamp)) t, power, level, breath, hb = read_input_file(datafilename) dates = matplotlib.dates.date2num(t) logging.info("Plotting...") fig, (ax1, ax2, ax3) = plt.subplots(3, sharex=True) header = "Session recorded {0} {1}-{2}".format( t[0].strftime('%a %d.%m.%Y'), t[0].strftime('%H:%M:%S'), t[-1].strftime('%H:%M:%S')) fig.suptitle(header) fig.autofmt_xdate() ax1.set_title('Signal power') ax1.set_ylim([5, 7]) ax1.axhline(y=conf.getfloat('recorder', 'power_min'), color='b') ax1.axhline(y=conf.getfloat('recorder', 'power_max'), color='r') ax2.set_title('Estimated sleep level') ax2.axhline(y=0, color='k') ax1.plot_date(dates, np.array(power), 'k.') ax2.plot_date(dates, np.array(level), 'r.') ax3.set_title('Breath & HB') ax3.plot_date(dates, np.array(breath), 'b.') ax3.set_ylim([0, 20]) for tl in ax3.get_yticklabels(): tl.set_color('b') ax4 = ax3.twinx() ax4.plot_date(dates, np.array(hb), 'r.') ax4.set_ylim([50, 120]) for tl in ax4.get_yticklabels(): tl.set_color('r') logger.info("Drawing markers...") markerfilename = os.path.join(session_dir, '{0}.markers'.format(timestamp)) markers = read_marker_file(markerfilename) for timestamp, color, comment in markers: t = datetime.fromtimestamp(long(timestamp)) logger.info("Drawing marker at %s", timestamp) ax1.axvline(x=t, color=color) ax2.axvline(x=t, color=color) ax3.axvline(x=t, color=color) outputfilename = os.path.join(image_dir, '{0}.png'.format(timestamp)) logging.info("Saving output file %s", outputfilename) plt.savefig(outputfilename) logging.info("Finished plotting")
def main(): database_name = "default" table_name = "test_csv_table" config = helper.read_config('.config.yml') bucket_name = config['S3_SOURCE_BUCKET'] s3_input = f's3://{bucket_name}/data/' s3_output = f's3://{bucket_name}/results/' # Setup database and tables create_database(database_name=database_name, s3_output=s3_output) create_table(database_name=database_name, table_name=table_name, s3_input=s3_input, s3_output=s3_output) time.sleep(1) # Execute example query query = "SELECT gender, COUNT(1) FROM %s.%s GROUP BY gender;" % (database_name, table_name) execute_query(query=query, database=database_name, s3_output=s3_output)
def dream_info(timestamp): conf = read_config() session_dir = conf.get('directories', 'sessions') filename = os.path.join(session_dir, timestamp + '.data') firstline = os.popen("head -1 %s" % filename).read() if firstline: start = long(firstline.split(';')[0]) else: start = 0 lastline = os.popen("tail -n 1 %s" % filename).read() if lastline: end = long(lastline.split(';')[0]) else: end = 0 return {'id': long(timestamp), 'start': start, 'end': end}
def dream_data(timestamp): conf = read_config() session_dir = conf.get('directories', 'sessions') filename = os.path.join(session_dir, timestamp + '.data') result = [] with open(filename, 'r') as f: for line in f: fields = line.split(';') values = {'timestamp': long(fields[0]), 'signal_power': float(fields[1]), 'sleep_level': float(fields[2]), 'breath': float(fields[4]), 'hb': float(fields[5]), 'state': int(fields[6])} result.append(values) return result
def verify_recorder(self): """ Verify worker is running """ conf = read_config() should_run = conf.getboolean('recorder', 'is_recording') if should_run: if self._recorder == None: self.start_recording() else: if self._recorder.is_running == False: self._recorder.start() self._restarts += 1 self._menu.message("Restarted\n{0} restarts".format( self._restarts)) else: if self._recorder != None: self.stop_recording()
def reanalyze(session_dir, timestamp): datafilename = os.path.join(session_dir, '{0}.data'.format(timestamp)) outputfilename = os.path.join(session_dir, '{0}.fixed.data'.format(timestamp)) backupfilename = os.path.join(session_dir, '{0}.old.data'.format(timestamp)) conf = read_config() rb = RingBuffer(25) with open(datafilename, "r") as f: with open(outputfilename, 'w') as f2: for line in f: values = line.split(";") print "Reanalyzing timestamp", values[0] inputfilename = os.path.join(session_dir, timestamp, '{0}.npz'.format(values[0])) npz = np.load(inputfilename) x = npz['x'] y = npz['y'] dt = npz['dt'] (freqs, ps) = fft(x, dt) px = np.sum(ps) (freqs, ps) = fft(y, dt) py = np.sum(ps) p = np.log10(np.add(px, py) / 2) if p > conf.getfloat('recorder', 'power_max'): value = np.ones(1) elif p < conf.getfloat('recorder', 'power_min'): value = np.ones(1) else: value = np.ones(1) * -1 rb.extend(value) (freqs, psx) = fft(npz['wx'], dt) (freqs, psy) = fft(npz['wy'], dt) ps = (psx + psy) / 2 (breath, hb) = analyze_breath_and_hb(freqs, ps) power = np.average(rb.get()) f2.write(';'.join( (str(x) for x in [values[0], p, power, breath, hb])) + '\n') if os.path.isfile(backupfilename): os.remove(backupfilename) os.rename(datafilename, backupfilename) os.rename(outputfilename, datafilename)
def dreams(): conf = read_config() session_dir = conf.get('directories', 'sessions') datafiles = sorted(glob(session_dir + '/*.data'), key = os.path.getctime, reverse = True) timestamps = (os.path.splitext(os.path.split(fn)[1])[0] for fn in datafiles) take = None if request.args.has_key('take'): take = int(request.args.get('take')) skip = None if request.args.has_key('skip'): skip = int(request.args.get('skip')) print "skip: ", take else: print "No skip" dreams = [{'id': ts} for ts in take_from(timestamps, take, skip)] return Response(json.dumps(dreams), mimetype='application/json')
def status(): conf = read_config() dir = conf.get('directories', 'sessions') filename = os.path.join(dir, 'current_status.data') if os.path.isfile(filename): with open(filename, 'r') as f: data = f.readline().split(';') return jsonify({'signal_power': float(data[1]), 'sleep_level': float(data[2]), 'breath': float(data[4]), 'hb': float(data[5]), 'state': int(data[6])}) else: return jsonify({'signal_power': 0.0, 'sleep_level': 0.0, 'breath': 0.0, 'hb': 0.0, 'state': 0})
def verify_recorder(self): """ Verify worker is running """ conf = read_config() should_run = conf.getboolean('recorder', 'is_recording') if should_run: if self._recorder == None: self.start_recording() else: if self._recorder.is_running == False: self._recorder.start() self._restarts += 1 self._menu.message( "Restarted\n{0} restarts".format( self._restarts)) else: if self._recorder != None: self.stop_recording()
def dream_data(timestamp): conf = read_config() session_dir = conf.get('directories', 'sessions') filename = os.path.join(session_dir, timestamp + '.data') result = [] with open(filename, 'r') as f: for line in f: fields = line.split(';') values = { 'timestamp': long(fields[0]), 'signal_power': float(fields[1]), 'sleep_level': float(fields[2]), 'breath': float(fields[4]), 'hb': float(fields[5]), 'state': int(fields[6]) } result.append(values) return result
def dreams(): conf = read_config() session_dir = conf.get('directories', 'sessions') datafiles = sorted(glob(session_dir + '/*.data'), key=os.path.getctime, reverse=True) timestamps = (os.path.splitext(os.path.split(fn)[1])[0] for fn in datafiles) take = None if request.args.has_key('take'): take = int(request.args.get('take')) skip = None if request.args.has_key('skip'): skip = int(request.args.get('skip')) print "skip: ", take else: print "No skip" dreams = [{'id': ts} for ts in take_from(timestamps, take, skip)] return Response(json.dumps(dreams), mimetype='application/json')
def main(): # Get configuration from yaml file. config = helper.read_config('.config.yml') target_bucket = config['S3_SOURCE_BUCKET'] # Connect to s3 resource client # http://boto3.readthedocs.io/en/latest/reference/core/session.html#boto3.session.Session.client s3_client = boto3.client(service_name='s3', aws_access_key_id=config['AWS_ACCESS'], aws_secret_access_key=config['AWS_SECRET']) # Create s3 bucket # https://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.create_bucket s3_client.create_bucket(Bucket=target_bucket) files = ['data/MOCK_DATA.csv'] # Upload data files to s3 # http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.upload_file for filename in files: s3_client.upload_file(filename, target_bucket, filename)
def reanalyze(session_dir, timestamp): datafilename = os.path.join(session_dir, '{0}.data'.format(timestamp)) outputfilename = os.path.join(session_dir, '{0}.fixed.data'.format(timestamp)) backupfilename = os.path.join(session_dir, '{0}.old.data'.format(timestamp)) conf = read_config() rb = RingBuffer(25) with open(datafilename, "r") as f: with open(outputfilename, 'w') as f2: for line in f: values = line.split(";") print "Reanalyzing timestamp", values[0] inputfilename = os.path.join(session_dir, timestamp, '{0}.npz'.format(values[0])) npz = np.load(inputfilename) x = npz['x'] y = npz['y'] dt = npz['dt'] (freqs, ps) = fft(x, dt) px = np.sum(ps) (freqs, ps) = fft(y, dt) py = np.sum(ps) p =np.log10(np.add(px, py) / 2) if p > conf.getfloat('recorder', 'power_max'): value = np.ones(1) elif p < conf.getfloat('recorder', 'power_min'): value = np.ones(1) else: value = np.ones(1) * -1 rb.extend(value) (freqs, psx) = fft(npz['wx'], dt) (freqs, psy) = fft(npz['wy'], dt) ps = (psx+psy)/2 (breath, hb) = analyze_breath_and_hb(freqs, ps) power = np.average(rb.get()) f2.write(';'.join((str(x) for x in [values[0], p, power, breath, hb])) + '\n') if os.path.isfile(backupfilename): os.remove(backupfilename) os.rename(datafilename, backupfilename) os.rename(outputfilename, datafilename)
def status(): conf = read_config() dir = conf.get('directories', 'sessions') filename = os.path.join(dir, 'current_status.data') if os.path.isfile(filename): with open(filename, 'r') as f: data = f.readline().split(';') return jsonify({ 'signal_power': float(data[1]), 'sleep_level': float(data[2]), 'breath': float(data[4]), 'hb': float(data[5]), 'state': int(data[6]) }) else: return jsonify({ 'signal_power': 0.0, 'sleep_level': 0.0, 'breath': 0.0, 'hb': 0.0, 'state': 0 })
def plot_all(session_dir, image_dir, timestamp): print "Plotting timestamp", timestamp if os.path.isdir(os.path.join(image_dir, timestamp)) == False: os.makedirs(os.path.join(image_dir, timestamp)) datafilename = os.path.join(session_dir, '{0}.data'.format(timestamp)) q = Queue() workers = [] for i in range(8): w = QueueWorker(process_timestamp, queue=q) workers.append(w) w.start() conf = read_config() power_min = conf.getfloat('recorder', 'power_min') power_max = conf.getfloat('recorder', 'power_max') with open(datafilename, "r") as f: for line in f: values = line.split(";") power = float(values[1]) level = float(values[2]) if level > 0 or power < power_min or power > power_max: print "Ignoring ", values[0], "Power:", power continue outputfilename = os.path.join(image_dir, '{0}.png'.format(values[0])) if os.path.isfile(outputfilename): print "Ignoring ", values[0] else: logger.info("Plotting timestamp %s", values[0]) q.put((session_dir, image_dir, timestamp, values[0])) print "Finished plotting timestamp", timestamp for i in range(8): q.put(None) while not q.empty(): sleep(0.01)
def record_motion(motion_data): config = read_config() r = Recorder(config.get('directories', 'sessions')) r.record_motion(motion_data)
from shared import read_config, dev_mode conf = read_config() def render_deploy_path_into_html(conf): deploy_path = conf["dev-path"] if dev_mode() else conf["prod-path"] with open(conf["html-file"], "r") as file: contents = file.read() rendered = contents.replace(conf["path-placeholder"], deploy_path) with open(conf["html-file"], "w") as file: file.write(rendered) print("Rendered HTML to deploy path:", deploy_path)