v6.3.10.0

Changelog: https://roxy-wi.org/changelog#6_3_10
pull/364/head
Aidaho 2023-04-16 00:26:54 +03:00
parent f02408155e
commit afea8cbd1d
11 changed files with 597 additions and 367 deletions

View File

@ -795,6 +795,22 @@ def update_db_v_6_3_8():
print("Updating... DB has been updated to version 6.3.8")
def update_db_v_6_3_9():
cursor = conn.cursor()
sql = """
ALTER TABLE `checker_setting` ADD COLUMN pd_id integer default 0;
"""
try:
cursor.execute(sql)
except Exception as e:
if e.args[0] == 'duplicate column name: pd_id' or str(e) == '(1060, "Duplicate column name \'pd_id\'")':
print('Updating... DB has been updated to version 6.3.9')
else:
print("An error occurred:", e)
else:
print("Updating... DB has been updated to version 6.3.9")
def update_ver():
try:
Version.update(version='6.3.10.0').execute()
@ -825,6 +841,7 @@ def update_all():
update_db_v_6_3_5()
update_db_v_6_3_6()
update_db_v_6_3_8()
update_db_v_6_3_9()
update_ver()

View File

@ -54,22 +54,34 @@ def alert_routing(
for setting in checker_settings:
if alert_type == 'service' and setting.service_alert:
telegram_send_mess(mes, level, telegram_channel_id=setting.telegram_id)
slack_send_mess(mes, level, slack_channel_id=setting.slack_id)
try:
telegram_send_mess(mes, level, channel_id=setting.telegram_id)
slack_send_mess(mes, level, channel_id=setting.slack_id)
pd_send_mess(mes, level, server_ip, service_id, alert_type, channel_id=setting.pd_id)
except Exception as e:
roxywi_common.logging('Roxy-WI server', f'error: unable to send message: {e}', roxywi=1)
if setting.email:
send_email_to_server_group(subject, mes, level, group_id)
if alert_type == 'backend' and setting.backend_alert:
telegram_send_mess(mes, level, telegram_channel_id=setting.telegram_id)
slack_send_mess(mes, level, slack_channel_id=setting.slack_id)
try:
telegram_send_mess(mes, level, channel_id=setting.telegram_id)
slack_send_mess(mes, level, channel_id=setting.slack_id)
pd_send_mess(mes, level, server_ip, service_id, alert_type, channel_id=setting.pd_id)
except Exception as e:
roxywi_common.logging('Roxy-WI server', f'error: unable to send message: {e}', roxywi=1)
if setting.email:
send_email_to_server_group(subject, mes, level, group_id)
if alert_type == 'maxconn' and setting.maxconn_alert:
telegram_send_mess(mes, level, telegram_channel_id=setting.telegram_id)
slack_send_mess(mes, level, slack_channel_id=setting.slack_id)
try:
telegram_send_mess(mes, level, channel_id=setting.telegram_id)
slack_send_mess(mes, level, channel_id=setting.slack_id)
pd_send_mess(mes, level, server_ip, service_id, alert_type, channel_id=setting.pd_id)
except Exception as e:
roxywi_common.logging('Roxy-WI server', f'error: unable to send message: {e}', roxywi=1)
if setting.email:
send_email_to_server_group(subject, mes, level, group_id)
@ -122,11 +134,11 @@ def telegram_send_mess(mess, level, **kwargs):
token_bot = ''
channel_name = ''
if kwargs.get('telegram_channel_id') == 0:
if kwargs.get('channel_id') == 0:
return
if kwargs.get('telegram_channel_id'):
telegrams = sql.get_telegram_by_id(kwargs.get('telegram_channel_id'))
if kwargs.get('channel_id'):
telegrams = sql.get_telegram_by_id(kwargs.get('channel_id'))
else:
telegrams = sql.get_telegram_by_ip(kwargs.get('ip'))
@ -147,6 +159,7 @@ def telegram_send_mess(mess, level, **kwargs):
bot.send_message(chat_id=channel_name, text=f'{level}: {mess}')
except Exception as e:
roxywi_common.logging('Roxy-WI server', str(e), roxywi=1)
raise Exception(f'error: {e}')
def slack_send_mess(mess, level, **kwargs):
@ -155,11 +168,11 @@ def slack_send_mess(mess, level, **kwargs):
slack_token = ''
channel_name = ''
if kwargs.get('slack_channel_id') == 0:
if kwargs.get('channel_id') == 0:
return
if kwargs.get('slack_channel_id'):
slacks = sql.get_slack_by_id(kwargs.get('slack_channel_id'))
if kwargs.get('channel_id'):
slacks = sql.get_slack_by_id(kwargs.get('channel_id'))
else:
slacks = sql.get_slack_by_ip(kwargs.get('ip'))
@ -179,6 +192,51 @@ def slack_send_mess(mess, level, **kwargs):
client.chat_postMessage(channel=f'#{channel_name}', text=f'{level}: {mess}')
except SlackApiError as e:
roxywi_common.logging('Roxy-WI server', str(e), roxywi=1)
raise Exception(f'error: {e}')
def pd_send_mess(mess, level, server_ip=None, service_id=None, alert_type=None, **kwargs):
import pdpyras
token = ''
if kwargs.get('channel_id') == 0:
return
if kwargs.get('channel_id'):
try:
pds = sql.get_pd_by_id(kwargs.get('channel_id'))
except Exception as e:
print(e)
else:
try:
pds = sql.get_pd_by_ip(kwargs.get('ip'))
except Exception as e:
print(e)
for pd in pds:
token = pd.token
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)
try:
if level == 'info':
session.resolve(dedup_key)
else:
session.trigger(mess, 'Roxy-WI', dedup_key=dedup_key, severity=level, custom_details={'server': server_ip, 'alert': mess})
except Exception as e:
roxywi_common.logging('Roxy-WI server', str(e), roxywi=1)
raise Exception(f'error: {e}')
def check_rabbit_alert() -> None:
@ -228,11 +286,12 @@ def add_telegram_channel(token: str, channel: str, group: str, page: str) -> Non
else:
if sql.insert_new_telegram(token, channel, group):
lang = roxywi_common.get_user_lang()
channels = sql.select_telegram(token=token)
groups = sql.select_groups()
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
template = env.get_template('ajax/new_telegram.html')
output_from_parsed_template = template.render(groups=sql.select_groups(), lang=lang,
telegrams=sql.select_telegram(token=token), page=page)
print(output_from_parsed_template)
template = env.get_template('ajax/new_receiver.html')
parsed_template = template.render(groups=groups, lang=lang, channels=channels, page=page, receiver='telegram')
print(parsed_template)
roxywi_common.logging('Roxy-WI server', f'A new Telegram channel {channel} has been created ', roxywi=1, login=1)
@ -242,30 +301,56 @@ def add_slack_channel(token: str, channel: str, group: str, page: str) -> None:
else:
if sql.insert_new_slack(token, channel, group):
lang = roxywi_common.get_user_lang()
channels = sql.select_slack(token=token)
groups = sql.select_groups()
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
template = env.get_template('ajax/new_slack.html')
output_from_parsed_template = template.render(groups=sql.select_groups(), lang=lang,
slacks=sql.select_slack(token=token), page=page)
print(output_from_parsed_template)
template = env.get_template('ajax/new_receiver.html')
parsed_template = template.render(groups=groups, lang=lang, channels=channels, page=page, receiver='slack')
print(parsed_template)
roxywi_common.logging('Roxy-WI server', f'A new Slack channel {channel} has been created ', roxywi=1, login=1)
def add_pd_channel(token: str, channel: str, group: str, page: str) -> None:
if token is None or channel is None or group is None:
print(error_mess)
else:
if sql.insert_new_pd(token, channel, group):
lang = roxywi_common.get_user_lang()
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
template = env.get_template('ajax/new_receiver.html')
parsed_template = template.render(groups=sql.select_groups(), lang=lang, channels=sql.select_pd(token=token), page=page, receiver='pd')
print(parsed_template)
roxywi_common.logging('Roxy-WI server', f'A new PagerDuty channel {channel} has been created ', roxywi=1, login=1)
def delete_telegram_channel(channel_id) -> None:
telegram = sql.select_telegram(id=channel_id)
channel_name = ''
for t in telegram:
telegram_name = t.token
channel_name = t.token
if sql.delete_telegram(channel_id):
print("Ok")
roxywi_common.logging('Roxy-WI server', f'The Telegram channel {telegram_name} has been deleted ', roxywi=1, login=1)
roxywi_common.logging('Roxy-WI server', f'The Telegram channel {channel_name} has been deleted ', roxywi=1, login=1)
def delete_slack_channel(channel_id) -> None:
slack = sql.select_slack(id=channel_id)
channel_name = ''
for t in slack:
slack_name = t.chanel_name
channel_name = t.chanel_name
if sql.delete_slack(channel_id):
print("Ok")
roxywi_common.logging('Roxy-WI server', f'The Slack channel {slack_name} has been deleted ', roxywi=1, login=1)
roxywi_common.logging('Roxy-WI server', f'The Slack channel {channel_name} has been deleted ', roxywi=1, login=1)
def delete_pd_channel(channel_id) -> None:
pd = sql.select_pd(id=channel_id)
channel_name = ''
for t in pd:
channel_name = t.chanel_name
if sql.delete_pd(channel_id):
print("Ok")
roxywi_common.logging('Roxy-WI server', f'The PageDuty channel {channel_name} has been deleted ', roxywi=1, login=1)
def update_telegram(token: str, channel: str, group: str, user_id: int) -> None:
@ -276,3 +361,54 @@ def update_telegram(token: str, channel: str, group: str, user_id: int) -> None:
def update_slack(token: str, channel: str, group: str, user_id: int) -> None:
sql.update_slack(token, channel, group, user_id)
roxywi_common.logging(f'group {group}', f'The Slack token has been updated for channel: {channel}', roxywi=1, login=1)
def update_pd(token: str, channel: str, group: str, user_id: int) -> None:
sql.update_pd(token, channel, group, user_id)
roxywi_common.logging(f'group {group}', f'The PagerDuty token has been updated for channel: {channel}', roxywi=1, login=1)
def delete_receiver_channel(channel_id: int, receiver_name: str) -> None:
delete_functions = {
"telegram": delete_telegram_channel,
"slack": delete_slack_channel,
"pd": delete_pd_channel,
}
delete_functions[receiver_name](channel_id)
def add_receiver_channel(receiver_name: str, token: str, channel: str, group: id, page: str) -> None:
add_functions = {
"telegram": add_telegram_channel,
"slack": add_slack_channel,
"pd": add_pd_channel,
}
add_functions[receiver_name](token, channel, group, page)
def update_receiver_channel(receiver_name: str, token: str, channel: str, group: id, user_id: int) -> None:
update_functions = {
"telegram": update_telegram,
"slack": update_slack,
"pd": update_pd,
}
update_functions[receiver_name](token, channel, group, user_id)
def check_receiver(channel_id: int, receiver_name: str) -> None:
functions = {
"telegram": telegram_send_mess,
"slack": slack_send_mess,
"pd": pd_send_mess,
}
mess = 'Test message from Roxy-WI'
if receiver_name == 'pd':
level = 'warning'
else:
level = 'info'
try:
functions[receiver_name](mess, level, channel_id=channel_id)
except Exception as e:
print(e)

View File

@ -103,6 +103,16 @@ class Slack(BaseModel):
table_name = 'slack'
class PD(BaseModel):
id = AutoField()
token = CharField()
chanel_name = CharField()
groups = IntegerField()
class Meta:
table_name = 'pd'
class UUID(BaseModel):
user_id = IntegerField()
uuid = CharField()
@ -554,6 +564,7 @@ class CheckerSetting(BaseModel):
service_alert = IntegerField(constraints=[SQL('DEFAULT 1')])
backend_alert = IntegerField(constraints=[SQL('DEFAULT 1')])
maxconn_alert = IntegerField(constraints=[SQL('DEFAULT 1')])
pd_id = IntegerField(constraints=[SQL('DEFAULT 0')])
class Meta:
table_name = 'checker_setting'
@ -597,4 +608,4 @@ def create_tables():
PortScannerSettings, PortScannerPorts, PortScannerHistory, ProvidersCreds, ServiceSetting,
ProvisionedServers, MetricsHttpStatus, SMON, WafRules, Alerts, GeoipCodes, NginxMetrics,
SystemInfo, Services, UserName, GitSetting, CheckerSetting, ApacheMetrics, ProvisionParam,
WafNginx, ServiceStatus, KeepaliveRestart])
WafNginx, ServiceStatus, KeepaliveRestart, PD])

View File

@ -836,6 +836,36 @@ def get_slack_by_id(slack_id):
return query_res
def get_user_pd_by_group(group):
query = PD.select().where(PD.groups == group)
try:
query_res = query.execute()
except Exception as e:
out_error(e)
else:
return query_res
def get_pd_by_ip(ip):
query = PD.select().join(Server, on=(Server.groups == PD.groups)).where(Server.ip == ip)
try:
query_res = query.execute()
except Exception as e:
out_error(e)
else:
return query_res
def get_pd_by_id(pd_id):
query = PD.select().where(PD.id == pd_id)
try:
query_res = query.execute()
except Exception as e:
out_error(e)
else:
return query_res
def get_dick_permit(**kwargs):
if kwargs.get('username'):
grp = kwargs.get('group_id')
@ -1146,6 +1176,53 @@ def update_slack(token, chanel, group, slack_id):
return True
def delete_pd(pd_id):
query = PD.delete().where(PD.id == pd_id)
try:
query.execute()
except Exception as e:
out_error(e)
return False
else:
return True
def select_pd(**kwargs):
if kwargs.get('token'):
query = PD.select().where(PD.token == kwargs.get('token'))
elif kwargs.get('id'):
query = PD.select().where(PD.id == kwargs.get('id'))
else:
query = PD.select()
try:
query_res = query.execute()
except Exception as e:
out_error(e)
else:
return query_res
def insert_new_pd(token, chanel, group):
try:
PD.insert(token=token, chanel_name=chanel, groups=group).execute()
except Exception as e:
out_error(e)
return False
else:
return True
def update_pd(token, chanel, group, pd_id):
query_update = PD.update(token=token, chanel_name=chanel, groups=group).where(PD.id == pd_id)
try:
query_update.execute()
except Exception as e:
out_error(e)
return False
else:
return True
def insert_new_option(saved_option, group):
try:
Option.insert(options=saved_option, groups=group).execute()
@ -3761,11 +3838,11 @@ def insert_new_checker_setting_for_server(server_ip: str) -> None:
def update_haproxy_checker_settings(
email: int, telegram_id: int, slack_id: int, service_alert: int, backend_alert: int,
email: int, telegram_id: int, slack_id: int, pd_id: int, service_alert: int, backend_alert: int,
maxconn_alert: int, setting_id: int
) -> bool:
settings_update = CheckerSetting.update(
email=email, telegram_id=telegram_id, slack_id=slack_id, service_alert=service_alert,
email=email, telegram_id=telegram_id, slack_id=slack_id, pd_id=pd_id, service_alert=service_alert,
backend_alert=backend_alert, maxconn_alert=maxconn_alert
).where(CheckerSetting.id == setting_id)
try:
@ -3777,11 +3854,11 @@ def update_haproxy_checker_settings(
def update_keepalived_checker_settings(
email: int, telegram_id: int, slack_id: int, service_alert: int, backend_alert: int,
email: int, telegram_id: int, slack_id: int, pd_id: int, service_alert: int, backend_alert: int,
setting_id: int
) -> bool:
settings_update = CheckerSetting.update(
email=email, telegram_id=telegram_id, slack_id=slack_id,
email=email, telegram_id=telegram_id, slack_id=slack_id, pd_id=pd_id,
service_alert=service_alert, backend_alert=backend_alert
).where(CheckerSetting.id == setting_id)
try:
@ -3793,10 +3870,10 @@ def update_keepalived_checker_settings(
def update_service_checker_settings(
email: int, telegram_id: int, slack_id: int, service_alert: int, setting_id: int
email: int, telegram_id: int, slack_id: int, pd_id: int, service_alert: int, setting_id: int
) -> bool:
settings_update = CheckerSetting.update(
email=email, telegram_id=telegram_id, slack_id=slack_id, service_alert=service_alert
email=email, telegram_id=telegram_id, slack_id=slack_id, pd_id=pd_id, service_alert=service_alert
).where(CheckerSetting.id == setting_id)
try:
settings_update.execute()

View File

@ -858,61 +858,36 @@ if form.getvalue('ssh_cert'):
ssh_mod.upload_ssh_key(name, user_group, key)
if form.getvalue('newtelegram'):
if form.getvalue('new_receiver'):
import modules.alerting.alerting as alerting
token = common.checkAjaxInput(form.getvalue('newtelegram'))
token = common.checkAjaxInput(form.getvalue('new_receiver'))
receiver_name = common.checkAjaxInput(form.getvalue('receiver_name'))
channel = common.checkAjaxInput(form.getvalue('chanel'))
group = common.checkAjaxInput(form.getvalue('telegramgroup'))
group = common.checkAjaxInput(form.getvalue('group_receiver'))
page = common.checkAjaxInput(form.getvalue('page'))
page = page.split("#")[0]
alerting.add_telegram_channel(token, channel, group, page)
alerting.add_receiver_channel(receiver_name, token, channel, group, page)
if form.getvalue('newslack'):
if form.getvalue('receiver_del') is not None:
import modules.alerting.alerting as alerting
token = common.checkAjaxInput(form.getvalue('newslack'))
channel = common.checkAjaxInput(form.getvalue('chanel'))
group = common.checkAjaxInput(form.getvalue('slackgroup'))
page = common.checkAjaxInput(form.getvalue('page'))
page = page.split("#")[0]
channel_id = common.checkAjaxInput(form.getvalue('receiver_del'))
receiver_name = common.checkAjaxInput(form.getvalue('receiver_name'))
alerting.add_slack_channel(token, channel, group, page)
alerting.delete_receiver_channel(channel_id, receiver_name)
if form.getvalue('telegramdel') is not None:
if form.getvalue('update_receiver_token') is not None:
import modules.alerting.alerting as alerting
channel_id = common.checkAjaxInput(form.getvalue('telegramdel'))
alerting.delete_telegram_channel(channel_id)
if form.getvalue('slackdel') is not None:
import modules.alerting.alerting as alerting
channel_id = common.checkAjaxInput(form.getvalue('slackdel'))
alerting.delete_slack_channel(channel_id)
if form.getvalue('updatetoken') is not None:
import modules.alerting.alerting as alerting
token = common.checkAjaxInput(form.getvalue('updatetoken'))
channel = common.checkAjaxInput(form.getvalue('updategchanel'))
group = common.checkAjaxInput(form.getvalue('updatetelegramgroup'))
receiver_name = common.checkAjaxInput(form.getvalue('receiver_name'))
token = common.checkAjaxInput(form.getvalue('update_receiver_token'))
channel = common.checkAjaxInput(form.getvalue('update_receiver_channel'))
group = common.checkAjaxInput(form.getvalue('update_receiver_group'))
user_id = common.checkAjaxInput(form.getvalue('id'))
alerting.update_telegram(token, channel, group, user_id)
if form.getvalue('update_slack_token') is not None:
import modules.alerting.alerting as alerting
token = common.checkAjaxInput(form.getvalue('update_slack_token'))
channel = common.checkAjaxInput(form.getvalue('updategchanel'))
group = common.checkAjaxInput(form.getvalue('updateslackgroup'))
user_id = common.checkAjaxInput(form.getvalue('id'))
alerting.update_slack()
alerting.update_receiver_channel(receiver_name, token, channel, group, user_id)
if form.getvalue('updatesettings') is not None:
settings = common.checkAjaxInput(form.getvalue('updatesettings'))
@ -2003,6 +1978,7 @@ if form.getvalue('loadchecker'):
user_group = roxywi_common.get_user_group(id=1)
telegrams = sql.get_user_telegram_by_group(user_group)
slacks = sql.get_user_slack_by_group(user_group)
pds = sql.get_user_pd_by_group(user_group)
haproxy_servers = roxywi_common.get_dick_permit(haproxy=1, only_group=1)
nginx_servers = roxywi_common.get_dick_permit(nginx=1, only_group=1)
apache_servers = roxywi_common.get_dick_permit(apache=1, only_group=1)
@ -2010,6 +1986,7 @@ if form.getvalue('loadchecker'):
else:
telegrams = sql.select_telegram()
slacks = sql.select_slack()
pds = sql.select_pd()
haproxy_servers = roxywi_common.get_dick_permit(haproxy=1)
nginx_servers = roxywi_common.get_dick_permit(nginx=1)
apache_servers = roxywi_common.get_dick_permit(apache=1)
@ -2017,23 +1994,13 @@ if form.getvalue('loadchecker'):
else:
telegrams = ''
slacks = ''
pds = ''
template = template.render(services=services,
telegrams=telegrams,
groups=groups,
slacks=slacks,
user_status=user_subscription['user_status'],
user_plan=user_subscription['user_plan'],
haproxy_servers=haproxy_servers,
nginx_servers=nginx_servers,
apache_servers=apache_servers,
keepalived_servers=keepalived_servers,
haproxy_settings=haproxy_settings,
nginx_settings=nginx_settings,
keepalived_settings=keepalived_settings,
apache_settings=apache_settings,
page=page,
lang=lang)
template = template.render(services=services, telegrams=telegrams, pds=pds, groups=groups, slacks=slacks,
user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'],
haproxy_servers=haproxy_servers, nginx_servers=nginx_servers, apache_servers=apache_servers,
keepalived_servers=keepalived_servers, haproxy_settings=haproxy_settings, nginx_settings=nginx_settings,
keepalived_settings=keepalived_settings, apache_settings=apache_settings, page=page, lang=lang)
print(template)
if form.getvalue('load_update_hapwi'):
@ -2094,19 +2061,12 @@ if form.getvalue('loadopenvpn'):
openvpn_configs=openvpn_configs)
print(template)
if form.getvalue('check_telegram'):
if form.getvalue('check_receiver'):
import modules.alerting.alerting as alerting
telegram_id = form.getvalue('check_telegram')
mess = 'Test message from Roxy-WI'
alerting.telegram_send_mess(mess, telegram_channel_id=telegram_id)
if form.getvalue('check_slack'):
import modules.alerting.alerting as alerting
slack_id = form.getvalue('check_slack')
mess = 'Test message from Roxy-WI'
alerting.slack_send_mess(mess, slack_channel_id=slack_id)
channel_id = form.getvalue('receiver_channel_id')
receiver_name = form.getvalue('receiver_name')
alerting.check_receiver(channel_id, receiver_name)
if form.getvalue('check_rabbitmq_alert'):
import modules.alerting.alerting as alerting
@ -2347,9 +2307,9 @@ if form.getvalue('updateHaproxyCheckerSettings'):
maxconn_alert = form.getvalue('maxconn')
telegram_id = form.getvalue('telegram_id')
slack_id = form.getvalue('slack_id')
pd_id = form.getvalue('pd_id')
if sql.update_haproxy_checker_settings(email, telegram_id, slack_id, service_alert, backend_alert,
maxconn_alert, setting_id):
if sql.update_haproxy_checker_settings(email, telegram_id, slack_id, pd_id, service_alert, backend_alert, maxconn_alert, setting_id):
print('ok')
else:
print('error: Cannot update Checker settings')
@ -2361,8 +2321,9 @@ if form.getvalue('updateKeepalivedCheckerSettings'):
backend_alert = form.getvalue('backend')
telegram_id = form.getvalue('telegram_id')
slack_id = form.getvalue('slack_id')
pd_id = form.getvalue('pd_id')
if sql.update_keepalived_checker_settings(email, telegram_id, slack_id, service_alert, backend_alert, setting_id):
if sql.update_keepalived_checker_settings(email, telegram_id, slack_id, pd_id, service_alert, backend_alert, setting_id):
print('ok')
else:
print('error: Cannot update Checker settings')
@ -2373,8 +2334,9 @@ if form.getvalue('updateServiceCheckerSettings'):
service_alert = form.getvalue('server')
telegram_id = form.getvalue('telegram_id')
slack_id = form.getvalue('slack_id')
pd_id = form.getvalue('pd_id')
if sql.update_service_checker_settings(email, telegram_id, slack_id, service_alert, setting_id):
if sql.update_service_checker_settings(email, telegram_id, slack_id, pd_id, service_alert, setting_id):
print('ok')
else:
print('error: Cannot update Checker settings')

View File

@ -27,11 +27,11 @@
<li><a href="#checker_settings" title="Checker {{lang.words.settings}} - Roxy-WI">{{lang.words.settings|title()}}</a></li>
</ul>
<div id="channels">
<table id="checker_table" class="overview">
<table id="checker_telegram_table" class="overview-overflow">
<caption><i class="fab fa-telegram caption-icon"></i><h3>Telegram {{lang.words.channels}}</h3></caption>
<tr class="overviewHead" style="width: 50%;">
<td class="padding10 first-collumn" style="width: 25%;">
<span title="Token that has given @father_bot">{{lang.words.token|title()}}</span>
{{lang.words.token|title()}}
</td>
<td style="width: 20%;">{{lang.words.channel|title()}}</td>
{% if page != "servers.py" %}
@ -66,20 +66,20 @@
</td>
{% endif %}
<td>
<button title="{{lang.phrases.send_test_mes}}" onclick="checkTelegram({{telegram.id}})">{{lang.words.test|title()}}</button>
<button title="{{lang.phrases.send_test_mes}}" onclick="checkReceiver({{telegram.id}}, 'telegram')">{{lang.words.test|title()}}</button>
</td>
<td>
<a class="add" onclick="cloneTelegram({{telegram.id}})" id="clone-{{telegram.id}}" title="{{lang.words.w_copy|title()}} {{lang.words.the}} {{lang.words.settings}} {{telegram.chanel_name}}" style="cursor: pointer;"></a>
<a class="add" onclick="cloneReceiver({{telegram.id}}, 'telegram')" id="clone-{{telegram.id}}" title="{{lang.words.w_copy|title()}} {{lang.words.the}} {{lang.words.settings}} {{telegram.chanel_name}}" style="cursor: pointer;"></a>
</td>
<td>
<a class="delete" onclick="confirmDeleteTelegram({{telegram.id}})" title="{{lang.words.delete|title()}} {{lang.words.channel}} {{telegram.chanel_name}}" style="cursor: pointer;"></a>
<a class="delete" onclick="confirmDeleteReceiver({{telegram.id}}, 'telegram')" title="{{lang.words.delete|title()}} {{lang.words.channel}} {{telegram.chanel_name}}" style="cursor: pointer;"></a>
</td>
</tr>
{% endfor %}
</table>
<br /><span class="add-button" title="{{lang.words.add|title()}} Telegram {{lang.words.channel}}" id="add-telegram-button">+ {{lang.words.add|title()}}</span>
<br /><br />
<table id="checker_slack_table" class="overview">
<table id="checker_slack_table" class="overview-overflow">
<caption><i class="fab fa-slack caption-icon"></i><h3>Slack {{lang.words.channels|title()}}</h3></caption>
<tr class="overviewHead" style="width: 50%;">
<td class="padding10 first-collumn" style="width: 25%;">
@ -118,20 +118,72 @@
</td>
{% endif %}
<td>
<button title="{{lang.phrases.send_test_mes}}" onclick="checkSlack({{slack.id}})">{{lang.words.test|title()}}</button>
<button title="{{lang.phrases.send_test_mes}}" onclick="checkReceiver({{slack.id}}, 'slack')">{{lang.words.test|title()}}</button>
</td>
<td>
<a class="add" onclick="cloneSlack({{slack.id}})" id="clone-{{slack.id}}" title="{{lang.words.w_copy|title()}} {{lang.words.the}} {{lang.words.settings}} {{slack.chanel_name}}" style="cursor: pointer;"></a>
<a class="add" onclick="cloneReceiver({{slack.id}}, 'slack')" id="clone-{{slack.id}}" title="{{lang.words.w_copy|title()}} {{lang.words.the}} {{lang.words.settings}} {{slack.chanel_name}}" style="cursor: pointer;"></a>
</td>
<td>
<a class="delete" onclick="confirmDeleteSlack({{slack.id}})" title="{{lang.words.delete|title()}} {{lang.words.channel}} {{slack.chanel_name}}" style="cursor: pointer;"></a>
<a class="delete" onclick="confirmDeleteReceiver({{slack.id}}, 'slack')" title="{{lang.words.delete|title()}} {{lang.words.channel}} {{slack.chanel_name}}" style="cursor: pointer;"></a>
</td>
</tr>
{% endfor %}
</table>
<br /><span class="add-button" title="{{lang.words.add|title()}} Slack {{lang.words.channel|title()}}" id="add-slack-button">+ {{lang.words.add|title()}}</span>
<br /><br />
<table class="overview">
<table id="checker_pd_table" class="overview-overflow">
<caption><i class="fas fa-pager caption-icon"></i><h3>PagerDuty {{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 page != "servers.py" %}
<td style="width: 25%;">{{lang.words.group|title()}}</td>
{% endif %}
<td style="width: 100%;"></td>
<td></td>
<td><span onclick="loadchecker()" class="refresh" title="{{lang.words.refresh2|title()}} Slack {{lang.words.channels}}"></span></td>
</tr>
{% for pd in pds %}
<tr id="pd-table-{{pd.id}}" class="{{ loop.cycle('odd', 'even') }}">
<td class="padding10 first-collumn">
{% set id = 'pd-token-' + pd.id|string() %}
{{ input(id, value=pd.token, size='30') }}
</td>
<td>
{% set id = 'pd-chanel-' + pd.id|string() %}
{{ input(id, value=pd.chanel_name, size='30') }}
</td>
{% if page != "servers.py" %}
<td>
<select id="pdgroup-{{pd.id}}" name="pdgroup-{{pd.id}}">
<option disabled selected>------</option>
{% for group in groups %}
{% if pd.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({{pd.id}}, 'pd')">{{lang.words.test|title()}}</button>
</td>
<td>
<a class="add" onclick="cloneReceiver({{pd.id}}, 'pd')" id="clone-{{pd.id}}" title="{{lang.words.w_copy|title()}} {{lang.words.the}} {{lang.words.settings}} {{pd.chanel_name}}" style="cursor: pointer;"></a>
</td>
<td>
<a class="delete" onclick="confirmDeleteReceiver({{pd.id}}, 'pd')" title="{{lang.words.delete|title()}} {{lang.words.channel}} {{pd.chanel_name}}" style="cursor: pointer;"></a>
</td>
</tr>
{% endfor %}
</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 /><br />
<table class="overflow">
<caption><i class="fas fa-envelope-open-text caption-icon"></i><h3>{{lang.words.test2|title()}} {{lang.words.message}}</h3></caption>
<tr class="overviewHead">
<td class="padding10 first-collumn" style="width: 45%">{{lang.words.email|title()}}</td>
@ -150,17 +202,19 @@
<div id="ajax-telegram"></div>
<div class="add-note alert addName alert-info" style="width: inherit; margin-right: 15px;">
{{lang.phrases.read_about_parameters}} <a href="https://roxy-wi.org/description/checker" title="Servers description" target="_blank">{{lang.words.here}}</a>,
{{lang.phrases.read_howto}} Telegram bot <a href="https://roxy-wi.org/howto/create-telegram-bot" title="How to create Telegram bot and use it with Roxy-WI" target="_blank">{{lang.words.article}}</a>,
{{lang.phrases.read_howto}} {{lang.words.use}} Slack APP <a href="https://roxy-wi.org/howto/create-slack-app" title="How to create Slack APP and use it with Roxy-WI" target="_blank">{{lang.words.article}}</a>
<a href="https://roxy-wi.org/howto/create-telegram-bot" title="How to create Telegram bot and use it with Roxy-WI" target="_blank">{{lang.phrases.howto_user}} Telegram bot</a>,
<a href="https://roxy-wi.org/howto/create-slack-app" title="How to create Slack APP and use it with Roxy-WI" target="_blank">{{lang.phrases.howto_user}} Slack APP</a>,
<a href="https://roxy-wi.org/howto/create-pd-integration" title="How to create PagerDuty integration and use it with Roxy-WI" target="_blank">{{lang.phrases.howto_user}} PagerDuty</a>.
</div>
</div>
<div id="checker_settings">
<table class="overview checker_settings_table" id="checker_haproxy_table">
<table class="overview-overflow checker_settings_table" id="checker_haproxy_table">
<caption><i class="fas fa-network-wired caption-icon"></i><h3>HAProxy {{lang.words.servers}}</h3></caption>
<tr class="overviewHead">
<td class="padding10 first-collumn">{{lang.words.server|title()}}</td>
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Telegram">Telegram</td>
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Slack">Slack</td>
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} PagerDuty">PagerDuty</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_backend_change_status}}">{{lang.words.backend|title()}}</td>
@ -196,6 +250,18 @@
{% endfor %}
</select>
</td>
<td id="haproxy_server_pd-{{s.0}}" title="{{lang.words.alert|title()}} {{lang.words.via}} {{lang.words.this3}} {{lang.words.channel}}">
<select id="haproxy_server_pd_channel-{{h.id}}">
<option value="0">{{lang.words.disabled|title()}}</option>
{% for t in pds %}
{% if h.pd_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}}">
{% set id = 'haproxy_server_email-' + h.id|string() %}
{% if h.email == 1 %}
@ -234,12 +300,13 @@
{% endfor %}
{% endfor %}
</table>
<table class="overview checker_settings_table" id="checker_nginx_table">
<table class="overview-overflow checker_settings_table" id="checker_nginx_table">
<caption><i class="fas fa-sitemap caption-icon"></i><h3>NGINX {{lang.words.servers}}</h3></caption>
<tr class="overviewHead">
<td class="padding10 first-collumn">{{lang.words.server|title()}}</td>
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Telegram">Telegram</td>
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Slack">Slack</td>
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} PagerDuty">PagerDuty</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><span onclick="loadchecker(1)" class="refresh" title="{{lang.words.refresh2|title()}}"></span></td>
@ -273,6 +340,18 @@
{% endfor %}
</select>
</td>
<td id="nginx_server_pd-{{h.id}}" title="{{lang.words.alert|title()}} {{lang.words.via}} {{lang.words.this3}} {{lang.words.channel}}">
<select id="nginx_server_pd_channel-{{h.id}}">
<option value="0">{{lang.words.disabled|title()}}</option>
{% for t in pds %}
{% if h.pd_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">
{% set id = 'nginx_server_email-' + h.id|string() %}
{% if h.email == 1 %}
@ -295,12 +374,13 @@
{% endfor %}
{% endfor %}
</table>
<table class="overview checker_settings_table" id="checker_apache_table">
<table class="overview-overflow checker_settings_table" id="checker_apache_table">
<caption><i class="fas fa-feather-alt caption-icon"></i><h3>Apache {{lang.words.servers}}</h3></caption>
<tr class="overviewHead">
<td class="padding10 first-collumn">{{lang.words.server|title()}}</td>
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Telegram">Telegram</td>
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Slack">Slack</td>
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} PagerDuty">PagerDuty</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><span onclick="loadchecker(1)" class="refresh" title="{{lang.words.refresh2|title()}}"></span></td>
@ -334,6 +414,18 @@
{% endfor %}
</select>
</td>
<td id="apache_server_pd-{{h.id}}" title="{{lang.words.alert|title()}} {{lang.words.via}} {{lang.words.this3}} {{lang.words.channel}}">
<select id="apache_server_pd_channel-{{h.id}}">
<option value="0">{{lang.words.disabled|title()}}</option>
{% for t in pds %}
{% if h.pd_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">
{% set id = 'apache_server_email-' + h.id|string() %}
{% if h.email == 1 %}
@ -356,12 +448,13 @@
{% endfor %}
{% endfor %}
</table>
<table class="overview checker_settings_table" id="checker_keepalived_table">
<table class="overview-overflow checker_settings_table" id="checker_keepalived_table">
<caption><i class="fas fa-cloud caption-icon"></i><h3>Keepalived {{lang.words.servers}}</h3></caption>
<tr class="overviewHead">
<td class="padding10 first-collumn">{{lang.words.server|title()}}</td>
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Telegram">Telegram</td>
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} Slack">Slack</td>
<td class="first-collumn" title="{{lang.words.alert|title()}} {{lang.words.via}} PagerDuty">PagerDuty</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: 100%;" title="{{lang.phrases.alert_master_backup}}">{{lang.words.status|title()}}</td>
@ -396,6 +489,18 @@
{% endfor %}
</select>
</td>
<td id="keepalived_server_pd-{{h.id}}" title="{{lang.words.alert|title()}} {{lang.words.via}} {{lang.words.this3}} {{lang.words.channel}}">
<select id="keepalived_server_pd_channel-{{h.id}}">
<option value="0">{{lang.words.disabled|title()}}</option>
{% for t in pds %}
{% if h.pd_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">
{% set id = 'keepalived_server_email-' + h.id|string() %}
{% if h.email == 1 %}

View File

@ -0,0 +1,34 @@
{% import 'languages/'+lang|default('en')+'.html' as lang %}
{% for c in channels %}
<tr style="width: 50%;" id="{{receiver}}-table-{{c.id}}" class="newgroup">
<td class="padding10 first-collumn">
<input type="text" id="{{receiver}}-token-{{c.id}}" class="form-control" value="{{c.token}}" size="30">
<input type="hidden" id="{{receiver}}group-{{c.id}}" name="{{receiver}}group-{{c.id}}">
</td>
<td>
<input type="text" id="{{receiver}}-chanel-{{c.id}}" class="form-control" value="{{c.chanel_name}}" size="30">
</td>
{% if page != "servers.py" %}
<td>
<select id="{{receiver}}group-{{c.id}}" name="{{receiver}}group-{{c.id}}">
{% for group in groups %}
{% if c.groups == group.group_id %}
<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({{c.id}}, '{{receiver}}')">{{lang.words.test|title()}}</button>
</td>
<td>
<a class="add" onclick="cloneReceiver({{c.id}}, '{{receiver}}')" id="clone-{{c.id}}" title="{{lang.words.clone|title()}} {{c.chanel_name}}" style="cursor: pointer;"></a>
</td>
<td>
<a class="delete" onclick="confirmDeleteReceiver({{c.id}}, '{{receiver}}')" style="cursor: pointer;"></a>
</td>
</tr>
{% endfor %}

View File

@ -1,34 +0,0 @@
{% import 'languages/'+lang|default('en')+'.html' as lang %}
{% for slack in slacks %}
<tr style="width: 50%;" id="slack-table-{{slack.id}}" class="newgroup">
<td class="padding10 first-collumn">
<input type="text" id="slack-token-{{slack.id}}" class="form-control" value="{{slack.token}}" size="30">
<input type="hidden" id="slackgroup-{{slack.id}}" name="slackgroup-{{slack.id}}">
</td>
<td>
<input type="text" id="slack-chanel-{{slack.id}}" class="form-control" value="{{slack.chanel_name}}" size="30">
</td>
{% if page != "servers.py" %}
<td>
<select id="slackgroup-{{slack.id}}" name="slackgroup-{{slack.id}}">
{% for group in groups %}
{% if slack.groups == group.group_id %}
<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="checkSlack({{slack.id}})">{{lang.words.test|title()}}</button>
</td>
<td>
<a class="add" onclick="cloneSlack({{slack.id}})" id="clone-{{slack.id}}" title="{{lang.words.clone|title()}} {{slack.chanel_name}}" style="cursor: pointer;"></a>
</td>
<td>
<a class="delete" onclick="confirmDeleteSlack({{slack.id}})" style="cursor: pointer;"></a>
</td>
</tr>
{% endfor %}

View File

@ -1,34 +0,0 @@
{% import 'languages/'+lang|default('en')+'.html' as lang %}
{% for telegram in telegrams %}
<tr style="width: 50%;" id="telegram-table-{{telegram.id}}" class="newgroup">
<td class="padding10 first-collumn">
<input type="text" id="telegram-token-{{telegram.id}}" class="form-control" value="{{telegram.token}}" size="30">
<input type="hidden" id="telegramgroup-{{telegram.id}}" name="telegramgroup-{{telegram.id}}">
</td>
<td>
<input type="text" id="telegram-chanel-{{telegram.id}}" class="form-control" value="{{telegram.chanel_name}}" size="30">
</td>
{% if page != "servers.py" %}
<td>
<select id="sshgroup-{{telegram.id}}" name="sshgroup-{{telegram.id}}">
{% for group in groups %}
{% if telegram.groups == group.group_id %}
<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="checkTelegram({{telegram.id}})">{{lang.words.test|title()}}</button>
</td>
<td>
<a class="add" onclick="cloneTelegram({{telegram.id}})" id="clone-{{telegram.id}}" title="{{lang.words.clone|title()}} {{telegram.chanel_name}}" style="cursor: pointer;"></a>
</td>
<td>
<a class="delete" onclick="confirmDeleteTelegram({{telegram.id}})" style="cursor: pointer;"></a>
</td>
</tr>
{% endfor %}

View File

@ -225,6 +225,42 @@
{% endif %}
</table>
</div>
<div id="pd-add-table" style="display: none;">
<table class="overview" id="pd-add-table-overview" title="{{lang.words.add|title()}} {{lang.words.w_a}} {{lang.words.new}} PagerDuty {{lang.words.channel}}">
{% include 'include/tr_validate_tips.html' %}
<tr>
<td class="padding20">
<span title="Integration key from Events API V2 integration">{{lang.words.token|title()}}</span>
<span class="need-field">*</span>
</td>
<td>
{{ input('pd-token-add', size='30') }}
</td>
</tr>
<tr>
<td class="padding20">
{{lang.words.channel|title()}}
<span class="need-field">*</span>
</td>
<td>
{{ input('pd-chanel-add') }}
</td>
</tr>
{% if page != "servers.py" %}
<tr>
<td class="padding20">{{lang.words.group|title()}}</td>
<td>
<select id="new-pd-group-add" name="new-pd-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;">
<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' %}

View File

@ -528,6 +528,9 @@ $( function() {
$('#add-slack-button').click(function() {
addSlackDialog.dialog('open');
});
$('#add-pd-button').click(function() {
addPDDialog.dialog('open');
});
var telegram_tabel_title = $( "#telegram-add-table-overview" ).attr('title');
var addTelegramDialog = $( "#telegram-add-table" ).dialog({
autoOpen: false,
@ -547,7 +550,7 @@ $( function() {
buttons: [{
text: add_word,
click: function () {
addTelegram(this);
addRecevier(this, 'telegram');
}
}, {
text: cancel_word,
@ -576,7 +579,36 @@ $( function() {
buttons: [{
text: add_word,
click: function () {
addSlack(this);
addRecevier(this, 'slack');
}
}, {
text: cancel_word,
click: function () {
$(this).dialog("close");
clearTips();
}
}]
});
var pd_tabel_title = $( "#pd-add-table-overview" ).attr('title');
var addPDDialog = $( "#pd-add-table" ).dialog({
autoOpen: false,
resizable: false,
height: "auto",
width: 600,
modal: true,
title: pd_tabel_title,
show: {
effect: "fade",
duration: 200
},
hide: {
effect: "fade",
duration: 200
},
buttons: [{
text: add_word,
click: function () {
addRecevier(this, 'pd');
}
}, {
text: cancel_word,
@ -740,21 +772,29 @@ $( function() {
} else {
$('#ssh_pass').css('display', 'block');
}
$( "#checker_table input" ).change(function() {
$( "#checker_telegram_table input" ).change(function() {
var id = $(this).attr('id').split('-');
updateTelegram(id[2])
updateReceiver(id[2], 'telegram')
});
$( "#checker_table select" ).on('selectmenuchange',function() {
$( "#checker_telegram_table select" ).on('selectmenuchange',function() {
var id = $(this).attr('id').split('-');
updateTelegram(id[1])
updateReceiver(id[1], 'telegram')
});
$( "#checker_slack_table input" ).change(function() {
var id = $(this).attr('id').split('-');
updateSlack(id[2])
updateReceiver(id[2], 'slack')
});
$( "#checker_slack_table select" ).on('selectmenuchange',function() {
var id = $(this).attr('id').split('-');
updateSlack(id[1])
updateReceiver(id[1], 'slack')
});
$( "#checker_pd_table input" ).change(function() {
var id = $(this).attr('id').split('-');
updateReceiver(id[2], 'pd')
});
$( "#checker_pd_table select" ).on('selectmenuchange',function() {
var id = $(this).attr('id').split('-');
updateReceiver(id[1], 'pd')
});
$( "#ajax-backup-table input" ).change(function() {
var id = $(this).attr('id').split('-');
@ -1204,21 +1244,22 @@ function getGroupNameById(group_id) {
});
return group_name;
}
function addTelegram(dialog_id) {
function addRecevier(dialog_id, receiver_name) {
var valid = true;
toastr.clear();
allFields = $( [] ).add( $('#telegram-token-add') ).add( $('#telegram-chanel-add') )
allFields = $( [] ).add( $('#'+receiver_name+'-token-add') ).add( $('#'+receiver_name+'-chanel-add') );
allFields.removeClass( "ui-state-error" );
valid = valid && checkLength( $('#telegram-token-add'), "token", 1 );
valid = valid && checkLength( $('#telegram-chanel-add'), "channel name", 1 );
valid = valid && checkLength( $('#'+receiver_name+'-token-add'), "token", 1 );
valid = valid && checkLength( $('#'+receiver_name+'-chanel-add'), "channel name", 1 );
if(valid) {
toastr.clear();
$.ajax( {
url: "options.py",
data: {
newtelegram: $('#telegram-token-add').val(),
chanel: $('#telegram-chanel-add').val(),
telegramgroup: $('#new-telegram-group-add').val(),
new_receiver: $('#'+receiver_name+'-token-add').val(),
receiver_name: receiver_name,
chanel: $('#'+receiver_name+'-chanel-add').val(),
group_receiver: $('#new-'+receiver_name+'-group-add').val(),
page: cur_url[0].split('#')[0],
token: $('#token').val()
},
@ -1227,47 +1268,11 @@ function addTelegram(dialog_id) {
if (data.indexOf('error:') != '-1') {
toastr.error(data);
} else {
var getId = new RegExp('telegram-table-[0-9]+');
var getId = new RegExp(receiver_name+'-table-[0-9]+');
var id = data.match(getId) + '';
id = id.split('-').pop();
$('select:regex(id, telegram_channel)').append('<option value=' + id + '>' + $('#telegram-chanel-add').val() + '</option>').selectmenu("refresh");
common_ajax_action_after_success(dialog_id, 'newgroup', 'checker_table', data);
$( "input[type=submit], button" ).button();
$( "input[type=checkbox]" ).checkboxradio();
$( "select" ).selectmenu();
}
}
} );
}
}
function addSlack(dialog_id) {
var valid = true;
toastr.clear();
allFields = $( [] ).add( $('#slack-token-add') ).add( $('#slack-chanel-add') );
allFields.removeClass( "ui-state-error" );
valid = valid && checkLength( $('#slack-token-add'), "token", 1 );
valid = valid && checkLength( $('#slack-chanel-add'), "channel name", 1 );
if(valid) {
toastr.clear();
$.ajax( {
url: "options.py",
data: {
newslack: $('#slack-token-add').val(),
chanel: $('#slack-chanel-add').val(),
slackgroup: $('#new-slack-group-add').val(),
page: cur_url[0].split('#')[0],
token: $('#token').val()
},
type: "POST",
success: function( data ) {
if (data.indexOf('error:') != '-1') {
toastr.error(data);
} else {
var getId = new RegExp('slack-table-[0-9]+');
var id = data.match(getId) + '';
id = id.split('-').pop();
$('select:regex(id, slack_channel)').append('<option value=' + id + '>' + $('#slack-chanel-add').val() + '</option>').selectmenu("refresh");
common_ajax_action_after_success(dialog_id, 'newgroup', 'checker_slack_table', data);
$('select:regex(id, '+receiver_name+'_channel)').append('<option value=' + id + '>' + $('#'+receiver_name+'-chanel-add').val() + '</option>').selectmenu("refresh");
common_ajax_action_after_success(dialog_id, 'newgroup', 'checker_'+receiver_name+'_table', data);
$( "input[type=submit], button" ).button();
$( "input[type=checkbox]" ).checkboxradio();
$( "select" ).selectmenu();
@ -1498,51 +1503,28 @@ function confirmDeleteSsh(id) {
}]
});
}
function confirmDeleteTelegram(id) {
function confirmDeleteReceiver(id, reciever_name) {
var delete_word = $('#translate').attr('data-delete');
var cancel_word = $('#translate').attr('data-cancel');
$( "#dialog-confirm" ).dialog({
resizable: false,
height: "auto",
width: 400,
modal: true,
title: delete_word + " " +$('#telegram-chanel-'+id).val() + "?",
buttons: [{
text: delete_word,
click: function() {
$(this).dialog("close");
removeTelegram(id);
}
}, {
text: cancel_word,
click: function () {
$(this).dialog("close");
}
}]
});
}
function confirmDeleteSlack(id) {
var delete_word = $('#translate').attr('data-delete');
var cancel_word = $('#translate').attr('data-cancel');
$( "#dialog-confirm" ).dialog({
resizable: false,
height: "auto",
width: 400,
modal: true,
title: delete_word + " " +$('#slack-chanel-'+id).val() + "?",
buttons: [{
text: delete_word,
click: function () {
$(this).dialog("close");
removeSlack(id);
}
}, {
text: cancel_word,
click: function () {
$(this).dialog("close");
}
}]
});
resizable: false,
height: "auto",
width: 400,
modal: true,
title: delete_word + " " + $('#' + reciever_name + '-chanel-' + id).val() + "?",
buttons: [{
text: delete_word,
click: function () {
$(this).dialog("close");
removeReciver(reciever_name, id);
}
}, {
text: cancel_word,
click: function () {
$(this).dialog("close");
}
}]
});
}
function confirmDeleteBackup(id) {
var delete_word = $('#translate').attr('data-delete');
@ -1646,15 +1628,10 @@ function cloneUser(id) {
$('#new-group').selectmenu("refresh");
}
}
function cloneTelegram(id) {
$( "#add-telegram-button" ).trigger( "click" );
$('#telegram-token-add').val($('#telegram-token-'+id).val())
$('#telegram-chanel-add').val($('#telegram-chanel-'+id).val())
}
function cloneSlack(id) {
$( "#slack" ).trigger( "click" );
$('#slack').val($('#slack-token-'+id).val())
$('#slack').val($('#slack-chanel-'+id).val())
function cloneReceiver(id, reciever_name) {
$('#add-'+reciever_name+'-button').trigger( "click" );
$('#'+reciever_name+'-token-add').val($('#'+reciever_name+'-token-'+id).val());
$('#'+reciever_name+'-chanel-add').val($('#'+reciever_name+'-chanel-'+id).val());
}
function cloneBackup(id) {
$( "#add-backup-button" ).trigger( "click" );
@ -1750,38 +1727,20 @@ function removeSsh(id) {
}
} );
}
function removeTelegram(id) {
$("#telegram-table-"+id).css("background-color", "#f2dede");
function removeReciver(receiver_name, receiver_id) {
$("#"+receiver_name+"-table-"+receiver_id).css("background-color", "#f2dede");
$.ajax( {
url: "options.py",
data: {
telegramdel: id,
receiver_del: receiver_id,
receiver_name: receiver_name,
token: $('#token').val()
},
type: "POST",
success: function( data ) {
data = data.replace(/\s+/g,' ');
if(data == "Ok ") {
$("#telegram-table-"+id).remove();
} else if (data.indexOf('error:') != '-1' || data.indexOf('unique') != '-1') {
toastr.error(data);
}
}
} );
}
function removeSlack(id) {
$("#slack-table-"+id).css("background-color", "#f2dede");
$.ajax( {
url: "options.py",
data: {
slackdel: id,
token: $('#token').val()
},
type: "POST",
success: function( data ) {
data = data.replace(/\s+/g,' ');
if(data == "Ok ") {
$("#slack-table-"+id).remove();
$("#"+receiver_name+"-table-"+receiver_id).remove();
} else if (data.indexOf('error:') != '-1' || data.indexOf('unique') != '-1') {
toastr.error(data);
}
@ -2025,14 +1984,15 @@ function updateSSH(id) {
}
} );
}
function updateTelegram(id) {
function updateReceiver(id, receiver_name) {
toastr.clear();
$.ajax( {
url: "options.py",
data: {
updatetoken: $('#telegram-token-'+id).val(),
updategchanel: $('#telegram-chanel-'+id).val(),
updatetelegramgroup: $('#telegramgroup-'+id).val(),
receiver_name: receiver_name,
update_receiver_token: $('#'+receiver_name+'-token-'+id).val(),
update_receiver_channel: $('#'+receiver_name+'-chanel-'+id).val(),
update_receiver_group: $('#'+receiver_name+'group-'+id).val(),
id: id,
token: $('#token').val()
},
@ -2043,35 +2003,9 @@ function updateTelegram(id) {
toastr.error(data);
} else {
toastr.clear();
$("#telegram-table-"+id).addClass( "update", 1000 );
$("#"+receiver_name+"-table-"+id).addClass( "update", 1000 );
setTimeout(function() {
$( "#telegram-table-"+id ).removeClass( "update" );
}, 2500 );
}
}
} );
}
function updateSlack(id) {
toastr.clear();
$.ajax( {
url: "options.py",
data: {
update_slack_token: $('#slack-token-'+id).val(),
updategchanel: $('#slack-chanel-'+id).val(),
updateslackgroup: $('#slackgroup-'+id).val(),
id: id,
token: $('#token').val()
},
type: "POST",
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error:') != '-1' || data.indexOf('unique') != '-1') {
toastr.error(data);
} else {
toastr.clear();
$("#slack-table-"+id).addClass( "update", 1000 );
setTimeout(function() {
$( "#slack-table-"+id ).removeClass( "update" );
$( "#"+receiver_name+"-table-"+id ).removeClass( "update" );
}, 2500 );
}
}
@ -2679,29 +2613,13 @@ function loadopenvpn() {
}
} );
}
function checkTelegram(telegram_id) {
function checkReceiver(channel_id, receiver_name) {
$.ajax({
url: "options.py",
data: {
check_telegram: telegram_id,
token: $('#token').val()
},
type: "POST",
success: function (data) {
data = data.replace(/\s+/g, ' ');
if (data.indexOf('error:') != '-1' || data.indexOf('error_code') != '-1') {
toastr.error(data);
} else {
toastr.success('Test message has been sent');
}
}
} );
}
function checkSlack(slack_id) {
$.ajax({
url: "options.py",
data: {
check_slack: slack_id,
check_receiver: 1,
receiver_channel_id: channel_id,
receiver_name: receiver_name,
token: $('#token').val()
},
type: "POST",
@ -2802,6 +2720,7 @@ function updateHaproxyCheckerSettings(id) {
maxconn: maxconn,
telegram_id: $('#haproxy_server_telegram_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(),
token: $('#token').val()
},
type: "POST",
@ -2833,7 +2752,6 @@ function updateKeepalivedCheckerSettings(id) {
if ($('#keepalived_server_backend-'+id).is(':checked')) {
backend = '1';
}
$.ajax( {
url: "options.py",
data: {
@ -2843,6 +2761,7 @@ function updateKeepalivedCheckerSettings(id) {
backend: backend,
telegram_id: $('#keepalived_server_telegram_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(),
token: $('#token').val()
},
type: "POST",
@ -2878,6 +2797,7 @@ function updateServiceCheckerSettings(id, service_name) {
server: server,
telegram_id: $('#'+service_name+'_server_telegram_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(),
token: $('#token').val()
},
type: "POST",