mirror of https://github.com/Aidaho12/haproxy-wi
607 lines
22 KiB
Python
607 lines
22 KiB
Python
from app.modules.db.db_model import connect, mysql_enable, Metrics, MetricsHttpStatus, Server, NginxMetrics, ApacheMetrics, WafMetrics
|
|
from app.modules.db.common import out_error
|
|
import app.modules.roxy_wi_tools as roxy_wi_tools
|
|
|
|
|
|
def insert_metrics(serv, curr_con, cur_ssl_con, sess_rate, max_sess_rate):
|
|
get_date = roxy_wi_tools.GetDate()
|
|
cur_date = get_date.return_date('regular')
|
|
try:
|
|
Metrics.insert(
|
|
serv=serv, curr_con=curr_con, cur_ssl_con=cur_ssl_con, sess_rate=sess_rate, max_sess_rate=max_sess_rate,
|
|
date=cur_date
|
|
).execute()
|
|
except Exception as e:
|
|
out_error(e)
|
|
else:
|
|
conn = connect()
|
|
if type(conn) is not str:
|
|
if not conn.is_closed():
|
|
conn.close()
|
|
|
|
|
|
def insert_metrics_http(serv, http_2xx, http_3xx, http_4xx, http_5xx):
|
|
get_date = roxy_wi_tools.GetDate()
|
|
cur_date = get_date.return_date('regular')
|
|
try:
|
|
MetricsHttpStatus.insert(
|
|
serv=serv, ok_ans=http_2xx, redir_ans=http_3xx, not_found_ans=http_4xx, err_ans=http_5xx,
|
|
date=cur_date
|
|
).execute()
|
|
except Exception as e:
|
|
out_error(e)
|
|
else:
|
|
conn = connect()
|
|
if type(conn) is not str:
|
|
if not conn.is_closed():
|
|
conn.close()
|
|
|
|
|
|
def insert_nginx_metrics(serv, connection):
|
|
get_date = roxy_wi_tools.GetDate()
|
|
cur_date = get_date.return_date('regular')
|
|
try:
|
|
NginxMetrics.insert(serv=serv, conn=connection, date=cur_date).execute()
|
|
except Exception as e:
|
|
out_error(e)
|
|
else:
|
|
conn = connect()
|
|
if type(conn) is not str:
|
|
if not conn.is_closed():
|
|
conn.close()
|
|
|
|
|
|
def insert_apache_metrics(serv, connection):
|
|
get_date = roxy_wi_tools.GetDate()
|
|
cur_date = get_date.return_date('regular')
|
|
try:
|
|
ApacheMetrics.insert(serv=serv, conn=connection, date=cur_date).execute()
|
|
except Exception as e:
|
|
out_error(e)
|
|
else:
|
|
conn = connect()
|
|
if type(conn) is not str:
|
|
if not conn.is_closed():
|
|
conn.close()
|
|
|
|
|
|
def insert_waf_metrics(serv, connection):
|
|
get_date = roxy_wi_tools.GetDate()
|
|
cur_date = get_date.return_date('regular')
|
|
try:
|
|
WafMetrics.insert(serv=serv, conn=connection, date=cur_date).execute()
|
|
except Exception as e:
|
|
out_error(e)
|
|
finally:
|
|
conn = connect()
|
|
if type(conn) is not str:
|
|
if not conn.is_closed():
|
|
conn.close()
|
|
|
|
|
|
def delete_waf_metrics():
|
|
get_date = roxy_wi_tools.GetDate()
|
|
cur_date = get_date.return_date('regular', timedelta_minus=3)
|
|
query = WafMetrics.delete().where(WafMetrics.date < cur_date)
|
|
try:
|
|
query.execute()
|
|
except Exception as e:
|
|
out_error(e)
|
|
finally:
|
|
conn = connect()
|
|
if type(conn) is not str:
|
|
if not conn.is_closed():
|
|
conn.close()
|
|
|
|
|
|
def delete_metrics():
|
|
get_date = roxy_wi_tools.GetDate()
|
|
cur_date = get_date.return_date('regular', timedelta_minus=3)
|
|
query = Metrics.delete().where(Metrics.date < cur_date)
|
|
try:
|
|
query.execute()
|
|
except Exception as e:
|
|
out_error(e)
|
|
finally:
|
|
conn = connect()
|
|
if type(conn) is not str:
|
|
if not conn.is_closed():
|
|
conn.close()
|
|
|
|
|
|
def delete_http_metrics():
|
|
get_date = roxy_wi_tools.GetDate()
|
|
cur_date = get_date.return_date('regular', timedelta_minus=3)
|
|
query = MetricsHttpStatus.delete().where(MetricsHttpStatus.date < cur_date)
|
|
try:
|
|
query.execute()
|
|
except Exception as e:
|
|
out_error(e)
|
|
finally:
|
|
conn = connect()
|
|
if type(conn) is not str:
|
|
if not conn.is_closed():
|
|
conn.close()
|
|
|
|
|
|
def delete_nginx_metrics():
|
|
get_date = roxy_wi_tools.GetDate()
|
|
cur_date = get_date.return_date('regular', timedelta_minus=3)
|
|
query = NginxMetrics.delete().where(NginxMetrics.date < cur_date)
|
|
try:
|
|
query.execute()
|
|
except Exception as e:
|
|
out_error(e)
|
|
finally:
|
|
conn = connect()
|
|
if type(conn) is not str:
|
|
if not conn.is_closed():
|
|
conn.close()
|
|
|
|
|
|
def delete_apache_metrics():
|
|
get_date = roxy_wi_tools.GetDate()
|
|
cur_date = get_date.return_date('regular', timedelta_minus=3)
|
|
query = ApacheMetrics.delete().where(ApacheMetrics.date < cur_date)
|
|
try:
|
|
query.execute()
|
|
except Exception as e:
|
|
out_error(e)
|
|
finally:
|
|
conn = connect()
|
|
if type(conn) is not str:
|
|
if not conn.is_closed():
|
|
conn.close()
|
|
|
|
|
|
def select_metrics(serv, service, **kwargs):
|
|
conn = connect()
|
|
cursor = conn.cursor()
|
|
|
|
if service in ('nginx', 'apache', 'waf'):
|
|
metrics_table = '{}_metrics'.format(service)
|
|
elif service == 'http_metrics':
|
|
metrics_table = 'metrics_http_status'
|
|
else:
|
|
metrics_table = 'metrics'
|
|
|
|
if mysql_enable == '1':
|
|
if kwargs.get('time_range') == '60':
|
|
date_from = "and date > CONVERT_TZ(NOW(),'SYSTEM','+0:00') - INTERVAL 60 minute group by `date` div 100"
|
|
elif kwargs.get('time_range') == '180':
|
|
date_from = "and date > CONVERT_TZ(NOW(),'SYSTEM','+0:00') - INTERVAL 180 minute group by `date` div 200"
|
|
elif kwargs.get('time_range') == '360':
|
|
date_from = "and date > CONVERT_TZ(NOW(),'SYSTEM','+0:00') - INTERVAL 360 minute group by `date` div 300"
|
|
elif kwargs.get('time_range') == '720':
|
|
date_from = "and date > CONVERT_TZ(NOW(),'SYSTEM','+0:00') - INTERVAL 720 minute group by `date` div 500"
|
|
elif kwargs.get('time_range') == '1':
|
|
date_from = "and date > CONVERT_TZ(NOW(),'SYSTEM','+0:00') - INTERVAL 1 minute"
|
|
else:
|
|
date_from = "and date > CONVERT_TZ(NOW(),'SYSTEM','+0:00') - INTERVAL 30 minute"
|
|
sql = """ select * from {metrics_table} where serv = '{serv}' {date_from} order by `date` asc """.format(
|
|
metrics_table=metrics_table, serv=serv, date_from=date_from
|
|
)
|
|
else:
|
|
if kwargs.get('time_range') == '60':
|
|
date_from = "and date > datetime('now', '-60 minutes', 'UTC') and rowid % 2 = 0"
|
|
elif kwargs.get('time_range') == '180':
|
|
date_from = "and date > datetime('now', '-180 minutes', 'UTC') and rowid % 5 = 0"
|
|
elif kwargs.get('time_range') == '360':
|
|
date_from = "and date > datetime('now', '-360 minutes', 'UTC') and rowid % 7 = 0"
|
|
elif kwargs.get('time_range') == '720':
|
|
date_from = "and date > datetime('now', '-720 minutes', 'UTC') and rowid % 9 = 0"
|
|
elif kwargs.get('time_range') == '1':
|
|
date_from = "and date > datetime('now', '-1 minutes', 'UTC')"
|
|
else:
|
|
date_from = "and date > datetime('now', '-30 minutes', 'UTC')"
|
|
|
|
sql = """ select * from (select * from {metrics_table} where serv = '{serv}' {date_from} order by `date`) order by `date` """.format(
|
|
metrics_table=metrics_table, serv=serv, date_from=date_from)
|
|
|
|
try:
|
|
cursor.execute(sql)
|
|
except Exception as e:
|
|
out_error(e)
|
|
else:
|
|
return cursor.fetchall()
|
|
|
|
|
|
def select_servers_metrics_for_master(**kwargs):
|
|
if kwargs.get('group') != 1:
|
|
query = Server.select(Server.ip).where(
|
|
((Server.haproxy_metrics == 1) | (Server.nginx_metrics == 1) | (Server.apache_metrics == 1))
|
|
& (Server.group_id == kwargs.get('group'))
|
|
)
|
|
else:
|
|
query = Server.select(Server.ip).where(
|
|
(Server.haproxy_metrics == 1)
|
|
| (Server.nginx_metrics == 1)
|
|
| (Server.apache_metrics == 1)
|
|
)
|
|
|
|
try:
|
|
query_res = query.execute()
|
|
except Exception as e:
|
|
out_error(e)
|
|
else:
|
|
return query_res
|
|
|
|
|
|
def select_haproxy_servers_metrics_for_master():
|
|
query = Server.select(Server.ip).where(Server.haproxy_metrics == 1)
|
|
try:
|
|
query_res = query.execute()
|
|
except Exception as e:
|
|
out_error(e)
|
|
else:
|
|
return query_res
|
|
|
|
|
|
def select_nginx_servers_metrics_for_master():
|
|
query = Server.select(Server.ip).where((Server.nginx_metrics == 1) & (Server.nginx == 1))
|
|
try:
|
|
query_res = query.execute()
|
|
except Exception as e:
|
|
out_error(e)
|
|
else:
|
|
return query_res
|
|
|
|
|
|
def select_apache_servers_metrics_for_master():
|
|
query = Server.select(Server.ip).where(
|
|
(Server.apache_metrics == 1)
|
|
& (Server.apache == 1)
|
|
)
|
|
try:
|
|
query_res = query.execute()
|
|
except Exception as e:
|
|
out_error(e)
|
|
else:
|
|
return query_res
|
|
|
|
|
|
def select_servers_metrics(group_id):
|
|
if group_id == 1:
|
|
query = Server.select(Server.ip).where((Server.enabled == 1) & (Server.haproxy_metrics == 1))
|
|
else:
|
|
query = Server.select(Server.ip).where(
|
|
(Server.enabled == 1) & (Server.group_id == group_id) & (Server.haproxy_metrics == 1))
|
|
try:
|
|
query_res = query.execute()
|
|
except Exception as e:
|
|
out_error(e)
|
|
else:
|
|
return query_res
|
|
|
|
|
|
def select_table_metrics(group_id):
|
|
conn = connect()
|
|
cursor = conn.cursor()
|
|
|
|
if group_id == 1:
|
|
groups = ""
|
|
else:
|
|
groups = "and servers.group_id = '{group}' ".format(group=group_id)
|
|
if mysql_enable == '1':
|
|
sql = """
|
|
select ip.ip, hostname, avg_sess_1h, avg_sess_24h, avg_sess_3d, max_sess_1h, max_sess_24h, max_sess_3d,
|
|
avg_cur_1h, avg_cur_24h, avg_cur_3d, max_con_1h, max_con_24h, max_con_3d from
|
|
(select servers.ip from servers where haproxy_metrics = 1 ) as ip,
|
|
|
|
(select servers.ip, servers.hostname as hostname from servers left join metrics as metr on servers.ip = metr.serv where servers.haproxy_metrics = 1 %s) as hostname,
|
|
|
|
(select servers.ip,round(avg(metr.sess_rate), 1) as avg_sess_1h from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= now() and metr.date >= DATE_ADD(NOW(), INTERVAL -1 HOUR)
|
|
group by servers.ip) as avg_sess_1h,
|
|
|
|
(select servers.ip,round(avg(metr.sess_rate), 1) as avg_sess_24h from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -24 HOUR)
|
|
group by servers.ip) as avg_sess_24h,
|
|
|
|
(select servers.ip,round(avg(metr.sess_rate), 1) as avg_sess_3d from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= now() and metr.date >= DATE_ADD(NOW(), INTERVAL -3 DAY)
|
|
group by servers.ip ) as avg_sess_3d,
|
|
|
|
(select servers.ip,max(metr.sess_rate) as max_sess_1h from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -1 HOUR)
|
|
group by servers.ip) as max_sess_1h,
|
|
|
|
(select servers.ip,max(metr.sess_rate) as max_sess_24h from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -24 HOUR)
|
|
group by servers.ip) as max_sess_24h,
|
|
|
|
(select servers.ip,max(metr.sess_rate) as max_sess_3d from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -3 DAY)
|
|
group by servers.ip ) as max_sess_3d,
|
|
|
|
(select servers.ip,round(avg(metr.curr_con+metr.cur_ssl_con), 1) as avg_cur_1h from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -1 HOUR)
|
|
group by servers.ip) as avg_cur_1h,
|
|
|
|
(select servers.ip,round(avg(metr.curr_con+metr.cur_ssl_con), 1) as avg_cur_24h from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -24 HOUR)
|
|
group by servers.ip) as avg_cur_24h,
|
|
|
|
(select servers.ip,round(avg(metr.curr_con+metr.cur_ssl_con), 1) as avg_cur_3d from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -3 DAY)
|
|
group by servers.ip ) as avg_cur_3d,
|
|
|
|
(select servers.ip,max(metr.curr_con) as max_con_1h from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -1 HOUR)
|
|
group by servers.ip) as max_con_1h,
|
|
|
|
(select servers.ip,max(metr.curr_con) as max_con_24h from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -24 HOUR)
|
|
group by servers.ip) as max_con_24h,
|
|
|
|
(select servers.ip,max(metr.curr_con) as max_con_3d from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -3 DAY)
|
|
group by servers.ip ) as max_con_3d
|
|
|
|
where ip.ip=hostname.ip
|
|
and ip.ip=avg_sess_1h.ip
|
|
and ip.ip=avg_sess_24h.ip
|
|
and ip.ip=avg_sess_3d.ip
|
|
and ip.ip=max_sess_1h.ip
|
|
and ip.ip=max_sess_24h.ip
|
|
and ip.ip=max_sess_3d.ip
|
|
and ip.ip=avg_cur_1h.ip
|
|
and ip.ip=avg_cur_24h.ip
|
|
and ip.ip=avg_cur_3d.ip
|
|
and ip.ip=max_con_1h.ip
|
|
and ip.ip=max_con_24h.ip
|
|
and ip.ip=max_con_3d.ip
|
|
|
|
group by hostname.ip """ % groups
|
|
else:
|
|
sql = """
|
|
select ip.ip, hostname, avg_sess_1h, avg_sess_24h, avg_sess_3d, max_sess_1h, max_sess_24h, max_sess_3d, avg_cur_1h,
|
|
avg_cur_24h, avg_cur_3d, max_con_1h, max_con_24h, max_con_3d from
|
|
(select servers.ip from servers where haproxy_metrics = 1 ) as ip,
|
|
|
|
(select servers.ip, servers.hostname as hostname from servers left join metrics as metr on servers.ip = metr.serv where servers.haproxy_metrics = 1 %s) as hostname,
|
|
|
|
(select servers.ip,round(avg(metr.sess_rate), 1) as avg_sess_1h from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-1 hours', 'localtime')
|
|
group by servers.ip) as avg_sess_1h,
|
|
|
|
(select servers.ip,round(avg(metr.sess_rate), 1) as avg_sess_24h from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-24 hours', 'localtime')
|
|
group by servers.ip) as avg_sess_24h,
|
|
|
|
(select servers.ip,round(avg(metr.sess_rate), 1) as avg_sess_3d from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-3 days', 'localtime')
|
|
group by servers.ip ) as avg_sess_3d,
|
|
|
|
(select servers.ip,max(metr.sess_rate) as max_sess_1h from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-1 hours', 'localtime')
|
|
group by servers.ip) as max_sess_1h,
|
|
|
|
(select servers.ip,max(metr.sess_rate) as max_sess_24h from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-24 hours', 'localtime')
|
|
group by servers.ip) as max_sess_24h,
|
|
|
|
(select servers.ip,max(metr.sess_rate) as max_sess_3d from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-3 days', 'localtime')
|
|
group by servers.ip ) as max_sess_3d,
|
|
|
|
(select servers.ip,round(avg(metr.curr_con+metr.cur_ssl_con), 1) as avg_cur_1h from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-1 hours', 'localtime')
|
|
group by servers.ip) as avg_cur_1h,
|
|
|
|
(select servers.ip,round(avg(metr.curr_con+metr.cur_ssl_con), 1) as avg_cur_24h from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-24 hours', 'localtime')
|
|
group by servers.ip) as avg_cur_24h,
|
|
|
|
(select servers.ip,round(avg(metr.curr_con+metr.cur_ssl_con), 1) as avg_cur_3d from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-3 days', 'localtime')
|
|
group by servers.ip ) as avg_cur_3d,
|
|
|
|
(select servers.ip,max(metr.curr_con) as max_con_1h from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-1 hours', 'localtime')
|
|
group by servers.ip) as max_con_1h,
|
|
|
|
(select servers.ip,max(metr.curr_con) as max_con_24h from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-24 hours', 'localtime')
|
|
group by servers.ip) as max_con_24h,
|
|
|
|
(select servers.ip,max(metr.curr_con) as max_con_3d from servers
|
|
left join metrics as metr on metr.serv = servers.ip
|
|
where servers.haproxy_metrics = 1 and
|
|
metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-3 days', 'localtime')
|
|
group by servers.ip ) as max_con_3d
|
|
|
|
where ip.ip=hostname.ip
|
|
and ip.ip=avg_sess_1h.ip
|
|
and ip.ip=avg_sess_24h.ip
|
|
and ip.ip=avg_sess_3d.ip
|
|
and ip.ip=max_sess_1h.ip
|
|
and ip.ip=max_sess_24h.ip
|
|
and ip.ip=max_sess_3d.ip
|
|
and ip.ip=avg_cur_1h.ip
|
|
and ip.ip=avg_cur_24h.ip
|
|
and ip.ip=avg_cur_3d.ip
|
|
and ip.ip=max_con_1h.ip
|
|
and ip.ip=max_con_24h.ip
|
|
and ip.ip=max_con_3d.ip
|
|
|
|
group by hostname.ip """ % groups
|
|
|
|
try:
|
|
cursor.execute(sql)
|
|
except Exception as e:
|
|
out_error(e)
|
|
else:
|
|
return cursor.fetchall()
|
|
|
|
|
|
def select_service_table_metrics(service: str, group_id: int):
|
|
conn = connect()
|
|
cursor = conn.cursor()
|
|
|
|
if service in ('nginx', 'apache'):
|
|
metrics_table = f'{service}_metrics'
|
|
|
|
if group_id == 1:
|
|
groups = ""
|
|
else:
|
|
groups = f"and servers.group_id = '{group_id}' "
|
|
|
|
if mysql_enable == '1':
|
|
sql = """
|
|
select ip.ip, hostname, avg_cur_1h, avg_cur_24h, avg_cur_3d, max_con_1h, max_con_24h, max_con_3d from
|
|
(select servers.ip from servers where {metrics} = 1 ) as ip,
|
|
|
|
(select servers.ip, servers.hostname as hostname from servers left join {metrics} as metr on servers.ip = metr.serv where servers.{metrics} = 1 {groups}) as hostname,
|
|
|
|
(select servers.ip,round(avg(metr.conn), 1) as avg_cur_1h from servers
|
|
left join {metrics} as metr on metr.serv = servers.ip
|
|
where servers.{metrics} = 1 and
|
|
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -1 HOUR)
|
|
group by servers.ip) as avg_cur_1h,
|
|
|
|
(select servers.ip,round(avg(metr.conn), 1) as avg_cur_24h from servers
|
|
left join {metrics} as metr on metr.serv = servers.ip
|
|
where servers.{metrics} = 1 and
|
|
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -24 HOUR)
|
|
group by servers.ip) as avg_cur_24h,
|
|
|
|
(select servers.ip,round(avg(metr.conn), 1) as avg_cur_3d from servers
|
|
left join {metrics} as metr on metr.serv = servers.ip
|
|
where servers.{metrics} = 1 and
|
|
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -3 DAY)
|
|
group by servers.ip ) as avg_cur_3d,
|
|
|
|
(select servers.ip,max(metr.conn) as max_con_1h from servers
|
|
left join {metrics} as metr on metr.serv = servers.ip
|
|
where servers.{metrics} = 1 and
|
|
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -1 HOUR)
|
|
group by servers.ip) as max_con_1h,
|
|
|
|
(select servers.ip,max(metr.conn) as max_con_24h from servers
|
|
left join {metrics} as metr on metr.serv = servers.ip
|
|
where servers.{metrics} = 1 and
|
|
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -24 HOUR)
|
|
group by servers.ip) as max_con_24h,
|
|
|
|
(select servers.ip,max(metr.conn) as max_con_3d from servers
|
|
left join {metrics} as metr on metr.serv = servers.ip
|
|
where servers.{metrics} = 1 and
|
|
metr.date <= now() and metr.date >= DATE_ADD(NOW(),INTERVAL -3 DAY)
|
|
group by servers.ip ) as max_con_3d
|
|
|
|
where ip.ip=hostname.ip
|
|
and ip.ip=avg_cur_1h.ip
|
|
and ip.ip=avg_cur_24h.ip
|
|
and ip.ip=avg_cur_3d.ip
|
|
and ip.ip=max_con_1h.ip
|
|
and ip.ip=max_con_24h.ip
|
|
and ip.ip=max_con_3d.ip
|
|
|
|
group by hostname.ip """.format(metrics=metrics_table, groups=groups)
|
|
else:
|
|
sql = """
|
|
select ip.ip, hostname, avg_cur_1h, avg_cur_24h, avg_cur_3d, max_con_1h, max_con_24h, max_con_3d from
|
|
(select servers.ip from servers where {metrics} = 1 ) as ip,
|
|
|
|
(select servers.ip, servers.hostname as hostname from servers left join {metrics} as metr on servers.ip = metr.serv where servers.{metrics} = 1 {groups}) as hostname,
|
|
|
|
(select servers.ip,round(avg(metr.conn), 1) as avg_cur_1h from servers
|
|
left join {metrics} as metr on metr.serv = servers.ip
|
|
where servers.{metrics} = 1 and
|
|
metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-1 hours', 'localtime')
|
|
group by servers.ip) as avg_cur_1h,
|
|
|
|
(select servers.ip,round(avg(metr.conn), 1) as avg_cur_24h from servers
|
|
left join {metrics} as metr on metr.serv = servers.ip
|
|
where servers.{metrics} = 1 and
|
|
metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-24 hours', 'localtime')
|
|
group by servers.ip) as avg_cur_24h,
|
|
|
|
(select servers.ip,round(avg(metr.conn), 1) as avg_cur_3d from servers
|
|
left join {metrics} as metr on metr.serv = servers.ip
|
|
where servers.{metrics} = 1 and
|
|
metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-3 days', 'localtime')
|
|
group by servers.ip ) as avg_cur_3d,
|
|
|
|
(select servers.ip,max(metr.conn) as max_con_1h from servers
|
|
left join {metrics} as metr on metr.serv = servers.ip
|
|
where servers.{metrics} = 1 and
|
|
metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-1 hours', 'localtime')
|
|
group by servers.ip) as max_con_1h,
|
|
|
|
(select servers.ip,max(metr.conn) as max_con_24h from servers
|
|
left join {metrics} as metr on metr.serv = servers.ip
|
|
where servers.{metrics} = 1 and
|
|
metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-24 hours', 'localtime')
|
|
group by servers.ip) as max_con_24h,
|
|
|
|
(select servers.ip,max(metr.conn) as max_con_3d from servers
|
|
left join {metrics} as metr on metr.serv = servers.ip
|
|
where servers.{metrics} = 1 and
|
|
metr.date <= datetime('now', 'localtime') and metr.date >= datetime('now', '-3 days', 'localtime')
|
|
group by servers.ip ) as max_con_3d
|
|
|
|
where ip.ip=hostname.ip
|
|
and ip.ip=avg_cur_1h.ip
|
|
and ip.ip=avg_cur_24h.ip
|
|
and ip.ip=avg_cur_3d.ip
|
|
and ip.ip=max_con_1h.ip
|
|
and ip.ip=max_con_24h.ip
|
|
and ip.ip=max_con_3d.ip
|
|
|
|
group by hostname.ip """.format(metrics=metrics_table, groups=groups)
|
|
|
|
try:
|
|
cursor.execute(sql)
|
|
except Exception as e:
|
|
out_error(e)
|
|
else:
|
|
return cursor.fetchall()
|