-- UNIX bash scripts for polling in a loop (to be used with cron)
-- Added multi-threaded test code (debug2 to-remove)
-- First stab at state-machine of profile registrations and what state triggers what func
This commit is contained in:
Muneeb Ali
2014-07-11 20:55:31 -07:00
parent b385e75d1b
commit 789c2b4804
3 changed files with 36 additions and 104 deletions

View File

@@ -19,10 +19,8 @@ from config import LOAD_BALANCER
#-----------------------------------
from pymongo import MongoClient
client = MongoClient()
local_db = client['namecoin']
queue = local_db.queue
codes = local_db.codes
from config import MONGODB_URI
remote_client = MongoClient(MONGODB_URI)
@@ -64,7 +62,7 @@ def save_name_new_info(info,key,value):
del reply['_id'] #reply[_id] is causing a json encode error
except Exception as e:
reply['message'] = "ERROR:" + str(e)
reply['message'] = "ERROR: " + str(e)
return reply
@@ -234,85 +232,3 @@ def process_additional_keys(keys,values):
register_name(next_key,next_value)
index += 1
#-----------------------------------
def set_backend_server(DISTRIBUTE=True):
DEFAULT_SERVER = 2
BACKEND_SERVER_FOR_RESERVER = 1
loadbalancer_counter = 0
for i in users.find():
if 'dispatched' in i and i['dispatched'] is False:
loadbalancer_counter += 1
if(loadbalancer_counter == 8):
loadbalancer_counter = 0
#hardcoded backend_server for reserved names
if 'backend_server' not in i:
selected_server = DEFAULT_SERVER
if 'accesscode' in i:
print "found reserved user, " + i['username'] + " using backend_server ", BACKEND_SERVER_FOR_RESERVER
selected_server = BACKEND_SERVER_FOR_RESERVER
else:
if DISTRIBUTE:
selected_server = loadbalancer_counter
i['backend_server'] = selected_server
users.save(i)
print "sending " + i['username'] + " to backend_server " + str(selected_server)
#-----------------------------------
def check_new_registrations(LIVE=True):
registered_counter = 0
unregistered_counter = 0
print '-' * 5
print "Checking for new users"
for user in registrations.find():
if 'dispatched' in user and user['dispatched'] is False:
unregistered_counter += 1
if ('backend_server' in user) and (user['backend_server'] == int(LOAD_BALANCER)):
if LIVE:
try:
process_user(user['username'],json.loads(user['profile']))
print user['backend_server']
except Exception as e:
print e
continue
username = 'u/' + user['username'].lower()
extended = 'i/' + user['username'].lower() + '-1'
local = queue.find_one({'key':username})
if local is not None:
print "in local DB"
if LIVE:
user['dispatched'] = True
user['accepted'] = True
users.save(user)
print '-' * 5
else:
registered_counter += 1
print "Registered users: ", registered_counter
print "Not registered users: ", unregistered_counter
#-----------------------------------
if __name__ == '__main__':
LIVE = True
DISTRIBUTE = False
set_backend_server(DISTRIBUTE)
check_new_registrations(LIVE)

View File

@@ -21,6 +21,8 @@ from encrypt.bip38 import bip38_decrypt
import datetime
import hashlib
from time import sleep
#-----------------------------------
remote_client = MongoClient(MONGODB_URI)
remote_db = remote_client.get_default_database()
@@ -35,9 +37,10 @@ old_users = old_db.user
local_client = MongoClient()
local_db = local_client['namecoin']
queue = local_db.queue
queue_register = local_db.queue
queue_update = local_db.queue_update
problem_users = ['madmoneymachine', 'drmox']
problem_users = ['madmoneymachine', 'drmox', 'emiljohansson','xfaure','megaz28','maxweiss','kh','patrickcines']
#-----------------------------------
def process_profile(username,profile):
@@ -45,11 +48,18 @@ def process_profile(username,profile):
if username in problem_users:
return
#check if already in queue
check_queue = queue.find_one({"key":'u/' + username})
#check if already in register queue (name_new)
check_queue = queue_register.find_one({"key":'u/' + username})
if check_queue is not None:
print "Already in processing queue: " + str(username)
print "Already in register queue: " + str(username)
return
#check if already in update queue (name_update)
check_queue = queue_update.find_one({"key":'u/' + username})
if check_queue is not None:
print "Already in update queue: " + str(username)
return
#check if load-balancer is correct
@@ -57,7 +67,8 @@ def process_profile(username,profile):
if old_user is not None:
if old_user['backend_server'] != int(LOAD_BALANCER):
print "Not on this server: " + str(username)
print "Not on this server: " + str(username)
print "Run on server: " + str(old_user['backend_server'])
return
process_user(username,profile)
@@ -93,12 +104,10 @@ def register_users():
if datetime.datetime.utcnow() - new_user['created_at'] > datetime.timedelta(minutes=15):
print "Dispatch: " + user['username']
if user['username'] == "drmox":
pass
else:
process_profile(user['username'],user['profile'])
new_user['dispatched'] = True
registrations.save(new_user)
process_profile(user['username'],user['profile'])
new_user['dispatched'] = True
registrations.save(new_user)
else:
print "New user (within 15 mins): " + user['username']
@@ -114,13 +123,16 @@ def register_users():
else:
if datetime.datetime.utcnow() - new_user['created_at'] > datetime.timedelta(minutes=90):
print "Re-sending after 90 mins: " + user['username']
print "Problem (90 mins): " + user['username']
#print "Re-sending after 180 mins: " + user['username']
#process_profile(user['username'],user['profile'])
else:
print "Random: " + user['username']
#registrations.remove(new_user)
sleep(1)
#-----------------------------------
def check_users():
@@ -141,7 +153,7 @@ def check_users():
pass
else:
print "Problem: " + user["username"]
process_profile(user['username'],user['profile'])
#process_profile(user['username'],user['profile'])
print "Users: " + str(counter)
@@ -157,6 +169,7 @@ def check_transfer():
transfer.remove(new_user)
else:
print "Problem: " + user["username"]
process_profile(user['username'],user['profile'])
#-----------------------------------
def update_users():
@@ -175,6 +188,9 @@ def update_users():
#-----------------------------------
def cleanup_db():
print "----------"
print "Cleaning DB"
for new_user in updates.find():
user_id = new_user['user_id']
@@ -201,21 +217,20 @@ def cleanup_db():
if profile_on_blockchain(user["username"],user["profile"]):
print "cleaning: " + user["username"]
registrations.remove(new_user)
print "----------"
#-----------------------------------
if __name__ == '__main__':
#check_users()
#check_transfer()
register_users()
#update_users()
register_users()
cleanup_db()

View File

@@ -55,6 +55,7 @@ def main_loop(key, name=None):
update_name(key,value)
else:
print "registered but not reserved: " + key
#update_name(key,value)
elif reply is not None:
#currently being processed
pass