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('' '' '' '' '' '' '' '') i = 0 style = "" for users in USERS: i = i + 1 if i is 4: style = 'style="display: none;" class="show-users"' print('') print('
LoginEmailGroupRole' '' '' 'Show all' '' '' '
' + users[1] +'') print(users[2]+'') print(sql.select_user_name_group(users[5])) print('') print(users[4]) print('
') print('' '' '' '' '' '' '' '') 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('') print('
Server' 'HAproxy status' '' 'Action' '' 'Last edit' '
%s' % (server[1], server[1], server[1])) funct.ssh_command(server[2], commands, server_status="1") print('') if funct.is_admin(): print('start' % server[2]) print('start' % server[2]) print('restart' % server[2]) if funct.is_admin(level = 2): print('show' % server[2]) print('edit' % server[2]) print('compare' % server[2]) print('map' % server[2]) print('') funct.ssh_command(server[2], commands1) print('
' '' '' '' '' '') 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('') print('') print('
Server' 'HAproxy info' '' 'Server status' '

' + server[1] + ':

Total listen/frontend/backend:
')
		funct.ssh_command(server[2], commands)
		print('
')
		funct.ssh_command(server[2], commands1)
		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('map' % 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('
') print('

Choose leftChoose right

') print('

') print('') print('' % serv) print('') print('Show

') 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")