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) }))
class MainServer(): def __init__(self): self.myCommandServer = CommandServer() self.myCommandServer.registerObserver(self) self.myCommandServer.start() self.myMagtekUsbCardReader = MagtekUsbCardReader() self.myMagtekUsbCardReader.registerObserver(self) self.myMagtekUsbCardReader.start() self.myCameraCaptureServer = CameraCaptureServer() self.myCameraCaptureServer.start() self.myGuestDatabaseHandler = GuestDatabaseHandler() self.myLoggingDatabaseHandler = LoggingDatabaseHandler() self.myFileServer = FileServer() self.myFileServer.registerObserver(self) print "All modules have been asked to start" def notify(self, subjectName, eventType, message): if eventType == "status": print subjectName, "status", message if subjectName == "CommandServer" and eventType == "status" and message == "Closing connection": self.myFileServer.closeConnection() if subjectName == "CommandServer" and eventType == "message": self.handleTcpMessages(message) elif subjectName == "FileServer" and eventType == "status": if message[0:20] == "Ready to serve file:": self.myCommandServer.sendMessage("Image from disk is ready:" + message[20:]) elif subjectName == "CardReader" and eventType == "swipe": self.handleSwipe( HealthInsuranceCardInterpreter.Interpitate(message)) def handleTcpMessages(self, message): print "CommandServer have recived message:", message if message == "pending": returnMessage = "status:connection accepted#" users = self.myLoggingDatabaseHandler.getUsernames() if len(users) > 0: returnMessage += "users:" for currentUsername in users: returnMessage += "username:"******"#" returnMessage += "#" self.myCommandServer.sendMessage(returnMessage) elif message == "start video server": self.myCameraCaptureServer.showVideo() self.myCommandServer.sendMessage("video server is ready") elif message[0:17] == "take picture for ": filePath = self.myCameraCaptureServer.takePicture("Images") self.myGuestDatabaseHandler.addImageToGuest(message[17:], filePath) self.myFileServer.serveFile(filePath) elif message[0:7] == "search:": print message name = re.search(r"name:(.*?)#", message[7:]).group(1) sex = re.search(r"sex:(.*?)#", message[7:]).group(1) searchResult = self.myGuestDatabaseHandler.searchForGuests( name, sex) commandString = "searchResult:" if searchResult: for guestEntry in searchResult: commandString += self.createGuestInfoCommandString( guestEntry) commandString += "#" self.myCommandServer.sendMessage(commandString) # sendGuestInfo:guestId:18#user:username:Nick Storsen#password:1234### elif message[0:13] == "sendGuestInfo": guestId = re.search(r"guestId:(.*?)#", message).group(1) username = re.search(r"username:(.*?)#", message[17:]).group(1) password = re.search(r"password:(.*?)#", message[17:]).group(1) if self.myLoggingDatabaseHandler.addEvent( "Requested guest info for id: " + guestId, username, password): guestFromDataBase = self.myGuestDatabaseHandler.getSingleGuestById( guestId) commandString = self.createGuestInfoCommandString( guestFromDataBase) print commandString self.myCommandServer.sendMessage(commandString) elif message[0:23] == "send picture from disk:": self.myFileServer.serveFile(message[23:len(message) - 1]) elif message == "give me the night list": guestsForNight = self.myGuestDatabaseHandler.getGuestsForNight() commandString = "guestsForNight:" if guestsForNight: for guestEntry in guestsForNight: commandString += self.createGuestInfoCommandString( guestEntry) commandString += "#" print commandString self.myCommandServer.sendMessage(commandString) elif message[0:3] == "BAN": #BAN:guestId:1#timeFrame:1 Months#user:username:Ole Andersen#password:A### guestId = re.search(r"guestId:(.*?)#", message).group(1) timeFrame = re.search(r"timeFrame:(.*?) Months#", message).group(1) username = re.search(r"username:(.*?)#", message).group(1) password = re.search(r"password:(.*?)#", message).group(1) #if self.myLoggingDatabaseHandler.addEvent("BANNED guest id: " +guestId , username, password): if timeFrame > 0: self.myGuestDatabaseHandler.addEventToGuest( guestId, "BAN " + (datetime.date.today() + datetime.timedelta( int(timeFrame) * 365 / 12)).isoformat()) print "BAN:dateTime:" + ( datetime.date.today() + datetime.timedelta( int(timeFrame) * 365 / 12)).isoformat() + "# " else: self.myGuestDatabaseHandler.addEventToGuest( guestId, "BAN Life") # print "BAN:dateTime:" + (datetime.date.today() + datetime.timedelta(int(timeFrame)*365/12)).isoformat() +"# " #else: # pass #self.myGuestDatabaseHandler.addEventToGuest(re.search(r"guestId:(.*?)#", message).group(1), BAN ) def handleSwipe(self, cardInfo): guestFromDataBase = self.myGuestDatabaseHandler.getSingleGuest( str(cardInfo[0]), str(cardInfo[1])) if not guestFromDataBase: self.myGuestDatabaseHandler.addGuest(str(cardInfo[0]), str(cardInfo[1]), str(cardInfo[2])) guestFromDataBase = self.myGuestDatabaseHandler.getSingleGuest( str(cardInfo[0]), str(cardInfo[1])) else: self.myGuestDatabaseHandler.enterGuest(guestFromDataBase[0]) commandString = self.createGuestSwipeInfoCommandString( guestFromDataBase) print commandString self.myCommandServer.sendMessage(commandString) def createGuestSwipeInfoCommandString(self, informationList): if informationList == None: return returnString = "guestSwipeInfo:guestId:" + str( informationList[0]) + "#" returnString += " Image:" + str( informationList[4]) + "# DocumentationImage:" + str( informationList[5]) + "#" returnString += " Events:" for eventItem in informationList[6]: returnString += "Event:dateTime:" + eventItem[ 0] + "#Description:" + eventItem[1] + "##" returnString += "##" return returnString def createGuestInfoCommandString(self, informationList): if informationList == None: return returnString = "guestInfo:name:" + str(informationList[1]) + "#" returnString += " birthday:" + str(informationList[2]) + "#" returnString += " sex:" + str(informationList[3]) + "#" returnString += " guestId:" + str(informationList[0]) + "#" returnString += " Image:" + str( informationList[4]) + "# DocumentationImage:" + str( informationList[5]) + "#" returnString += " Events:" for eventItem in informationList[6]: returnString += "Event:dateTime:" + eventItem[ 0] + "#Description:" + eventItem[1] + "##" returnString += "##" return returnString
class MainServer(): def __init__(self): self.myCommandServer = CommandServer() self.myCommandServer.registerObserver(self) self.myCommandServer.start() self.myMagtekUsbCardReader = MagtekUsbCardReader() self.myMagtekUsbCardReader.registerObserver(self) self.myMagtekUsbCardReader.start() self.myCameraCaptureServer = CameraCaptureServer() self.myCameraCaptureServer.start() self.myGuestDatabaseHandler = GuestDatabaseHandler() self.myLoggingDatabaseHandler = LoggingDatabaseHandler() self.myFileServer = FileServer() self.myFileServer.registerObserver(self) print "All modules have been asked to start" def notify(self, subjectName,eventType, message): if eventType =="status": print subjectName, "status", message if subjectName == "CommandServer" and eventType =="status" and message == "Closing connection": self.myFileServer.closeConnection() if subjectName == "CommandServer" and eventType =="message": self.handleTcpMessages(message) elif subjectName == "FileServer" and eventType =="status": if message[0:20] == "Ready to serve file:": self.myCommandServer.sendMessage("Image from disk is ready:" + message[20:]) elif subjectName == "CardReader" and eventType =="swipe": self.handleSwipe(HealthInsuranceCardInterpreter.Interpitate(message)) def handleTcpMessages(self, message): print "CommandServer have recived message:", message if message == "pending": returnMessage = "status:connection accepted#" users = self.myLoggingDatabaseHandler.getUsernames() if len(users) >0: returnMessage += "users:" for currentUsername in users: returnMessage += "username:"******"#" returnMessage += "#" self.myCommandServer.sendMessage(returnMessage) elif message == "start video server": self.myCameraCaptureServer.showVideo() self.myCommandServer.sendMessage("video server is ready") elif message[0:17] == "take picture for ": filePath = self.myCameraCaptureServer.takePicture("Images") self.myGuestDatabaseHandler.addImageToGuest(message[17:], filePath) self.myFileServer.serveFile(filePath) elif message[0:7] == "search:": print message name = re.search(r"name:(.*?)#", message[7:]).group(1) sex = re.search(r"sex:(.*?)#", message[7:]).group(1) searchResult = self.myGuestDatabaseHandler.searchForGuests(name, sex) commandString = "searchResult:" if searchResult: for guestEntry in searchResult: commandString += self.createGuestInfoCommandString(guestEntry) commandString += "#" self.myCommandServer.sendMessage(commandString) # sendGuestInfo:guestId:18#user:username:Nick Storsen#password:1234### elif message[0:13] == "sendGuestInfo": guestId = re.search(r"guestId:(.*?)#", message).group(1) username = re.search(r"username:(.*?)#", message[17:]).group(1) password= re.search(r"password:(.*?)#", message[17:]).group(1) if self.myLoggingDatabaseHandler.addEvent("Requested guest info for id: " +guestId , username, password): guestFromDataBase = self.myGuestDatabaseHandler.getSingleGuestById(guestId) commandString = self.createGuestInfoCommandString(guestFromDataBase) print commandString self.myCommandServer.sendMessage(commandString) elif message[0:23] == "send picture from disk:": self.myFileServer.serveFile(message[23:len(message) - 1]) elif message == "give me the night list": guestsForNight = self.myGuestDatabaseHandler.getGuestsForNight() commandString = "guestsForNight:" if guestsForNight: for guestEntry in guestsForNight: commandString += self.createGuestInfoCommandString(guestEntry) commandString += "#" print commandString self.myCommandServer.sendMessage(commandString) elif message[0:3] == "BAN": #BAN:guestId:1#timeFrame:1 Months#user:username:Ole Andersen#password:A### guestId = re.search(r"guestId:(.*?)#", message).group(1) timeFrame = re.search(r"timeFrame:(.*?) Months#", message).group(1) username = re.search(r"username:(.*?)#", message).group(1) password = re.search(r"password:(.*?)#", message).group(1) #if self.myLoggingDatabaseHandler.addEvent("BANNED guest id: " +guestId , username, password): if timeFrame > 0: self.myGuestDatabaseHandler.addEventToGuest(guestId, "BAN " + (datetime.date.today() + datetime.timedelta(int(timeFrame)*365/12)).isoformat()) print "BAN:dateTime:" + (datetime.date.today() + datetime.timedelta(int(timeFrame)*365/12)).isoformat() +"# " else: self.myGuestDatabaseHandler.addEventToGuest(guestId, "BAN Life") # print "BAN:dateTime:" + (datetime.date.today() + datetime.timedelta(int(timeFrame)*365/12)).isoformat() +"# " #else: # pass #self.myGuestDatabaseHandler.addEventToGuest(re.search(r"guestId:(.*?)#", message).group(1), BAN ) def handleSwipe(self, cardInfo): guestFromDataBase = self.myGuestDatabaseHandler.getSingleGuest(str(cardInfo[0]), str(cardInfo[1])) if not guestFromDataBase: self.myGuestDatabaseHandler.addGuest(str(cardInfo[0]), str(cardInfo[1]), str(cardInfo[2])) guestFromDataBase = self.myGuestDatabaseHandler.getSingleGuest(str(cardInfo[0]), str(cardInfo[1])) else: self.myGuestDatabaseHandler.enterGuest(guestFromDataBase[0]) commandString = self.createGuestSwipeInfoCommandString(guestFromDataBase) print commandString self.myCommandServer.sendMessage(commandString) def createGuestSwipeInfoCommandString(self, informationList): if informationList == None: return returnString = "guestSwipeInfo:guestId:" + str(informationList[0]) + "#" returnString += " Image:" + str(informationList[4]) + "# DocumentationImage:" + str(informationList[5]) + "#" returnString += " Events:" for eventItem in informationList[6]: returnString += "Event:dateTime:" + eventItem[0] + "#Description:" + eventItem[1] + "##" returnString += "##" return returnString def createGuestInfoCommandString(self, informationList): if informationList == None: return returnString = "guestInfo:name:" + str(informationList[1]) +"#" returnString += " birthday:" + str(informationList[2]) + "#" returnString += " sex:" + str(informationList[3]) + "#" returnString += " guestId:" + str(informationList[0]) + "#" returnString += " Image:" + str(informationList[4]) + "# DocumentationImage:" + str(informationList[5]) + "#" returnString += " Events:" for eventItem in informationList[6]: returnString += "Event:dateTime:" + eventItem[0] + "#Description:" + eventItem[1] + "##" returnString += "##" return returnString