class Monitor(Thread): def __init__(self, refresh_period=None): if refresh_period is None: self.refresh_period = datetime.timedelta(minutes=15) super(Monitor, self).__init__(name="Monitor") # create project list self.project_list = ProjectStore( ) # ProjectStore(pg_connection_string=config["pg_connection_string"]) self.project_list.load_from_db() self.running = True # command listener self.server = CommandServer(self, config) self.server.start() def run(self): while self.running: start_time = datetime.datetime.now() # compute desired hashtags print "Computing hashtags ..." desired_hashtags = list( set([ el for item in map( lambda p: p.filter_hashtags(percentage_or_greater(0.01) ), # five_or_greater, self.project_list.active_projects.values()) for el in item ])) for project in self.project_list.active_projects.values(): project.reset() calculation_time = datetime.datetime.now() - start_time # start reader object(s) self.readers = [ TweetListener(self.project_list, config), ] if desired_hashtags != []: if len(desired_hashtags) > 400: desired_hashtags = desired_hashtags[0:400] for reader in self.readers: reader.start(desired_hashtags) else: print "No hashtags found; sleeping ..." # sleep for interval minus last calculation time time.sleep((self.refresh_period - calculation_time).seconds) for reader in self.readers: reader.stop() self.server.stop() print "Shutting down monitor thread: falling off end of run() ..." def stop(self): self.running = False
class Monitor(Thread): def __init__(self, refresh_period=None): if refresh_period is None: self.refresh_period = datetime.timedelta(minutes=15) super(Monitor, self).__init__(name="Monitor") # create project list self.project_list = ProjectStore() # ProjectStore(pg_connection_string=config["pg_connection_string"]) self.project_list.load_from_db() self.running = True # command listener self.server = CommandServer(self, config) self.server.start() def run(self): while self.running: start_time = datetime.datetime.now() # compute desired hashtags print "Computing hashtags ..." desired_hashtags = list(set([el for item in map( lambda p: p.filter_hashtags(percentage_or_greater(0.01)), # five_or_greater, self.project_list.active_projects.values()) for el in item ]) ) for project in self.project_list.active_projects.values(): project.reset() calculation_time = datetime.datetime.now() - start_time # start reader object(s) self.readers = [TweetListener(self.project_list, config),] if desired_hashtags != []: if len(desired_hashtags) > 400: desired_hashtags = desired_hashtags[0:400] for reader in self.readers: reader.start(desired_hashtags) else: print "No hashtags found; sleeping ..." # sleep for interval minus last calculation time time.sleep((self.refresh_period - calculation_time).seconds) for reader in self.readers: reader.stop() self.server.stop() print "Shutting down monitor thread: falling off end of run() ..." def stop(self): self.running = False
class AppMain: def __init__(self): HOST = "0.0.0.0" UPLOAD_SERVER_PORT = 5014 COMMAND_SERVER_PORT = 5013 self.command_server = CommandServer((HOST, COMMAND_SERVER_PORT)) self.upload_server = UploadServer( (HOST, UPLOAD_SERVER_PORT), lambda meta_data, file_name: self.on_file_uploaded( meta_data, file_name)) self.web_service = WebService.WebService(self.device_command_handler) self.running = True def start(self): self.command_server.start() self.upload_server.start() self.web_service.start() def stop(self): self.running = False self.command_server.stop() self.upload_server.stop() def wait(self): while self.running: self.command_server.join(1000) self.upload_server.join(1000) def device_command_handler(self, device, command): if command['action'] == 'config_change': if 'system_enabled' in command: alarm_threshold = 0 if command['system_enabled'] else 1 DBUtil.set_alarm_threshold(device, alarm_threshold) self.command_server.send_command( device, json.dumps({ "action": "config_change", "alarm_threshold": alarm_threshold })) else: self.command_server.send_command(device, json.dumps(command)) def on_file_uploaded(self, meta_data, file_name): with closing(ServerConstants.mysql_pool.get_connection()) as db: with closing(db.cursor()) as cursor: user_id = "" sql = 'SELECT userid FROM devices WHERE id=\'{}\''.format( meta_data["device"]) cursor.execute(sql) rows = cursor.fetchall() if rows: user_id = rows[0][0] event_time = datetime.datetime.fromtimestamp( int(meta_data["date"])) sql = 'INSERT INTO `events` (`id`,`deviceid`,`userid`,`date`,`type`,`data`,`filename`, `encryption`, `priority`) ' \ 'VALUES (\'\', \'{}\', \'{}\', \'{}\', \'{}\', \'{}\', \'{}\', \'{}\', \'{}\')'.format( meta_data["device"], user_id, str(event_time), meta_data["type"], "", file_name, meta_data["encryption"], ImageProcessingUtil.getImagePriority(file_name)) cursor.execute(sql) event_id = cursor.lastrowid db.commit() ParseUtil.send_push( str(user_id), json.dumps({ "eventId": event_id, "type": meta_data["type"], "date": str(event_time) }))