mirror of https://github.com/Aidaho12/haproxy-wi
parent
d6f79bff7b
commit
2e331a4582
|
@ -432,7 +432,7 @@ def update_db_v_42(**kwargs):
|
|||
|
||||
def update_ver(**kwargs):
|
||||
con, cur = get_cur()
|
||||
sql = """update version set version = '4.2.2.0'; """
|
||||
sql = """update version set version = '4.2.3.0'; """
|
||||
try:
|
||||
cur.execute(sql)
|
||||
con.commit()
|
||||
|
|
56
app/funct.py
56
app/funct.py
|
@ -102,7 +102,13 @@ def telegram_send_mess(mess, **kwargs):
|
|||
for telegram in telegrams:
|
||||
token_bot = telegram[1]
|
||||
channel_name = telegram[2]
|
||||
|
||||
|
||||
if token_bot == '' or channel_name == '':
|
||||
mess = " Fatal: Can't send message. Add Telegram chanel before use alerting at this servers group"
|
||||
print(mess)
|
||||
logging('localhost', mess, haproxywi=1)
|
||||
sys.exit()
|
||||
|
||||
if proxy is not None and proxy != '' and proxy != 'None':
|
||||
apihelper.proxy = {'https': proxy}
|
||||
try:
|
||||
|
@ -280,26 +286,33 @@ def diff_config(oldcfg, cfg):
|
|||
pass
|
||||
|
||||
|
||||
def get_sections(config):
|
||||
def get_sections(config, **kwargs):
|
||||
record = False
|
||||
return_config = list()
|
||||
with open(config, 'r') as f:
|
||||
for line in f:
|
||||
if (
|
||||
line.startswith('listen') or
|
||||
line.startswith('frontend') or
|
||||
line.startswith('backend') or
|
||||
line.startswith('cache') or
|
||||
line.startswith('defaults') or
|
||||
line.startswith('global') or
|
||||
line.startswith('#HideBlockEnd') or
|
||||
line.startswith('#HideBlockStart') or
|
||||
line.startswith('peers') or
|
||||
line.startswith('resolvers') or
|
||||
line.startswith('userlist')
|
||||
):
|
||||
if kwargs.get('service') == 'nginx':
|
||||
if 'server_name' in line:
|
||||
line = line.split('server_name')[1]
|
||||
line = line.split(';')[0]
|
||||
line = line.strip()
|
||||
return_config.append(line)
|
||||
else:
|
||||
if (
|
||||
line.startswith('listen') or
|
||||
line.startswith('frontend') or
|
||||
line.startswith('backend') or
|
||||
line.startswith('cache') or
|
||||
line.startswith('defaults') or
|
||||
line.startswith('global') or
|
||||
line.startswith('#HideBlockEnd') or
|
||||
line.startswith('#HideBlockStart') or
|
||||
line.startswith('peers') or
|
||||
line.startswith('resolvers') or
|
||||
line.startswith('userlist')
|
||||
):
|
||||
line = line.strip()
|
||||
return_config.append(line)
|
||||
|
||||
return return_config
|
||||
|
||||
|
@ -834,22 +847,21 @@ def get_files(dir = get_config_var('configs', 'haproxy_save_configs_dir'), forma
|
|||
file = set()
|
||||
return_files = set()
|
||||
i = 0
|
||||
for files in glob.glob(os.path.join(dir,'*.'+format)):
|
||||
for files in sorted(glob.glob(os.path.join(dir,'*.'+format))):
|
||||
if format == 'log':
|
||||
file += [(i, files.split('/')[5])]
|
||||
else:
|
||||
else:
|
||||
file.add(files.split('/')[-1])
|
||||
i += 1
|
||||
files = sorted(file, reverse=True)
|
||||
|
||||
files = file
|
||||
if format == 'cfg' or format == 'conf':
|
||||
for file in files:
|
||||
for file in files:
|
||||
ip = file.split("-")
|
||||
if serv == ip[0]:
|
||||
return_files.add(file)
|
||||
return_files.add(file)
|
||||
return sorted(return_files, reverse=True)
|
||||
else:
|
||||
return files
|
||||
return file
|
||||
|
||||
|
||||
def get_key(item):
|
||||
|
|
|
@ -136,26 +136,35 @@ if act == "overviewHapserverBackends":
|
|||
from jinja2 import Environment, FileSystemLoader
|
||||
env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True)
|
||||
template = env.get_template('haproxyservers_backends.html')
|
||||
|
||||
hap_configs_dir = funct.get_config_var('configs', 'haproxy_save_configs_dir')
|
||||
service = form.getvalue('service')
|
||||
if service == 'haproxy':
|
||||
configs_dir = funct.get_config_var('configs', 'haproxy_save_configs_dir')
|
||||
format = 'cfg'
|
||||
elif service == 'nginx':
|
||||
configs_dir = funct.get_config_var('configs', 'nginx_save_configs_dir')
|
||||
format = 'conf'
|
||||
try:
|
||||
sections = funct.get_sections(hap_configs_dir +funct.get_files()[0])
|
||||
except:
|
||||
sections = funct.get_sections(configs_dir+funct.get_files(dir=configs_dir, format=format)[0], service=service)
|
||||
except Exception as e:
|
||||
funct.logging('localhost', str(e), haproxywi=1)
|
||||
try:
|
||||
cfg = hap_configs_dir + serv + "-" + funct.get_data('config') + ".cfg"
|
||||
cfg = configs_dir + serv + "-" + funct.get_data('config') + '.'+format
|
||||
except:
|
||||
funct.logging('localhost', ' Cannot generate cfg path', haproxywi=1)
|
||||
try:
|
||||
error = funct.get_config(serv, cfg)
|
||||
if service == 'nginx':
|
||||
error = funct.get_config(serv, cfg, nginx=1)
|
||||
else:
|
||||
error = funct.get_config(serv, cfg)
|
||||
except:
|
||||
funct.logging('localhost', ' Cannot download config', haproxywi=1)
|
||||
try:
|
||||
sections = funct.get_sections(cfg)
|
||||
sections = funct.get_sections(cfg, service=service)
|
||||
except:
|
||||
funct.logging('localhost', ' Cannot get sections from config file', haproxywi=1)
|
||||
sections = 'Cannot get backends'
|
||||
|
||||
template = template.render(backends=sections, serv=serv)
|
||||
template = template.render(backends=sections, serv=serv, service=service)
|
||||
print(template)
|
||||
|
||||
|
||||
|
@ -264,20 +273,27 @@ if act == "overviewwaf":
|
|||
|
||||
if act == "overviewServers":
|
||||
import asyncio
|
||||
async def async_get_overviewServers(serv1, serv2):
|
||||
async def async_get_overviewServers(serv1, serv2, service):
|
||||
server_status = ()
|
||||
commands = [ "top -u haproxy -b -n 1" ]
|
||||
cmd = 'echo "show info" |nc %s %s -w 1|grep -e "Ver\|CurrConns\|Maxco\|MB\|Uptime:"' % (serv2, sql.get_setting('haproxy_sock_port'))
|
||||
out = funct.subprocess_execute(cmd)
|
||||
out1 = ""
|
||||
if service == 'haproxy':
|
||||
commands = [ "top -u haproxy -b -n 1" ]
|
||||
else:
|
||||
commands = [ "top -u nginx -b -n 1" ]
|
||||
|
||||
for k in out:
|
||||
if "Ncat:" not in k:
|
||||
for r in k:
|
||||
out1 += r
|
||||
out1 += "<br />"
|
||||
else:
|
||||
out1 = "Can\'t connect to HAproxy"
|
||||
if service == 'haproxy':
|
||||
cmd = 'echo "show info" |nc %s %s -w 1|grep -e "Ver\|CurrConns\|Maxco\|MB\|Uptime:"' % (serv2, sql.get_setting('haproxy_sock_port'))
|
||||
out = funct.subprocess_execute(cmd)
|
||||
out1 = ""
|
||||
|
||||
for k in out:
|
||||
if "Ncat:" not in k:
|
||||
for r in k:
|
||||
out1 += r
|
||||
out1 += "<br />"
|
||||
else:
|
||||
out1 = "Can\'t connect to HAproxy"
|
||||
else:
|
||||
out1 = ''
|
||||
|
||||
server_status = (serv1,serv2, out1, funct.ssh_command(serv2, commands))
|
||||
return server_status
|
||||
|
@ -292,19 +308,20 @@ if act == "overviewServers":
|
|||
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
|
||||
user_id = cookie.get('uuid')
|
||||
role = sql.get_user_role_by_uuid(user_id.value)
|
||||
futures = [async_get_overviewServers(kwargs.get('server1'), kwargs.get('server2'))]
|
||||
futures = [async_get_overviewServers(kwargs.get('server1'), kwargs.get('server2'), kwargs.get('service'))]
|
||||
|
||||
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, id=kwargs.get('id'))
|
||||
template = template.render(service_status=servers_sorted, role=role, id=kwargs.get('id'), service_page=service)
|
||||
print(template)
|
||||
|
||||
id = form.getvalue('id')
|
||||
name = form.getvalue('name')
|
||||
service = form.getvalue('service')
|
||||
ioloop = asyncio.get_event_loop()
|
||||
ioloop.run_until_complete(get_runner_overviewServers(server1=name, server2=serv, id=id))
|
||||
ioloop.run_until_complete(get_runner_overviewServers(server1=name, server2=serv, id=id, service=service))
|
||||
ioloop.close()
|
||||
|
||||
|
||||
|
|
|
@ -33,6 +33,17 @@ try:
|
|||
grafana, stderr = funct.subprocess_execute(cmd)
|
||||
cmd = "ps ax |grep 'prometheus ' |grep -v grep|wc -l"
|
||||
prometheus, stderr = funct.subprocess_execute(cmd)
|
||||
is_checker_workers = sql.select_alert()
|
||||
i = 0
|
||||
for s in sql.select_alert():
|
||||
i += 1
|
||||
is_checker_worker = i
|
||||
is_metrics_workers = sql.select_servers_metrics_for_master()
|
||||
i = 0
|
||||
for s in is_metrics_workers:
|
||||
i += 1
|
||||
is_metrics_worker = i
|
||||
|
||||
except:
|
||||
role = ''
|
||||
user = ''
|
||||
|
@ -51,6 +62,9 @@ except:
|
|||
haproxy_wi_log = ''
|
||||
servers = ''
|
||||
stderr = ''
|
||||
is_checker_worker = ''
|
||||
is_metrics_worker = ''
|
||||
token = ''
|
||||
|
||||
|
||||
template = template.render(h2 = 1,
|
||||
|
@ -79,5 +93,7 @@ template = template.render(h2 = 1,
|
|||
versions = funct.versions(),
|
||||
haproxy_wi_log = funct.haproxy_wi_log(),
|
||||
servers = servers,
|
||||
is_checker_worker = is_checker_worker,
|
||||
is_metrics_worker = is_metrics_worker,
|
||||
token = token)
|
||||
print(template)
|
|
@ -32,4 +32,27 @@
|
|||
- dashboard_id: 11879
|
||||
revision_id: 3
|
||||
datasource: prometheus
|
||||
|
||||
tasks:
|
||||
- name: populate service facts
|
||||
service_facts:
|
||||
|
||||
- name: Open stat port for firewalld
|
||||
firewalld:
|
||||
port: "{{ item }}/tcp"
|
||||
state: enabled
|
||||
permanent: yes
|
||||
immediate: yes
|
||||
ignore_errors: yes
|
||||
no_log: True
|
||||
debugger: never
|
||||
when: (ansible_facts['os_family'] == "RedHat" or ansible_facts['os_family'] == 'CentOS') and ansible_facts.services["firewalld.service"]['state'] == "running"
|
||||
with_items: [ "3000", "9090" ]
|
||||
|
||||
- name: Open stat port for iptables
|
||||
iptables:
|
||||
chain: INPUT
|
||||
destination_port: "{{ item }}"
|
||||
jump: ACCEPT
|
||||
protocol: tcp
|
||||
ignore_errors: yes
|
||||
with_items: [ "3000", "9090" ]
|
|
@ -7,8 +7,12 @@
|
|||
{{backends}}
|
||||
{% else %}
|
||||
{% for b in backends %}
|
||||
{% if service == 'haproxy' %}
|
||||
<a href="/app/sections.py?serv={{ serv}}§ion={{b}}" title="Edit backend {{b}}" target="_blank" style="padding-right: 10px;">
|
||||
{{b}}
|
||||
</a>
|
||||
{% else %}
|
||||
{{b}}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
|
@ -1,17 +1,27 @@
|
|||
{%- for service in service_status -%}
|
||||
<div class="server-info">
|
||||
{% if service_page == 'nginx' %}
|
||||
<div class="server-name" style="padding-bottom: 0px;">
|
||||
{% else %}
|
||||
<div class="server-name">
|
||||
{% endif %}
|
||||
Server status
|
||||
<span class="update-icon">
|
||||
<a onclick="showOverviewServer('{{ service.0 }}', '{{ service.1 }}', '{{id}}')" title="Refresh">
|
||||
<a onclick="showOverviewServer('{{ service.0 }}', '{{ service.1 }}', '{{id}}', '{{service_page}}')" title="Refresh">
|
||||
<span class="service-reload"></span>
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
{% if service_page == 'haproxy' %}
|
||||
<div class="haproxy-info">
|
||||
{{ service.2 }}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if service_page == 'nginx' %}
|
||||
<div class="top-info" style="margin-top: 5px;">
|
||||
{% else %}
|
||||
<div class="top-info">
|
||||
{% endif %}
|
||||
<pre>
|
||||
{{ service.3 }}
|
||||
</pre>
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
hostnamea.push(host)
|
||||
{% endfor %}
|
||||
</script>
|
||||
<div id="up-pannel">
|
||||
<div id="up-pannel" class="sortable">
|
||||
{% for s in servers %}
|
||||
{% if serv %}
|
||||
<link href="/inc/chart.min.css" rel="stylesheet">
|
||||
|
@ -45,35 +45,33 @@
|
|||
getWafChartData('{{s.2}}')
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
showOverviewServer('{{s.1}}', '{{s.2}}', '{{s.0}}');
|
||||
showOverviewServer('{{s.1}}', '{{s.2}}', '{{s.0}}', '{{service}}');
|
||||
}
|
||||
showMetrics();
|
||||
</script>
|
||||
{% endif %}
|
||||
<div class="div-pannel" id="div-pannel-{{s.0}}">
|
||||
<div id="div-server-{{s.0}}" class="div-server-hapwi" {% if service == 'nginx' %}style="height:138px;"{%endif%}>
|
||||
<div class="server-name">
|
||||
<input type="hidden" id="server-name-{{s.0}}" value="{{s.1}}" />
|
||||
<input type="hidden" id="service" value="{{service}}" />
|
||||
{% if service == 'nginx' %}
|
||||
<input type="hidden" id="service" value="nginx" />
|
||||
{% if s.5.0.3 == 'active' %}
|
||||
<span class="serverUp server-status" title="Uptime: {{s.5.0.4}}"></span>
|
||||
{% else %}
|
||||
<span class="serverDown server-status" title="Downtime: : {{s.5.0.4}}"></span>
|
||||
{% endif %}
|
||||
{{s.1}}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<input type="hidden" id="service" value="haproxy" />
|
||||
{% if s.5 != False %}
|
||||
<span class="serverUp server-status" title="{{s.5.0.2}}"></span>
|
||||
{% else %}
|
||||
<span class="serverDown server-status" title="HAProxy is down"></span>
|
||||
{% endif %}
|
||||
{% if not serv %}
|
||||
<a href="/app/hapservers.py?serv={{s.2}}" title="More about {{s.1}}" style="color: #5d9ceb">{{s.1}}</a>
|
||||
{% endif %}
|
||||
{% if not serv %}
|
||||
<a href="/app/hapservers.py?service={{service}}&serv={{s.2}}" title="More about {{s.1}}" style="color: #5d9ceb">{{s.1}}</a>
|
||||
{% else %}
|
||||
{{s.1}}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if service == 'haproxy' %}
|
||||
{% if s.6|int() >= 1 %}
|
||||
<img
|
||||
|
@ -165,17 +163,22 @@
|
|||
</div>
|
||||
</div>
|
||||
{% if serv %}
|
||||
<div id="ajax-server-{{s.0}}" class="ajax-server"></div>
|
||||
{% if service == 'haproxy' %}
|
||||
<div id="ajax-server-{{s.0}}" class="ajax-server"></div>
|
||||
{% else %}
|
||||
<div id="ajax-server-{{s.0}}" class="ajax-server" style="height: 158px;"></div>
|
||||
{% endif %}
|
||||
<div class="div-server div-backends">
|
||||
<div class="server-name backends">
|
||||
Backends:
|
||||
{% if service == 'haproxy' %}
|
||||
Backends:
|
||||
{% else %}
|
||||
Virtual hosts:
|
||||
{% endif %}
|
||||
</div>
|
||||
<div style="margin-top: 10px;" id="top-{{s.1}}"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% if serv and service == 'haproxy' %}
|
||||
|
@ -195,9 +198,9 @@
|
|||
<p><span class="ui-icon ui-icon-alert" style="float:left; margin:3px 12px 20px 0;"></span>Are you sure?</p>
|
||||
</div>
|
||||
<script>
|
||||
{% if serv and service == 'haproxy' %}
|
||||
overviewHapserverBackends(ip, hostnamea);
|
||||
{% if serv %}
|
||||
overviewHapserverBackends(ip, hostnamea, '{{service}}');
|
||||
{% endif %}
|
||||
showHapservers(ip, hostnamea, '{{service}}');
|
||||
</script>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -111,7 +111,7 @@
|
|||
{% if keep_alive|int() >= 1 %}
|
||||
<span title="running {{ keep_alive }} processe"><span class="serverUp server-status"></span></span>
|
||||
{% else %}
|
||||
<span class="serverDown server-status"></span>
|
||||
<span class="serverDown server-status"></span>
|
||||
{% endif %}
|
||||
{% if role <= 1 %}
|
||||
<a href="/app/viewlogs.py?viewlogs={{keep_alive_log_id}}&rows=10&grep=&hour=00&minut=00&hour1=24&minut1=00" title="View keep alive logs" class="logs_link">
|
||||
|
@ -127,7 +127,11 @@
|
|||
{% if metrics_worker|int() >= 1 %}
|
||||
<span title="running {{metrics_worker}} worker processes"><span class="serverUp server-status"></span></span>
|
||||
{% else %}
|
||||
<span title="running {{metrics_worker}} worker processes"><span class="serverDown server-status"></span></span>
|
||||
{% if is_metrics_worker|int == 0 %}
|
||||
<span title="There is not jobs for metrics"><span class="serverNone server-status"></span></span>
|
||||
{% else %}
|
||||
<span title="running {{is_checker_worker}} worker processes"><span class="serverDown server-status"></span></span>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if role <= 1 %}
|
||||
<a href="/app/viewlogs.py?viewlogs={{metrics_error_log_id}}&rows=10&grep=&hour=00&minut=00&hour1=24&minut1=00" title="View worker's logs" class="logs_link">
|
||||
|
@ -141,7 +145,11 @@
|
|||
{% if checker_worker|int() >= 1 %}
|
||||
<span title="running {{ checker_worker }} worker processes"><span class="serverUp server-status"></span></span>
|
||||
{% else %}
|
||||
{% if is_checker_worker|int == 0 %}
|
||||
<span title="There is not jobs for checker"><span class="serverNone server-status"></span> </span>
|
||||
{% else %}
|
||||
<span title="running {{ checker_worker }} worker processes"><span class="serverDown server-status"></span> </span>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if role <= 1 %}
|
||||
<a href="/app/viewlogs.py?viewlogs={{checker_error_log_id}}&rows=10&grep=&hour=00&minut=00&hour1=24&minut1=00" title="View checker's logs" class="logs_link">
|
||||
|
|
|
@ -33,14 +33,18 @@ def main(serv, port):
|
|||
except OSError as e:
|
||||
print(e)
|
||||
sys.exit()
|
||||
readstats = readstats.decode(encoding='UTF-8')
|
||||
metric = readstats.splitlines()
|
||||
metrics = []
|
||||
for i in range(0,len(metric)):
|
||||
metrics.append(metric[i])
|
||||
|
||||
try:
|
||||
readstats = readstats.decode(encoding='UTF-8')
|
||||
metric = readstats.splitlines()
|
||||
metrics = []
|
||||
for i in range(0,len(metric)):
|
||||
metrics.append(metric[i])
|
||||
|
||||
sql.insert_mentrics(serv, metrics[0], metrics[1], metrics[2], metrics[3])
|
||||
except Exception as e:
|
||||
print(str(e))
|
||||
|
||||
sql.insert_mentrics(serv, metrics[0], metrics[1], metrics[2], metrics[3])
|
||||
|
||||
time.sleep(30)
|
||||
|
||||
if killer.kill_now:
|
||||
|
|
|
@ -41,12 +41,13 @@ function showHapserversCallBack(serv, hostnamea, service) {
|
|||
}
|
||||
} );
|
||||
}
|
||||
function overviewHapserverBackends(serv, hostnamea) {
|
||||
function overviewHapserverBackends(serv, hostnamea, service) {
|
||||
$.ajax( {
|
||||
url: "options.py",
|
||||
data: {
|
||||
act: "overviewHapserverBackends",
|
||||
serv: serv[0],
|
||||
service: service,
|
||||
token: $('#token').val()
|
||||
},
|
||||
beforeSend: function() {
|
||||
|
@ -85,7 +86,7 @@ function showOverviewCallBack(serv, hostnamea) {
|
|||
}
|
||||
} );
|
||||
}
|
||||
function showOverviewServer(name,ip,id) {
|
||||
function showOverviewServer(name,ip,id, service) {
|
||||
$.ajax( {
|
||||
url: "options.py",
|
||||
data: {
|
||||
|
@ -93,6 +94,7 @@ function showOverviewServer(name,ip,id) {
|
|||
name: name,
|
||||
serv: ip,
|
||||
id: id,
|
||||
service: service,
|
||||
page: 'hapservers.py',
|
||||
token: $('#token').val()
|
||||
},
|
||||
|
|
Loading…
Reference in New Issue