Skip to content

Instantly share code, notes, and snippets.

@vemacs
Created February 25, 2016 21:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vemacs/2444240242c94219d93b to your computer and use it in GitHub Desktop.
Save vemacs/2444240242c94219d93b to your computer and use it in GitHub Desktop.
from bottle import route, run
import subprocess, socket, os, glob, yaml
# load config
with open('config.yml', 'r') as config_file:
config = yaml.load(config_file)
base_path = config['base-path']
bind_addr = config['bind-addr'].split(':')
bind_host = bind_addr[0]
bind_port = int(bind_addr[1])
def get_pipe(command):
return subprocess.Popen(command.split(), stdout=subprocess.PIPE).stdout
def validate_name(name):
return name and name.isalnum() and ' ' not in name
def jar_in_path(path):
if not os.path.exists(path):
return False
return glob.glob(path + '/*.jar')
@route('/list/')
def list_servers():
pipe = get_pipe('mark2 list')
servers = []
for line in pipe.readlines():
if line:
servers.append(line.rstrip())
return {'servers': servers}
@route('/hostname/')
def hostname():
return {'hostname': socket.gethostname()}
@route('/send/<name>/<cmd>')
def send_to_server(name='', cmd =''):
if not validate_name(name):
status = 'invalid'
elif not cmd:
status = 'invalid'
elif name not in list_servers()['servers']:
status = 'invalid'
else:
get_pipe('mark2 send -n ' + name + ' ' + cmd)
status = 'success'
return {'status': status}
@route('/stop/<name>')
def stop_server(name=''):
return send_to_server(name, '~stop')
@route('/start/<name>')
def start_server(name=''):
path = base_path + name
if not validate_name(name):
status = 'invalid'
elif not jar_in_path(path):
status = 'invalid'
elif name in list_servers()['servers']:
status = 'already_started'
else:
get_pipe('mark2 start ' + base_path + name)
status = 'success'
return {'status': status}
run(host=bind_host, port=bind_port, autojson=True, debug=True)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment