save and load config
This commit is contained in:
parent
edc9b2f510
commit
e3e0c47e2b
14
o_manager.py
14
o_manager.py
@ -47,6 +47,18 @@ class OManager:
|
|||||||
self.lb1_pm = ProcessManager(restart_interval=5, loop=self.loop)
|
self.lb1_pm = ProcessManager(restart_interval=5, loop=self.loop)
|
||||||
self.lb2_pm = ProcessManager(restart_interval=5, loop=self.loop)
|
self.lb2_pm = ProcessManager(restart_interval=5, loop=self.loop)
|
||||||
|
|
||||||
|
def load_instance_config(self, instance_config):
|
||||||
|
"""
|
||||||
|
[
|
||||||
|
ovpn_config
|
||||||
|
]
|
||||||
|
"""
|
||||||
|
for ovpn_config in instance_config:
|
||||||
|
self.new_op(ovpn_config)
|
||||||
|
|
||||||
|
def serialize_instance_config(self):
|
||||||
|
return [i["op"].export_cfg() for i in self.instances]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def pids(self):
|
def pids(self):
|
||||||
return [self.lb1_pm.pid, self.lb2_pm.pid]
|
return [self.lb1_pm.pid, self.lb2_pm.pid]
|
||||||
@ -207,7 +219,7 @@ class OManager:
|
|||||||
if not instance:
|
if not instance:
|
||||||
return
|
return
|
||||||
instance["op"].start()
|
instance["op"].start()
|
||||||
instance["weight"] = 1
|
instance["weight"] = 0
|
||||||
self.reset_lb()
|
self.reset_lb()
|
||||||
|
|
||||||
def stop_op(self, idx):
|
def stop_op(self, idx):
|
||||||
|
|||||||
@ -82,6 +82,9 @@ class Openvpn:
|
|||||||
self.load_cfg(ovpn_config, env_config)
|
self.load_cfg(ovpn_config, env_config)
|
||||||
|
|
||||||
def load_cfg(self, ovpn_config, env_config):
|
def load_cfg(self, ovpn_config, env_config):
|
||||||
|
self.ovpn_config = ovpn_config
|
||||||
|
self.env_config = env_config
|
||||||
|
|
||||||
self.cfg_fp = ovpn_config["cfg_fp"]
|
self.cfg_fp = ovpn_config["cfg_fp"]
|
||||||
self.name = ovpn_config["name"]
|
self.name = ovpn_config["name"]
|
||||||
self.additional_cfg = ovpn_config.get("additional_cfg", {})
|
self.additional_cfg = ovpn_config.get("additional_cfg", {})
|
||||||
|
|||||||
@ -13,7 +13,7 @@
|
|||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
||||||
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
|
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
|
||||||
<title>Openvpn Load Balancing Socks5 Server</title>
|
<title>OLBS Dashboard</title>
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin>
|
<link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin>
|
||||||
<meta name="msapplication-TileColor" content="#206bc4" />
|
<meta name="msapplication-TileColor" content="#206bc4" />
|
||||||
<meta name="theme-color" content="#206bc4" />
|
<meta name="theme-color" content="#206bc4" />
|
||||||
@ -37,161 +37,6 @@
|
|||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="antialiased">
|
<body class="antialiased">
|
||||||
<aside class="navbar navbar-vertical navbar-expand-lg navbar-dark">
|
|
||||||
<div class="container">
|
|
||||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar-menu">
|
|
||||||
<span class="navbar-toggler-icon"></span>
|
|
||||||
</button>
|
|
||||||
<a href="." class="navbar-brand navbar-brand-autodark">
|
|
||||||
Dashboard
|
|
||||||
</a>
|
|
||||||
<div class="navbar-nav flex-row d-lg-none">
|
|
||||||
<div class="nav-item dropdown d-none d-md-flex mr-3">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="collapse navbar-collapse" id="navbar-menu">
|
|
||||||
<ul class="navbar-nav pt-lg-3">
|
|
||||||
<li class="nav-item active">
|
|
||||||
<a class="nav-link" href="./index.html">
|
|
||||||
<span class="nav-link-icon d-md-none d-lg-inline-block"><svg xmlns="http://www.w3.org/2000/svg"
|
|
||||||
class="icon" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"
|
|
||||||
fill="none" stroke-linecap="round" stroke-linejoin="round">
|
|
||||||
<path stroke="none" d="M0 0h24v24H0z" />
|
|
||||||
<polyline points="5 12 3 12 12 3 21 12 19 12" />
|
|
||||||
<path d="M5 12v7a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-7" />
|
|
||||||
<path d="M9 21v-6a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v6" /></svg>
|
|
||||||
</span>
|
|
||||||
<span class="nav-link-title">
|
|
||||||
Home
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="nav-item dropdown">
|
|
||||||
<a class="nav-link dropdown-toggle" href="#navbar-base" data-toggle="dropdown" role="button"
|
|
||||||
aria-expanded="false">
|
|
||||||
<span class="nav-link-icon d-md-none d-lg-inline-block"><svg xmlns="http://www.w3.org/2000/svg"
|
|
||||||
class="icon" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"
|
|
||||||
fill="none" stroke-linecap="round" stroke-linejoin="round">
|
|
||||||
<path stroke="none" d="M0 0h24v24H0z" />
|
|
||||||
<rect x="4" y="4" width="6" height="5" rx="2" />
|
|
||||||
<rect x="4" y="13" width="6" height="7" rx="2" />
|
|
||||||
<rect x="14" y="4" width="6" height="7" rx="2" />
|
|
||||||
<rect x="14" y="15" width="6" height="5" rx="2" /></svg>
|
|
||||||
</span>
|
|
||||||
<span class="nav-link-title">
|
|
||||||
Connections
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
<ul class="dropdown-menu dropdown-menu-columns dropdown-menu-columns-2">
|
|
||||||
<li>
|
|
||||||
<a class="dropdown-item" href="./empty.html">
|
|
||||||
Empty page
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a class="dropdown-item" href="./blank.html">
|
|
||||||
Blank page
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a class="dropdown-item" href="./buttons.html">
|
|
||||||
Buttons
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a class="dropdown-item" href="./cards.html">
|
|
||||||
Cards
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a class="dropdown-item" href="./dropdowns.html">
|
|
||||||
Dropdowns
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a class="dropdown-item" href="./icons.html">
|
|
||||||
Icons
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a class="dropdown-item" href="./modals.html">
|
|
||||||
Modals
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a class="dropdown-item" href="./maps.html">
|
|
||||||
Maps
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a class="dropdown-item" href="./maps-vector.html">
|
|
||||||
Vector maps
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a class="dropdown-item" href="./navigation.html">
|
|
||||||
Navigation
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a class="dropdown-item" href="./charts.html">
|
|
||||||
Charts
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a class="dropdown-item" href="./tables.html">
|
|
||||||
Tables
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a class="dropdown-item" href="./calendar.html">
|
|
||||||
Calendar
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a class="dropdown-item" href="./carousel.html">
|
|
||||||
Carousel
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a class="dropdown-item" href="./lists.html">
|
|
||||||
Lists
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="dropright">
|
|
||||||
<a class="dropdown-item dropdown-toggle" href="#sidebar-authentication" data-toggle="dropdown"
|
|
||||||
role="button" aria-expanded="false">
|
|
||||||
Authentication
|
|
||||||
</a>
|
|
||||||
<div class="dropdown-menu">
|
|
||||||
<a href="./sign-in.html" class="dropdown-item">Sign in</a>
|
|
||||||
<a href="./sign-up.html" class="dropdown-item">Sign up</a>
|
|
||||||
<a href="./forgot-password.html" class="dropdown-item">Forgot password</a>
|
|
||||||
<a href="./terms-of-service.html" class="dropdown-item">Terms of service</a>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
<li class="dropright">
|
|
||||||
<a class="dropdown-item dropdown-toggle" href="#sidebar-error" data-toggle="dropdown" role="button"
|
|
||||||
aria-expanded="false">
|
|
||||||
Error pages
|
|
||||||
</a>
|
|
||||||
<div class="dropdown-menu">
|
|
||||||
<a href="./400.html" class="dropdown-item">400 page</a>
|
|
||||||
<a href="./401.html" class="dropdown-item">401 page</a>
|
|
||||||
<a href="./403.html" class="dropdown-item">403 page</a>
|
|
||||||
<a href="./404.html" class="dropdown-item">404 page</a>
|
|
||||||
<a href="./500.html" class="dropdown-item">500 page</a>
|
|
||||||
<a href="./503.html" class="dropdown-item">503 page</a>
|
|
||||||
<a href="./maintenance.html" class="dropdown-item">Maintenance page</a>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</aside>
|
|
||||||
<div class="page">
|
<div class="page">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="container-xl">
|
<div class="container-xl">
|
||||||
@ -200,80 +45,37 @@
|
|||||||
<div class="row align-items-center">
|
<div class="row align-items-center">
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
<h2 class="page-title">
|
<h2 class="page-title">
|
||||||
Home
|
Openvpn Load Balancing Socks5 Server
|
||||||
</h2>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row row-deck row-cards">
|
<div class="row row-deck row-cards">
|
||||||
|
<div class="col-lg-12">
|
||||||
|
|
||||||
|
|
||||||
<div class="col-sm-6 col-xl-3">
|
|
||||||
<div class="card card-sm">
|
|
||||||
<div class="card-body d-flex align-items-center">
|
|
||||||
<span class="bg-blue text-white stamp mr-3"><svg xmlns="http://www.w3.org/2000/svg" class="icon"
|
|
||||||
width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none"
|
|
||||||
stroke-linecap="round" stroke-linejoin="round">
|
|
||||||
<path stroke="none" d="M0 0h24v24H0z" />
|
|
||||||
<path d="M16.7 8a3 3 0 0 0 -2.7 -2h-4a3 3 0 0 0 0 6h4a3 3 0 0 1 0 6h-4a3 3 0 0 1 -2.7 -2" />
|
|
||||||
<path d="M12 3v3m0 12v3" /></svg>
|
|
||||||
</span>
|
|
||||||
<div class="mr-3 lh-sm">
|
|
||||||
<div class="strong">
|
|
||||||
132 Sales
|
|
||||||
</div>
|
|
||||||
<div class="text-muted">12 waiting payments</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-6 col-xl-3">
|
|
||||||
<div class="card card-sm">
|
|
||||||
<div class="card-body d-flex align-items-center">
|
|
||||||
<span class="bg-green text-white stamp mr-3"><svg xmlns="http://www.w3.org/2000/svg" class="icon"
|
|
||||||
width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none"
|
|
||||||
stroke-linecap="round" stroke-linejoin="round">
|
|
||||||
<path stroke="none" d="M0 0h24v24H0z" />
|
|
||||||
<circle cx="9" cy="19" r="2" />
|
|
||||||
<circle cx="17" cy="19" r="2" />
|
|
||||||
<path d="M3 3h2l2 12a3 3 0 0 0 3 2h7a3 3 0 0 0 3 -2l1 -7h-15.2" /></svg>
|
|
||||||
</span>
|
|
||||||
<div class="mr-3 lh-sm">
|
|
||||||
<div class="strong">
|
|
||||||
78 Orders
|
|
||||||
</div>
|
|
||||||
<div class="text-muted">32 shipped</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-6 col-xl-3">
|
|
||||||
<div class="card card-sm">
|
|
||||||
<div class="card-body d-flex align-items-center">
|
|
||||||
<div class="mr-3">
|
|
||||||
<div class="chart-sparkline chart-sparkline-square" id="sparkline-67"></div>
|
|
||||||
</div>
|
|
||||||
<div class="mr-3 lh-sm">
|
|
||||||
<div class="strong">
|
|
||||||
1,352 Members
|
|
||||||
</div>
|
|
||||||
<div class="text-muted">163 registered today</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-6 col-xl-3">
|
|
||||||
<div class="card card-sm">
|
<div class="card card-sm">
|
||||||
<div class="card-body d-flex align-items-center">
|
<div class="card-body d-flex align-items-center">
|
||||||
<div class="mr-3 lh-sm">
|
<div class="mr-3 lh-sm">
|
||||||
<div class="strong">
|
<button type="button" class="btn btn-outline-success" onclick="add_new_instance()">Add New
|
||||||
132 Comments
|
Instance</button>
|
||||||
</div>
|
|
||||||
<div class="text-muted">16 waiting</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-auto">
|
<div class="mr-3 lh-sm">
|
||||||
<div class="chart-sparkline chart-sparkline-square" id="sparkline-68"></div>
|
<button type="button" class="btn btn-outline-secondary" onclick="start_all()">Start All</button>
|
||||||
|
</div>
|
||||||
|
<div class="mr-3 lh-sm">
|
||||||
|
<div class="strong">
|
||||||
|
<button type="button" class="btn btn-outline-secondary" onclick="stop_all()">Stop All</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mr-3 lh-sm">
|
||||||
|
<div class="strong">
|
||||||
|
<button type="button" class="btn btn-outline-danger" onclick="remove_all()">Remove All</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mr-3 lh-sm">
|
||||||
|
<div class="strong">
|
||||||
|
<button type="button" class="btn btn-outline-info" onclick="save_current_config()">Save Current
|
||||||
|
Config</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -344,14 +146,10 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row text-center align-items-center flex-row-reverse">
|
<div class="row text-center align-items-center flex-row-reverse">
|
||||||
<div class="col-lg-auto ml-lg-auto">
|
<div class="col-lg-auto ml-lg-auto">
|
||||||
<ul class="list-inline list-inline-dots mb-0">
|
|
||||||
<li class="list-inline-item"><a href="" class="link-secondary"></a></li>
|
|
||||||
<li class="list-inline-item"><a href="" class="link-secondary"></a></li>
|
|
||||||
<li class="list-inline-item"><a href="" target="_blank" class="link-secondary"></a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 col-lg-auto mt-3 mt-lg-0">
|
<div class="col-12 col-lg-auto mt-3 mt-lg-0">
|
||||||
2020
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
17
test.py
17
test.py
@ -4,6 +4,7 @@ import json
|
|||||||
import argparse
|
import argparse
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import logging
|
||||||
from o_manager import OManager
|
from o_manager import OManager
|
||||||
dir_path = os.path.dirname(os.path.realpath(__file__))
|
dir_path = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
|
||||||
@ -17,6 +18,15 @@ session_folder = args["session_folder"]
|
|||||||
interface = args["interface"]
|
interface = args["interface"]
|
||||||
om = OManager(session_folder, interface)
|
om = OManager(session_folder, interface)
|
||||||
|
|
||||||
|
root = os.path.dirname(__file__)
|
||||||
|
instance_config_fp = os.path.join(root, "config/instances.json")
|
||||||
|
|
||||||
|
try:
|
||||||
|
instance_config = json.load(open(instance_config_fp, "r"))
|
||||||
|
om.load_instance_config(instance_config)
|
||||||
|
except Exception as err:
|
||||||
|
logging.warn(f"Cannot load instances config: {err}")
|
||||||
|
|
||||||
|
|
||||||
class MainHandler(tornado.web.RequestHandler):
|
class MainHandler(tornado.web.RequestHandler):
|
||||||
def get(self):
|
def get(self):
|
||||||
@ -115,7 +125,12 @@ class ClearCacheInstatnceHandler(tornado.web.RequestHandler):
|
|||||||
om.clear_cache()
|
om.clear_cache()
|
||||||
|
|
||||||
|
|
||||||
root = os.path.dirname(__file__)
|
class SaveConfig(tornado.web.RequestHandler):
|
||||||
|
def get(self):
|
||||||
|
instances = om.serialize_instance_config()
|
||||||
|
with open(os.path.join(root), instance_config_fp, "w") as f:
|
||||||
|
f.write(json.dumps(instances))
|
||||||
|
self.write("OK")
|
||||||
|
|
||||||
|
|
||||||
def make_app():
|
def make_app():
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user