def run(self): tries = config.config()['log_synchronization']['tries'] period = 60*config.config()['log_synchronization']['period'] server_ip = config.config()['network']['server_ip'] server_port = config.config()['network']['server_port'] while True: try: with db.manager().transaction(): log.logger().info('Sending log to server...') _log = proto.man_message() _log.message_type = 'log' db.manager().get_log(_log.db) while tries > 0: try: self.__conn.send_message((server_ip, server_port), _log.SerializeToString()) break except Exception as exc: log.logger().error('Log synchronizer: ' + repr(exc)) tries -= 1 if tries > 0: db.manager().drop_log() log.logger().info('Log successfully sent.') else: raise LogSyncError('Log sending failed.') except LogSyncError as err: log.logger().info(err.value) except Exception as exc: log.logger().error(repr(exc)) tries = config.config()['log_synchronization']['tries'] time.sleep(period)
def log_handler(msg): try: log.logger().info('Got log, synchronizing...') with database.manager().transaction(): database.manager().load_log(msg.db) log.logger().info('Log successfully synchronized.') except Exception as exc: log.logger().error(repr(exc))
def save_db_handler(msg): try: log.logger().info("got new db, synchronizing...") with db.manager().transaction(): db.manager().drop_sync_data() db.manager().load_sync_data(msg.db) log.logger().info("successfully synchronized") except Exception, exc: log.logger().error("failed to reset local database: " + traceback.format_exc())
def fill_db(self): with db.manager().transaction(): n = db.Node() c1 = db.Controller(address = 1, node = n.id) c2 = db.Controller(address = 2, node = n.id) c3 = db.Controller(address = 3, node = n.id) p1 = db.Point(type = 'turnstile', reader = 'em_marine_card', controller = c1.id) p2 = db.Point(type = 'turnstile', reader = 'em_marine_card', controller = c2.id) p3 = db.Point(type = 'turnstile', reader = 'em_marine_card', controller = c3.id)
def start(self): try: log.logger().info('Server started.') self.__servers.start_servers() while True: wait = 60 * float(config.config()['server']['sync_period']) new_db = proto.man_message() new_db.message_type = 'new_db' database.manager().get_sync_data(new_db.db) sync = Synchronizer(new_db, self.__servers.server_out).start() time.sleep(wait) except KeyboardInterrupt: log.logger().warning('Stopping server on user command.') except Exception as exc: log.logger().error(repr(exc)) finally: self.stop()
def test_check_access_wrong_code(self): try: self.fill_db() with db.manager().transaction(): db.Access(script = self.wrong_script.id, user_group = self.ug.id, point_group = self.pg.id) self.assertFalse(npm.AccessPoint._AccessPoint__check_access(self.emc.code, self.p1.id)) self.assertFalse(npm.AccessPoint._AccessPoint__check_access(self.emc.code, self.p2.id)) except Exception, exc: self.fail(exc)
def fill_db(self): with db.manager().transaction(): self.n = db.Node() self.c = db.Controller(address = 1, node = self.n.id) self.p1 = db.Point(type = 'turnstile', reader = 'em_marine_card', controller = self.c.id) self.p2 = db.Point(type = 'turnstile', reader = 'em_marine_card', controller = self.c.id) self.pg = db.PointGroup(name = 'entrance') db.PointGroupLink(point = self.p1.id, point_group = self.pg.id) db.PointGroupLink(point = self.p2.id, point_group = self.pg.id) self.u = db.User() self.emc = db.EmMarineCard(code = 100500, user = self.u.id) self.ug = db.UserGroup(name = 'admin') db.UserGroupLink(user = self.u.id, user_group = self.ug.id) self.true_script = db.Script(condition_code = "def check():\n\treturn True") self.false_script = db.Script(condition_code = "def check():\n\treturn False") self.wrong_script = db.Script(condition_code = "qwerty")
# You should have received a copy of the GNU General Public License # along with Project Master Device. If not, see <http://www.gnu.org/licenses/>. import time from shared.network import * from shared import man_db_msg_pb2 as proto import server.main from shared import database def fake_node(msg): print 'Recieved message;\n', msg if __name__ == '__main__': try: net = ConnServer(("localhost", 8566), {'new_db': fake_node}) net.start_servers() log = proto.man_message() log.message_type = 'log' database.manager().get_log(log.db) time.sleep(10) print "sending log to server..." net.server_out.send_message(("localhost", 8563), log.SerializeToString()) time.sleep(5) net.shutdown() except Exception as exc: print('ERR:', repr(exc)) net.shutdown()