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()