hot load config
support userapiconfig
This commit is contained in:
parent
4d43e12139
commit
569aaa5248
9 changed files with 63 additions and 27 deletions
|
@ -1,6 +1,7 @@
|
|||
# Config
|
||||
TRANSFER_MUL = 1.0
|
||||
API_INTERFACE = 'mysql'
|
||||
NODE_ID = 1
|
||||
API_INTERFACE = 'sspanelv2' #sspanelv2, muapiv2
|
||||
|
||||
# Mysql
|
||||
MYSQL_HOST = 'mdss.mengsky.net'
|
||||
|
@ -11,11 +12,10 @@ MYSQL_DB = 'shadowsocks'
|
|||
MYSQL_UPDATE_TIME = 60
|
||||
|
||||
# API
|
||||
API_HOST = 'breakwa11.org'
|
||||
API_HOST = 'breakwa11.moe'
|
||||
API_PORT = 80
|
||||
API_PATH = '/mu/v2/'
|
||||
API_TOKEN = 'abcdef'
|
||||
API_NODE_ID = 'id001'
|
||||
API_UPDATE_TIME = 60
|
||||
|
||||
# Manager (ignore this)
|
|
@ -16,5 +16,4 @@
|
|||
"connect_verbose_info": 0,
|
||||
"redirect": "",
|
||||
"fast_open": false,
|
||||
"workers": 1
|
||||
}
|
||||
|
|
27
configloader.py
Normal file
27
configloader.py
Normal file
|
@ -0,0 +1,27 @@
|
|||
#!/usr/bin/python
|
||||
# -*- coding: UTF-8 -*-
|
||||
|
||||
config = None
|
||||
|
||||
def load_config():
|
||||
global config
|
||||
try:
|
||||
import userapiconfig
|
||||
reload(userapiconfig)
|
||||
config = userapiconfig
|
||||
return
|
||||
except:
|
||||
pass
|
||||
try:
|
||||
import apiconfig
|
||||
reload(apiconfig)
|
||||
config = apiconfig
|
||||
except:
|
||||
pass
|
||||
|
||||
def get_config():
|
||||
global config
|
||||
return config
|
||||
|
||||
load_config()
|
||||
|
|
@ -6,9 +6,9 @@ import cymysql
|
|||
import time
|
||||
import sys
|
||||
from server_pool import ServerPool
|
||||
import Config
|
||||
import traceback
|
||||
from shadowsocks import common
|
||||
from configloader import load_config, get_config
|
||||
|
||||
class DbTransfer(object):
|
||||
|
||||
|
@ -39,16 +39,16 @@ class DbTransfer(object):
|
|||
continue
|
||||
elif last_transfer[id][0] <= curr_transfer[id][0] and \
|
||||
last_transfer[id][1] <= curr_transfer[id][1]:
|
||||
dt_transfer[id] = [int((curr_transfer[id][0] - last_transfer[id][0]) * Config.TRANSFER_MUL),
|
||||
int((curr_transfer[id][1] - last_transfer[id][1]) * Config.TRANSFER_MUL)]
|
||||
dt_transfer[id] = [int((curr_transfer[id][0] - last_transfer[id][0]) * get_config().TRANSFER_MUL),
|
||||
int((curr_transfer[id][1] - last_transfer[id][1]) * get_config().TRANSFER_MUL)]
|
||||
else:
|
||||
dt_transfer[id] = [int(curr_transfer[id][0] * Config.TRANSFER_MUL),
|
||||
int(curr_transfer[id][1] * Config.TRANSFER_MUL)]
|
||||
dt_transfer[id] = [int(curr_transfer[id][0] * get_config().TRANSFER_MUL),
|
||||
int(curr_transfer[id][1] * get_config().TRANSFER_MUL)]
|
||||
else:
|
||||
if curr_transfer[id][0] == 0 and curr_transfer[id][1] == 0:
|
||||
continue
|
||||
dt_transfer[id] = [int(curr_transfer[id][0] * Config.TRANSFER_MUL),
|
||||
int(curr_transfer[id][1] * Config.TRANSFER_MUL)]
|
||||
dt_transfer[id] = [int(curr_transfer[id][0] * get_config().TRANSFER_MUL),
|
||||
int(curr_transfer[id][1] * get_config().TRANSFER_MUL)]
|
||||
|
||||
query_head = 'UPDATE user'
|
||||
query_sub_when = ''
|
||||
|
@ -71,8 +71,8 @@ class DbTransfer(object):
|
|||
' END, t = ' + str(int(last_time)) + \
|
||||
' WHERE port IN (%s)' % query_sub_in
|
||||
#print query_sql
|
||||
conn = cymysql.connect(host=Config.MYSQL_HOST, port=Config.MYSQL_PORT, user=Config.MYSQL_USER,
|
||||
passwd=Config.MYSQL_PASS, db=Config.MYSQL_DB, charset='utf8')
|
||||
conn = cymysql.connect(host=get_config().MYSQL_HOST, port=get_config().MYSQL_PORT, user=get_config().MYSQL_USER,
|
||||
passwd=get_config().MYSQL_PASS, db=get_config().MYSQL_DB, charset='utf8')
|
||||
cur = conn.cursor()
|
||||
cur.execute(query_sql)
|
||||
cur.close()
|
||||
|
@ -90,8 +90,8 @@ class DbTransfer(object):
|
|||
except Exception as e:
|
||||
keys = ['port', 'u', 'd', 'transfer_enable', 'passwd', 'enable' ]
|
||||
reload(cymysql)
|
||||
conn = cymysql.connect(host=Config.MYSQL_HOST, port=Config.MYSQL_PORT, user=Config.MYSQL_USER,
|
||||
passwd=Config.MYSQL_PASS, db=Config.MYSQL_DB, charset='utf8')
|
||||
conn = cymysql.connect(host=get_config().MYSQL_HOST, port=get_config().MYSQL_PORT, user=get_config().MYSQL_USER,
|
||||
passwd=get_config().MYSQL_PASS, db=get_config().MYSQL_DB, charset='utf8')
|
||||
cur = conn.cursor()
|
||||
cur.execute("SELECT " + ','.join(keys) + " FROM user")
|
||||
rows = []
|
||||
|
@ -180,7 +180,7 @@ class DbTransfer(object):
|
|||
last_rows = []
|
||||
try:
|
||||
while True:
|
||||
reload(Config)
|
||||
load_config()
|
||||
try:
|
||||
DbTransfer.get_instance().push_db_all_user()
|
||||
rows = DbTransfer.get_instance().pull_db_all_user()
|
||||
|
@ -190,7 +190,7 @@ class DbTransfer(object):
|
|||
trace = traceback.format_exc()
|
||||
logging.error(trace)
|
||||
#logging.warn('db thread except:%s' % e)
|
||||
if DbTransfer.get_instance().event.wait(Config.MYSQL_UPDATE_TIME) or not ServerPool.get_instance().thread.is_alive():
|
||||
if DbTransfer.get_instance().event.wait(get_config().MYSQL_UPDATE_TIME) or not ServerPool.get_instance().thread.is_alive():
|
||||
break
|
||||
except KeyboardInterrupt as e:
|
||||
pass
|
||||
|
|
6
logrun.sh
Normal file
6
logrun.sh
Normal file
|
@ -0,0 +1,6 @@
|
|||
#!/bin/bash
|
||||
cd `dirname $0`
|
||||
eval $(ps -ef | grep "[0-9] python server\\.py m" | awk '{print "kill "$2}')
|
||||
ulimit -n 512000
|
||||
nohup python server.py m>> ssserver.log 2>&1 &
|
||||
|
2
run.sh
2
run.sh
|
@ -2,5 +2,5 @@
|
|||
cd `dirname $0`
|
||||
eval $(ps -ef | grep "[0-9] python server\\.py m" | awk '{print "kill "$2}')
|
||||
ulimit -n 512000
|
||||
nohup python server.py m>> ssserver.log 2>&1 &
|
||||
nohup python server.py m>> /dev/null 2>&1 &
|
||||
|
||||
|
|
|
@ -24,16 +24,11 @@
|
|||
import os
|
||||
import logging
|
||||
import time
|
||||
from shadowsocks import shell
|
||||
from shadowsocks import eventloop
|
||||
from shadowsocks import tcprelay
|
||||
from shadowsocks import udprelay
|
||||
from shadowsocks import asyncdns
|
||||
from shadowsocks import shell, eventloop, tcprelay, udprelay, asyncdns
|
||||
import threading
|
||||
import sys
|
||||
import asyncmgr
|
||||
import Config
|
||||
from socket import *
|
||||
from configloader import load_config, get_config
|
||||
|
||||
class MainThread(threading.Thread):
|
||||
def __init__(self, params):
|
||||
|
@ -127,6 +122,7 @@ class ServerPool(object):
|
|||
a_config['server'] = a_config['server_ipv6']
|
||||
a_config['server_port'] = port
|
||||
a_config['password'] = password
|
||||
a_config['max_connect'] = 128
|
||||
try:
|
||||
logging.info("starting server at [%s]:%d" % (a_config['server'], port))
|
||||
|
||||
|
@ -151,6 +147,7 @@ class ServerPool(object):
|
|||
a_config = self.config.copy()
|
||||
a_config['server_port'] = port
|
||||
a_config['password'] = password
|
||||
a_config['max_connect'] = 128
|
||||
try:
|
||||
logging.info("starting server at %s:%d" % (a_config['server'], port))
|
||||
|
||||
|
@ -173,7 +170,7 @@ class ServerPool(object):
|
|||
logging.info("del server at %d" % port)
|
||||
try:
|
||||
udpsock = socket(AF_INET, SOCK_DGRAM)
|
||||
udpsock.sendto('%s:%s:0:0' % (Config.MANAGE_PASS, port), (Config.MANAGE_BIND_IP, Config.MANAGE_PORT))
|
||||
udpsock.sendto('%s:%s:0:0' % (get_config().MANAGE_PASS, port), (get_config().MANAGE_BIND_IP, get_config().MANAGE_PORT))
|
||||
udpsock.close()
|
||||
except Exception as e:
|
||||
logging.warn(e)
|
||||
|
|
6
shadowsocks/logrun.sh
Normal file
6
shadowsocks/logrun.sh
Normal file
|
@ -0,0 +1,6 @@
|
|||
#!/bin/bash
|
||||
cd `dirname $0`
|
||||
eval $(ps -ef | grep "[0-9] python server\\.py a" | awk '{print "kill "$2}')
|
||||
ulimit -n 4096
|
||||
nohup python server.py a >> ssserver.log 2>&1 &
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
#!/bin/bash
|
||||
cd `dirname $0`
|
||||
eval $(ps -ef | grep "[0-9] python server\\.py a" | awk '{print "kill "$2}')
|
||||
nohup python server.py a >> ssserver.log 2>&1 &
|
||||
ulimit -n 4096
|
||||
nohup python server.py a >> /dev/null 2>&1 &
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue