Exemplo n.º 1
0
 def stock_check_multi(self, dev_id, pin):
     bc = AgentNotifier()
     devs = []
     _1 = dev_id.split(',')
     ops = []
     for d in _1:
         d2 = self.c_dev.get(bc.dbconn, bc.cacheconn, d)
         if d2:
             devs.append({
                     'device_id': d,
                     'opid': d2['operator_id'],
                     'pin': d2['pin'],
                 })
         if d2['operator_id'] not in ops:
             ops.append(d2['operator_id'])
     if len(devs) == 0:
         return json.dumps({'success': 0, 'reason': 'DEVICE NOT FOUND'})
     devs_sql = map(lambda x: '"{0}"'.format(x['device_id']), devs)
     c = bc.dbconn.cursor(MySQLdb.cursors.DictCursor)
     dcs = {}
     c.execute('''SELECT `device_id`, `check_stock_counter` from `devices` WHERE
                 `device_id` IN ({0})'''.format(','.join(devs_sql)))
     for r in c:
         dcs[r['device_id']] = r['check_stock_counter']
     c.execute('''SELECT `operator_id`,`stock_check_1`,`stock_check_2` from `operator`
                  WHERE `operator_id` IN ({0})'''.format(','.join(map(lambda x: str(x), ops))))
     ops = {}
     for r in c:
         ops[r['operator_id']] = (r['stock_check_1'], r['stock_check_2'])
     for r in devs:
         server_id, port = r['device_id'].split('.')
         leaf_server = '{0}@{2}/{1}'.format(config.LEAFSERVER, server_id,
                                            config.MSG_SERVER)
         sc1, sc2 = ops[r['opid']]
         parse = multipleReplace({'<pin>': r['pin'],}, sc1)
         msg = '{0},{1},{2}'.format(port, '0', parse)
         bc.sendMessage(leaf_server, 'JBDV', msg, commit=False)
         if len(sc2) > 0:
             parse = multipleReplace({'<pin>': r['pin'],}, sc2)
             msg = '{0},{1},{2}'.format(port, '0', parse)
             bc.sendMessage(leaf_server, 'JBDV', msg, commit=False)
     bc.dbconn.commit()
     to = datetime.now() + timedelta(seconds=59)
     tout = True
     while datetime.now() < to:
         time.sleep(0.5)
         c.execute('''SELECT `device_id`, `check_stock_counter` from `devices` WHERE
                     `device_id` IN ({0})'''.format(','.join(devs_sql)))
         for r in c:
             if dcs[r['device_id']] != r['check_stock_counter']:
                 devs_sql.remove('"{0}"'.format(r['device_id']))
                 dcs[r['device_id']] = r['check_stock_counter']
         if len(devs_sql) == 0:
             tout = False
             break
     if tout:
         return json.dumps({'success': 0, 'reason': 'TIMEOUT'})
     return json.dumps({'success': 1, 'reason': '', 'notifyid': dcs,})
Exemplo n.º 2
0
 def all_leaf_stop(self, pin):
     bc = AgentNotifier()
     c = bc.dbconn.cursor(MySQLdb.cursors.DictCursor)
     c.execute('''SELECT DISTINCT `server_id` from `devices`
                  WHERE `status`=1''')
     for s in c:
         bc.sendMessage('{0}@{1}/{2}'.format(config.LEAFSERVER, 
             config.MSG_SERVER, s['server_id']), 'LSTO', '*')
     return json.dumps({'success': 1,})
Exemplo n.º 3
0
 def leaf_start(self, server_id, pin):
     bc = AgentNotifier()
     c = bc.dbconn.cursor(MySQLdb.cursors.DictCursor)
     c.execute('''SELECT `port` from `devices`
                  WHERE `server_id`=%s and `active`=1 and `status`=1''',
                  (server_id,))
     devs = ' '.join([x['port'] for x in c])
     if len(devs) == 0:
         return json.dumps({'success': 1,})
     bc.sendMessage('{0}@{1}/{2}'.format(config.LEAFSERVER, 
         config.MSG_SERVER, server_id), 'LSRT', devs)
     return json.dumps({'success': 1,})
Exemplo n.º 4
0
 def stock_check(self, dev_id, pin):
     bc = AgentNotifier()
     dev = self.c_dev.get(bc.dbconn, bc.cacheconn, dev_id)
     if not dev:
         return json.dumps({'success': 0, 'reason': 'DEVICE NOT FOUND'})
     c = bc.dbconn.cursor(MySQLdb.cursors.DictCursor)
     c.execute('''SELECT `check_stock_counter` from `devices` WHERE
                 `device_id`=%s LIMIT 1''', (dev_id,))
     old_count = int(c.fetchone()['check_stock_counter'])
     c.execute('''SELECT `stock_check_1`,`stock_check_2` from `operator`
                  WHERE `operator_id`=%s''', (dev['operator_id'],))
     r = c.fetchone()
     server_id, port = dev_id.split('.')
     leaf_server = '{0}@{2}/{1}'.format(config.LEAFSERVER, server_id,
                                        config.MSG_SERVER)
     parse = multipleReplace({'<pin>': dev['pin'],}, r['stock_check_1'])
     msg = '{0},{1},{2}'.format(port, '0', parse)
     bc.sendMessage(leaf_server, 'JBDV', msg, commit=False)
     if len(r['stock_check_2']) > 0:
         parse = multipleReplace({'<pin>': dev['pin'],}, r['stock_check_2'])
         msg = '{0}.{1},{2},{3}'.format(server_id, port, '0', parse)
         bc.sendMessage(leaf_server, 'JBDV', msg, commit=False)
     bc.dbconn.commit()
     to = datetime.now() + timedelta(seconds=59)
     tout = True
     while datetime.now() < to:
         time.sleep(0.5)
         c.execute('''SELECT `check_stock_counter` from `devices` WHERE
                      `device_id`=%s LIMIT 1''', (dev_id,))
         new_count = int(c.fetchone()['check_stock_counter'])
         if old_count < new_count:
             tout = False
             break
     if tout:
         return json.dumps({'success': 0, 'reason': 'TIMEOUT'})
     return json.dumps({'success': 1, 'reason': '', 'notifyid': new_count,})
Exemplo n.º 5
0
 def device_reconnect(self, device_id, pin):
     bc = AgentNotifier()
     server_id, _, port = device_id.partition('.')
     bc.sendMessage('{0}@{1}/{2}'.format(config.LEAFSERVER, 
         config.MSG_SERVER, server_id), 'RCMD', '{0},1'.format(port))
     return json.dumps({'success': 1,})
Exemplo n.º 6
0
 def leaf_stop(self, server_id, pin):
     bc = AgentNotifier()
     bc.sendMessage('{0}@{1}/{2}'.format(config.LEAFSERVER, 
         config.MSG_SERVER, server_id), 'LSTO', '*')
     return json.dumps({'success': 1,})