示例#1
0
def kill_waf_worker(serv):
	cmd = "ps ax |grep 'tools/metrics_waf_worker.py %s'|grep -v grep |awk '{print $1}' |xargs kill" % serv
	output, stderr = funct.subprocess_execute(cmd)
	funct.logging("localhost", " Masrer killed WAF metrics worker for: "+serv, metrics=1)
	if stderr:
		funct.logging("localhost", stderr, metrics=1)
示例#2
0
		print(template)	
	
	id = form.getvalue('id')
	name = form.getvalue('name')
	ioloop = asyncio.get_event_loop()
	ioloop.run_until_complete(get_runner_overviewServers(server1=name, server2=serv, id=id))
	ioloop.close()

	
	
if act == "overviewHapwi":
	from jinja2 import Environment, FileSystemLoader
	env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True)
	template = env.get_template('/overviewHapwi.html')
	cmd = "top -b -n 1 |head -12"
	server_status, stderr = funct.subprocess_execute(cmd)
	
	template = template.render(server_status=server_status,stderr=stderr)									
	print(template)
	
	
if form.getvalue('action'):
	import requests
	
	haproxy_user = sql.get_setting('stats_user')
	haproxy_pass = sql.get_setting('stats_password')
	stats_port = sql.get_setting('stats_port')
	stats_page = sql.get_setting('stats_page')
	
	postdata = {
		'action' : form.getvalue('action'),
示例#3
0
文件: sql.py 项目: zer0tul/haproxy-wi
        print('Content-type: text/html\n')
        print(error_mess)
    else:
        import funct
        print('Content-type: text/html\n')
        fullpath = funct.get_config_var('main', 'fullpath')

        for sshs in select_ssh(id=id):
            ssh_enable = sshs[2]
            ssh_key_name = fullpath + '/keys/%s.pem' % sshs[1]
            new_ssh_key_name = fullpath + '/keys/%s.pem' % name

        if ssh_enable == 1:
            cmd = 'mv %s %s' % (ssh_key_name, new_ssh_key_name)
            try:
                funct.subprocess_execute(cmd)
            except:
                pass
        update_ssh(id, name, enable, group, username, password)

if form.getvalue('new_ssh'):
    name = form.getvalue('new_ssh')
    enable = form.getvalue('ssh_enable')
    group = form.getvalue('new_group')
    username = form.getvalue('ssh_user')
    password = form.getvalue('ssh_pass')
    page = form.getvalue('page')
    page = page.split("#")[0]
    if username is None or name is None:
        print('Content-type: text/html\n')
        print(error_mess)
示例#4
0
print('Content-type: text/html\n')
funct.check_login()

try:
    user, user_id, role, token, servers, user_services = funct.get_users_params(
    )
    services = []
except:
    pass

form = funct.form
serv = funct.is_ip_or_dns(form.getvalue('serv'))
service = form.getvalue('service')
autorefresh = 0
cmd = "ps ax |grep -e 'keep_alive.py' |grep -v grep |wc -l"
keep_alive, stderr = funct.subprocess_execute(cmd)

if service == 'nginx':
    if funct.check_login(service=2):
        title = 'Nginx servers overview'
        if serv:
            if funct.check_is_server_in_group(serv):
                servers = sql.select_servers(server=serv)
                autorefresh = 1
                server_id = sql.select_server_id_by_ip(serv)
                service_settings = sql.select_docker_service_settings(
                    server_id, service)
        else:
            servers = sql.get_dick_permit(virt=1, nginx=1)
            service_settings = sql.select_docker_services_settings(service)
elif service == 'keepalived':
示例#5
0
import funct
import sql
from jinja2 import Environment, FileSystemLoader
env = Environment(extensions=["jinja2.ext.do"],
                  loader=FileSystemLoader('templates/'),
                  autoescape=True)
template = env.get_template('servers.html')
form = funct.form

print('Content-type: text/html\n')
funct.check_login()
funct.page_for_admin(level=2)
try:
    user, user_id, role, token, servers = funct.get_users_params()
    ldap_enable = sql.get_setting('ldap_enable')
    grafana, stderr = funct.subprocess_execute(
        "service grafana-server status |grep Active |awk '{print $1}'")
    user_group = funct.get_user_group(id=1)
    settings = sql.get_setting('', all=1)
    geoip_country_codes = sql.select_geoip_country_codes()

    services = []
    services_name = {
        'checker_haproxy': 'Checker backends master service',
    }
    for s, v in services_name.items():
        cmd = "systemctl status %s |grep Act |awk  '{print $2}'" % s
        status, stderr = funct.subprocess_execute(cmd)
        if s != 'keep_alive':
            service_name = s.split('_')[0]
        else:
            service_name = s
示例#6
0
	minut1 = form.getvalue('minut1')
	date = hour+':'+minut
	date1 = hour1+':'+minut1
	
	if grep is not None:
		grep_act  = '|grep'
	else:
		grep_act = ''
		grep = ''
		
	if serv == 'haproxy-wi.access.log':
		cmd="cat %s| awk -F\"/|:\" '$3>\"%s:00\" && $3<\"%s:00\"' |tail -%s  %s %s" % ('/var/log/httpd/'+serv, date, date1, rows, grep_act, grep)
	else:
		cmd="cat %s| awk '$4>\"%s:00\" && $4<\"%s:00\"' |tail -%s  %s %s" % ('/var/log/httpd/'+serv, date, date1, rows, grep_act, grep)

	output, stderr = funct.subprocess_execute(cmd)

	funct.show_log(output)
	print(stderr)
		
if form.getvalue('viewlogs') is not None:
	viewlog = form.getvalue('viewlogs')
	log_path = funct.get_config_var('main', 'log_path')
	rows = form.getvalue('rows2')
	grep = form.getvalue('grep')
	hour = form.getvalue('hour')
	minut = form.getvalue('minut')
	hour1 = form.getvalue('hour1')
	minut1 = form.getvalue('minut1')
	date = hour+':'+minut
	date1 = hour1+':'+minut1
示例#7
0
def kill_all_workers():
	cmd = "ps ax |grep 'tools/checker_worker.py' |grep -v grep |awk '{print $1}' |xargs kill"
	output, stderr = funct.subprocess_execute(cmd)
	funct.logging("localhost", " Master killing all workers", alerting=1)
	if stderr:
		funct.logging("localhost", stderr, alerting=1)
示例#8
0
service = form.getvalue('service')
autorefresh = 0

if service == 'nginx':
    title = "Nginx servers overview"
    keep_alive = ''
    stderr = ''
    servers = sql.get_dick_permit(virt=1, nginx=1)
    service = 'nginx'
    if serv:
        servers = sql.select_servers(server=serv)
        autorefresh = 1
else:
    title = "HAProxy servers overview"
    cmd = "ps ax |grep -e 'keep_alive.py' |grep -v grep |wc -l"
    keep_alive, stderr = funct.subprocess_execute(cmd)
    service = 'haproxy'
    if serv:
        servers = sql.select_servers(server=serv)
        autorefresh = 1
    else:
        servers = sql.get_dick_permit(virt=1, haproxy=1)

haproxy_sock_port = sql.get_setting('haproxy_sock_port')
servers_with_status1 = []
out1 = ''
for s in servers:
    servers_with_status = list()
    servers_with_status.append(s[0])
    servers_with_status.append(s[1])
    servers_with_status.append(s[2])
示例#9
0
print('Content-type: text/html\n')
if create_db.check_db():
    if create_db.create_table():
        create_db.update_all()
create_db.update_all_silent()
funct.check_login()

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)
    cmd = "ps ax |grep checker_mas |grep -v grep |wc -l"
    checker_master, stderr = funct.subprocess_execute(cmd)
    cmd = "ps ax |grep checker_worker |grep -v grep |wc -l"
    checker_worker, stderr = funct.subprocess_execute(cmd)
    cmd = "ps ax |grep metrics_master |grep -v grep |wc -l"
    metrics_master, stderr = funct.subprocess_execute(cmd)
    cmd = "ps ax |grep -e 'metrics_worker\|metrics_waf_worker.py' |grep -v grep |wc -l"
    metrics_worker, stderr = funct.subprocess_execute(cmd)
except:
    pass

template = template.render(h2=1,
                           autorefresh=1,
                           title="Overview",
                           role=sql.get_user_role_by_uuid(user_id.value),
                           user=user,
                           users=users,
示例#10
0
print('Content-type: text/html\n')
if create_db.check_db():
    if create_db.create_table():
        create_db.update_all()
create_db.update_all_silent()
funct.check_login()

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)
    cmd = "ps ax |grep checker_mas |grep -v grep |wc -l"
    checker_master, stderr = funct.subprocess_execute(cmd)
    cmd = "ps ax |grep checker_worker |grep -v grep |wc -l"
    checker_worker, stderr = funct.subprocess_execute(cmd)
    cmd = "ps ax |grep metrics_master |grep -v grep |wc -l"
    metrics_master, stderr = funct.subprocess_execute(cmd)
    cmd = "ps ax |grep -e 'metrics_worker\|metrics_waf_worker.py' |grep -v grep |wc -l"
    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)
    cmd = "ps ax |grep '(wsgi:api)'|grep -v grep|wc -l"
    api, stderr = funct.subprocess_execute(cmd)
except:
    pass

template = template.render(h2=1,
                           autorefresh=1,
示例#11
0
#!/usr/bin/env python3
import funct
import sql
from jinja2 import Environment, FileSystemLoader

env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
template = env.get_template('metrics.html')

print('Content-type: text/html\n')
funct.check_login()

try:
    user, user_id, role, token, servers = funct.get_users_params()
    cmd = "rpm --query haproxy-wi-metrics-* |awk -F\"metrics\" '{print $2}' |awk -F\".noa\" '{print $1}' |sed 's/-//1' |sed 's/-/./'"
    service_ver, stderr = funct.subprocess_execute(cmd)
    services = '0'

    if not stderr:
        if service_ver[0] == '* is not installed':
            servers = ''
        else:
            servers = sql.select_servers_metrics(user_id.value)
            services = '1'
except Exception:
    pass

template = template.render(h2=1,
                           title="Metrics",
                           autorefresh=1,
                           role=role,
                           user=user,
示例#12
0
    users = sql.select_users()
    settings = sql.get_setting('', all=1)
    ldap_enable = sql.get_setting('ldap_enable')
    services = []
    services_name = {
        "checker_haproxy": "Master checker service",
        "keep_alive": "Auto start service",
        "metrics_haproxy": "Master metrics service",
        "prometheus": "Prometheus service",
        "grafana-server": "Grafana service",
        "smon": "Simple monitoring network ports",
        "fail2ban": "Fail2ban service"
    }
    for s, v in services_name.items():
        cmd = "systemctl status %s |grep Act |awk  '{print $2}'" % s
        status, stderr = funct.subprocess_execute(cmd)
        services.append([s, status, v])
except:
    pass

template = template.render(title="Admin area: Manage users",
                           role=role,
                           user=user,
                           users=users,
                           groups=sql.select_groups(),
                           servers=sql.select_servers(full=1),
                           roles=sql.select_roles(),
                           masters=sql.select_servers(get_master_servers=1),
                           sshs=sql.select_ssh(),
                           telegrams=sql.select_telegram(),
                           token=token,
示例#13
0
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
template = env.get_template('admin.html')
form = funct.form

print('Content-type: text/html\n')

funct.check_login()
funct.page_for_admin()

try:
	user, user_id, role, token, servers = funct.get_users_params()
	users = sql.select_users()
	settings = sql.get_setting('', all=1)
	ldap_enable = sql.get_setting('ldap_enable')
	grafana, stderr = funct.subprocess_execute("service grafana-server status |grep Active |awk '{print $1}'")

	services = []
	services_name = {'checker_haproxy': 'Master backends checker service',
					'keep_alive': 'Auto start service',
					'metrics_haproxy': 'Master metrics service',
					'prometheus': 'Prometheus service',
					'grafana-server': 'Grafana service',
					'smon': 'Simple monitoring network ports',
					'fail2ban': 'Fail2ban service'}
	for s, v in services_name.items():
		cmd = "systemctl status %s |grep Act |awk  '{print $2}'" % s
		status, stderr = funct.subprocess_execute(cmd)
		if s != 'keep_alive':
			service_name = s.split('_')[0]
		else:
示例#14
0
print('Content-type: text/html\n')
funct.check_login()
funct.page_for_admin()

log_path = funct.get_config_var('main', 'log_path')
time_storage = sql.get_setting('log_time_storage')
time_storage = int(time_storage)

try:
    time_storage_hours = time_storage * 24
    for dirpath, dirnames, filenames in os.walk(log_path):
        for file in filenames:
            curpath = os.path.join(dirpath, file)
            try:
                funct.subprocess_execute('sudo chown apache:apache ' + curpath)
            except:
                pass
            file_modified = datetime.datetime.fromtimestamp(
                os.path.getmtime(curpath))
            if datetime.datetime.now() - file_modified > datetime.timedelta(
                    hours=time_storage_hours):
                os.remove(curpath)
except:
    print(
        '<center><div class="alert alert-danger" style="margin: 0; margin-bottom: 10px;">Can\'t delete old logs file. <br> Please check "log_time_storage" in config and <br>exist directory </div></center>'
    )
    pass

try:
    user, user_id, role, token, servers = funct.get_users_params()
示例#15
0
def kill_all_workers():
	cmd = "ps ax |grep -e 'tools/metrics_worker.py\|tools/metrics_waf_worker.py' |grep -v grep |awk '{print $1}' |xargs kill"
	output, stderr = funct.subprocess_execute(cmd)
	funct.logging("localhost", " Masrer killing all metrics workers", metrics=1)
	if stderr:
		funct.logging("localhost", stderr, metrics=1)
示例#16
0
    if (role == 2 or role == 3) and int(user_group) != 1:
        users = sql.select_users(group=user_group)
        servers_for_grep = ''
        i = 0
        servers_len = len(servers)

        for s in servers:
            i += 1
            if i != servers_len:
                servers_for_grep += s[2] + '|'
            else:
                servers_for_grep += s[2]

        cmd = "ps ax |grep -e 'metrics_worker\|metrics_waf_worker.py'|grep -E %s|grep -v grep |wc -l" % servers_for_grep
        metrics_worker, stderr = funct.subprocess_execute(cmd)
        cmd = "ps ax |grep checker_worker|grep -E %s |grep -v grep |wc -l" % servers_for_grep
        checker_worker, stderr = funct.subprocess_execute(cmd)
        i = 0
        for s in sql.select_alert(group=user_group):
            i += 1
        is_checker_worker = i
        is_metrics_workers = sql.select_servers_metrics_for_master(
            group=user_group)
        i = 0
        for s in is_metrics_workers:
            i += 1
        is_metrics_worker = i
        grafana = ''
        prometheus = ''
        host = ''
示例#17
0
def get_worker():
	cmd = "ps ax |grep 'tools/metrics_worker.py' |grep -v grep |awk '{print $7}'"
	output, stderr = funct.subprocess_execute(cmd)
	if stderr:
		funct.logging("localhost", stderr, metrics=1)
	return output
示例#18
0
if act == "overviewServers":
    id = form.getvalue('id')
    name = form.getvalue('name')
    ioloop = asyncio.get_event_loop()
    ioloop.run_until_complete(
        get_runner_overviewServers(server1=name, server2=serv, id=id))
    ioloop.close()

if act == "overviewHapwi":
    from jinja2 import Environment, FileSystemLoader
    env = Environment(loader=FileSystemLoader('templates/ajax'),
                      autoescape=True)
    template = env.get_template('/overviewHapwi.html')
    cmd = "top -b -n 1 |head -9"
    server_status, stderr = funct.subprocess_execute(cmd)

    template = template.render(server_status=server_status, stderr=stderr)
    print(template)

if form.getvalue('action'):
    import requests
    from requests_toolbelt.utils import dump

    haproxy_user = sql.get_setting('stats_user')
    haproxy_pass = sql.get_setting('stats_password')
    stats_port = sql.get_setting('stats_port')
    stats_page = sql.get_setting('stats_page')

    postdata = {
        'action': form.getvalue('action'),
示例#19
0
文件: ovw.py 项目: vok1984/haproxy-wi
def get_map(serv):
	from datetime import datetime
	from pytz import timezone
	import networkx as nx
	import matplotlib
	matplotlib.use('Agg')
	import matplotlib.pyplot as plt
	
	stats_port= sql.get_setting('stats_port')
	haproxy_config_path  = sql.get_setting('haproxy_config_path')
	hap_configs_dir = funct.get_config_var('configs', 'haproxy_save_configs_dir')
	date = funct.get_data('config')
	cfg = hap_configs_dir + serv + "-" + date + ".cfg"
	
	print('<center>')
	print("<h3>Map from %s</h3><br />" % serv)
	
	G = nx.DiGraph()
	
	funct.get_config(serv, cfg)	
	try:
		conf = open(cfg, "r")
	except IOError:
		print('<div class="alert alert-danger">Can\'t read import config file</div>')
	
	node = ""
	line_new2 = [1,""]
	i = 1200
	k = 1200
	j = 0
	m = 0
	for line in conf:
		if "listen" in line or "frontend" in line:
			if "stats" not in line:				
				node = line
				i = i - 500	
		if line.find("backend") == 0: 
			node = line
			i = i - 500	
			G.add_node(node,pos=(k,i),label_pos=(k,i+150))
		
		if "bind" in line:
			try:
				bind = line.split(":")
				if stats_port not in bind[1]:
					bind[1] = bind[1].strip(' ')
					bind = bind[1].split("crt")
					node = node.strip(' \t\n\r')
					node = node + ":" + bind[0]
					G.add_node(node,pos=(k,i),label_pos=(k,i+150))
			except:
				pass

		if "server " in line or "use_backend" in line or "default_backend" in line and "stats" not in line:
			if "timeout" not in line and "default-server" not in line and "#" not in line and "stats" not in line:
				i = i - 300
				j = j + 1				
				if "check" in line:
					line_new = line.split("check")
				else:
					line_new = line.split("if ")
				if "server" in line:
					line_new1 = line_new[0].split("server")
					line_new[0] = line_new1[1]	
					line_new2 = line_new[0].split(":")
					line_new[0] = line_new2[0]					
				
				line_new[0] = line_new[0].strip(' \t\n\r')
				line_new2[1] = line_new2[1].strip(' \t\n\r')

				if j % 2 == 0:
					G.add_node(line_new[0],pos=(k+250,i-350),label_pos=(k+225,i-100))
				else:
					G.add_node(line_new[0],pos=(k-250,i-50),label_pos=(k-225,i+180))

				if line_new2[1] != "":	
					G.add_edge(node, line_new[0], port=line_new2[1])
				else:
					G.add_edge(node,line_new[0])

	os.system("/bin/rm -f " + cfg)	

	pos=nx.get_node_attributes(G,'pos')
	pos_label=nx.get_node_attributes(G,'label_pos')
	edge_labels = nx.get_edge_attributes(G,'port')
	
	try:
		plt.figure(10,figsize=(9.5,15))
		nx.draw(G, pos, with_labels=False, font_weight='bold', width=3, alpha=0.1,linewidths=5)	
		nx.draw_networkx_nodes(G,pos, node_color="skyblue", node_size=100, alpha=0.8, node_shape="p")
		nx.draw_networkx_labels(G,pos=pos_label, alpha=1, font_color="green", font_size=10)
		nx.draw_networkx_edges(G,pos, width=0.5,alpha=0.5, edge_color="#5D9CEB",arrows=False)
		nx.draw_networkx_edge_labels(G, pos,label_pos=0.5,font_color="blue", labels=edge_labels, font_size=8)
		
		plt.savefig("map.png")
		plt.show()
	except Exception as e:
		print('<div class="alert alert-danger">' + str(e) + '</div>')
		
	cmd = "rm -f "+os.path.dirname(os.getcwd())+"/map*.png && mv map.png "+os.path.dirname(os.getcwd())+"/map"+date+".png"
	output, stderr = funct.subprocess_execute(cmd)
	print(stderr)

	print('<img src="/map%s.png" alt="map">' % date)		
示例#20
0
def kill_worker(serv):
	cmd = "ps ax |grep 'tools/checker_worker.py %s'|grep -v grep |awk '{print $1}' |xargs kill" % serv
	output, stderr = funct.subprocess_execute(cmd)
	funct.logging("localhost", " Master killed worker for: "+serv, alerting=1)
	if stderr:
		funct.logging("localhost", stderr, alerting=1)