New the overview HAProxy-WI page
New the overview HAProxy page
pull/145/head
Pavel Loginov 2019-09-22 18:46:26 +03:00
parent 8228168082
commit 9f8aea610c
18 changed files with 429 additions and 194 deletions

View File

@ -401,7 +401,7 @@ def update_db_v_3_4_7(**kwargs):
def update_ver(**kwargs): def update_ver(**kwargs):
con, cur = get_cur() con, cur = get_cur()
sql = """update version set version = '3.4.8.1'; """ sql = """update version set version = '3.4.9'; """
try: try:
cur.execute(sql) cur.execute(sql)
con.commit() con.commit()

57
app/hapservers.py Normal file
View File

@ -0,0 +1,57 @@
#!/usr/bin/env python3
import funct, sql
import create_db
import os, http.cookies
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/'))
template = env.get_template('hapservers.html')
print('Content-type: text/html\n')
try:
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
user_id = cookie.get('uuid')
user = sql.get_user_name_by_uuid(user_id.value)
users = sql.select_users()
groups = sql.select_groups()
token = sql.get_token(user_id.value)
servers = sql.get_dick_permit()
except:
pass
haproxy_sock_port = sql.get_setting('haproxy_sock_port')
servers_with_status1 = []
out1 = ""
for s in servers:
# print(s[2])
servers_with_status = list()
cmd = 'echo "show info" |nc %s %s -w 1 |grep -e "Ver\|Uptime:"' % (s[2], haproxy_sock_port)
# print(cmd )
out = funct.subprocess_execute(cmd)
servers_with_status.append(s[0])
servers_with_status.append(s[1])
servers_with_status.append(s[2])
servers_with_status.append(s[11])
for k in out:
if "Ncat: Connection refused." not in k and "Ncat: Connection timed out." not in k:
out1 = out
else:
out1 = False
servers_with_status.append(out1)
servers_with_status1.append(servers_with_status)
# print(servers_with_status1)
template = template.render(h2 = 1,
autorefresh = 1,
title = "HAProxy servers overview",
role = sql.get_user_role_by_uuid(user_id.value),
user = user,
users = users,
groups = groups,
servers = servers_with_status1,
versions = funct.versions(),
token = token)
print(template)

View File

@ -28,6 +28,8 @@ try:
metrics_master, stderr = funct.subprocess_execute(cmd) metrics_master, stderr = funct.subprocess_execute(cmd)
cmd = "ps ax |grep -e 'metrics_worker\|metrics_waf_worker.py' |grep -v grep |wc -l" cmd = "ps ax |grep -e 'metrics_worker\|metrics_waf_worker.py' |grep -v grep |wc -l"
metrics_worker, stderr = funct.subprocess_execute(cmd) metrics_worker, stderr = funct.subprocess_execute(cmd)
cmd = "ps ax |grep -e 'keep_alive.py' |grep -v grep |wc -l"
keep_alive, stderr = funct.subprocess_execute(cmd)
except: except:
pass pass
@ -43,6 +45,7 @@ template = template.render(h2 = 1,
metrics_worker = ''.join(metrics_worker), metrics_worker = ''.join(metrics_worker),
checker_master = ''.join(checker_master), checker_master = ''.join(checker_master),
checker_worker = ''.join(checker_worker), checker_worker = ''.join(checker_worker),
keep_alive = ''.join(keep_alive),
error = stderr, error = stderr,
versions = funct.versions(), versions = funct.versions(),
token = token) token = token)

View File

@ -15,15 +15,14 @@ server_status = ()
async def async_get_overview(serv1, serv2): async def async_get_overview(serv1, serv2):
haproxy_config_path = sql.get_setting('haproxy_config_path') haproxy_config_path = sql.get_setting('haproxy_config_path')
commands = [ "ls -l %s |awk '{ print $6\" \"$7\" \"$8}'" % haproxy_config_path ] commands = [ "ls -l %s |awk '{ print $6\" \"$7\" \"$8}'" % haproxy_config_path ]
commands1 = [ "ps ax |grep waf/bin/modsecurity |grep -v grep |wc -l" ] # commands1 = [ "ps ax |grep waf/bin/modsecurity |grep -v grep |wc -l" ]
commands2 = "ps ax |grep keep_alive.py |grep -v grep |wc -l" commands2 = "ps ax |grep keep_alive.py |grep -v grep |wc -l"
cmd = 'echo "show info" |nc %s %s |grep -e "Process_num"' % (serv2, haproxy_sock_port) cmd = 'echo "show info" |nc %s %s -w 1|grep -e "Process_num"' % (serv2, haproxy_sock_port)
server_status = (serv1, server_status = (serv1,
serv2, serv2,
funct.server_status(funct.subprocess_execute(cmd)), funct.server_status(funct.subprocess_execute(cmd)),
funct.ssh_command(serv2, commands), funct.ssh_command(serv2, commands),
funct.ssh_command(serv2, commands1),
sql.select_servers(server=serv2, keep_alive=1), sql.select_servers(server=serv2, keep_alive=1),
funct.subprocess_execute(commands2)) funct.subprocess_execute(commands2))
return server_status return server_status
@ -68,8 +67,13 @@ def get_overviewWaf(url):
ioloop.close() ioloop.close()
async def async_get_overviewServers(serv1, serv2, desc): async def async_get_overviewServers(serv1, serv2, desc):
commands = [ "top -u haproxy -b -n 1" ] # commands = [ "top -u haproxy -b -n 1" ]
cmd = 'echo "show info" |nc %s %s |grep -e "Ver\|CurrConns\|SessRate\|Maxco\|MB\|Uptime:"' % (serv2, haproxy_sock_port) # commands = [ "top -u haproxy -b -n 1 -o %MEM |grep -e 'haproxy\|PID' |awk '{print $1\"\t\"$5\"\t\"$9\"\t\"$10\"\t\"$11}'" ]
commands = [ "top -u haproxy -b -n 1 -w 67 |grep -e 'haproxy\|PID\|Cpu\|KiB' |grep -v Swap" ]
if desc == "hapservers.py":
cmd = 'echo "show info" |nc %s %s -w 1|grep -e "Ver\|CurrConns\|Maxco\|MB\|Uptime:"' % (serv2, haproxy_sock_port)
else:
cmd = 'echo "show info" |nc %s %s -w 1|grep -e "Ver\|CurrConns\|SessRate\|Maxco\|MB\|Uptime:"' % (serv2, haproxy_sock_port)
out = funct.subprocess_execute(cmd) out = funct.subprocess_execute(cmd)
out1 = "" out1 = ""
user_id = cookie.get('uuid') user_id = cookie.get('uuid')
@ -81,7 +85,7 @@ async def async_get_overviewServers(serv1, serv2, desc):
os.system("/bin/rm -f " + cfg) os.system("/bin/rm -f " + cfg)
for k in out: for k in out:
if "Ncat: Connection refused." not in k: if "Ncat: Connection refused." not in k and "Ncat: Connection timed out." not in k:
for r in k: for r in k:
out1 += r out1 += r
out1 += "<br />" out1 += "<br />"
@ -95,21 +99,27 @@ async def async_get_overviewServers(serv1, serv2, desc):
return server_status return server_status
async def get_runner_overviewServers(): async def get_runner_overviewServers(**kwargs):
template = env.get_template('overviewServers.html') template = env.get_template('overviewServers.html')
user_id = cookie.get('uuid') user_id = cookie.get('uuid')
role = sql.get_user_role_by_uuid(user_id.value) role = sql.get_user_role_by_uuid(user_id.value)
if kwargs.get('server1'):
futures = [async_get_overviewServers(kwargs.get('server1'), kwargs.get('server2'), 'hapservers.py')]
else:
futures = [async_get_overviewServers(server[1], server[2], server[11]) for server in listhap] futures = [async_get_overviewServers(server[1], server[2], server[11]) for server in listhap]
for i, future in enumerate(asyncio.as_completed(futures)): for i, future in enumerate(asyncio.as_completed(futures)):
result = await future result = await future
servers.append(result) servers.append(result)
servers_sorted = sorted(servers, key=funct.get_key) servers_sorted = sorted(servers, key=funct.get_key)
template = template.render(service_status=servers_sorted, role=role) template = template.render(service_status=servers_sorted, role=role,page=kwargs.get('page'))
print(template) print(template)
def get_overviewServers(): def get_overviewServers(**kwargs):
server1 = kwargs.get('name')
server2 = kwargs.get('ip')
page = kwargs.get('page')
ioloop = asyncio.get_event_loop() ioloop = asyncio.get_event_loop()
ioloop.run_until_complete(get_runner_overviewServers()) ioloop.run_until_complete(get_runner_overviewServers(server1=server1, server2=server2,page=page))
ioloop.close() ioloop.close()
def get_map(serv): def get_map(serv):

View File

@ -117,5 +117,6 @@
<button type='submit' value='save' name='save' class='btn btn-default'>Just save</button> <button type='submit' value='save' name='save' class='btn btn-default'>Just save</button>
<button type='submit' value='' name='' class='btn btn-default'>Upload and restart</button> <button type='submit' value='' name='' class='btn btn-default'>Upload and restart</button>
</form> </form>
<div class="alert alert-info"><b>Note:</b> If you reconfigure Master server, Slave will reconfigured automatically</div>
</center> </center>
{% endif %} {% endif %}

View File

@ -4,14 +4,15 @@
{% do waf_servers.append(1) %} {% do waf_servers.append(1) %}
<tr class="{{ loop.cycle('odd', 'even') }}" id="{{service.0}}-select-line"> <tr class="{{ loop.cycle('odd', 'even') }}" id="{{service.0}}-select-line">
<td class="padding10 first-collumn"> <td class="padding10 first-collumn">
{% if service.2|int() >= 1 %}
<span class="serverUp" title="running {{service.2 }} processes"> UP</span>
{% else %}
<span class="serverDown"> DOWN</span>
{% endif %}
<a href="#{{ service.0 }}" title="Go to {{ service.0 }} status" style="color: #000">{{ service.0 }}</a> <a href="#{{ service.0 }}" title="Go to {{ service.0 }} status" style="color: #000">{{ service.0 }}</a>
</td> </td>
<td class="second-collumn"> <td class="second-collumn">
{% if service.2|int() >= 1 %}
<span class="serverUp"> UP</span> running {{service.2 }} processes
{% else %}
<span class="serverDown"> DOWN</span> running {{service.2 }} processes
{% endif %}
</td> </td>
<td> <td>
{% if role <= 1 %} {% if role <= 1 %}

View File

@ -1,12 +1,17 @@
{% for service in service_status %} {% for service in service_status %}
<tr class="{{ loop.cycle('odd', 'even') }}"> <tr class="{{ loop.cycle('odd', 'even') }}">
<td class="padding10"> <td class="padding10 first-collumn">
<a href="#{{ service.0 }}" title="Go to {{ service.0 }} status" style="color: #000; padding-left: 15px;"> {% if service.2|int() >= 1 %}
<span class="serverUp" title="running {{service.2 }} processes"> UP</span>
{% else %}
<span class="serverDown"> DOWN</span>
{% endif %}
<a href="#{{ service.0 }}" title="Go to {{ service.0 }} status" style="color: #000;">
{{ service.0 }} {{ service.0 }}
{% if service.5.0.0|int() >= 1 %} {% if service.4.0.0|int() >= 1 %}
<img <img
{% if service.6.0.0|int() >= 1 %} {% if service.5.0.0|int() >= 1 %}
src="/inc/images/shield.png" title="Auto start enabled" src="/inc/images/shield.png" title="Auto start enabled"
{% else %} {% else %}
src="/inc/images/shield-red.png" title="Auto start enabled, but keep alive service does not work" src="/inc/images/shield-red.png" title="Auto start enabled, but keep alive service does not work"
@ -17,11 +22,7 @@
</a> </a>
</td> </td>
<td class="second-collumn"> <td class="second-collumn">
{% if service.2|int() >= 1 %}
<span class="serverUp"> UP</span> running {{service.2 }} processes
{% else %}
<span class="serverDown"> DOWN</span> running {{service.2 }} processes
{% endif %}
</td> </td>
<td> <td>
{% if role <= 1 %} {% if role <= 1 %}

View File

@ -1,36 +1,46 @@
{% for service in service_status %} {% for service in service_status %}
<tr> <div class="server-info">
<td class="overviewTr first-collumn">
{% if page != 'hapservers.py' %}
<a name="{{ service.0 }}"></a> <a name="{{ service.0 }}"></a>
{% if service.5 != "None" %} {% if service.5 != "None" %}
<h4 title="IP {{ service.1 }} {{ service.5 }}"> {{ service.0 }} :</h4> <h4 title="IP {{ service.1 }} {{ service.5 }}"> {{ service.0 }} :</h4>
{% else %} {% else %}
<h4 title="IP {{ service.1 }}"> {{ service.0 }} :</h4> <h4 title="IP {{ service.1 }}"> {{ service.0 }} :</h4>
{% endif %} {% endif %}
</td>
<td class="overviewTd" style="padding-top: 10px;"> {% endif %}
<pre style="font-size: 12px;"> <div class="haproxy-info">
{{ service.2 }} {{ service.2 }}
</pre> </div>
</td> <div class="top-info">
<td> <pre>
<pre style="font-size: 12px; padding-left: 0px;">
{{ service.3 }} {{ service.3 }}
</pre> </pre>
</td> </div>
<td style="padding: 10px; padding-bottom: 0;font-size: 12px;">
{% if page != 'hapservers.py' %}
<span style="padding-left: 0px; margin: 0;"> <span style="padding-left: 0px; margin: 0;">
{% if 'Unknown command' in service.4 %} {% if 'Unknown command' in service.4 %}
Too old version HAProxy Too old version HAProxy
{% else %} {% else %}
{% for s in service.4 %} {% for s in service.4 %}
{% if role <= 2 %}
<a href="/app/sections.py?serv={{service.1}}&section={{ s }}" title="Edit {{s}} section" target="_blanck"> <a href="/app/sections.py?serv={{service.1}}&section={{ s }}" title="Edit {{s}} section" target="_blanck">
{{s}} {{s}}
</a><br /> </a>
{% else %}
{{ s }}
{% endif %}
<br />
{% endfor %} {% endfor %}
{% endif %} {% endif %}
</span> </span>
</td>
<td></td> {% endif %}
</tr>
</div>
{% endfor %} {% endfor %}

View File

@ -42,7 +42,7 @@
</li> </li>
<li class="p_menu"><a title="Actions with Haproxy configs" class="config-show">Haproxy</a> <li class="p_menu"><a title="Actions with Haproxy configs" class="config-show">Haproxy</a>
<ul class="v_menu"> <ul class="v_menu">
<li><a href=/app/config.py title="Working with Haproxy Configs" class="edit head-submenu">Configs</a> </li> <li><a href=/app/hapservers.py title="Working with Haproxy Configs" class="overview-link head-submenu">Overview</a> </li>
{% if role <= 2 %} {% if role <= 2 %}
<li><a href=/app/add.py#listner title="Add single listen" class="add head-submenu" id="add1">Add listen</a></li> <li><a href=/app/add.py#listner title="Add single listen" class="add head-submenu" id="add1">Add listen</a></li>
<li><a href=/app/add.py#frontend title="Add single frontend" class="add head-submenu" id="add2">Add frontend</a></li> <li><a href=/app/add.py#frontend title="Add single frontend" class="add head-submenu" id="add2">Add frontend</a></li>

View File

@ -28,9 +28,7 @@
</div> </div>
{% endif %} {% endif %}
{% endif %} {% endif %}
{% if note %}
<div class="alert alert-info"><b>Note:</b> If you reconfigure Master server, Slave will reconfigured automatically</div>
{% endif %}
{% if open %} {% if open %}
<center> <center>
<h4>Choose old version</h4> <h4>Choose old version</h4>
@ -51,6 +49,7 @@
<a class="ui-button ui-widget ui-corner-all" id="show" title="Enter" onclick="showUploadConfig()">Select</a> <a class="ui-button ui-widget ui-corner-all" id="show" title="Enter" onclick="showUploadConfig()">Select</a>
</p> </p>
</form> </form>
</center> </center>
{% endif %} {% endif %}
{% if aftersave %} {% if aftersave %}

View File

@ -16,10 +16,12 @@
</select> </select>
<button type="submit" value="open" name="open" class="btn btn-default">Open</button> <button type="submit" value="open" name="open" class="btn btn-default">Open</button>
</form> </form>
</p> {% if not aftersave and not open %}
{% if note %} <div class="add-note addName alert-info" style="width: inherit; margin-right: 15px;">
<div class="alert alert-info"><b>Note:</b> If you reconfigure Master server, Slave will reconfigured automatically</div> Here you can work with previous versions of HAProxy configs. Roll back to them, view or delete
</div>
{% endif %} {% endif %}
</p>
{% if open %} {% if open %}
<center> <center>
<h4>Choose old version</h4> <h4>Choose old version</h4>
@ -40,6 +42,7 @@
</p> </p>
</form> </form>
</center> </center>
<div class="alert alert-info"><b>Note:</b> If you reconfigure Master server, Slave will reconfigured automatically</div>
{% endif %} {% endif %}
{% if aftersave %} {% if aftersave %}
<div class="alert alert-info"><b>The following files were deleted:</b><br /> </div> <div class="alert alert-info"><b>The following files were deleted:</b><br /> </div>

View File

@ -0,0 +1,49 @@
{% extends "base.html" %}
{% block content %}
{% for s in servers %}
<div class="div-pannel">
<div id="div-server-{{s.0}}" class="div-server">
<div class="server-name">
{% if s.5 != False %}
<span class="serverUp server-status" title="{{s.5.0.0}} {{s.5.0.1}}"></span>
{% else %}
<span class="serverDown server-status" title="HAProxy is down"></span>
{% endif %}
<span title="Show info about {{s.2}}" onclick="showOverviewServer('{{s.1}}', '{{s.2}}', '{{s.0}}')" style="cursor: pointer;">{{s.1}}</span>
{% if role <= 1 %}
<span class="server-action">
<a id="{{ s.2 }}" class="start" title="Start HAProxy service">
<img src=/inc/images/start.png alt="start" class="icon" style="margin-bottom: -2px;" onclick="confirmAjaxAction('start', 'hap', '{{s.2}}')">
</a>
<a id="{{ s.2 }}" class="stop" title="Stop HAProxy service">
<img src=/inc/images/stop.png alt="stop" class="icon" width="17px" onclick="confirmAjaxAction('stop', 'hap', '{{s.2}}')">
</a>
<a id="{{ s.2 }}" class="restart" title="Restart HAProxy service">
<img src=/inc/images/update.png alt="restart" class="icon">
</a>
</span>
{% endif %}
</div>
<div class="server-desc">
{{s.3}}
</div>
<div class="server-act-links">
<a href="/app/config.py?serv={{s.2}}&showConfig" class="ui-button ui-widget ui-corner-all" title="Open running config" target="_blank">Open</a>
<a href="/app/config.py?serv={{s.2}}&showCompare" class="ui-button ui-widget ui-corner-all" title="Compare configs" target="_blank">Compare</a>
<a href="/app/config.py?serv={{s.2}}&showMap" class="ui-button ui-widget ui-corner-all" title="Show map" target="_blank">Map</a>
<a href="/app/viewsttats.py?serv={{s.2}}" class="ui-button ui-widget ui-corner-all" title="View stat" target="_blank">Stat</a>
{% if role <= 2 %}
<a href="/app/versions.py?serv={{s.2}}&open=open" class="ui-button ui-widget ui-corner-all" title="Show verisons">Verisons</a>
{% endif %}
</div>
</div>
<div id="ajax-server-{{s.0}}" class="ajax-server"></div>
</div>
{% endfor %}
<div id="dialog-confirm" style="display: none;">
<p><span class="ui-icon ui-icon-alert" style="float:left; margin:3px 12px 20px 0;"></span>Are you sure?</p>
</div>
<script src="/inc/overview.js"></script>
{% endblock %}

View File

@ -7,7 +7,7 @@
<table class="overview"> <table class="overview">
<tr class="overviewHead"> <tr class="overviewHead">
<td class="padding10 first-collumn">Login</td> <td class="padding10 first-collumn">Login</td>
<td class="padding10 second-collumn">Email</td> <td class="padding10 second-collumn"><!--Email--></td>
<td class="second-collumn">Group</td> <td class="second-collumn">Group</td>
<td>Role</td> <td>Role</td>
<td class="padding10"> <td class="padding10">
@ -29,7 +29,7 @@
<img src="/inc/images/edit.png" alt="Edit" width="15" style="margin-bottom: -3px;" /> <img src="/inc/images/edit.png" alt="Edit" width="15" style="margin-bottom: -3px;" />
</a> </a>
</td> </td>
<td class="padding10 second-collumn"> {{ USER.2 }}</td> <td class="padding10 second-collumn"> <!--{{ USER.2 }}--></td>
{% for group in groups %} {% for group in groups %}
{% if USER.5 == group.0|string() %} {% if USER.5 == group.0|string() %}
<td class="third-collumn">{{ group.1 }}</td> <td class="third-collumn">{{ group.1 }}</td>
@ -73,8 +73,8 @@
<span title="running {{ metrics_master }} master processes"><span class="serverDown"> DOWN</span> <span title="running {{ metrics_master }} master processes"><span class="serverDown"> DOWN</span>
{% endif %} {% endif %}
<span>Metrics master</span> <span>Metrics master</span>
</td> <br />
<td class="padding10 second-collumn"> <br />
{% if metrics_worker|int() >= 1 %} {% if metrics_worker|int() >= 1 %}
<span title="running {{metrics_worker}} worker processes"><span class="serverUp"> UP</span> <span title="running {{metrics_worker}} worker processes"><span class="serverUp"> UP</span>
{% else %} {% else %}
@ -82,6 +82,7 @@
{% endif %} {% endif %}
<span>Metrics workers</span> <span>Metrics workers</span>
</td> </td>
<td class="padding10 second-collumn"></td>
<td class="third-collumn"> <td class="third-collumn">
{% if checker_master|int() >= 1 %} {% if checker_master|int() >= 1 %}
<span title="running {{ checker_master }} master processes"><span class="serverUp"> UP</span> <span title="running {{ checker_master }} master processes"><span class="serverUp"> UP</span>
@ -89,8 +90,8 @@
<span title="running {{ checker_master }} master processes"><span class="serverDown"> DOWN</span> <span title="running {{ checker_master }} master processes"><span class="serverDown"> DOWN</span>
{% endif %} {% endif %}
<span>Checker master</span> <span>Checker master</span>
</td> <br />
<td> <br />
{% if checker_worker|int() >= 1 %} {% if checker_worker|int() >= 1 %}
<span title="running {{ checker_worker }} worker processes"><span class="serverUp"> UP</span> <span title="running {{ checker_worker }} worker processes"><span class="serverUp"> UP</span>
{% else %} {% else %}
@ -98,6 +99,14 @@
{% endif %} {% endif %}
<span>Checker workers</span> <span>Checker workers</span>
</td> </td>
<td class="third-collumn">
{% if keep_alive|int() >= 1 %}
<span title="Keep alive is run"><span class="serverUp"> UP</span>
{% else %}
<span title="Keep alive is down"><span class="serverDown"> DOWN</span>
{% endif %}
<span>Keep alive</span>
</td>
</tr> </tr>
</table> </table>
{% endif %} {% endif %}
@ -107,7 +116,7 @@
Server Server
</td class="padding10 second-collumn"> </td class="padding10 second-collumn">
<td class="padding10 second-collumn"> <td class="padding10 second-collumn">
HAproxy status <!-- HAproxy status-->
</td> </td>
<td class="padding10 third-collumn"> <td class="padding10 third-collumn">
Action Action
@ -124,10 +133,10 @@
<table class="overview"> <table class="overview">
<tr class="overviewHead"> <tr class="overviewHead">
<td class="padding10 first-collumn"> <td class="padding10 first-collumn">
Server WAF
</td class="padding10 second-collumn"> </td class="padding10 second-collumn">
<td class="padding10 second-collumn"> <td class="padding10 second-collumn">
WAF status <!-- WAF status -->
</td> </td>
<td class="padding10 third-collumn"> <td class="padding10 third-collumn">
Action Action
@ -141,26 +150,26 @@
</tr> </tr>
<tbody id="ajaxwafstatus"></tbody> <tbody id="ajaxwafstatus"></tbody>
</table> </table>
<table class="overview" > <!-- <table class="overview" > -->
<tr class="overviewHead"> <!-- <tr class="overviewHead"> -->
<td class="padding10 first-collumn"> <!-- <td class="padding10 first-collumn"> -->
Server <!-- Server -->
</td> <!-- </td> -->
<td class="padding10 second-collumn"> <!-- <td class="padding10 second-collumn"> -->
HAproxy info <!-- HAproxy info -->
</td> <!-- </td> -->
<td class="padding10 third-collumn"> <!-- <td class="padding10 third-collumn"> -->
Server status <!-- Server status -->
</td> <!-- </td> -->
<td class="padding10"> <!-- <td class="padding10"> -->
Front/Back-ends <!-- Front/Back-ends -->
</td> <!-- </td> -->
<td> <!-- <td> -->
<a onclick="showOverviewServers()" title="Refresh Server Info" style="float: right; margin-right: 25px;"><img src="/inc/images/update.png" alt="restart" class="icon"></a> <!-- <a onclick="showOverviewServers()" title="Refresh Server Info" style="float: right; margin-right: 25px;"><img src="/inc/images/update.png" alt="restart" class="icon"></a> -->
</td> <!-- </td> -->
</tr> <!-- </tr> -->
<tbody id="ajaxservers"></tbody> <!-- <tbody id="ajaxservers"></tbody> -->
</table> <!-- </table> -->
<div id="dialog-confirm" style="display: none;"> <div id="dialog-confirm" style="display: none;">
<p><span class="ui-icon ui-icon-alert" style="float:left; margin:3px 12px 20px 0;"></span>Are you sure?</p> <p><span class="ui-icon ui-icon-alert" style="float:left; margin:3px 12px 20px 0;"></span>Are you sure?</p>
</div> </div>

View File

@ -4,9 +4,9 @@
<tr class="overviewHead"> <tr class="overviewHead">
<td class="padding10 first-collumn"> <td class="padding10 first-collumn">
Server Server
</td class="padding10 second-collumn"> </td>
<td class="padding10 second-collumn"> <td class="padding10 second-collumn">
WAF status <!-- WAF status -->
</td> </td>
<td class="padding10"> <td class="padding10">
Action Action

View File

@ -1,5 +1,6 @@
.menu .svg-inline--fa { .menu .svg-inline--fa {
margin-right: 0.5em; margin-right: 0.5em;
width: 1.5em;
} }
.auto-refresh-pause::before { .auto-refresh-pause::before {
display: none; display: none;

View File

@ -13,9 +13,13 @@ function ajaxActionServers(action, id) {
data = data.replace(/\s+/g,' '); data = data.replace(/\s+/g,' ');
if( data == 'Bad config, check please ' ) { if( data == 'Bad config, check please ' ) {
alert(data); alert(data);
} else {
if (cur_url[0] == "hapservers.py") {
location.reload()
} else { } else {
setTimeout(showOverview, 2000) setTimeout(showOverview, 2000)
} }
}
}, },
error: function(){ error: function(){
alert(w.data_error); alert(w.data_error);

View File

@ -146,8 +146,7 @@ function startSetInterval(interval) {
} }
intervalId = setInterval('loadMetrics()', interval); intervalId = setInterval('loadMetrics()', interval);
loadMetrics(); loadMetrics();
} } else if (cur_url[0] == "waf.py") {
else if (cur_url[0] == "waf.py") {
if(interval < 60000) { if(interval < 60000) {
interval = 60000; interval = 60000;
} }
@ -190,7 +189,7 @@ $( document ).ajaxComplete(function( event, request, settings ) {
}); });
function showOverview() { function showOverview() {
showOverviewServers(); // showOverviewServers();
showOverviewWaf() showOverviewWaf()
$.ajax( { $.ajax( {
url: "options.py", url: "options.py",
@ -206,6 +205,35 @@ function showOverview() {
} }
} ); } );
} }
function showOverviewServer(name,ip,id) {
showOverviewServers();
showOverviewWaf()
$.ajax( {
url: "options.py",
data: {
act: "overviewServers",
name: name,
serv: ip,
page: 'hapservers.py',
token: $('#token').val()
},
type: "GET",
success: function( data ) {
$("#ajax-server-"+id).empty();
$("#ajax-server-"+id).css('display', 'block');
$("#ajax-server-"+id).css('background-color', '#f9fff8');
$("#ajax-server-"+id).css('border', '1px solid #ddd');
$(".ajax-server").css('display', 'block');
$(".div-server").css('clear', 'both');
$(".div-pannel").css('clear', 'both');
$(".div-pannel").css('display', 'block');
$(".div-pannel").css('padding-top', '10px');
$(".div-pannel").css('height', '70px');
$("#ajax-server-"+id).html(data);
// $.getScript('/inc/overview.js');
}
} );
}
function showOverviewWaf() { function showOverviewWaf() {
$.ajax( { $.ajax( {
url: "options.py", url: "options.py",

View File

@ -31,12 +31,11 @@ h3 {
form { form {
margin: 0; margin: 0;
} }
iframe { /* iframe { */
width: 33%; /* width: 33%; */
} /* } */
pre { pre {
padding-left: 15px; padding-left: 15px;
//padding-top: 20px;
} }
.icon { .icon {
@ -55,8 +54,6 @@ pre {
left: 0; left: 0;
z-index: 1000; z-index: 1000;
display: block; display: block;
}
.top-menu {
background-color: #292e34; background-color: #292e34;
} }
.logoText { .logoText {
@ -235,20 +232,20 @@ margin-top: -4px;
.paramInSec { .paramInSec {
font-weight: bold; font-weight: bold;
} }
.conteinerIndex { /* .conteinerIndex { */
width: 20%; /* width: 20%; */
background-color: #fff; /* background-color: #fff; */
padding: 20px; /* padding: 20px; */
border-radius: 10px; /* border-radius: 10px; */
margin-top: 2%; /* margin-top: 2%; */
} /* } */
.conteinerIndex img { /* .conteinerIndex img { */
max-width: 250px; /* max-width: 250px; */
} /* } */
.copyright { /* .copyright { */
color: #23527c; /* color: #23527c; */
margin-left: 15px; /* margin-left: 15px; */
} /* } */
.copyright-menu { .copyright-menu {
font-weight: bold; font-weight: bold;
font-style: italic; font-style: italic;
@ -280,9 +277,6 @@ margin-top: -4px;
padding-left: 0; padding-left: 0;
padding-right: 0; padding-right: 0;
} }
.overviewHead:hover {
background-color: #f4f9f3e6;
}
.comment { .comment {
color: #aaa; color: #aaa;
} }
@ -334,12 +328,16 @@ margin-top: -4px;
} }
.overview { .overview {
width: 100%; width: 100%;
/* margin-top: 1.5em; */
} }
.overviewHead { .overviewHead {
border-radius: 5px; border-radius: 5px;
background-color: #f4f9f3e6; background-color: #F9FFF8;
font-weight: bold; font-weight: bold;
} }
/* .overviewHead:hover { */
/* background-color: #f4f9f3e6; */
/* } */
.overview tr{ .overview tr{
border-bottom: 1px solid #ddd; border-bottom: 1px solid #ddd;
border-radius: 5px; border-radius: 5px;
@ -407,10 +405,10 @@ margin-top: -4px;
width: 15%; width: 15%;
} }
.second-collumn { .second-collumn {
width: 25%; width: 20%;
} }
.third-collumn { .third-collumn {
width: 35%; width: 45%;
} }
.ro { .ro {
border: none; border: none;
@ -425,7 +423,6 @@ margin-top: -4px;
padding: 5px; padding: 5px;
border-radius: 3px; border-radius: 3px;
} }
ul{ ul{
margin: 0; margin: 0;
padding: 0; padding: 0;
@ -581,75 +578,6 @@ a {
a:active, a:hover { a:active, a:hover {
outline: 0; outline: 0;
} }
abbr[title] {
border-bottom: 1px dotted;
}
b,
strong {
font-weight: bold;
}
//button,
input,
optgroup,
select,
textarea {
margin: 0;
font: inherit;
color: inherit;
border-radius: 7px;
padding: 3px;
}
button {
overflow: visible;
}
button,
select {
text-transform: none;
}
select {
color: #000;
}
button {
background-color: #337ab7;
border-color: #2e6da4;
color: #fff;
}
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button;
cursor: pointer;
}
button[disabled],
html input[disabled] {
cursor: default;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
padding: 0;
border: 0;
}
input {
line-height: normal;
border-radius: 4px;
}
table {
border-spacing: 0;
border-collapse: collapse;
background-color: transparent;
width: 100%;
}
caption {
color: #777;
text-align: left;
}
td,th {
padding: 0;
text-align: left;
min-width: 30px;
}
a, a,
a:visited { a:visited {
text-decoration: underline; text-decoration: underline;
@ -667,6 +595,76 @@ a:focus {
outline: 5px auto -webkit-focus-ring-color; outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px; outline-offset: -2px;
} }
/* abbr[title] { */
/* border-bottom: 1px dotted; */
/* } */
/* b, */
/* strong { */
/* font-weight: bold; */
/* } */
/* //button, */
/* input, */
/* optgroup, */
/* select, */
/* textarea { */
/* margin: 0; */
/* font: inherit; */
/* color: inherit; */
/* border-radius: 7px; */
/* padding: 3px; */
/* } */
/* button { */
/* overflow: visible; */
/* } */
/* button, */
/* select { */
/* text-transform: none; */
/* } */
/* select { */
/* color: #000; */
/* } */
/* button { */
/* background-color: #337ab7; */
/* border-color: #2e6da4; */
/* color: #fff; */
/* } */
/* button, */
/* html input[type="button"], */
/* input[type="reset"], */
/* input[type="submit"] { */
/* -webkit-appearance: button; */
/* cursor: pointer; */
/* } */
/* button[disabled], */
/* html input[disabled] { */
/* cursor: default; */
/* } */
/* button::-moz-focus-inner, */
/* input::-moz-focus-inner { */
/* padding: 0; */
/* border: 0; */
/* } */
/* input { */
/* line-height: normal; */
/* border-radius: 4px; */
/* } */
table {
border-spacing: 0;
border-collapse: collapse;
background-color: transparent;
width: 100%;
}
caption {
color: #777;
text-align: left;
}
td,th {
padding: 0;
text-align: left;
min-width: 30px;
}
.row { .row {
margin-right: -15px; margin-right: -15px;
margin-left: -15px; margin-left: -15px;
@ -743,3 +741,64 @@ label {
/* overflow-y: hidden !important; */ /* overflow-y: hidden !important; */
/* overflow-x: auto !important; */ /* overflow-x: auto !important; */
/* } */ /* } */
.div-server {
background-color: #f9fff8;
border: 1px solid #ddd;
width: 25em;
padding: 20px;
margin: 20px;
margin-bottom: 0;
margin-top: 13px;
display: block;
float: left;
}
.server-name {
padding-bottom: 5px;
font-size: 1.4em;
color: #5d9ceb;
}
.server-status {
border-radius: 50% 50%;
width: 10px;
height: 10px;
display: inline-block;
margin-left: 2px;
margin-bottom: -2px;
}
.server-action {
float: right;
margin-top: 6px;
}
.server-desc {
padding-bottom: 2em;
color: #999;
}
.server-act-links a {
margin-right: 0.36em !important
}
.server-act-links a:last-child {
margin-right: 0 !important;
}
.ajax-server {
margin: 25px;
margin-left: 32em;
margin-bottom: 0;
width: 60em;
display: none;
margin-top: px;
margin-bottom: 0px;
margin-top: 14px;
height: 11em;
}
.haproxy-info {
display: inline-block;
width: 160px;
padding-left: 20px;
padding-top: 1.1em;
font-size: 0.88em;
}
.top-info {
display: inline-block;
width: 350px;
}