mirror of https://github.com/Aidaho12/haproxy-wi
parent
73563a047e
commit
b205d47372
|
@ -205,7 +205,6 @@ def haproxy_log(haproxy_id):
|
||||||
def get_section(haproxy_id):
|
def get_section(haproxy_id):
|
||||||
if not check_login(required_service=1):
|
if not check_login(required_service=1):
|
||||||
return dict(error=_error_auth)
|
return dict(error=_error_auth)
|
||||||
print(str(request.headers.get('section-name')))
|
|
||||||
return api_funct.get_section(haproxy_id)
|
return api_funct.get_section(haproxy_id)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -733,9 +733,29 @@ def update_db_v_7_2_0_1():
|
||||||
print("Updating... DB has been updated to version 7.2.0-1")
|
print("Updating... DB has been updated to version 7.2.0-1")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def update_db_v_7_2_3():
|
||||||
|
try:
|
||||||
|
if mysql_enable:
|
||||||
|
migrate(
|
||||||
|
migrator.add_column('checker_setting', 'mm_id', IntegerField(default=0)),
|
||||||
|
migrator.add_column('smon', 'mm_channel_id', IntegerField(default=0)),
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
migrate(
|
||||||
|
migrator.add_column('checker_setting', 'mm_id', IntegerField(constraints=[SQL('DEFAULT 0')])),
|
||||||
|
migrator.add_column('smon', 'mm_channel_id', IntegerField(constraints=[SQL('DEFAULT 0')])),
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
if e.args[0] == 'duplicate column name: mm_id' or str(e) == '(1060, "Duplicate column name \'mm_id\'")':
|
||||||
|
print('Updating... DB has been updated to version 7.2.3')
|
||||||
|
else:
|
||||||
|
print("An error occurred:", e)
|
||||||
|
|
||||||
|
|
||||||
def update_ver():
|
def update_ver():
|
||||||
try:
|
try:
|
||||||
Version.update(version='7.2.2.0').execute()
|
Version.update(version='7.2.3.0').execute()
|
||||||
except Exception:
|
except Exception:
|
||||||
print('Cannot update version')
|
print('Cannot update version')
|
||||||
|
|
||||||
|
@ -771,6 +791,7 @@ def update_all():
|
||||||
update_db_v_7_1_2_1()
|
update_db_v_7_1_2_1()
|
||||||
update_db_v_7_2_0()
|
update_db_v_7_2_0()
|
||||||
update_db_v_7_2_0_1()
|
update_db_v_7_2_0_1()
|
||||||
|
update_db_v_7_2_3()
|
||||||
update_ver()
|
update_ver()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from app.modules.db.db_model import Telegram, Slack, PD, Server
|
from app.modules.db.db_model import Telegram, Slack, PD, Server, MM
|
||||||
from app.modules.db.common import out_error
|
from app.modules.db.common import out_error
|
||||||
|
|
||||||
|
|
||||||
|
@ -51,6 +51,13 @@ def get_user_pd_by_group(group):
|
||||||
out_error(e)
|
out_error(e)
|
||||||
|
|
||||||
|
|
||||||
|
def get_user_mm_by_group(group):
|
||||||
|
try:
|
||||||
|
return MM.select().where(MM.groups == group).execute()
|
||||||
|
except Exception as e:
|
||||||
|
out_error(e)
|
||||||
|
|
||||||
|
|
||||||
def get_pd_by_ip(ip):
|
def get_pd_by_ip(ip):
|
||||||
query = PD.select().join(Server, on=(Server.groups == PD.groups)).where(Server.ip == ip)
|
query = PD.select().join(Server, on=(Server.groups == PD.groups)).where(Server.ip == ip)
|
||||||
try:
|
try:
|
||||||
|
@ -201,3 +208,65 @@ def update_pd(token, chanel, group, pd_id):
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def insert_new_mm(token, chanel, group):
|
||||||
|
try:
|
||||||
|
MM.insert(token=token, chanel_name=chanel, groups=group).execute()
|
||||||
|
except Exception as e:
|
||||||
|
out_error(e)
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def update_mm(token, chanel, group, mm_id):
|
||||||
|
try:
|
||||||
|
MM.update(token=token, chanel_name=chanel, groups=group).where(MM.id == mm_id).execute()
|
||||||
|
except Exception as e:
|
||||||
|
out_error(e)
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def delete_mm(pd_id):
|
||||||
|
try:
|
||||||
|
MM.delete().where(MM.id == pd_id).execute()
|
||||||
|
except Exception as e:
|
||||||
|
out_error(e)
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def select_mm(**kwargs):
|
||||||
|
if kwargs.get('token'):
|
||||||
|
query = MM.select().where(MM.token == kwargs.get('token'))
|
||||||
|
elif kwargs.get('id'):
|
||||||
|
query = MM.select().where(MM.id == kwargs.get('id'))
|
||||||
|
else:
|
||||||
|
query = MM.select()
|
||||||
|
try:
|
||||||
|
query_res = query.execute()
|
||||||
|
except Exception as e:
|
||||||
|
out_error(e)
|
||||||
|
else:
|
||||||
|
return query_res
|
||||||
|
|
||||||
|
|
||||||
|
def get_mm_by_ip(ip):
|
||||||
|
query = MM.select().join(Server, on=(Server.groups == MM.groups)).where(Server.ip == ip)
|
||||||
|
try:
|
||||||
|
query_res = query.execute()
|
||||||
|
except Exception as e:
|
||||||
|
out_error(e)
|
||||||
|
else:
|
||||||
|
return query_res
|
||||||
|
|
||||||
|
|
||||||
|
def get_mm_by_id(pd_id):
|
||||||
|
try:
|
||||||
|
return MM.select().where(MM.id == pd_id).execute()
|
||||||
|
except Exception as e:
|
||||||
|
out_error(e)
|
||||||
|
|
|
@ -41,11 +41,11 @@ def insert_new_checker_setting_for_server(server_ip: str) -> None:
|
||||||
|
|
||||||
|
|
||||||
def update_haproxy_checker_settings(
|
def update_haproxy_checker_settings(
|
||||||
email: int, telegram_id: int, slack_id: int, pd_id: int, service_alert: int, backend_alert: int,
|
email: int, telegram_id: int, slack_id: int, pd_id: int, mm_id: int, service_alert: int, backend_alert: int,
|
||||||
maxconn_alert: int, setting_id: int
|
maxconn_alert: int, setting_id: int
|
||||||
) -> bool:
|
) -> bool:
|
||||||
settings_update = CheckerSetting.update(
|
settings_update = CheckerSetting.update(
|
||||||
email=email, telegram_id=telegram_id, slack_id=slack_id, pd_id=pd_id, service_alert=service_alert,
|
email=email, telegram_id=telegram_id, slack_id=slack_id, pd_id=pd_id, mm_id=mm_id, service_alert=service_alert,
|
||||||
backend_alert=backend_alert, maxconn_alert=maxconn_alert
|
backend_alert=backend_alert, maxconn_alert=maxconn_alert
|
||||||
).where(CheckerSetting.id == setting_id)
|
).where(CheckerSetting.id == setting_id)
|
||||||
try:
|
try:
|
||||||
|
@ -57,11 +57,11 @@ def update_haproxy_checker_settings(
|
||||||
|
|
||||||
|
|
||||||
def update_keepalived_checker_settings(
|
def update_keepalived_checker_settings(
|
||||||
email: int, telegram_id: int, slack_id: int, pd_id: int, service_alert: int, backend_alert: int,
|
email: int, telegram_id: int, slack_id: int, pd_id: int, mm_id: int, service_alert: int, backend_alert: int,
|
||||||
setting_id: int
|
setting_id: int
|
||||||
) -> bool:
|
) -> bool:
|
||||||
settings_update = CheckerSetting.update(
|
settings_update = CheckerSetting.update(
|
||||||
email=email, telegram_id=telegram_id, slack_id=slack_id, pd_id=pd_id,
|
email=email, telegram_id=telegram_id, slack_id=slack_id, pd_id=pd_id, mm_id=mm_id,
|
||||||
service_alert=service_alert, backend_alert=backend_alert
|
service_alert=service_alert, backend_alert=backend_alert
|
||||||
).where(CheckerSetting.id == setting_id)
|
).where(CheckerSetting.id == setting_id)
|
||||||
try:
|
try:
|
||||||
|
@ -73,10 +73,10 @@ def update_keepalived_checker_settings(
|
||||||
|
|
||||||
|
|
||||||
def update_service_checker_settings(
|
def update_service_checker_settings(
|
||||||
email: int, telegram_id: int, slack_id: int, pd_id: int, service_alert: int, setting_id: int
|
email: int, telegram_id: int, slack_id: int, pd_id: int, mm_id: int, service_alert: int, setting_id: int
|
||||||
) -> bool:
|
) -> bool:
|
||||||
settings_update = CheckerSetting.update(
|
settings_update = CheckerSetting.update(
|
||||||
email=email, telegram_id=telegram_id, slack_id=slack_id, pd_id=pd_id, service_alert=service_alert
|
email=email, telegram_id=telegram_id, slack_id=slack_id, pd_id=pd_id, mm_id=mm_id, service_alert=service_alert
|
||||||
).where(CheckerSetting.id == setting_id)
|
).where(CheckerSetting.id == setting_id)
|
||||||
try:
|
try:
|
||||||
settings_update.execute()
|
settings_update.execute()
|
||||||
|
|
|
@ -123,6 +123,16 @@ class Slack(BaseModel):
|
||||||
table_name = 'slack'
|
table_name = 'slack'
|
||||||
|
|
||||||
|
|
||||||
|
class MM(BaseModel):
|
||||||
|
id = AutoField()
|
||||||
|
token = CharField()
|
||||||
|
chanel_name = CharField()
|
||||||
|
groups = IntegerField()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
table_name = 'mattermost'
|
||||||
|
|
||||||
|
|
||||||
class PD(BaseModel):
|
class PD(BaseModel):
|
||||||
id = AutoField()
|
id = AutoField()
|
||||||
token = CharField()
|
token = CharField()
|
||||||
|
@ -406,6 +416,7 @@ class SMON(BaseModel):
|
||||||
ssl_expire_date = CharField(null=True)
|
ssl_expire_date = CharField(null=True)
|
||||||
pd_channel_id = IntegerField(null=True)
|
pd_channel_id = IntegerField(null=True)
|
||||||
check_type = CharField(constraints=[SQL('DEFAULT "tcp"')])
|
check_type = CharField(constraints=[SQL('DEFAULT "tcp"')])
|
||||||
|
mm_channel_id = IntegerField(null=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
table_name = 'smon'
|
table_name = 'smon'
|
||||||
|
@ -540,6 +551,7 @@ class CheckerSetting(BaseModel):
|
||||||
backend_alert = IntegerField(constraints=[SQL('DEFAULT 1')])
|
backend_alert = IntegerField(constraints=[SQL('DEFAULT 1')])
|
||||||
maxconn_alert = IntegerField(constraints=[SQL('DEFAULT 1')])
|
maxconn_alert = IntegerField(constraints=[SQL('DEFAULT 1')])
|
||||||
pd_id = IntegerField(constraints=[SQL('DEFAULT 0')])
|
pd_id = IntegerField(constraints=[SQL('DEFAULT 0')])
|
||||||
|
mm_id = IntegerField(constraints=[SQL('DEFAULT 0')])
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
table_name = 'checker_setting'
|
table_name = 'checker_setting'
|
||||||
|
@ -763,5 +775,5 @@ def create_tables():
|
||||||
NginxMetrics, SystemInfo, Services, UserName, GitSetting, CheckerSetting, ApacheMetrics, WafNginx, ServiceStatus,
|
NginxMetrics, SystemInfo, Services, UserName, GitSetting, CheckerSetting, ApacheMetrics, WafNginx, ServiceStatus,
|
||||||
KeepaliveRestart, PD, SmonHistory, SmonAgent, SmonTcpCheck, SmonHttpCheck, SmonPingCheck, SmonDnsCheck, S3Backup, RoxyTool,
|
KeepaliveRestart, PD, SmonHistory, SmonAgent, SmonTcpCheck, SmonHttpCheck, SmonPingCheck, SmonDnsCheck, S3Backup, RoxyTool,
|
||||||
SmonStatusPage, SmonStatusPageCheck, HaCluster, HaClusterSlave, HaClusterVip, HaClusterVirt, HaClusterService,
|
SmonStatusPage, SmonStatusPageCheck, HaCluster, HaClusterSlave, HaClusterVip, HaClusterVirt, HaClusterService,
|
||||||
HaClusterRouter]
|
HaClusterRouter, MM]
|
||||||
)
|
)
|
||||||
|
|
|
@ -212,11 +212,11 @@ def select_one_smon(smon_id: int, check_id: int) -> tuple:
|
||||||
return query_res
|
return query_res
|
||||||
|
|
||||||
|
|
||||||
def insert_smon(name, enable, group, desc, telegram, slack, pd, user_group, check_type):
|
def insert_smon(name, enable, group, desc, telegram, slack, pd, mm, user_group, check_type):
|
||||||
try:
|
try:
|
||||||
last_id = SMON.insert(
|
last_id = SMON.insert(
|
||||||
name=name, en=enable, desc=desc, group=group, telegram_channel_id=telegram, slack_channel_id=slack,
|
name=name, en=enable, desc=desc, group=group, telegram_channel_id=telegram, slack_channel_id=slack,
|
||||||
pd_channel_id=pd, user_group=user_group, status='3', check_type=check_type
|
pd_channel_id=pd, mm_channel_id=mm, user_group=user_group, status='3', check_type=check_type
|
||||||
).execute()
|
).execute()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
out_error(e)
|
out_error(e)
|
||||||
|
@ -512,9 +512,9 @@ def select_smon_history(smon_id: int) -> object:
|
||||||
return query_res
|
return query_res
|
||||||
|
|
||||||
|
|
||||||
def update_smon(smon_id, name, telegram, slack, pd, group, desc, en):
|
def update_smon(smon_id, name, telegram, slack, pd, mm, group, desc, en):
|
||||||
query = (SMON.update(
|
query = (SMON.update(
|
||||||
name=name, telegram_channel_id=telegram, slack_channel_id=slack, pd_channel_id=pd, group=group, desc=desc, en=en
|
name=name, telegram_channel_id=telegram, slack_channel_id=slack, pd_channel_id=pd, mm_channel_id=mm, group=group, desc=desc, en=en
|
||||||
).where(SMON.id == smon_id))
|
).where(SMON.id == smon_id))
|
||||||
try:
|
try:
|
||||||
query.execute()
|
query.execute()
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import json
|
import json
|
||||||
|
|
||||||
import pika
|
import pika
|
||||||
|
import requests
|
||||||
from flask import render_template, request, abort
|
from flask import render_template, request, abort
|
||||||
|
|
||||||
import app.modules.db.sql as sql
|
import app.modules.db.sql as sql
|
||||||
|
@ -69,6 +70,10 @@ def alert_routing(
|
||||||
pd_send_mess(mes, level, server_ip, service_id, alert_type, channel_id=setting.pd_id)
|
pd_send_mess(mes, level, server_ip, service_id, alert_type, channel_id=setting.pd_id)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
roxywi_common.logging('Roxy-WI server', f'error: unable to send message to PagerDuty: {e}', roxywi=1)
|
roxywi_common.logging('Roxy-WI server', f'error: unable to send message to PagerDuty: {e}', roxywi=1)
|
||||||
|
try:
|
||||||
|
mm_send_mess(mes, level, server_ip, service_id, alert_type, channel_id=setting.mm_id)
|
||||||
|
except Exception as e:
|
||||||
|
roxywi_common.logging('Roxy-WI server', f'error: unable to send message to Mattermost: {e}', roxywi=1)
|
||||||
|
|
||||||
if setting.email:
|
if setting.email:
|
||||||
send_email_to_server_group(subject, mes, level, group_id)
|
send_email_to_server_group(subject, mes, level, group_id)
|
||||||
|
@ -86,6 +91,10 @@ def alert_routing(
|
||||||
pd_send_mess(mes, level, server_ip, service_id, alert_type, channel_id=setting.pd_id)
|
pd_send_mess(mes, level, server_ip, service_id, alert_type, channel_id=setting.pd_id)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
roxywi_common.logging('Roxy-WI server', f'error: unable to send message to PagerDuty: {e}', roxywi=1)
|
roxywi_common.logging('Roxy-WI server', f'error: unable to send message to PagerDuty: {e}', roxywi=1)
|
||||||
|
try:
|
||||||
|
mm_send_mess(mes, level, server_ip, service_id, alert_type, channel_id=setting.mm_id)
|
||||||
|
except Exception as e:
|
||||||
|
roxywi_common.logging('Roxy-WI server', f'error: unable to send message to Mattermost: {e}', roxywi=1)
|
||||||
|
|
||||||
if setting.email:
|
if setting.email:
|
||||||
send_email_to_server_group(subject, mes, level, group_id)
|
send_email_to_server_group(subject, mes, level, group_id)
|
||||||
|
@ -103,6 +112,10 @@ def alert_routing(
|
||||||
pd_send_mess(mes, level, server_ip, service_id, alert_type, channel_id=setting.pd_id)
|
pd_send_mess(mes, level, server_ip, service_id, alert_type, channel_id=setting.pd_id)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
roxywi_common.logging('Roxy-WI server', f'error: unable to send message to PagerDuty: {e}', roxywi=1)
|
roxywi_common.logging('Roxy-WI server', f'error: unable to send message to PagerDuty: {e}', roxywi=1)
|
||||||
|
try:
|
||||||
|
mm_send_mess(mes, level, server_ip, service_id, alert_type, channel_id=setting.mm_id)
|
||||||
|
except Exception as e:
|
||||||
|
roxywi_common.logging('Roxy-WI server', f'error: unable to send message to Mattermost: {e}', roxywi=1)
|
||||||
|
|
||||||
if setting.email:
|
if setting.email:
|
||||||
send_email_to_server_group(subject, mes, level, group_id)
|
send_email_to_server_group(subject, mes, level, group_id)
|
||||||
|
@ -263,6 +276,74 @@ def pd_send_mess(mess, level, server_ip=None, service_id=None, alert_type=None,
|
||||||
raise Exception(f'error: {e}')
|
raise Exception(f'error: {e}')
|
||||||
|
|
||||||
|
|
||||||
|
def mm_send_mess(mess, level, server_ip=None, service_id=None, alert_type=None, **kwargs):
|
||||||
|
print('send mess to mm', kwargs.get('channel_id'))
|
||||||
|
token = ''
|
||||||
|
|
||||||
|
if kwargs.get('channel_id') == 0:
|
||||||
|
return
|
||||||
|
|
||||||
|
if kwargs.get('channel_id'):
|
||||||
|
try:
|
||||||
|
mms = channel_sql.get_mm_by_id(kwargs.get('channel_id'))
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
mms = channel_sql.get_mm_by_ip(kwargs.get('ip'))
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
|
||||||
|
for pd in mms:
|
||||||
|
token = pd.token
|
||||||
|
channel = pd.chanel_name
|
||||||
|
|
||||||
|
# try:
|
||||||
|
# proxy = sql.get_setting('proxy')
|
||||||
|
# session = pdpyras.EventsAPISession(token)
|
||||||
|
# dedup_key = f'{server_ip} {service_id} {alert_type}'
|
||||||
|
# except Exception as e:
|
||||||
|
# roxywi_common.logging('Roxy-WI server', str(e), roxywi=1)
|
||||||
|
# raise Exception(f'error: {e}')
|
||||||
|
#
|
||||||
|
# if proxy is not None and proxy != '' and proxy != 'None':
|
||||||
|
# proxies = dict(https=proxy, http=proxy)
|
||||||
|
# session.proxies.update(proxies)
|
||||||
|
|
||||||
|
headers = {'Content-Type': 'application/json'}
|
||||||
|
if level == "info":
|
||||||
|
color = "51A347"
|
||||||
|
else:
|
||||||
|
color = "c20707"
|
||||||
|
attach = {
|
||||||
|
"fallback": f"{alert_type}",
|
||||||
|
"color": f"#{color}",
|
||||||
|
"text": f"{mess}",
|
||||||
|
"author_name": "Roxy-WI",
|
||||||
|
"title": f"{level} alert",
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"short": "true",
|
||||||
|
"title": "Level",
|
||||||
|
"value": f"{level}",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"short": "true",
|
||||||
|
"title": "Server",
|
||||||
|
"value": f"{server_ip}",
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
attach = str(json.dumps(attach))
|
||||||
|
values = f'{{"channel": "{channel}", "username": "Roxy-WI", "attachments": [{attach}]}}'
|
||||||
|
try:
|
||||||
|
requests.post(token, headers=headers, data=str(values))
|
||||||
|
return 'ok'
|
||||||
|
except Exception as e:
|
||||||
|
roxywi_common.logging('Roxy-WI server', str(e), roxywi=1)
|
||||||
|
raise Exception(f'error: {e}')
|
||||||
|
|
||||||
|
|
||||||
def check_rabbit_alert() -> str:
|
def check_rabbit_alert() -> str:
|
||||||
try:
|
try:
|
||||||
user_group_id = request.cookies.get('group')
|
user_group_id = request.cookies.get('group')
|
||||||
|
@ -331,12 +412,24 @@ def add_pd_channel(token: str, channel: str, group: str, page: str) -> str:
|
||||||
else:
|
else:
|
||||||
if channel_sql.insert_new_pd(token, channel, group):
|
if channel_sql.insert_new_pd(token, channel, group):
|
||||||
lang = roxywi_common.get_user_lang_for_flask()
|
lang = roxywi_common.get_user_lang_for_flask()
|
||||||
channels = channel_sql.select_slack(token=token)
|
channels = channel_sql.select_pd(token=token)
|
||||||
groups = group_sql.select_groups()
|
groups = group_sql.select_groups()
|
||||||
roxywi_common.logging('Roxy-WI server', f'A new PagerDuty channel {channel} has been created ', roxywi=1, login=1)
|
roxywi_common.logging('Roxy-WI server', f'A new PagerDuty channel {channel} has been created ', roxywi=1, login=1)
|
||||||
return render_template('ajax/new_receiver.html', groups=groups, lang=lang, channels=channels, page=page, receiver='pd')
|
return render_template('ajax/new_receiver.html', groups=groups, lang=lang, channels=channels, page=page, receiver='pd')
|
||||||
|
|
||||||
|
|
||||||
|
def add_mm_channel(token: str, channel: str, group: str, page: str) -> str:
|
||||||
|
if token is None or channel is None or group is None:
|
||||||
|
return error_mess
|
||||||
|
else:
|
||||||
|
if channel_sql.insert_new_mm(token, channel, group):
|
||||||
|
lang = roxywi_common.get_user_lang_for_flask()
|
||||||
|
channels = channel_sql.select_mm(token=token)
|
||||||
|
groups = group_sql.select_groups()
|
||||||
|
roxywi_common.logging('Roxy-WI server', f'A new Mattermost channel {channel} has been created ', roxywi=1, login=1)
|
||||||
|
return render_template('ajax/new_receiver.html', groups=groups, lang=lang, channels=channels, page=page, receiver='mm')
|
||||||
|
|
||||||
|
|
||||||
def delete_telegram_channel(channel_id) -> str:
|
def delete_telegram_channel(channel_id) -> str:
|
||||||
telegram = channel_sql.select_telegram(id=channel_id)
|
telegram = channel_sql.select_telegram(id=channel_id)
|
||||||
channel_name = ''
|
channel_name = ''
|
||||||
|
@ -367,6 +460,16 @@ def delete_pd_channel(channel_id) -> str:
|
||||||
return 'ok'
|
return 'ok'
|
||||||
|
|
||||||
|
|
||||||
|
def delete_mm_channel(channel_id) -> str:
|
||||||
|
pd = channel_sql.select_mm(id=channel_id)
|
||||||
|
channel_name = ''
|
||||||
|
for t in pd:
|
||||||
|
channel_name = t.chanel_name
|
||||||
|
if channel_sql.delete_mm(channel_id):
|
||||||
|
roxywi_common.logging('Roxy-WI server', f'The Mattermost channel {channel_name} has been deleted ', roxywi=1, login=1)
|
||||||
|
return 'ok'
|
||||||
|
|
||||||
|
|
||||||
def update_telegram(token: str, channel: str, group: str, user_id: int) -> str:
|
def update_telegram(token: str, channel: str, group: str, user_id: int) -> str:
|
||||||
channel_sql.update_telegram(token, channel, group, user_id)
|
channel_sql.update_telegram(token, channel, group, user_id)
|
||||||
roxywi_common.logging('group ' + group, f'The Telegram token has been updated for channel: {channel}', roxywi=1, login=1)
|
roxywi_common.logging('group ' + group, f'The Telegram token has been updated for channel: {channel}', roxywi=1, login=1)
|
||||||
|
@ -385,11 +488,18 @@ def update_pd(token: str, channel: str, group: str, user_id: int) -> str:
|
||||||
return 'ok'
|
return 'ok'
|
||||||
|
|
||||||
|
|
||||||
|
def update_mm(token: str, channel: str, group: str, user_id: int) -> str:
|
||||||
|
channel_sql.update_mm(token, channel, group, user_id)
|
||||||
|
roxywi_common.logging(f'group {group}', f'The Mattermost token has been updated for channel: {channel}', roxywi=1, login=1)
|
||||||
|
return 'ok'
|
||||||
|
|
||||||
|
|
||||||
def delete_receiver_channel(channel_id: int, receiver_name: str) -> None:
|
def delete_receiver_channel(channel_id: int, receiver_name: str) -> None:
|
||||||
delete_functions = {
|
delete_functions = {
|
||||||
"telegram": delete_telegram_channel,
|
"telegram": delete_telegram_channel,
|
||||||
"slack": delete_slack_channel,
|
"slack": delete_slack_channel,
|
||||||
"pd": delete_pd_channel,
|
"pd": delete_pd_channel,
|
||||||
|
"mm": delete_mm_channel,
|
||||||
}
|
}
|
||||||
return delete_functions[receiver_name](channel_id)
|
return delete_functions[receiver_name](channel_id)
|
||||||
|
|
||||||
|
@ -399,6 +509,7 @@ def add_receiver_channel(receiver_name: str, token: str, channel: str, group: id
|
||||||
"telegram": add_telegram_channel,
|
"telegram": add_telegram_channel,
|
||||||
"slack": add_slack_channel,
|
"slack": add_slack_channel,
|
||||||
"pd": add_pd_channel,
|
"pd": add_pd_channel,
|
||||||
|
"mm": add_mm_channel,
|
||||||
}
|
}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -412,6 +523,7 @@ def update_receiver_channel(receiver_name: str, token: str, channel: str, group:
|
||||||
"telegram": update_telegram,
|
"telegram": update_telegram,
|
||||||
"slack": update_slack,
|
"slack": update_slack,
|
||||||
"pd": update_pd,
|
"pd": update_pd,
|
||||||
|
"mm": update_mm,
|
||||||
}
|
}
|
||||||
return update_functions[receiver_name](token, channel, group, user_id)
|
return update_functions[receiver_name](token, channel, group, user_id)
|
||||||
|
|
||||||
|
@ -421,6 +533,7 @@ def check_receiver(channel_id: int, receiver_name: str) -> str:
|
||||||
"telegram": telegram_send_mess,
|
"telegram": telegram_send_mess,
|
||||||
"slack": slack_send_mess,
|
"slack": slack_send_mess,
|
||||||
"pd": pd_send_mess,
|
"pd": pd_send_mess,
|
||||||
|
"mm": mm_send_mess,
|
||||||
}
|
}
|
||||||
mess = 'Test message from Roxy-WI'
|
mess = 'Test message from Roxy-WI'
|
||||||
|
|
||||||
|
@ -457,6 +570,7 @@ def load_channels():
|
||||||
user_group = roxywi_common.get_user_group(id=1)
|
user_group = roxywi_common.get_user_group(id=1)
|
||||||
kwargs.setdefault('telegrams', channel_sql.get_user_telegram_by_group(user_group))
|
kwargs.setdefault('telegrams', channel_sql.get_user_telegram_by_group(user_group))
|
||||||
kwargs.setdefault('pds', channel_sql.get_user_pd_by_group(user_group))
|
kwargs.setdefault('pds', channel_sql.get_user_pd_by_group(user_group))
|
||||||
|
kwargs.setdefault('mms', channel_sql.get_user_mm_by_group(user_group))
|
||||||
kwargs.setdefault('groups', group_sql.select_groups())
|
kwargs.setdefault('groups', group_sql.select_groups())
|
||||||
kwargs.setdefault('slacks', channel_sql.get_user_slack_by_group(user_group))
|
kwargs.setdefault('slacks', channel_sql.get_user_slack_by_group(user_group))
|
||||||
kwargs.setdefault('user_subscription', user_subscription)
|
kwargs.setdefault('user_subscription', user_subscription)
|
||||||
|
|
|
@ -30,6 +30,7 @@ def load_checker() -> str:
|
||||||
kwargs.setdefault('services', tools_common.get_services_status())
|
kwargs.setdefault('services', tools_common.get_services_status())
|
||||||
kwargs.setdefault('telegrams', channel_sql.get_user_telegram_by_group(user_group))
|
kwargs.setdefault('telegrams', channel_sql.get_user_telegram_by_group(user_group))
|
||||||
kwargs.setdefault('pds', channel_sql.get_user_pd_by_group(user_group))
|
kwargs.setdefault('pds', channel_sql.get_user_pd_by_group(user_group))
|
||||||
|
kwargs.setdefault('mms', channel_sql.get_user_mm_by_group(user_group))
|
||||||
kwargs.setdefault('groups', group_sql.select_groups())
|
kwargs.setdefault('groups', group_sql.select_groups())
|
||||||
kwargs.setdefault('slacks', channel_sql.get_user_slack_by_group(user_group))
|
kwargs.setdefault('slacks', channel_sql.get_user_slack_by_group(user_group))
|
||||||
kwargs.setdefault('haproxy_servers', roxywi_common.get_dick_permit(haproxy=1, only_group=1))
|
kwargs.setdefault('haproxy_servers', roxywi_common.get_dick_permit(haproxy=1, only_group=1))
|
||||||
|
@ -47,24 +48,24 @@ def load_checker() -> str:
|
||||||
return render_template('ajax/load_checker.html', **kwargs)
|
return render_template('ajax/load_checker.html', **kwargs)
|
||||||
|
|
||||||
|
|
||||||
def update_haproxy_settings(setting_id, email, service_alert, backend_alert, maxconn_alert, telegram_id, slack_id, pd_id) -> str:
|
def update_haproxy_settings(setting_id, email, service_alert, backend_alert, maxconn_alert, telegram_id, slack_id, pd_id, mm_id) -> str:
|
||||||
if checker_sql.update_haproxy_checker_settings(email, telegram_id, slack_id, pd_id, service_alert, backend_alert,
|
if checker_sql.update_haproxy_checker_settings(email, telegram_id, slack_id, pd_id, mm_id, service_alert, backend_alert,
|
||||||
maxconn_alert, setting_id):
|
maxconn_alert, setting_id):
|
||||||
return 'ok'
|
return 'ok'
|
||||||
else:
|
else:
|
||||||
return 'error: Cannot update Checker settings'
|
return 'error: Cannot update Checker settings'
|
||||||
|
|
||||||
|
|
||||||
def update_keepalived_settings(setting_id, email, service_alert, backend_alert, telegram_id, slack_id, pd_id) -> str:
|
def update_keepalived_settings(setting_id, email, service_alert, backend_alert, telegram_id, slack_id, pd_id, mm_id) -> str:
|
||||||
if checker_sql.update_keepalived_checker_settings(email, telegram_id, slack_id, pd_id, service_alert, backend_alert,
|
if checker_sql.update_keepalived_checker_settings(email, telegram_id, slack_id, pd_id, mm_id, service_alert, backend_alert,
|
||||||
setting_id):
|
setting_id):
|
||||||
return 'ok'
|
return 'ok'
|
||||||
else:
|
else:
|
||||||
return 'error: Cannot update Checker settings'
|
return 'error: Cannot update Checker settings'
|
||||||
|
|
||||||
|
|
||||||
def update_service_settings(setting_id, email, service_alert, telegram_id, slack_id, pd_id) -> str:
|
def update_service_settings(setting_id, email, service_alert, telegram_id, slack_id, pd_id, mm_id) -> str:
|
||||||
if checker_sql.update_service_checker_settings(email, telegram_id, slack_id, pd_id, service_alert, setting_id):
|
if checker_sql.update_service_checker_settings(email, telegram_id, slack_id, pd_id, mm_id, service_alert, setting_id):
|
||||||
return 'ok'
|
return 'ok'
|
||||||
else:
|
else:
|
||||||
return 'error: Cannot update Checker settings'
|
return 'error: Cannot update Checker settings'
|
||||||
|
|
|
@ -2,6 +2,7 @@ from flask import render_template, abort
|
||||||
|
|
||||||
import app.modules.db.smon as smon_sql
|
import app.modules.db.smon as smon_sql
|
||||||
import app.modules.common.common as common
|
import app.modules.common.common as common
|
||||||
|
import app.modules.server.server as server_mod
|
||||||
import app.modules.tools.smon_agent as smon_agent
|
import app.modules.tools.smon_agent as smon_agent
|
||||||
import app.modules.roxywi.common as roxywi_common
|
import app.modules.roxywi.common as roxywi_common
|
||||||
|
|
||||||
|
@ -19,6 +20,7 @@ def create_smon(json_data, user_group, show_new=1) -> bool:
|
||||||
telegram = common.checkAjaxInput(json_data['tg'])
|
telegram = common.checkAjaxInput(json_data['tg'])
|
||||||
slack = common.checkAjaxInput(json_data['slack'])
|
slack = common.checkAjaxInput(json_data['slack'])
|
||||||
pd = common.checkAjaxInput(json_data['pd'])
|
pd = common.checkAjaxInput(json_data['pd'])
|
||||||
|
mm = common.checkAjaxInput(json_data['mm'])
|
||||||
resolver = common.checkAjaxInput(json_data['resolver'])
|
resolver = common.checkAjaxInput(json_data['resolver'])
|
||||||
record_type = common.checkAjaxInput(json_data['record_type'])
|
record_type = common.checkAjaxInput(json_data['record_type'])
|
||||||
packet_size = common.checkAjaxInput(json_data['packet_size'])
|
packet_size = common.checkAjaxInput(json_data['packet_size'])
|
||||||
|
@ -46,7 +48,7 @@ def create_smon(json_data, user_group, show_new=1) -> bool:
|
||||||
if int(packet_size) < 16:
|
if int(packet_size) < 16:
|
||||||
raise Exception('SMON error: a packet size cannot be less than 16')
|
raise Exception('SMON error: a packet size cannot be less than 16')
|
||||||
|
|
||||||
last_id = smon_sql.insert_smon(name, enable, group, desc, telegram, slack, pd, user_group, check_type)
|
last_id = smon_sql.insert_smon(name, enable, group, desc, telegram, slack, pd, mm, user_group, check_type)
|
||||||
|
|
||||||
if check_type == 'ping':
|
if check_type == 'ping':
|
||||||
smon_sql.insert_smon_ping(last_id, hostname, packet_size, interval, agent_id)
|
smon_sql.insert_smon_ping(last_id, hostname, packet_size, interval, agent_id)
|
||||||
|
@ -85,6 +87,7 @@ def update_smon(smon_id, json_data) -> str:
|
||||||
telegram = common.checkAjaxInput(json_data['tg'])
|
telegram = common.checkAjaxInput(json_data['tg'])
|
||||||
slack = common.checkAjaxInput(json_data['slack'])
|
slack = common.checkAjaxInput(json_data['slack'])
|
||||||
pd = common.checkAjaxInput(json_data['pd'])
|
pd = common.checkAjaxInput(json_data['pd'])
|
||||||
|
mm = common.checkAjaxInput(json_data['mm'])
|
||||||
resolver = common.checkAjaxInput(json_data['resolver'])
|
resolver = common.checkAjaxInput(json_data['resolver'])
|
||||||
record_type = common.checkAjaxInput(json_data['record_type'])
|
record_type = common.checkAjaxInput(json_data['record_type'])
|
||||||
packet_size = common.checkAjaxInput(json_data['packet_size'])
|
packet_size = common.checkAjaxInput(json_data['packet_size'])
|
||||||
|
@ -117,7 +120,7 @@ def update_smon(smon_id, json_data) -> str:
|
||||||
return f'{e}'
|
return f'{e}'
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if smon_sql.update_smon(smon_id, name, telegram, slack, pd, group, desc, enabled):
|
if smon_sql.update_smon(smon_id, name, telegram, slack, pd, mm, group, desc, enabled):
|
||||||
if check_type == 'http':
|
if check_type == 'http':
|
||||||
is_edited = smon_sql.update_smonHttp(smon_id, url, body, http_method, interval, agent_id)
|
is_edited = smon_sql.update_smonHttp(smon_id, url, body, http_method, interval, agent_id)
|
||||||
elif check_type == 'tcp':
|
elif check_type == 'tcp':
|
||||||
|
@ -300,3 +303,10 @@ def avg_status_page_status(page_id: int) -> str:
|
||||||
return '0'
|
return '0'
|
||||||
|
|
||||||
return '1'
|
return '1'
|
||||||
|
|
||||||
|
|
||||||
|
def change_smon_port(new_port: int) -> None:
|
||||||
|
cmd = f"sudo sed -i 's/\(^ExecStart.*$\)/ExecStart=gunicorn --workers 1 --bind 0.0.0.0:{new_port} -m 007 smon:app/' /etc/systemd/system/roxy-wi-smon.service"
|
||||||
|
server_mod.subprocess_execute(cmd)
|
||||||
|
cmd = 'sudo systemctl daemon-reload && sudo systemctl restart roxy-wi-smon'
|
||||||
|
server_mod.subprocess_execute(cmd)
|
||||||
|
|
|
@ -76,12 +76,22 @@ def update_agent(json_data):
|
||||||
name = common.checkAjaxInput(json_data.get("name"))
|
name = common.checkAjaxInput(json_data.get("name"))
|
||||||
desc = common.checkAjaxInput(json_data.get("desc"))
|
desc = common.checkAjaxInput(json_data.get("desc"))
|
||||||
enabled = int(json_data.get("enabled"))
|
enabled = int(json_data.get("enabled"))
|
||||||
|
reconfigure = int(json_data.get("reconfigure"))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
smon_sql.update_agent(agent_id, name, desc, enabled)
|
smon_sql.update_agent(agent_id, name, desc, enabled)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
roxywi_common.handle_exceptions(e, 'Roxy-WI server', f'Cannot update SMON agent: {agent_id}', roxywi=1, login=1)
|
roxywi_common.handle_exceptions(e, 'Roxy-WI server', f'Cannot update SMON agent: {agent_id}', roxywi=1, login=1)
|
||||||
|
|
||||||
|
if reconfigure:
|
||||||
|
agent_uuid = smon_sql.get_agent_uuid(agent_id)
|
||||||
|
server_ip = smon_sql.select_server_ip_by_agent_id(agent_id)
|
||||||
|
try:
|
||||||
|
inv, server_ips = generate_agent_inc(server_ip, 'install', agent_uuid)
|
||||||
|
run_ansible(inv, server_ips, 'smon_agent')
|
||||||
|
except Exception as e:
|
||||||
|
roxywi_common.handle_exceptions(e, server_ip, 'Cannot reconfigure SMON agent', roxywi=1, login=1)
|
||||||
|
|
||||||
|
|
||||||
def get_agent_headers(agent_id: int) -> dict:
|
def get_agent_headers(agent_id: int) -> dict:
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -19,6 +19,7 @@ import app.modules.roxywi.roxy as roxy
|
||||||
import app.modules.roxywi.auth as roxywi_auth
|
import app.modules.roxywi.auth as roxywi_auth
|
||||||
import app.modules.roxywi.common as roxywi_common
|
import app.modules.roxywi.common as roxywi_common
|
||||||
import app.modules.server.server as server_mod
|
import app.modules.server.server as server_mod
|
||||||
|
import app.modules.tools.smon as smon_mod
|
||||||
import app.modules.tools.common as tools_common
|
import app.modules.tools.common as tools_common
|
||||||
|
|
||||||
|
|
||||||
|
@ -210,4 +211,10 @@ def update_settings(param):
|
||||||
if sql.update_setting(param, val, user_group):
|
if sql.update_setting(param, val, user_group):
|
||||||
roxywi_common.logging('Roxy-WI server', f'The {param} setting has been changed to: {val}', roxywi=1, login=1)
|
roxywi_common.logging('Roxy-WI server', f'The {param} setting has been changed to: {val}', roxywi=1, login=1)
|
||||||
|
|
||||||
|
if param == 'master_port':
|
||||||
|
try:
|
||||||
|
smon_mod.change_smon_port(val)
|
||||||
|
except Exception as e:
|
||||||
|
return f'{e}'
|
||||||
|
|
||||||
return 'Ok'
|
return 'Ok'
|
||||||
|
|
|
@ -32,18 +32,19 @@ def update_settings():
|
||||||
telegram_id = int(request.form.get('telegram_id'))
|
telegram_id = int(request.form.get('telegram_id'))
|
||||||
slack_id = int(request.form.get('slack_id'))
|
slack_id = int(request.form.get('slack_id'))
|
||||||
pd_id = int(request.form.get('pd_id'))
|
pd_id = int(request.form.get('pd_id'))
|
||||||
|
mm_id = int(request.form.get('mm_id'))
|
||||||
|
|
||||||
if service == 'haproxy':
|
if service == 'haproxy':
|
||||||
maxconn_alert = int(request.form.get('maxconn'))
|
maxconn_alert = int(request.form.get('maxconn'))
|
||||||
backend_alert = int(request.form.get('backend'))
|
backend_alert = int(request.form.get('backend'))
|
||||||
return checker_mod.update_haproxy_settings(
|
return checker_mod.update_haproxy_settings(
|
||||||
setting_id, email, service_alert, backend_alert, maxconn_alert, telegram_id, slack_id, pd_id
|
setting_id, email, service_alert, backend_alert, maxconn_alert, telegram_id, slack_id, pd_id, mm_id
|
||||||
)
|
)
|
||||||
elif service in ('nginx', 'apache'):
|
elif service in ('nginx', 'apache'):
|
||||||
return checker_mod.update_service_settings(setting_id, email, service_alert, telegram_id, slack_id, pd_id)
|
return checker_mod.update_service_settings(setting_id, email, service_alert, telegram_id, slack_id, pd_id, mm_id)
|
||||||
else:
|
else:
|
||||||
backend_alert = int(request.form.get('backend'))
|
backend_alert = int(request.form.get('backend'))
|
||||||
return checker_mod.update_keepalived_settings(setting_id, email, service_alert, backend_alert, telegram_id, slack_id, pd_id)
|
return checker_mod.update_keepalived_settings(setting_id, email, service_alert, backend_alert, telegram_id, slack_id, pd_id, mm_id)
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/settings/load')
|
@bp.route('/settings/load')
|
||||||
|
|
|
@ -37,8 +37,9 @@ def smon_main_dashboard():
|
||||||
'smon_status': tools_common.is_tool_active('roxy-wi-smon'),
|
'smon_status': tools_common.is_tool_active('roxy-wi-smon'),
|
||||||
'user_subscription': roxywi_common.return_user_subscription(),
|
'user_subscription': roxywi_common.return_user_subscription(),
|
||||||
'telegrams': channel_sql.get_user_telegram_by_group(group_id),
|
'telegrams': channel_sql.get_user_telegram_by_group(group_id),
|
||||||
'slacks': channel_sql.get_user_pd_by_group(group_id),
|
'slacks': channel_sql.get_user_slack_by_group(group_id),
|
||||||
'pds': channel_sql.get_user_slack_by_group(group_id),
|
'pds': channel_sql.get_user_pd_by_group(group_id),
|
||||||
|
'mms': channel_sql.get_user_mm_by_group(group_id),
|
||||||
'sort': request.args.get('sort', None)
|
'sort': request.args.get('sort', None)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,6 +167,7 @@ def check(smon_id, check_type_id):
|
||||||
'tg': s.smon_id.telegram_channel_id,
|
'tg': s.smon_id.telegram_channel_id,
|
||||||
'slack': s.smon_id.slack_channel_id,
|
'slack': s.smon_id.slack_channel_id,
|
||||||
'pd': s.smon_id.pd_channel_id,
|
'pd': s.smon_id.pd_channel_id,
|
||||||
|
'mm': s.smon_id.mm_channel_id,
|
||||||
'check_type': s.smon_id.check_type,
|
'check_type': s.smon_id.check_type,
|
||||||
'group': s.smon_id.group,
|
'group': s.smon_id.group,
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,9 @@ $( function() {
|
||||||
$('#add-pd-button').click(function() {
|
$('#add-pd-button').click(function() {
|
||||||
addPDDialog.dialog('open');
|
addPDDialog.dialog('open');
|
||||||
});
|
});
|
||||||
|
$('#add-mm-button').click(function() {
|
||||||
|
addMMDialog.dialog('open');
|
||||||
|
});
|
||||||
var telegram_tabel_title = $( "#telegram-add-table-overview" ).attr('title');
|
var telegram_tabel_title = $( "#telegram-add-table-overview" ).attr('title');
|
||||||
var addTelegramDialog = $( "#telegram-add-table" ).dialog({
|
var addTelegramDialog = $( "#telegram-add-table" ).dialog({
|
||||||
autoOpen: false,
|
autoOpen: false,
|
||||||
|
@ -101,6 +104,35 @@ $( function() {
|
||||||
}
|
}
|
||||||
}]
|
}]
|
||||||
});
|
});
|
||||||
|
var mm_tabel_title = $( "#mm-add-table-overview" ).attr('title');
|
||||||
|
var addMMDialog = $( "#mm-add-table" ).dialog({
|
||||||
|
autoOpen: false,
|
||||||
|
resizable: false,
|
||||||
|
height: "auto",
|
||||||
|
width: 600,
|
||||||
|
modal: true,
|
||||||
|
title: mm_tabel_title,
|
||||||
|
show: {
|
||||||
|
effect: "fade",
|
||||||
|
duration: 200
|
||||||
|
},
|
||||||
|
hide: {
|
||||||
|
effect: "fade",
|
||||||
|
duration: 200
|
||||||
|
},
|
||||||
|
buttons: [{
|
||||||
|
text: add_word,
|
||||||
|
click: function () {
|
||||||
|
addRecevier(this, 'mm');
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
text: cancel_word,
|
||||||
|
click: function () {
|
||||||
|
$(this).dialog("close");
|
||||||
|
clearTips();
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
});
|
||||||
$( "#checker_telegram_table input" ).change(function() {
|
$( "#checker_telegram_table input" ).change(function() {
|
||||||
var id = $(this).attr('id').split('-');
|
var id = $(this).attr('id').split('-');
|
||||||
updateReceiver(id[2], 'telegram')
|
updateReceiver(id[2], 'telegram')
|
||||||
|
|
|
@ -157,7 +157,59 @@
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
<br /><span class="add-button" title="{{lang.words.add|title()}} PagerDuty {{lang.words.channel|title()}}" id="add-pd-button">+ {{lang.words.add|title()}}</span>
|
<br /><span class="add-button" title="{{lang.words.add|title()}} PagerDuty {{lang.words.channel}}" id="add-pd-button">+ {{lang.words.add|title()}}</span>
|
||||||
|
<br /><br />
|
||||||
|
<table id="checker_mm_table" class="overview-overflow">
|
||||||
|
<caption><i class="fas fa-power-off caption-icon"></i><h3>Mattermost {{lang.words.channels|title()}}</h3></caption>
|
||||||
|
<tr class="overviewHead" style="width: 50%;">
|
||||||
|
<td class="padding10 first-collumn" style="width: 25%;">
|
||||||
|
{{lang.words.key|title()}}
|
||||||
|
</td>
|
||||||
|
<td style="width: 20%;">{{lang.words.name|title()}}</td>
|
||||||
|
{% if user_params['role']|int() == 1 %}
|
||||||
|
<td style="width: 25%;">{{lang.words.group|title()}}</td>
|
||||||
|
{% endif %}
|
||||||
|
<td style="width: 100%;"></td>
|
||||||
|
<td></td>
|
||||||
|
<td><span onclick="loadChannel()" class="refresh" title="{{lang.words.refresh2|title()}} Mattermost {{lang.words.channels}}"></span></td>
|
||||||
|
</tr>
|
||||||
|
{% for mm in mms %}
|
||||||
|
<tr id="mm-table-{{mm.id}}" class="{{ loop.cycle('odd', 'even') }}">
|
||||||
|
<td class="padding10 first-collumn">
|
||||||
|
{% set id = 'mm-token-' + mm.id|string() %}
|
||||||
|
{{ input(id, value=mm.token, size='30') }}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{% set id = 'mm-chanel-' + mm.id|string() %}
|
||||||
|
{{ input(id, value=mm.chanel_name, size='30') }}
|
||||||
|
</td>
|
||||||
|
{% if user_params['role']|int() == 1 %}
|
||||||
|
<td>
|
||||||
|
<select id="pdgroup-{{mm.id}}" name="pdgroup-{{mm.id}}">
|
||||||
|
<option disabled selected>------</option>
|
||||||
|
{% for group in groups %}
|
||||||
|
{% if mm.groups|string() == group.group_id|string() %}
|
||||||
|
<option value="{{ group.group_id }}" selected>{{ group.name }}</option>
|
||||||
|
{% else %}
|
||||||
|
<option value="{{ group.group_id }}">{{ group.name }}</option>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
{% endif %}
|
||||||
|
<td>
|
||||||
|
<button title="{{lang.phrases.send_test_mes}}" onclick="checkReceiver({{mm.id}}, 'mm')">{{lang.words.test|title()}}</button>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a class="add" onclick="cloneReceiver({{mm.id}}, 'mm')" id="clone-{{mm.id}}" title="{{lang.words.w_copy|title()}} {{lang.words.the}} {{lang.words.settings}} {{mm.chanel_name}}" style="cursor: pointer;"></a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a class="delete" onclick="confirmDeleteReceiver({{mm.id}}, 'mm')" title="{{lang.words.delete|title()}} {{lang.words.channel}} {{mm.chanel_name}}" style="cursor: pointer;"></a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
<br /><span class="add-button" title="{{lang.words.add|title()}} Mattermost {{lang.words.channel}}" id="add-mm-button">+ {{lang.words.add|title()}}</span>
|
||||||
<br /><br />
|
<br /><br />
|
||||||
<table class="overflow">
|
<table class="overflow">
|
||||||
<caption><i class="fas fa-envelope-open-text caption-icon"></i><h3>{{lang.words.test2|title()}} {{lang.words.message}}</h3></caption>
|
<caption><i class="fas fa-envelope-open-text caption-icon"></i><h3>{{lang.words.test2|title()}} {{lang.words.message}}</h3></caption>
|
||||||
|
|
|
@ -26,9 +26,10 @@
|
||||||
<caption><i class="fas fa-network-wired caption-icon"></i><h3>HAProxy {{lang.words.servers}}</h3></caption>
|
<caption><i class="fas fa-network-wired caption-icon"></i><h3>HAProxy {{lang.words.servers}}</h3></caption>
|
||||||
<tr class="overviewHead">
|
<tr class="overviewHead">
|
||||||
<td class="padding10 first-collumn">{{lang.words.server|title()}}</td>
|
<td class="padding10 first-collumn">{{lang.words.server|title()}}</td>
|
||||||
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Telegram" style="width: 15%;">Telegram</td>
|
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Telegram" style="width: 10%;">Telegram</td>
|
||||||
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Slack" style="width: 15%;">Slack</td>
|
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Slack" style="width: 10%;">Slack</td>
|
||||||
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} PagerDuty" style="width: 15%;">PagerDuty</td>
|
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} PagerDuty" style="width: 10%;">PagerDuty</td>
|
||||||
|
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Mattermost" style="width: 10%;">Mattermost</td>
|
||||||
<td class="checkbox-head" style="width: 10%;" title="{{lang.words.alert|title()}} {{lang.words.via}} {{lang.words.email}}">{{lang.words.email|title()}}</td>
|
<td class="checkbox-head" style="width: 10%;" title="{{lang.words.alert|title()}} {{lang.words.via}} {{lang.words.email}}">{{lang.words.email|title()}}</td>
|
||||||
<td class="checkbox-head" style="width: 10%;" title="{{lang.phrases.alert_service_change_status}}">{{lang.words.service|title()}}</td>
|
<td class="checkbox-head" style="width: 10%;" title="{{lang.phrases.alert_service_change_status}}">{{lang.words.service|title()}}</td>
|
||||||
<td class="checkbox-head" style="width: 10%;" title="{{lang.phrases.alert_backend_change_status}}">{{lang.words.backend|title()}}</td>
|
<td class="checkbox-head" style="width: 10%;" title="{{lang.phrases.alert_backend_change_status}}">{{lang.words.backend|title()}}</td>
|
||||||
|
@ -76,6 +77,18 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
|
<td id="haproxy_server_mm-{{s.0}}" title="{{lang.words.alert|title()}} {{lang.words.via}} {{lang.words.this3}} {{lang.words.channel}}">
|
||||||
|
<select id="haproxy_server_mm_channel-{{h.id}}">
|
||||||
|
<option value="0">{{lang.words.disabled|title()}}</option>
|
||||||
|
{% for t in mms %}
|
||||||
|
{% if h.mm_id|int() == t.id|int() %}
|
||||||
|
<option value="{{t.id}}" selected>{{t.chanel_name}}</option>
|
||||||
|
{% else %}
|
||||||
|
<option value="{{t.id}}">{{t.chanel_name}}</option>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
<td class="checkbox" title="{{lang.words.alert|title()}} {{lang.words.via}} {{lang.words.email}}">
|
<td class="checkbox" title="{{lang.words.alert|title()}} {{lang.words.via}} {{lang.words.email}}">
|
||||||
{% set id = 'haproxy_server_email-' + h.id|string() %}
|
{% set id = 'haproxy_server_email-' + h.id|string() %}
|
||||||
{% if h.email == 1 %}
|
{% if h.email == 1 %}
|
||||||
|
@ -118,9 +131,10 @@
|
||||||
<caption><i class="fas fa-sitemap caption-icon"></i><h3>NGINX {{lang.words.servers}}</h3></caption>
|
<caption><i class="fas fa-sitemap caption-icon"></i><h3>NGINX {{lang.words.servers}}</h3></caption>
|
||||||
<tr class="overviewHead">
|
<tr class="overviewHead">
|
||||||
<td class="padding10 first-collumn">{{lang.words.server|title()}}</td>
|
<td class="padding10 first-collumn">{{lang.words.server|title()}}</td>
|
||||||
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Telegram" style="width: 15%;">Telegram</td>
|
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Telegram" style="width: 10%;">Telegram</td>
|
||||||
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Slack" style="width: 15%;">Slack</td>
|
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Slack" style="width: 10%;">Slack</td>
|
||||||
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} PagerDuty" style="width: 15%;">PagerDuty</td>
|
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} PagerDuty" style="width: 10%;">PagerDuty</td>
|
||||||
|
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Mattermost" style="width: 10%;">Mattermost</td>
|
||||||
<td class="checkbox-head" style="width: 10%;" title="{{lang.words.alert|title()}} {{lang.words.via}} {{lang.words.email}}">{{lang.words.email|title()}}</td>
|
<td class="checkbox-head" style="width: 10%;" title="{{lang.words.alert|title()}} {{lang.words.via}} {{lang.words.email}}">{{lang.words.email|title()}}</td>
|
||||||
<td class="checkbox-head" style="width: 100%;" title={{lang.phrases.alert_service_change_status}}>{{lang.words.service|title()}}</td>
|
<td class="checkbox-head" style="width: 100%;" title={{lang.phrases.alert_service_change_status}}>{{lang.words.service|title()}}</td>
|
||||||
<td><span onclick="loadchecker(1)" class="refresh" title="{{lang.words.refresh2|title()}}"></span></td>
|
<td><span onclick="loadchecker(1)" class="refresh" title="{{lang.words.refresh2|title()}}"></span></td>
|
||||||
|
@ -166,6 +180,18 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
|
<td id="nginx_server_mm-{{h.id}}" title="{{lang.words.alert|title()}} {{lang.words.via}} {{lang.words.this3}} {{lang.words.channel}}">
|
||||||
|
<select id="nginx_server_mm_channel-{{h.id}}">
|
||||||
|
<option value="0">{{lang.words.disabled|title()}}</option>
|
||||||
|
{% for t in mms %}
|
||||||
|
{% if h.mm_id|int() == t.id|int() %}
|
||||||
|
<option value="{{t.id}}" selected>{{t.chanel_name}}</option>
|
||||||
|
{% else %}
|
||||||
|
<option value="{{t.id}}">{{t.chanel_name}}</option>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
<td class="checkbox">
|
<td class="checkbox">
|
||||||
{% set id = 'nginx_server_email-' + h.id|string() %}
|
{% set id = 'nginx_server_email-' + h.id|string() %}
|
||||||
{% if h.email == 1 %}
|
{% if h.email == 1 %}
|
||||||
|
@ -192,9 +218,10 @@
|
||||||
<caption><i class="fas fa-feather-alt caption-icon"></i><h3>Apache {{lang.words.servers}}</h3></caption>
|
<caption><i class="fas fa-feather-alt caption-icon"></i><h3>Apache {{lang.words.servers}}</h3></caption>
|
||||||
<tr class="overviewHead">
|
<tr class="overviewHead">
|
||||||
<td class="padding10 first-collumn">{{lang.words.server|title()}}</td>
|
<td class="padding10 first-collumn">{{lang.words.server|title()}}</td>
|
||||||
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Telegram" style="width: 15%;">Telegram</td>
|
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Telegram" style="width: 10%;">Telegram</td>
|
||||||
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Slack" style="width: 15%;">Slack</td>
|
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Slack" style="width: 10%;">Slack</td>
|
||||||
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} PagerDuty" style="width: 15%;">PagerDuty</td>
|
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} PagerDuty" style="width: 10%;">PagerDuty</td>
|
||||||
|
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Mattermost" style="width: 10%;">Mattermost</td>
|
||||||
<td class="checkbox-head" style="width: 10%;">{{lang.words.email|title()}}</td>
|
<td class="checkbox-head" style="width: 10%;">{{lang.words.email|title()}}</td>
|
||||||
<td class="checkbox-head" style="width: 100%;" title="{{lang.phrases.alert_service_change_status}}">{{lang.words.service|title()}}</td>
|
<td class="checkbox-head" style="width: 100%;" title="{{lang.phrases.alert_service_change_status}}">{{lang.words.service|title()}}</td>
|
||||||
<td><span onclick="loadchecker(1)" class="refresh" title="{{lang.words.refresh2|title()}}"></span></td>
|
<td><span onclick="loadchecker(1)" class="refresh" title="{{lang.words.refresh2|title()}}"></span></td>
|
||||||
|
@ -240,6 +267,18 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
|
<td id="apache_server_mm-{{h.id}}" title="{{lang.words.alert|title()}} {{lang.words.via}} {{lang.words.this3}} {{lang.words.channel}}">
|
||||||
|
<select id="apache_server_mm_channel-{{h.id}}">
|
||||||
|
<option value="0">{{lang.words.disabled|title()}}</option>
|
||||||
|
{% for t in mms %}
|
||||||
|
{% if h.mm_id|int() == t.id|int() %}
|
||||||
|
<option value="{{t.id}}" selected>{{t.chanel_name}}</option>
|
||||||
|
{% else %}
|
||||||
|
<option value="{{t.id}}">{{t.chanel_name}}</option>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
<td class="checkbox">
|
<td class="checkbox">
|
||||||
{% set id = 'apache_server_email-' + h.id|string() %}
|
{% set id = 'apache_server_email-' + h.id|string() %}
|
||||||
{% if h.email == 1 %}
|
{% if h.email == 1 %}
|
||||||
|
@ -266,9 +305,10 @@
|
||||||
<caption><i class="fas fa-cloud caption-icon"></i><h3>Keepalived {{lang.words.servers}}</h3></caption>
|
<caption><i class="fas fa-cloud caption-icon"></i><h3>Keepalived {{lang.words.servers}}</h3></caption>
|
||||||
<tr class="overviewHead">
|
<tr class="overviewHead">
|
||||||
<td class="padding10 first-collumn">{{lang.words.server|title()}}</td>
|
<td class="padding10 first-collumn">{{lang.words.server|title()}}</td>
|
||||||
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Telegram" style="width: 15%;">Telegram</td>
|
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Telegram" style="width: 10%;">Telegram</td>
|
||||||
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Slack" style="width: 15%;">Slack</td>
|
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Slack" style="width: 10%;">Slack</td>
|
||||||
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} PagerDuty" style="width: 15%;">PagerDuty</td>
|
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} PagerDuty" style="width: 10%;">PagerDuty</td>
|
||||||
|
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Mattermost" style="width: 10%;">Mattermost</td>
|
||||||
<td class="checkbox-head" style="width: 10%;">{{lang.words.email|title()}}</td>
|
<td class="checkbox-head" style="width: 10%;">{{lang.words.email|title()}}</td>
|
||||||
<td class="checkbox-head" style="width: 10%;" title="{{lang.phrases.alert_service_change_status}}">{{lang.words.service|title()}}</td>
|
<td class="checkbox-head" style="width: 10%;" title="{{lang.phrases.alert_service_change_status}}">{{lang.words.service|title()}}</td>
|
||||||
<td class="checkbox-head" style="width: 100%;" title="{{lang.phrases.alert_master_backup}}">{{lang.words.status|title()}}</td>
|
<td class="checkbox-head" style="width: 100%;" title="{{lang.phrases.alert_master_backup}}">{{lang.words.status|title()}}</td>
|
||||||
|
@ -315,6 +355,18 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
|
<td id="keepalived_server_mm-{{h.id}}" title="{{lang.words.alert|title()}} {{lang.words.via}} {{lang.words.this3}} {{lang.words.channel}}">
|
||||||
|
<select id="keepalived_server_mm_channel-{{h.id}}">
|
||||||
|
<option value="0">{{lang.words.disabled|title()}}</option>
|
||||||
|
{% for t in mms %}
|
||||||
|
{% if h.mm_id|int() == t.id|int() %}
|
||||||
|
<option value="{{t.id}}" selected>{{t.chanel_name}}</option>
|
||||||
|
{% else %}
|
||||||
|
<option value="{{t.id}}">{{t.chanel_name}}</option>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
<td class="checkbox">
|
<td class="checkbox">
|
||||||
{% set id = 'keepalived_server_email-' + h.id|string() %}
|
{% set id = 'keepalived_server_email-' + h.id|string() %}
|
||||||
{% if h.email == 1 %}
|
{% if h.email == 1 %}
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
data-raw="{{lang.words.raw|title()}}" data-resp_time="{{lang.smon_page.desc.resp_time}}" data-next="{{lang.words.next|title()}}" data-back="{{lang.words.back|title()}}"
|
data-raw="{{lang.words.raw|title()}}" data-resp_time="{{lang.smon_page.desc.resp_time}}" data-next="{{lang.words.next|title()}}" data-back="{{lang.words.back|title()}}"
|
||||||
data-installing="{{lang.words.installing|title()}}" data-creating="{{lang.words.creating|title()}}" data-roxywi_timeout="{{lang.ha_page.roxywi_timeout}}"
|
data-installing="{{lang.words.installing|title()}}" data-creating="{{lang.words.creating|title()}}" data-roxywi_timeout="{{lang.ha_page.roxywi_timeout}}"
|
||||||
data-check_apache_log="{{lang.ha_page.check_apache_log}}" data-was_installed="{{lang.ha_page.was_installed}}" data-start_enter="{{lang.ha_page.start_enter}}"
|
data-check_apache_log="{{lang.ha_page.check_apache_log}}" data-was_installed="{{lang.ha_page.was_installed}}" data-start_enter="{{lang.ha_page.start_enter}}"
|
||||||
data-apply="{{lang.words.apply|title()}}" />
|
data-apply="{{lang.words.apply|title()}}" data-reconfigure="{{lang.words.reconfigure|title()}}" />
|
||||||
{% include 'include/main_head.html' %}
|
{% include 'include/main_head.html' %}
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
@ -47,8 +47,8 @@
|
||||||
{% else %}
|
{% else %}
|
||||||
{{ input(set.param, size='25', type='password', style='width: 210px;', placeholder='******') }}
|
{{ input(set.param, size='25', type='password', style='width: 210px;', placeholder='******') }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% elif set.param in ('nginx_stats_port', 'session_ttl', 'token_ttl', 'haproxy_stats_port', 'haproxy_sock_port',
|
{% elif set.param in ('nginx_stats_port', 'session_ttl', 'token_ttl', 'haproxy_stats_port', 'haproxy_sock_port', 'master_port',
|
||||||
'ldap_port', 'log_time_storage', 'checker_check_interval', 'port_scan_interval', 'smon_keep_history_range',
|
'ldap_port', 'log_time_storage', 'checker_check_interval', 'port_scan_interval', 'smon_keep_history_range', 'agent_port',
|
||||||
'checker_keep_history_range', 'portscanner_keep_history_range', 'checker_maxconn_threshold', 'apache_stats_port',
|
'checker_keep_history_range', 'portscanner_keep_history_range', 'checker_maxconn_threshold', 'apache_stats_port',
|
||||||
'mail_smtp_port', 'rabbitmq_port', 'smon_ssl_expire_warning_alert', 'smon_ssl_expire_critical_alert', 'action_keep_history_range') %}
|
'mail_smtp_port', 'rabbitmq_port', 'smon_ssl_expire_warning_alert', 'smon_ssl_expire_critical_alert', 'action_keep_history_range') %}
|
||||||
{{ input(set.param, value=set.value, style='width: 210px;', type='number') }}
|
{{ input(set.param, value=set.value, style='width: 210px;', type='number') }}
|
||||||
|
|
|
@ -261,6 +261,42 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
<div id="mm-add-table" style="display: none;">
|
||||||
|
<table class="overview" id="mm-add-table-overview" title="{{lang.words.add|title()}} {{lang.words.w_a}} {{lang.words.new}} Mattermost {{lang.words.channel}}">
|
||||||
|
{% include 'include/tr_validate_tips.html' %}
|
||||||
|
<tr>
|
||||||
|
<td class="padding20">
|
||||||
|
<span title="Incoming Webhook">{{lang.words.token|title()}}</span>
|
||||||
|
<span class="need-field">*</span>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ input('mm-token-add', size='30') }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="padding20">
|
||||||
|
{{lang.words.channel|title()}}
|
||||||
|
<span class="need-field">*</span>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ input('mm-chanel-add') }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% if g.user_params['role'] == 1 %}
|
||||||
|
<tr>
|
||||||
|
<td class="padding20">{{lang.words.group|title()}}</td>
|
||||||
|
<td>
|
||||||
|
<select id="new-mm-group-add" name="new-mm-group-add">
|
||||||
|
<option disabled selected value="0">{{lang.words.select|title()}} {{lang.words.w_a}} {{lang.words.group2}}</option>
|
||||||
|
{% for group in groups %}
|
||||||
|
<option value="{{ group.group_id }}">{{ group.name }}</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endif %}
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
<div id="backup-add-table" title="Add a new backup job " style="display: none;">
|
<div id="backup-add-table" title="Add a new backup job " style="display: none;">
|
||||||
<table class="overview" id="backup-add-table-overview" title="{{lang.words.add|title()}} {{lang.words.w_a}} {{lang.words.new}} {{lang.words.backup}}">
|
<table class="overview" id="backup-add-table-overview" title="{{lang.words.add|title()}} {{lang.words.w_a}} {{lang.words.new}} {{lang.words.backup}}">
|
||||||
{% include 'include/tr_validate_tips.html' %}
|
{% include 'include/tr_validate_tips.html' %}
|
||||||
|
|
|
@ -149,6 +149,17 @@
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="padding20">Mattermost</td>
|
||||||
|
<td>
|
||||||
|
<select id="new-smon-mm">
|
||||||
|
<option value="0">{{lang.words.disabled|title()}}</option>
|
||||||
|
{% for t in mms %}
|
||||||
|
<option value="{{t.id}}">{{t.chanel_name}}</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="padding20">{{lang.words.group|title()}}</td>
|
<td class="padding20">{{lang.words.group|title()}}</td>
|
||||||
<td>{{ input('new-smon-group') }}</td>
|
<td>{{ input('new-smon-group') }}</td>
|
||||||
|
|
|
@ -927,5 +927,6 @@
|
||||||
"next": "next",
|
"next": "next",
|
||||||
"agent": "agent",
|
"agent": "agent",
|
||||||
"agent2": "agent",
|
"agent2": "agent",
|
||||||
|
"reconfigure": "reconfigure",
|
||||||
}
|
}
|
||||||
%}
|
%}
|
||||||
|
|
|
@ -927,5 +927,6 @@
|
||||||
"next": "suivante",
|
"next": "suivante",
|
||||||
"agent": "agent",
|
"agent": "agent",
|
||||||
"agent2": "agent",
|
"agent2": "agent",
|
||||||
|
"reconfigure": "reconfigurer",
|
||||||
}
|
}
|
||||||
%}
|
%}
|
||||||
|
|
|
@ -927,5 +927,6 @@
|
||||||
"next": "próxima",
|
"next": "próxima",
|
||||||
"agent": "agente",
|
"agent": "agente",
|
||||||
"agent2": "agente",
|
"agent2": "agente",
|
||||||
|
"reconfigure": "reconfigurar",
|
||||||
}
|
}
|
||||||
%}
|
%}
|
||||||
|
|
|
@ -927,5 +927,6 @@
|
||||||
"next": "дальше",
|
"next": "дальше",
|
||||||
"agent": "агент",
|
"agent": "агент",
|
||||||
"agent2": "агента",
|
"agent2": "агента",
|
||||||
|
"reconfigure": "переконфигурировать",
|
||||||
}
|
}
|
||||||
%}
|
%}
|
||||||
|
|
59
inc/smon.js
59
inc/smon.js
|
@ -96,6 +96,7 @@ function addNewSmonServer(dialog_id, smon_id=0, edit=false) {
|
||||||
'tg': $('#new-smon-telegram').val(),
|
'tg': $('#new-smon-telegram').val(),
|
||||||
'slack': $('#new-smon-slack').val(),
|
'slack': $('#new-smon-slack').val(),
|
||||||
'pd': $('#new-smon-pd').val(),
|
'pd': $('#new-smon-pd').val(),
|
||||||
|
'mm': $('#new-smon-mm').val(),
|
||||||
'packet_size': $('#new-smon-packet_size').val(),
|
'packet_size': $('#new-smon-packet_size').val(),
|
||||||
'http_method': $('#new-smon-method').val(),
|
'http_method': $('#new-smon-method').val(),
|
||||||
'check_type': check_type,
|
'check_type': check_type,
|
||||||
|
@ -244,9 +245,11 @@ function getCheckSettings(smon_id, check_type) {
|
||||||
$('#new-smon-telegram').val(data['tg']).change()
|
$('#new-smon-telegram').val(data['tg']).change()
|
||||||
$('#new-smon-slack').val(data['slack']).change()
|
$('#new-smon-slack').val(data['slack']).change()
|
||||||
$('#new-smon-pd').val(data['pd']).change()
|
$('#new-smon-pd').val(data['pd']).change()
|
||||||
|
$('#new-smon-mm').val(data['mm']).change()
|
||||||
$('#new-smon-telegram').selectmenu("refresh");
|
$('#new-smon-telegram').selectmenu("refresh");
|
||||||
$('#new-smon-slack').selectmenu("refresh");
|
$('#new-smon-slack').selectmenu("refresh");
|
||||||
$('#new-smon-pd').selectmenu("refresh");
|
$('#new-smon-pd').selectmenu("refresh");
|
||||||
|
$('#new-smon-mm').selectmenu("refresh");
|
||||||
$('#new-smon-agent-id').selectmenu("refresh");
|
$('#new-smon-agent-id').selectmenu("refresh");
|
||||||
if (data['enabled']) {
|
if (data['enabled']) {
|
||||||
$('#new-smon-enable').prop('checked', true)
|
$('#new-smon-enable').prop('checked', true)
|
||||||
|
@ -687,15 +690,50 @@ function checkAgentLimit() {
|
||||||
function addAgentDialog(agent_id=0, edit=false) {
|
function addAgentDialog(agent_id=0, edit=false) {
|
||||||
cleanAgentAddForm();
|
cleanAgentAddForm();
|
||||||
let tabel_title = $("#add-agent-page-overview").attr('title');
|
let tabel_title = $("#add-agent-page-overview").attr('title');
|
||||||
|
let buttons = [];
|
||||||
if (edit) {
|
if (edit) {
|
||||||
add_word = $('#translate').attr('data-edit');
|
add_word = $('#translate').attr('data-edit');
|
||||||
|
let reconfigure_word = $('#translate').attr('data-reconfigure');
|
||||||
tabel_title = $("#add-agent-page-overview").attr('data-edit');
|
tabel_title = $("#add-agent-page-overview").attr('data-edit');
|
||||||
getAgentSettings(agent_id);
|
getAgentSettings(agent_id);
|
||||||
|
buttons = [
|
||||||
|
{
|
||||||
|
text: reconfigure_word,
|
||||||
|
click: function () {
|
||||||
|
console.log('reconfigure');
|
||||||
|
addAgent($(this), agent_id, true, true);
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
text: add_word,
|
||||||
|
click: function () {
|
||||||
|
addAgent($(this), agent_id, true);
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
text: cancel_word,
|
||||||
|
click: function () {
|
||||||
|
$(this).dialog("close");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
} else {
|
} else {
|
||||||
|
add_word = $('#translate').attr('data-add');
|
||||||
if (!checkAgentLimit()) {
|
if (!checkAgentLimit()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
getFreeServers();
|
getFreeServers();
|
||||||
|
buttons = [
|
||||||
|
{
|
||||||
|
text: add_word,
|
||||||
|
click: function () {
|
||||||
|
addAgent($(this));
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
text: cancel_word,
|
||||||
|
click: function () {
|
||||||
|
$(this).dialog("close");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
let dialogTable = $("#add-agent-page").dialog({
|
let dialogTable = $("#add-agent-page").dialog({
|
||||||
autoOpen: false,
|
autoOpen: false,
|
||||||
|
@ -712,25 +750,11 @@ function addAgentDialog(agent_id=0, edit=false) {
|
||||||
effect: "fade",
|
effect: "fade",
|
||||||
duration: 200
|
duration: 200
|
||||||
},
|
},
|
||||||
buttons: [{
|
buttons: buttons
|
||||||
text: add_word,
|
|
||||||
click: function () {
|
|
||||||
if (edit) {
|
|
||||||
addAgent($(this), agent_id, true);
|
|
||||||
} else {
|
|
||||||
addAgent($(this));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
text: cancel_word,
|
|
||||||
click: function () {
|
|
||||||
$(this).dialog("close");
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
});
|
});
|
||||||
dialogTable.dialog('open');
|
dialogTable.dialog('open');
|
||||||
}
|
}
|
||||||
function addAgent(dialog_id, agent_id=0, edit=false) {
|
function addAgent(dialog_id, agent_id=0, edit=false, reconfigure=false) {
|
||||||
let valid = true;
|
let valid = true;
|
||||||
allFields = $([]).add($('#new-agent-name'));
|
allFields = $([]).add($('#new-agent-name'));
|
||||||
allFields.removeClass("ui-state-error");
|
allFields.removeClass("ui-state-error");
|
||||||
|
@ -749,6 +773,9 @@ function addAgent(dialog_id, agent_id=0, edit=false) {
|
||||||
if (edit) {
|
if (edit) {
|
||||||
method = 'PUT'
|
method = 'PUT'
|
||||||
agent_data['agent_id'] = agent_id;
|
agent_data['agent_id'] = agent_id;
|
||||||
|
if (reconfigure) {
|
||||||
|
agent_data['reconfigure'] = "1";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (valid) {
|
if (valid) {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
|
|
|
@ -1559,6 +1559,7 @@ function updateHaproxyCheckerSettings(id) {
|
||||||
telegram_id: $('#haproxy_server_telegram_channel-' + id + ' option:selected').val(),
|
telegram_id: $('#haproxy_server_telegram_channel-' + id + ' option:selected').val(),
|
||||||
slack_id: $('#haproxy_server_slack_channel-' + id + ' option:selected').val(),
|
slack_id: $('#haproxy_server_slack_channel-' + id + ' option:selected').val(),
|
||||||
pd_id: $('#haproxy_server_pd_channel-' + id + ' option:selected').val(),
|
pd_id: $('#haproxy_server_pd_channel-' + id + ' option:selected').val(),
|
||||||
|
mm_id: $('#haproxy_server_mm_channel-' + id + ' option:selected').val(),
|
||||||
token: $('#token').val()
|
token: $('#token').val()
|
||||||
},
|
},
|
||||||
type: "POST",
|
type: "POST",
|
||||||
|
@ -1601,6 +1602,7 @@ function updateKeepalivedCheckerSettings(id) {
|
||||||
telegram_id: $('#keepalived_server_telegram_channel-' + id + ' option:selected').val(),
|
telegram_id: $('#keepalived_server_telegram_channel-' + id + ' option:selected').val(),
|
||||||
slack_id: $('#keepalived_server_slack_channel-' + id + ' option:selected').val(),
|
slack_id: $('#keepalived_server_slack_channel-' + id + ' option:selected').val(),
|
||||||
pd_id: $('#keepalived_server_pd_channel-' + id + ' option:selected').val(),
|
pd_id: $('#keepalived_server_pd_channel-' + id + ' option:selected').val(),
|
||||||
|
mm_id: $('#keepalived_server_mm_channel-' + id + ' option:selected').val(),
|
||||||
token: $('#token').val()
|
token: $('#token').val()
|
||||||
},
|
},
|
||||||
type: "POST",
|
type: "POST",
|
||||||
|
@ -1638,6 +1640,7 @@ function updateServiceCheckerSettings(id, service_name) {
|
||||||
telegram_id: $('#' + service_name + '_server_telegram_channel-' + id + ' option:selected').val(),
|
telegram_id: $('#' + service_name + '_server_telegram_channel-' + id + ' option:selected').val(),
|
||||||
slack_id: $('#' + service_name + '_server_slack_channel-' + id + ' option:selected').val(),
|
slack_id: $('#' + service_name + '_server_slack_channel-' + id + ' option:selected').val(),
|
||||||
pd_id: $('#' + service_name + '_server_pd_channel-' + id + ' option:selected').val(),
|
pd_id: $('#' + service_name + '_server_pd_channel-' + id + ' option:selected').val(),
|
||||||
|
mm_id: $('#' + service_name + '_server_mm_channel-' + id + ' option:selected').val(),
|
||||||
token: $('#token').val()
|
token: $('#token').val()
|
||||||
},
|
},
|
||||||
type: "POST",
|
type: "POST",
|
||||||
|
|
Loading…
Reference in New Issue