From b570be7e2b8fbdbcbfc102143f2c96038a11fecf Mon Sep 17 00:00:00 2001 From: Pavel Loginov Date: Sun, 1 Sep 2019 13:00:33 +0300 Subject: [PATCH] v3.4.4.6 Auto start --- app/ovw.py | 2 +- app/sql.py | 3 +++ app/templates/ajax/overview.html | 9 +++++++-- app/templates/base.html | 2 +- app/tools/keep_alive.py | 3 ++- image/pic/shield.png | Bin 0 -> 19143 bytes 6 files changed, 14 insertions(+), 5 deletions(-) create mode 100644 image/pic/shield.png diff --git a/app/ovw.py b/app/ovw.py index 5cfd99f..84fe5c8 100644 --- a/app/ovw.py +++ b/app/ovw.py @@ -18,7 +18,7 @@ async def async_get_overview(serv1, serv2): commands1 = [ "ps ax |grep waf/bin/modsecurity |grep -v grep |wc -l" ] cmd = 'echo "show info" |nc %s %s |grep -e "Process_num"' % (serv2, haproxy_sock_port) - server_status = (serv1, serv2, funct.server_status(funct.subprocess_execute(cmd)), funct.ssh_command(serv2, commands), funct.ssh_command(serv2, commands1)) + server_status = (serv1, serv2, funct.server_status(funct.subprocess_execute(cmd)), funct.ssh_command(serv2, commands), funct.ssh_command(serv2, commands1), sql.select_servers(server=serv2, keep_alive=1)) return server_status async def get_runner_overview(): diff --git a/app/sql.py b/app/sql.py index c288720..3ca66e1 100644 --- a/app/sql.py +++ b/app/sql.py @@ -238,6 +238,7 @@ def select_user_name_group(id): def select_servers(**kwargs): con, cur = create_db.get_cur() sql = """select * from servers where enable = '1' ORDER BY groups """ + if kwargs.get("server") is not None: sql = """select * from servers where ip='%s' """ % kwargs.get("server") if kwargs.get("full") is not None: @@ -250,6 +251,8 @@ def select_servers(**kwargs): left join uuid as uuid on user.id = uuid.user_id where uuid.uuid = '%s' and servers.master = 0 and servers.type_ip = 0 and servers.enable = 1 ORDER BY servers.groups """ % kwargs.get('uuid') + if kwargs.get("server") and kwargs.get("keep_alive"): + sql = """select active from servers where ip='%s' """ % kwargs.get("server") try: cur.execute(sql) except sqltool.Error as e: diff --git a/app/templates/ajax/overview.html b/app/templates/ajax/overview.html index ccbbe86..cf76e32 100644 --- a/app/templates/ajax/overview.html +++ b/app/templates/ajax/overview.html @@ -1,7 +1,12 @@ {% for service in service_status %} - - {{ service.0 }} + + + {{ service.0 }} + {% if service.5.0.0|int() >= 1 %} + + {% endif %} + {% if service.2|int() >= 1 %} diff --git a/app/templates/base.html b/app/templates/base.html index 8898158..eb0edaa 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -115,7 +115,7 @@ diff --git a/app/tools/keep_alive.py b/app/tools/keep_alive.py index 0d89ad9..cd978e4 100644 --- a/app/tools/keep_alive.py +++ b/app/tools/keep_alive.py @@ -32,8 +32,9 @@ def main(): except CalledProcessError as e: alert = "Try start HAProxy serivce at " + serv[0] funct.logging("localhost", " "+alert, keep_alive=1) + start_command = [] - start_command.append(sql.get_setting('restart_command')) + start_command.append('sudo '+sql.get_setting('restart_command')) funct.ssh_command(serv[0], start_command) time.sleep(30) continue diff --git a/image/pic/shield.png b/image/pic/shield.png new file mode 100644 index 0000000000000000000000000000000000000000..fc0aae95661bc74f76826b4fedbae18c2d7e3d67 GIT binary patch literal 19143 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 e9qN%hxky2ub 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 literal 0 HcmV?d00001