#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import funct
import sql
import create_db
import os
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
template = env.get_template('ovw.html')
	
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:
	user, user_id, role, token, servers = funct.get_users_params()
	groups = sql.select_groups()
	user_group = funct.get_user_group(id=1)

	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 = ''
	else:
		users = sql.select_users()
		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 checker_worker |grep -v grep |wc -l"
		checker_worker, stderr = funct.subprocess_execute(cmd)
		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
		cmd = "ps ax |grep grafana|grep -v grep|wc -l"
		grafana, stderr = funct.subprocess_execute(cmd)
		cmd = "ps ax |grep 'prometheus ' |grep -v grep|wc -l"
		prometheus, stderr = funct.subprocess_execute(cmd)
		host = os.environ.get('HTTP_HOST', '')

	cmd = "systemctl status metrics_haproxy |grep Act |awk  '{print $2}'"
	metrics_master, stderr = funct.subprocess_execute(cmd)
	cmd = "systemctl status checker_haproxy |grep Act |awk  '{print $2}'"
	checker_master, 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 = "systemctl status smon |grep Act |awk  '{print $2}'"
	smon, stderr = funct.subprocess_execute(cmd)

except Exception as e:
	role = ''
	user = ''
	users = ''
	groups = ''
	roles = ''
	metrics_master = ''
	metrics_worker = ''
	checker_master = ''
	checker_worker = ''
	keep_alive = ''
	smon = ''
	grafana = ''
	prometheus = ''
	versions = ''
	haproxy_wi_log = ''
	servers = ''
	stderr = ''
	is_checker_worker = ''
	is_metrics_worker = ''
	token = ''

template = template.render(h2=1,
							autorefresh=1,
							title="Overview",
							role=role,
							user=user,
							users=users,
							groups=groups,
							users_groups=sql.select_user_groups_with_names(1, all=1),
							roles=sql.select_roles(),
							metrics_master=''.join(metrics_master),
							metrics_worker=''.join(metrics_worker),
							checker_master=''.join(checker_master),
							checker_worker=''.join(checker_worker),
							keep_alive=''.join(keep_alive),
							smon=''.join(smon),
							grafana=''.join(grafana),
							prometheus=''.join(prometheus),
							haproxy_wi_log_id=funct.haproxy_wi_log(log_id=1, file="haproxy-wi-", with_date=1),
							metrics_log_id=funct.haproxy_wi_log(log_id=1, file="metrics-", with_date=1),
							checker_log_id=funct.haproxy_wi_log(log_id=1, file="checker-", with_date=1),
							keep_alive_log_id=funct.haproxy_wi_log(log_id=1, file="keep_alive"),
							checker_error_log_id=funct.haproxy_wi_log(log_id=1, file="checker-error"),
							metrics_error_log_id=funct.haproxy_wi_log(log_id=1, file="metrics-error"),
							error=stderr,
							versions=funct.versions(),
							haproxy_wi_log=funct.haproxy_wi_log(),
							servers=servers,
							is_checker_worker=is_checker_worker,
							is_metrics_worker=is_metrics_worker,
							host=host,
							token=token)
print(template)
