mirror of https://github.com/EdgeVPNio/tools.git
77 lines
2.3 KiB
Python
Executable File
77 lines
2.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import requests
|
|
import os
|
|
import subprocess
|
|
import logging
|
|
import logging.handlers as lh
|
|
import time
|
|
try:
|
|
import simplejson as json
|
|
except ImportError:
|
|
import json
|
|
|
|
config_file="/etc/opt/evio/config.json"
|
|
nid_file="/var/opt/evio/nid"
|
|
log_file="/var/log/evio/evio-control.log"
|
|
server_addr=None
|
|
logger=None
|
|
|
|
def runcmd(cmd):
|
|
""" Run a shell command. if fails, raise an exception. """
|
|
if cmd[0] is None:
|
|
raise ValueError("No executable specified to run")
|
|
p = subprocess.run(cmd, stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE, check=False)
|
|
return p
|
|
|
|
def setup_logger():
|
|
global logger
|
|
if os.path.isfile(log_file):
|
|
os.remove(log_file)
|
|
logger = logging.getLogger()
|
|
logger.setLevel(logging.DEBUG)
|
|
handler = lh.RotatingFileHandler(filename=log_file, maxBytes=10000,backupCount=2)
|
|
formatter = logging.Formatter(
|
|
"[%(asctime)s.%(msecs)03d] %(levelname)s:%(message)s", datefmt="%Y%m%d %H:%M:%S")
|
|
logging.Formatter.converter = time.localtime
|
|
handler.setFormatter(formatter)
|
|
logger.addHandler(handler)
|
|
|
|
def node_id():
|
|
with open(config_file) as f:
|
|
config = json.load(f)
|
|
if "NodeId" in config["CFx"]:
|
|
return config["CFx"]["NodeId"]
|
|
with open(nid_file) as f:
|
|
return f.readline().strip('\n')
|
|
|
|
def server_address():
|
|
with open(config_file) as f:
|
|
config = json.load(f)
|
|
if "OverlayVisualizer" in config:
|
|
return config["OverlayVisualizer"].get("WebServiceAddress")
|
|
|
|
def main():
|
|
setup_logger()
|
|
nid = node_id()
|
|
server_addr = server_address()
|
|
if server_addr is None:
|
|
logger.info("No web server address configured")
|
|
return
|
|
url=f'http://{server_addr}/eviocontrol/?nodeid={nid}'
|
|
resp=requests.get(url).json()
|
|
logger.info(f"Server response: {resp}")
|
|
if resp and nid == resp[0]["EvioControl"]["NodeId"]:
|
|
ctrl = resp[0]["EvioControl"]["Control"]
|
|
if ctrl not in ("stop", "start", "status"):
|
|
logger.info(f"Invalid evio control {ctrl} received from {url}")
|
|
return
|
|
cp = runcmd(["systemctl", ctrl, "openvswitch-switch"])
|
|
logger.info(cp)
|
|
cp = runcmd(["systemctl", ctrl, "evio"])
|
|
logger.info(cp)
|
|
logger.info("***************************************")
|
|
|
|
if __name__ == "__main__":
|
|
main() |