def start_server(): def _exit_handler(*a, **k): gevent.kill(MAIN, SystemExit) sig(signal.SIGTERM, _exit_handler) from game import autoenv import argparse parser = argparse.ArgumentParser(prog=sys.argv[0]) parser.add_argument('node', type=str) parser.add_argument('--host', default='0.0.0.0', type=str) parser.add_argument('--port', default=9999, type=int) parser.add_argument('--backdoor-host', default='127.0.0.1', type=str) parser.add_argument('--backdoor-port', default=19999, type=int) parser.add_argument('--no-backdoor', action='store_true') parser.add_argument('--freeplay', action='store_true') parser.add_argument('--log', default='INFO') parser.add_argument('--logfile', default='') parser.add_argument('--gidfile', default='') parser.add_argument('--credit-multiplier', type=float, default=1) parser.add_argument('--no-counting-flee', action='store_true') parser.add_argument('--archive-path', default='') parser.add_argument('--interconnect', action='store_true', default=False) parser.add_argument('--redis-url', default='redis://localhost:6379') parser.add_argument('--discuz-authkey', default='Proton rocks') parser.add_argument('--db', default='sqlite:////dev/shm/thb.sqlite3') options = parser.parse_args() import options as opmodule opmodule.options = options import db.session db.session.init('sqlite://' if options.freeplay else options.db) autoenv.init('Server') import settings utils.logging.init_server(getattr(logging, options.log.upper()), settings.SENTRY_DSN, settings.VERSION, options.logfile) if not options.no_backdoor: from gevent.backdoor import BackdoorServer gevent.spawn(BackdoorServer((options.backdoor_host, options.backdoor_port)).serve_forever) from server.core import Client root = logging.getLogger() root.info('=' * 20 + settings.VERSION + '=' * 20) server = StreamServer((options.host, options.port), Client.serve, None) server.serve_forever()
def start_server(): def _exit_handler(*a, **k): gevent.kill(MAIN, SystemExit) sig(signal.SIGTERM, _exit_handler) from game import autoenv import argparse parser = argparse.ArgumentParser(prog=sys.argv[0]) parser.add_argument('node', type=str) parser.add_argument('--host', default='0.0.0.0', type=str) parser.add_argument('--port', default=9999, type=int) parser.add_argument('--backdoor-host', default='127.0.0.1', type=str) parser.add_argument('--backdoor-port', default=19999, type=int) parser.add_argument('--no-backdoor', action='store_true') parser.add_argument('--freeplay', action='store_true') parser.add_argument('--log', default='INFO') parser.add_argument('--logfile', default='') parser.add_argument('--gidfile', default='') parser.add_argument('--credit-multiplier', type=float, default=1) parser.add_argument('--no-counting-flee', action='store_true') parser.add_argument('--archive-path', default='') parser.add_argument('--interconnect', action='store_true', default=False) parser.add_argument('--redis-url', default='redis://localhost:6379') parser.add_argument('--discuz-authkey', default='Proton rocks') parser.add_argument('--db', default='sqlite:////dev/shm/thb.sqlite3') options = parser.parse_args() import options as opmodule opmodule.options = options import db.session db.session.init(options.db) autoenv.init('Server') import settings utils.logging.init_server(getattr(logging, options.log.upper()), settings.SENTRY_DSN, settings.VERSION, options.logfile) if not options.no_backdoor: from gevent.backdoor import BackdoorServer gevent.spawn(BackdoorServer((options.backdoor_host, options.backdoor_port)).serve_forever) from server.core import Client root = logging.getLogger() root.info('=' * 20 + settings.VERSION + '=' * 20) server = StreamServer((options.host, options.port), Client.serve, None) server.serve_forever()
from gevent.server import StreamServer import logging import sys MAIN = gevent.getcurrent() from gevent import signal as sig import signal def _exit_handler(*a, **k): gevent.kill(MAIN, SystemExit) sig(signal.SIGTERM, _exit_handler) from game import autoenv import argparse parser = argparse.ArgumentParser(prog=sys.argv[0]) parser.add_argument('node', type=str) parser.add_argument('--port', default=9999, type=int) parser.add_argument('--backdoor-port', default=19999, type=int) parser.add_argument('--testing', action='store_true') parser.add_argument('--no-backdoor', action='store_true') parser.add_argument('--freeplay', action='store_true') parser.add_argument('--log', default='INFO') parser.add_argument('--logfile', default='') parser.add_argument('--gidfile', default='')
def start_server(): def _exit_handler(*a, **k): gevent.kill(MAIN, SystemExit) sig(signal.SIGTERM, _exit_handler) from game import autoenv import argparse parser = argparse.ArgumentParser(prog=sys.argv[0]) parser.add_argument('node', type=str) parser.add_argument('--host', default='0.0.0.0', type=str) parser.add_argument('--port', default=9999, type=int) parser.add_argument('--backdoor-host', default='127.0.0.1', type=str) parser.add_argument('--backdoor-port', default=19999, type=int) parser.add_argument('--no-backdoor', action='store_true') parser.add_argument('--freeplay', action='store_true') parser.add_argument('--log', default='INFO') parser.add_argument('--logfile', default='') parser.add_argument('--gidfile', default='') parser.add_argument('--credit-multiplier', type=float, default=1) parser.add_argument('--no-counting-flee', action='store_true') parser.add_argument('--archive-path', default='') parser.add_argument('--interconnect', action='store_true', default=False) parser.add_argument('--redis-url', default='redis://localhost:6379') parser.add_argument('--member-service', default='localhost:7000') options = parser.parse_args() import options as opmodule opmodule.options = options autoenv.init('Server') import settings class ServerLogFormatter(logging.Formatter): def format(self, rec): if rec.exc_info: s = [] s.append('>>>>>>' + '-' * 74) s.append(self._format(rec)) import traceback s.append(u''.join(traceback.format_exception(*rec.exc_info)).strip()) s.append('<<<<<<' + '-' * 74) return u'\n'.join(s) else: return self._format(rec) def _format(self, rec): from game.autoenv import Game import time try: g = Game.getgame() except: g = gevent.getcurrent() gr_name = getattr(g, 'gr_name', None) or repr(g) gr_name = 'MAIN' if g is MAIN else gr_name return u'[%s %s %s] %s' % ( rec.levelname[0], time.strftime('%y%m%d %H:%M:%S'), gr_name.decode('utf-8'), rec.msg % rec.args if isinstance(rec.msg, basestring) else repr((rec.msg, rec.args)), ) fmter = ServerLogFormatter() root = logging.getLogger() root.setLevel(getattr(logging, options.log.upper())) std = logging.StreamHandler(stream=sys.stdout) std.setFormatter(fmter) root.handlers = [] root.addHandler(std) if options.logfile: from logging.handlers import WatchedFileHandler filehdlr = WatchedFileHandler(options.logfile) filehdlr.setFormatter(fmter) root.addHandler(filehdlr) if not options.no_backdoor: from gevent.backdoor import BackdoorServer gevent.spawn(BackdoorServer((options.backdoor_host, options.backdoor_port)).serve_forever) from server.core import Client root.info('=' * 20 + settings.VERSION + '=' * 20) server = StreamServer((options.host, options.port), Client.spawn, None) server.serve_forever()
import gevent from gevent import monkey monkey.patch_all() from gevent.server import StreamServer import logging import sys ''' # --- for dbg from gevent import signal as sig import signal sig(signal.SIGUSR1, lambda: False) # ----------- ''' MAIN = gevent.getcurrent() from gevent import signal as sig import signal def _exit_handler(*a, **k): gevent.kill(MAIN, SystemExit) sig(signal.SIGTERM, _exit_handler) from game import autoenv import argparse parser = argparse.ArgumentParser(prog=sys.argv[0])
logTail = os.popen("tail -n16 " + myLogFile).read() res += "<hr>\n<pre>\n" + logTail + "</pre>\n" res += "</body>\n</html>\n" return res if __name__ == '__main__': logging.basicConfig(filename=myLogFile, format='%(asctime)s - %(message)s', level=logging.INFO, datefmt='%y/%m/%d %H:%M:%S') logging.getLogger('schedule').setLevel(logging.WARNING) loadConfig() setSchedule() startServer() botapp = bottle.app() server = WSGIServer((myAddress, int(myPort)), botapp) GPIO.setwarnings(False) def shutdown(): logging.info("Shutting down...") GPIO.cleanup() server.stop(timeout=5) exit(signal.SIGTERM) sig(signal.SIGTERM, shutdown) sig(signal.SIGINT, shutdown) server.serve_forever()