import funct
from configparser import ConfigParser, ExtendedInterpolation
import os
import cgi
import sql
path_config = "haproxy-webintarface.config"
config = ConfigParser(interpolation=ExtendedInterpolation())
config.read(path_config)
time_zone = config.get('main', 'time_zone')
cgi_path = config.get('main', 'cgi_path')
fullpath = config.get('main', 'fullpath')
stats_port= config.get('haproxy', 'stats_port')
haproxy_config_path = config.get('haproxy', 'haproxy_config_path')
status_command = config.get('haproxy', 'status_command')
hap_configs_dir = config.get('configs', 'haproxy_save_configs_dir')
form = cgi.FieldStorage()
def get_overview():
USERS = sql.select_users()
listhap = sql.get_dick_permit()
if funct.is_admin():
print('
'
''
'Login | '
'Email | '
'Group | '
'Role | '
''
''
''
'Show all'
''
''
' | '
'
')
i = 0
style = ""
for users in USERS:
i = i + 1
if i is 4:
style = 'style="display: none;" class="show-users"'
print('' + users[1] +' | ')
print(users[2]+' | ')
print(sql.select_user_name_group(users[5]))
print(' | ')
print(users[4])
print(' | |
')
print('
')
print(''
''
'Server | '
''
'HAproxy status'
' | '
''
'Action'
' | '
''
'Last edit'
' | '
' | '
'
')
commands = [ "ps -Af |grep [h]aproxy |wc -l" ]
commands1 = [ "ls -l %s |awk '{ print $6\" \"$7\" \"$8}'" % haproxy_config_path ]
for server in listhap:
print('%s | ' % (server[1], server[1], server[1]))
funct.ssh_command(server[2], commands, server_status="1")
print(' | ')
if funct.is_admin():
print('' % server[2])
print('' % server[2])
print('' % server[2])
if funct.is_admin(level = 2):
print('' % server[2])
print('' % server[2])
print('' % server[2])
print('' % server[2])
print(' | ')
funct.ssh_command(server[2], commands1)
print(' | |
')
print('
'
''
'Server | '
''
'HAproxy info'
' | '
''
'Server status'
' | '
'
')
commands = [ "cat " + haproxy_config_path + " |grep -E '^listen|^backend|^frontend' |grep -v stats |wc -l",
"uname -smor",
"haproxy -v |head -1",
status_command + "|grep Active | sed 's/^[ \t]*//'" ]
commands1 = [ "top -u haproxy -b -n 1" ]
for server in sorted(listhap):
print('' + server[1] + ': | ')
print('Total listen/frontend/backend:')
funct.ssh_command(server[2], commands)
print(' | ')
funct.ssh_command(server[2], commands1)
print(' |
')
print('|
')
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
date = funct.get_data('config')
cfg = hap_configs_dir + serv + "-" + date + ".cfg"
print('')
print("Map from %s
" % serv)
G = nx.DiGraph()
funct.get_config(serv, cfg)
try:
conf = open(cfg, "r")
except IOError:
print('Can\'t read import config file
')
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:
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))
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)
os.chdir(cgi_path)
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('' + str(e) + '
')
commands = [ "rm -f "+fullpath+"/map*.png", "mv %s/map.png %s/map%s.png" % (cgi_path, fullpath, date) ]
funct.ssh_command("localhost", commands)
print('' % date)
def show_compare_configs(serv):
import glob
left = form.getvalue('left')
right = form.getvalue('right')
haproxy_configs_server = config.get('configs', 'haproxy_configs_server')
print('')
def comapre_show():
left = form.getvalue('left')
right = form.getvalue('right')
haproxy_configs_server = config.get('configs', 'haproxy_configs_server')
hap_configs_dir = config.get('configs', 'haproxy_save_configs_dir')
commands = [ 'diff -ub %s%s %s%s' % (hap_configs_dir, left, hap_configs_dir, right) ]
funct.ssh_command(haproxy_configs_server, commands, compare="1")