The "Overview" pages are improved
pull/161/head
Pavel Loginov 2019-10-14 09:55:29 +03:00
parent ca922d983a
commit 9c749a0eb2
18 changed files with 128 additions and 192 deletions

View File

@ -440,7 +440,7 @@ def update_db_v_3_5_3(**kwargs):
def update_ver(**kwargs):
con, cur = get_cur()
sql = """update version set version = '3.5.4'; """
sql = """update version set version = '3.5.5'; """
try:
cur.execute(sql)
con.commit()

View File

@ -17,11 +17,14 @@ try:
groups = sql.select_groups()
token = sql.get_token(user_id.value)
servers = sql.get_dick_permit()
cmd = "ps ax |grep -e 'keep_alive.py' |grep -v grep |wc -l"
keep_alive, stderr = funct.subprocess_execute(cmd)
except:
pass
haproxy_sock_port = sql.get_setting('haproxy_sock_port')
haproxy_config_path = sql.get_setting('haproxy_config_path')
commands = [ "ls -l %s |awk '{ print $6\" \"$7\" \"$8}'" % haproxy_config_path ]
servers_with_status1 = []
out1 = ""
for s in servers:
@ -40,12 +43,17 @@ for s in servers:
else:
out1 = False
servers_with_status.append(out1)
servers_with_status.append(s[12])
try:
servers_with_status.append(funct.ssh_command(s[2], commands))
except:
servers_with_status.append('Cannot get last date')
servers_with_status1.append(servers_with_status)
template = template.render(h2 = 1,
autorefresh = 1,
autorefresh = 0,
title = "HAProxy servers overview",
role = sql.get_user_role_by_uuid(user_id.value),
user = user,
@ -53,5 +61,6 @@ template = template.render(h2 = 1,
groups = groups,
servers = servers_with_status1,
versions = funct.versions(),
keep_alive = ''.join(keep_alive),
token = token)
print(template)

View File

@ -24,7 +24,7 @@ if act == "checkrestart":
sys.exit()
if not sql.check_token_exists(form.getvalue('token')):
print("What the fuck?! U r hacker Oo?!")
print("Your token has been expired")
sys.exit()
if form.getvalue('getcerts') is not None and serv is not None:
@ -140,7 +140,7 @@ if act == "overviewwaf":
if act == "overviewServers":
id = form.getvalue('id')
name = form.getvalue('name')
ovw.get_overviewServers(ip=serv,name=name,page=form.getvalue('page'))
ovw.get_overviewServers(ip=serv,name=name,id=form.getvalue('id'))
if act == "overviewHapwi":

View File

@ -13,17 +13,18 @@ servers = []
server_status = ()
async def async_get_overview(serv1, serv2):
haproxy_config_path = sql.get_setting('haproxy_config_path')
commands = [ "ls -l %s |awk '{ print $6\" \"$7\" \"$8}'" % haproxy_config_path ]
commands2 = "ps ax |grep keep_alive.py |grep -v grep |wc -l"
# haproxy_config_path = sql.get_setting('haproxy_config_path')
# commands = [ "ls -l %s |awk '{ print $6\" \"$7\" \"$8}'" % haproxy_config_path ]
commands2 = [ "ps ax |grep waf/bin/modsecurity |grep -v grep |wc -l" ]
# commands2 = "ps ax |grep keep_alive.py |grep -v grep |wc -l"
cmd = 'echo "show info" |nc %s %s -w 1|grep -e "Process_num"' % (serv2, haproxy_sock_port)
server_status = (serv1,
serv2,
funct.server_status(funct.subprocess_execute(cmd)),
funct.ssh_command(serv2, commands),
sql.select_servers(server=serv2, keep_alive=1),
funct.subprocess_execute(commands2))
sql.select_servers(server=serv2, keep_alive=1),
funct.ssh_command(serv2, commands2),
sql.select_waf_servers(serv2))
return server_status
async def get_runner_overview():
@ -67,20 +68,9 @@ def get_overviewWaf(url):
async def async_get_overviewServers(serv1, serv2):
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)
cmd = 'echo "show info" |nc %s %s -w 1|grep -e "Ver\|CurrConns\|Maxco\|MB\|Uptime:"' % (serv2, haproxy_sock_port)
out = funct.subprocess_execute(cmd)
out1 = ""
# user_id = cookie.get('uuid')
# role = sql.get_user_role_by_uuid(user_id.value)
# hap_configs_dir = funct.get_config_var('configs', 'haproxy_save_configs_dir')
# cfg = hap_configs_dir + serv2 + "-" + funct.get_data('config') + ".cfg"
# funct.get_config(serv2, cfg)
# backends = funct.get_sections(cfg)
# os.system("/bin/rm -f " + cfg)
for k in out:
if "Ncat:" not in k:
@ -89,11 +79,7 @@ async def async_get_overviewServers(serv1, serv2):
out1 += "<br />"
else:
out1 = "Can\'t connect to HAproxy"
# if role <= 2:
# server_status = (serv1,serv2, out1, funct.ssh_command(serv2, commands),backends, desc)
# else:
# server_status = (serv1,serv2, out1, funct.ssh_command(serv2, commands),funct.show_backends(serv2, ret=1), desc)
server_status = (serv1,serv2, out1, funct.ssh_command(serv2, commands))
return server_status
@ -101,23 +87,21 @@ async def get_runner_overviewServers(**kwargs):
template = env.get_template('overviewServers.html')
user_id = cookie.get('uuid')
role = sql.get_user_role_by_uuid(user_id.value)
# if kwargs.get('server1'):
futures = [async_get_overviewServers(kwargs.get('server1'), kwargs.get('server2'))]
# else:
# futures = [async_get_overviewServers(server[1], server[2], server[11]) for server in listhap]
for i, future in enumerate(asyncio.as_completed(futures)):
result = await future
servers.append(result)
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, id=kwargs.get('id'))
print(template)
def get_overviewServers(**kwargs):
server1 = kwargs.get('name')
server2 = kwargs.get('ip')
page = kwargs.get('page')
id = kwargs.get('id')
ioloop = asyncio.get_event_loop()
ioloop.run_until_complete(get_runner_overviewServers(server1=server1, server2=server2))
ioloop.run_until_complete(get_runner_overviewServers(server1=server1, server2=server2, id=id))
ioloop.close()
def get_map(serv):

View File

@ -834,9 +834,9 @@ def select_waf_metrics_enable_server(ip):
cur.close()
con.close()
def select_waf_servers():
def select_waf_servers(serv):
con, cur = create_db.get_cur()
sql = """ select serv.ip from waf left join servers as serv on waf.server_id = serv.id where waf.metrics = '1'"""
sql = """ select serv.ip from waf left join servers as serv on waf.server_id = serv.id where serv.ip = '%s' """ % serv
try:
cur.execute(sql)
except sqltool.Error as e:
@ -1400,7 +1400,7 @@ error_mess = '<span class="alert alert-danger" id="error">All fields must be com
def check_token():
if not check_token_exists(form.getvalue('token')):
print('Content-type: text/html\n')
print("What the fuck?! U r hacker Oo?!")
print("Your token has been expired")
import sys
sys.exit()

View File

@ -15,7 +15,6 @@
<li><a href="#users">Users</a></li>
<li><a href="#groups">Groups</a></li>
<li><a href="#servers">Servers</a></li>
<!-- <li><a href="#roles">Roles</a></li> -->
<li><a href="#ssh">SSH credentials</a></li>
<li><a href="#checker">Checker</a></li>
{% if user %}
@ -305,22 +304,7 @@
You can read the description of all parameters <a href="https://haproxy-wi.org/description.py?description=servers" title="Servers description" target="_blank">here</a>
</div>
</div>
<!-- <div id="roles"> -->
<!-- <table class="overview" id="ajax-group"> -->
<!-- <tr class="overviewHead"> -->
<!-- <td class="padding10 first-collumn">Name</td> -->
<!-- <td>Description</td> -->
<!-- </tr> -->
<!-- <tr> -->
<!-- {% for role in roles %} -->
<!-- <tr id="group-{{role.0}}" class="{{ loop.cycle('odd', 'even') }}"> -->
<!-- <td class="padding10 first-collumn">{{role.1}}</td> -->
<!-- <td>{{role.2}}</td> -->
<!-- </tr> -->
<!-- {% endfor %} -->
<!-- </table> -->
<!-- </div> -->
<div id="ssh">
<table id="ssh_enable_table" class="overview">
<tr class="overviewHead" style="width: 50%;">

View File

@ -1,7 +1,5 @@
{% set waf_servers = [] %}
{% for service in service_status %}
{% if service.3 == "On" or service.3 == "Off" or service.3 == "DetectionOnly" or url == "waf.py" %}
{% do waf_servers.append(1) %}
<tr class="{{ loop.cycle('odd', 'even') }}" id="{{service.0}}-select-line">
<td class="padding10 first-collumn-wi">
{% if service.2|int() >= 1 %}
@ -49,7 +47,6 @@
{{ service.3 }}
{% endif %}
</td>
{% if url == "waf.py" %}
<td style="padding-top: 2px;">
{% if service.3 == "On" or service.3 == "Off" or service.3 == "DetectionOnly" %}
{% if service.4|int() == 1 %}
@ -59,18 +56,10 @@
{% endif %}
{% endif %}
</td>
{% endif %}
<td></td>
</tr>
{% endif %}
{% endfor %}
{% if waf_servers|count == 0 and url != "waf.py" %}
<tr>
<td class="padding10 first-collumn-wi">
You have not installed the WAF server yet
</td>
</tr>
{% endif %}
<script>
$( "select" ).selectmenu();
{% if role <= 1 %}

View File

@ -1,53 +1,24 @@
{% for service in service_status %}
<tr class="{{ loop.cycle('odd', 'even') }}">
<td class="padding10 first-collumn">
{% if service.2|int() >= 1 %}
<span class="serverUp server-status" title="running {{service.2 }} processes"></span>
{% else %}
<span class="serverDown server-status"></span>
{% endif %}
<a href="/app/logs.py?serv={{ service.1 }}&rows=10&grep=&hour=00&minut=00&hour1=24&minut1=00&waf=0" title="View {{service.0 }}'s logs" class="logs_link">
{{ service.0 }}
</a>
{% if service.4.0.0|int() >= 1 %}
<img
{% if service.5.0.0|int() >= 1 %}
src="/inc/images/shield.png" title="Auto start enabled"
{% else %}
src="/inc/images/shield-red.png" title="Auto start enabled, but keep alive service does not work"
{% endif %}
width=18 style="padding-left: 5px; margin-bottom: -3px;">
{% endif %}
<td class="padding10 first-collumn">
<a href="/app/logs.py?serv={{ service.1 }}&rows=10&grep=&hour=00&minut=00&hour1=24&minut1=00&waf=0" title="View {{service.0 }}'s logs" class="logs_link">
{{ service.0 }}
</a>
</td>
<!-- <td class="second-collumn"> -->
<!-- </td> -->
<td>
{% if role <= 1 %}
<a id="{{ service.1 }}" class="start" title="Start HAProxy service">
<img src=/inc/images/start.png alt="start" class="icon" style="margin-bottom: -2px;">
</a>
<a id="{{ service.1 }}" class="stop" title="Stop HAProxy service">
<img src=/inc/images/stop.png alt="start" class="icon" width="17px">
</a>
<a id="{{ service.1 }}" class="restart" title="Restart HAProxy service">
<img src=/inc/images/update.png alt="restart" class="icon">
</a>
{% endif %}
{% if role <= 2 %}
<a href="/app/config.py?serv={{ service.1 }}&open=open" target="_blank" title="Working with HAProxy configs">
<img src="/inc/images/edit.png" alt="edit" class="icon" width="15px">
</a>
{% endif %}
<a href="/app/viewsttats.py?serv={{ service.1 }}" target="_blank" title="Show stats">
<img src="/inc/images/show.png" alt="show" class="icon" width="20px" style="margin-bottom: -3px;">
</a>
{% if service.2|int() >= 1 %}
<span class="serverUp server-status" title="running {{service.2 }} processes" style="margin-left: 25px !important;"></span>
{% else %}
<span class="serverDown server-status" style="margin-left: 25px !important;"></span>
{% endif %}
</td>
<td class="third-collumn-wi">
{% if "ls: cannot access" in service.3 %}
Cannot find HAProxy config
{% else %}
{{ service.3 }}
{% if service.5.0|length() == 0 %}
<span class="serverNone server-status" title="WAF is not installed" style="margin-left: 10px !important;"></span>
{% elif service.5.0 != '' and service.4|int() == 0 %}
<span class="serverDown server-status" title="WAF down" style="margin-left: 10px !important;"></span>
{% elif service.5.0 != '' and service.4|int() >= 1 %}
<span class="serverUp server-status" title="running {{service.5 }} processes" style="margin-left: 10px !important;"></span>
{% endif %}
</td>
<td></td>

View File

@ -7,6 +7,11 @@
<pre>
{{ service.3 }}
</pre>
</div>
</div>
<div class="update-icon">
<a onclick="showOverviewServer('{{ service.0 }}', '{{ service.1 }}', '{{id}}')" title="Refresh">
<img src="/inc/images/update.png" alt="restart" class="icon">
</a>
</div>
</div>
{% endfor %}

View File

@ -4,8 +4,7 @@
{% for s in servers %}
<div class="div-pannel" id="div-pannel-{{s.0}}">
<div id="div-server-{{s.0}}" class="div-server">
<div class="server-name">
<div class="server-name">
{% if s.5 != False %}
<span class="serverUp server-status" title="{{s.5.0.2}}"></span>
{% else %}
@ -14,6 +13,15 @@
<span title="Show info about {{s.2}}" onclick="showOverviewServer('{{s.1}}', '{{s.2}}', '{{s.0}}')" style="cursor: pointer;">
{{s.1}}
</span>
{% if s.6|int() >= 1 %}
<img
{% if keep_alive|int() >= 1 %}
src="/inc/images/shield.png" title="Auto start enabled"
{% else %}
src="/inc/images/shield-red.png" title="Auto start enabled, but keep alive service does not work"
{% endif %}
width=18 style="padding-left: 5px; margin-bottom: -3px;">
{% endif %}
{% if role <= 1 %}
<span class="server-action">
<a id="{{ s.2 }}" class="start" title="Start HAProxy service">
@ -31,11 +39,19 @@
<div class="server-desc">
{{s.3}}
{% if s.5.0 is defined %}
<br />
{{s.5.0.0}} {{s.5.0.1}} {{s.5.0.2}}
{% endif %}
<br />
{{s.5.0.0}} {{s.5.0.1}} {{s.5.0.2}}
<span title="Date of last edit config">
{% if "ls: cannot access" in s.7 %}
Cannot find HAProxy config
{% else %}
Last edit: {{s.7}}
{% endif %}
</span>
<br />
IP: {{s.2}}
{% endif %}
</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">Open</a>

View File

@ -43,7 +43,7 @@ body, .container {
<input type="hidden" value="{{reff}}" name="ref" id="ref">
<button type="submit" name="Login" value="Enter" id="enter">Login</button>
</form>
<div class="alert alert-danger" style="display: none; margin-top: 220px;margin-right: 70px;width: 300px;">
<div class="alert alert-danger" style="display: none; margin-top: 220px;margin-right: -210px;width: 300px;">
Your login or password is incorrect
<br />
<span id="ban_10">

View File

@ -8,11 +8,15 @@
<td class="padding10 first-collumn-wi">
Server
</td>
<td class="padding10 third-collumn-wi">
Action
<td class="padding10 third-collumn-wi" style="width: 35%;">
<a href="/app/hapservers.py" title="HAProxy servers overview" class="logs_link">
HAProxy
</a>
</td>
<td class="padding10">
Last edit
<a href="/app/waf.py" title="WAf servers overview" class="logs_link">
WAF
</a>
</td class="padding10">
<td>
<a onclick="showOverview()" title="Refresh" style="float: right; margin-right: 25px;"><img src="/inc/images/update.png" alt="restart" class="icon"></a>
@ -20,29 +24,16 @@
</tr>
<tbody id="ajaxstatus"></tbody>
</table>
<table class="overview-wi">
<tr class="overviewHead">
<td class="padding10 first-collumn-wi">
WAF
</td class="padding10 second-collumn">
<td class="padding10 third-collumn-wi">
Action
</td>
<td class="padding10">
WAF mode
</td class="padding10">
<td>
<a onclick="showOverviewWaf()" title="Refresh" style="float: right; margin-right: 25px;"><img src="/inc/images/update.png" alt="restart" class="icon"></a>
</td>
</tr>
<tbody id="ajaxwafstatus"></tbody>
</table>
<table class="overview-wi" style="height: 170;">
<tr class="overviewHead">
<td class="padding10 first-collumn-wi">
<a href="/app/viewlogs.py?viewlogs=haproxy-wi-{{date}}.log&rows=10&grep=&hour=00&minut=00&hour1=24&minut1=00" title="View HAProxy-WI logs" class="logs_link">
HAProxy-WI server status
</a>
{% if role <= 1 %}
<a href="/app/viewlogs.py?viewlogs=haproxy-wi-{{date}}.log&rows=10&grep=&hour=00&minut=00&hour1=24&minut1=00" title="View HAProxy-WI logs" class="logs_link">
HAProxy-WI server status
</a>
{% else %}
HAProxy-WI server status
{% endif %}
</td>
<td>
<a onclick="showOverviewHapWI()" title="Refresh" style="float: right; margin-right: 25px;"><img src="/inc/images/update.png" alt="restart" class="icon"></a>
@ -55,8 +46,8 @@
</td>
</tr>
</table>
<table class="overview-wi" style="height: 170;">
<tr class="overviewHead" style="height: 48px;">
<table class="overview-wi" style="height: 165;">
<tr class="overviewHead" style="height: 40px;">
<th class="padding10 first-collumn-wi" colspan=4>
Tools status
</th>
@ -68,9 +59,13 @@
{% else %}
<span class="serverDown server-status"></span>
{% endif %}
{% if role <= 1 %}
<a href="/app/viewlogs.py?viewlogs=metrics-{{date}}.log&rows=10&grep=&hour=00&minut=00&hour1=24&minut1=00" title="View metrics master's logs" class="logs_link">
<span>Metrics master</span>
</a>
{% else %}
<span>Metrics master</span>
{% endif %}
</td>
<td class="third-collumn-wi">
{% if checker_master|int() >= 1 %}
@ -78,9 +73,13 @@
{% else %}
<span class="serverDown server-status"></span>
{% endif %}
{% if role <= 1 %}
<a href="/app/viewlogs.py?viewlogs=checker-{{date}}.log&rows=10&grep=&hour=00&minut=00&hour1=24&minut1=00" title="View checker master's logs" class="logs_link">
<span>Checker master</span>
</a>
{% else %}
<span>Checker master</span>
{% endif %}
</td>
<td class="third-collumn-wi">
{% if keep_alive|int() >= 1 %}
@ -88,9 +87,13 @@
{% else %}
<span class="serverDown server-status"></span>
{% endif %}
{% if role <= 1 %}
<a href="/app/viewlogs.py?viewlogs=keep_alive.log&rows=10&grep=&hour=00&minut=00&hour1=24&minut1=00" title="View keep alive logs" class="logs_link">
<span>Keep alive</span>
</a>
{% else %}
<span>Keep alive</span>
{% endif %}
</td>
</tr>
<tr>
@ -100,9 +103,13 @@
{% else %}
<span title="running {{metrics_worker}} worker processes"><span class="serverDown server-status"></span>
{% endif %}
{% if role <= 1 %}
<a href="/app/viewlogs.py?viewlogs=metrics-error.log&rows=10&grep=&hour=00&minut=00&hour1=24&minut1=00" title="View worker's logs" class="logs_link">
<span>Metrics workers</span>
</a>
{% else %}
<span>Metrics workers</span>
{% endif %}
</td>
<td>
{% if checker_worker|int() >= 1 %}
@ -110,9 +117,13 @@
{% else %}
<span title="running {{ checker_worker }} worker processes"><span class="serverDown server-status"></span>
{% endif %}
{% if role <= 1 %}
<a href="/app/viewlogs.py?viewlogs=checker-error.log&rows=10&grep=&hour=00&minut=00&hour1=24&minut1=00" title="View checker's logs" class="logs_link">
<span>Checker workers</span>
</a>
{% else %}
<span>Checker workers</span>
{% endif %}
</td>
<td></td>
@ -229,27 +240,6 @@
{% endfor %}
</table>
{% endif %}
<!-- <table class="overview" > -->
<!-- <tr class="overviewHead"> -->
<!-- <td class="padding10 first-collumn-wi"> -->
<!-- Server -->
<!-- </td> -->
<!-- <td class="padding10 second-collumn"> -->
<!-- HAproxy info -->
<!-- </td> -->
<!-- <td class="padding10 third-collumn-wi"> -->
<!-- Server status -->
<!-- </td> -->
<!-- <td class="padding10"> -->
<!-- Front/Back-ends -->
<!-- </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> -->
<!-- </td> -->
<!-- </tr> -->
<!-- <tbody id="ajaxservers"></tbody> -->
<!-- </table> -->
<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>

View File

@ -22,6 +22,7 @@
</table>
<link href="/inc/chart.min.css" rel="stylesheet">
<script src="/inc/overview.js"></script>
<script src="/inc/metrics.js"></script>
<script src="/inc/chart.min.js"></script>
<div id="refresh" style="text-align: right;margin-top: 20px;margin-right: 20px;" title="Refresh metrics" onclick="showWafMetrics()">
@ -32,7 +33,9 @@
<canvas id="s_{{s.0}}" role="img"></canvas>
</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>
function showWafMetrics() {
{% for s in servers %}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 KiB

After

Width:  |  Height:  |  Size: 102 KiB

View File

@ -189,8 +189,6 @@ $( document ).ajaxComplete(function( event, request, settings ) {
});
function showOverview() {
// showOverviewServers();
showOverviewWaf()
showOverviewHapWI()
$.ajax( {
url: "options.py",
@ -210,20 +208,16 @@ function showOverview() {
} );
}
function showOverviewServer(name,ip,id) {
showOverviewServers();
showOverviewWaf()
$.ajax( {
url: "options.py",
data: {
act: "overviewServers",
name: name,
serv: ip,
id: id,
page: 'hapservers.py',
token: $('#token').val()
},
beforeSend: function() {
$("#ajax-server-"+id).html('<img class="loading" src="/inc/images/loading.gif" />')
},
type: "GET",
success: function( data ) {
$("#ajax-server-"+id).empty();
@ -284,22 +278,6 @@ function showOverviewWaf() {
}
} );
}
function showOverviewServers() {
$.ajax( {
url: "options.py",
data: {
act: "overviewServers",
token: $('#token').val()
},
beforeSend: function() {
$('#ajaxservers').html('<img class="loading" src="/inc/images/loading.gif" />')
},
type: "GET",
success: function( data ) {
$("#ajaxservers").html(data);
}
} );
}
function showOverviewHapWI() {
$.ajax( {
url: "options.py",

View File

@ -378,7 +378,7 @@ pre {
padding-left: 15px;
font-size: 15px;
}
.serverUp, .serverDown {
.serverUp, .serverDown, .serverNone {
padding: 3px;
border-radius: 3px;
color: #fff;
@ -387,6 +387,9 @@ pre {
.serverUp {
background-color: #5CB85C;
}
.serverNone {
background-color: #ddd;
}
.add-button, .add-button-wi {
background-color: #5CB85C;
border-radius: 5px;
@ -759,7 +762,6 @@ label {
margin-right: 0 !important;
}
#left-collumn, #middle-collumn, #right-collumn {
/* width: 30%; */
float: left;
}
.ajax-server {
@ -771,19 +773,24 @@ label {
margin-top: px;
margin-bottom: 0px;
margin-top: 14px;
height: 172px;
height: 192px;
}
.haproxy-info {
display: inline-block;
width: 160px;
padding-left: 20px;
padding-top: 2em;
font-size: 0.88em;
padding-left: 30px;
padding-top: 27px;
font-size: 1em;
}
.top-info {
display: inline-block;
width: 350px;
}
.update-icon {
float: right;
margin-top: 35px;
margin-right: 15px;
}
.span-link {
cursor: pointer;
}

View File

@ -149,7 +149,7 @@ $( function() {
} else if (data.indexOf('Unauthorized') != '-1') {
$('.alert-danger').remove();
$('.alert-warning').remove();
$("#ajax").html('<div class="alert alert-danger">It is seems like you Unauthorized in the HAProxy-WI repository.</data>');
$("#ajax").html('<div class="alert alert-danger">It is seems like you Unauthorized in the HAProxy-WI repository. How to get HAProxy-WI auth you can read <a href="https://haproxy-wi.org/installation.py" title="How to get HAProxy-WI auth">hear</a> </data>');
} else if (data.indexOf('but not installed') != '-1') {
$('.alert-danger').remove();
$('.alert-warning').remove();