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,})
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,})
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,})
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,})
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,})
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,})