diff --git a/api/api.py b/api/api.py
index 23722ce0..b1373f55 100644
--- a/api/api.py
+++ b/api/api.py
@@ -205,7 +205,6 @@ def haproxy_log(haproxy_id):
def get_section(haproxy_id):
if not check_login(required_service=1):
return dict(error=_error_auth)
- print(str(request.headers.get('section-name')))
return api_funct.get_section(haproxy_id)
diff --git a/app/create_db.py b/app/create_db.py
index c87900e0..2ac5351d 100644
--- a/app/create_db.py
+++ b/app/create_db.py
@@ -733,9 +733,29 @@ def update_db_v_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():
try:
- Version.update(version='7.2.2.0').execute()
+ Version.update(version='7.2.3.0').execute()
except Exception:
print('Cannot update version')
@@ -771,6 +791,7 @@ def update_all():
update_db_v_7_1_2_1()
update_db_v_7_2_0()
update_db_v_7_2_0_1()
+ update_db_v_7_2_3()
update_ver()
diff --git a/app/modules/db/channel.py b/app/modules/db/channel.py
index 450a280e..f9db813e 100644
--- a/app/modules/db/channel.py
+++ b/app/modules/db/channel.py
@@ -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
@@ -51,6 +51,13 @@ def get_user_pd_by_group(group):
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):
query = PD.select().join(Server, on=(Server.groups == PD.groups)).where(Server.ip == ip)
try:
@@ -201,3 +208,65 @@ def update_pd(token, chanel, group, pd_id):
return False
else:
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)
diff --git a/app/modules/db/checker.py b/app/modules/db/checker.py
index bb03a9e3..0c1893ad 100644
--- a/app/modules/db/checker.py
+++ b/app/modules/db/checker.py
@@ -41,11 +41,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, 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
) -> bool:
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
).where(CheckerSetting.id == setting_id)
try:
@@ -57,11 +57,11 @@ def update_haproxy_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
) -> bool:
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
).where(CheckerSetting.id == setting_id)
try:
@@ -73,10 +73,10 @@ def update_keepalived_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:
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)
try:
settings_update.execute()
diff --git a/app/modules/db/db_model.py b/app/modules/db/db_model.py
index e61af931..2e5c43a0 100644
--- a/app/modules/db/db_model.py
+++ b/app/modules/db/db_model.py
@@ -123,6 +123,16 @@ class Slack(BaseModel):
table_name = 'slack'
+class MM(BaseModel):
+ id = AutoField()
+ token = CharField()
+ chanel_name = CharField()
+ groups = IntegerField()
+
+ class Meta:
+ table_name = 'mattermost'
+
+
class PD(BaseModel):
id = AutoField()
token = CharField()
@@ -406,6 +416,7 @@ class SMON(BaseModel):
ssl_expire_date = CharField(null=True)
pd_channel_id = IntegerField(null=True)
check_type = CharField(constraints=[SQL('DEFAULT "tcp"')])
+ mm_channel_id = IntegerField(null=True)
class Meta:
table_name = 'smon'
@@ -540,6 +551,7 @@ class CheckerSetting(BaseModel):
backend_alert = IntegerField(constraints=[SQL('DEFAULT 1')])
maxconn_alert = IntegerField(constraints=[SQL('DEFAULT 1')])
pd_id = IntegerField(constraints=[SQL('DEFAULT 0')])
+ mm_id = IntegerField(constraints=[SQL('DEFAULT 0')])
class Meta:
table_name = 'checker_setting'
@@ -763,5 +775,5 @@ def create_tables():
NginxMetrics, SystemInfo, Services, UserName, GitSetting, CheckerSetting, ApacheMetrics, WafNginx, ServiceStatus,
KeepaliveRestart, PD, SmonHistory, SmonAgent, SmonTcpCheck, SmonHttpCheck, SmonPingCheck, SmonDnsCheck, S3Backup, RoxyTool,
SmonStatusPage, SmonStatusPageCheck, HaCluster, HaClusterSlave, HaClusterVip, HaClusterVirt, HaClusterService,
- HaClusterRouter]
+ HaClusterRouter, MM]
)
diff --git a/app/modules/db/smon.py b/app/modules/db/smon.py
index b9469895..46a2367b 100644
--- a/app/modules/db/smon.py
+++ b/app/modules/db/smon.py
@@ -212,11 +212,11 @@ def select_one_smon(smon_id: int, check_id: int) -> tuple:
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:
last_id = SMON.insert(
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()
except Exception as e:
out_error(e)
@@ -512,9 +512,9 @@ def select_smon_history(smon_id: int) -> object:
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(
- 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))
try:
query.execute()
diff --git a/app/modules/tools/alerting.py b/app/modules/tools/alerting.py
index a7ee6ef2..c48891ab 100644
--- a/app/modules/tools/alerting.py
+++ b/app/modules/tools/alerting.py
@@ -1,6 +1,7 @@
import json
import pika
+import requests
from flask import render_template, request, abort
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)
except Exception as e:
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:
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)
except Exception as e:
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:
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)
except Exception as e:
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:
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}')
+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:
try:
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:
if channel_sql.insert_new_pd(token, channel, group):
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()
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')
+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:
telegram = channel_sql.select_telegram(id=channel_id)
channel_name = ''
@@ -367,6 +460,16 @@ def delete_pd_channel(channel_id) -> str:
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:
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)
@@ -385,11 +488,18 @@ def update_pd(token: str, channel: str, group: str, user_id: int) -> str:
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:
delete_functions = {
"telegram": delete_telegram_channel,
"slack": delete_slack_channel,
"pd": delete_pd_channel,
+ "mm": delete_mm_channel,
}
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,
"slack": add_slack_channel,
"pd": add_pd_channel,
+ "mm": add_mm_channel,
}
try:
@@ -412,6 +523,7 @@ def update_receiver_channel(receiver_name: str, token: str, channel: str, group:
"telegram": update_telegram,
"slack": update_slack,
"pd": update_pd,
+ "mm": update_mm,
}
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,
"slack": slack_send_mess,
"pd": pd_send_mess,
+ "mm": mm_send_mess,
}
mess = 'Test message from Roxy-WI'
@@ -457,6 +570,7 @@ def load_channels():
user_group = roxywi_common.get_user_group(id=1)
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('mms', channel_sql.get_user_mm_by_group(user_group))
kwargs.setdefault('groups', group_sql.select_groups())
kwargs.setdefault('slacks', channel_sql.get_user_slack_by_group(user_group))
kwargs.setdefault('user_subscription', user_subscription)
diff --git a/app/modules/tools/checker.py b/app/modules/tools/checker.py
index 86830df8..e9c6dd84 100644
--- a/app/modules/tools/checker.py
+++ b/app/modules/tools/checker.py
@@ -30,6 +30,7 @@ def load_checker() -> str:
kwargs.setdefault('services', tools_common.get_services_status())
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('mms', channel_sql.get_user_mm_by_group(user_group))
kwargs.setdefault('groups', group_sql.select_groups())
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))
@@ -47,24 +48,24 @@ def load_checker() -> str:
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:
- if checker_sql.update_haproxy_checker_settings(email, telegram_id, slack_id, pd_id, service_alert, backend_alert,
+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, mm_id, service_alert, backend_alert,
maxconn_alert, setting_id):
return 'ok'
else:
return 'error: Cannot update Checker settings'
-def update_keepalived_settings(setting_id, email, service_alert, backend_alert, telegram_id, slack_id, pd_id) -> str:
- if checker_sql.update_keepalived_checker_settings(email, telegram_id, slack_id, pd_id, service_alert, backend_alert,
+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, mm_id, service_alert, backend_alert,
setting_id):
return 'ok'
else:
return 'error: Cannot update Checker settings'
-def update_service_settings(setting_id, email, service_alert, telegram_id, slack_id, pd_id) -> str:
- if checker_sql.update_service_checker_settings(email, telegram_id, slack_id, pd_id, service_alert, setting_id):
+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, mm_id, service_alert, setting_id):
return 'ok'
else:
return 'error: Cannot update Checker settings'
diff --git a/app/modules/tools/smon.py b/app/modules/tools/smon.py
index c52e4203..ddd4e025 100644
--- a/app/modules/tools/smon.py
+++ b/app/modules/tools/smon.py
@@ -2,6 +2,7 @@ from flask import render_template, abort
import app.modules.db.smon as smon_sql
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.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'])
slack = common.checkAjaxInput(json_data['slack'])
pd = common.checkAjaxInput(json_data['pd'])
+ mm = common.checkAjaxInput(json_data['mm'])
resolver = common.checkAjaxInput(json_data['resolver'])
record_type = common.checkAjaxInput(json_data['record_type'])
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:
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':
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'])
slack = common.checkAjaxInput(json_data['slack'])
pd = common.checkAjaxInput(json_data['pd'])
+ mm = common.checkAjaxInput(json_data['mm'])
resolver = common.checkAjaxInput(json_data['resolver'])
record_type = common.checkAjaxInput(json_data['record_type'])
packet_size = common.checkAjaxInput(json_data['packet_size'])
@@ -117,7 +120,7 @@ def update_smon(smon_id, json_data) -> str:
return f'{e}'
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':
is_edited = smon_sql.update_smonHttp(smon_id, url, body, http_method, interval, agent_id)
elif check_type == 'tcp':
@@ -300,3 +303,10 @@ def avg_status_page_status(page_id: int) -> str:
return '0'
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)
diff --git a/app/modules/tools/smon_agent.py b/app/modules/tools/smon_agent.py
index 65b19660..e1c31f4e 100644
--- a/app/modules/tools/smon_agent.py
+++ b/app/modules/tools/smon_agent.py
@@ -76,12 +76,22 @@ def update_agent(json_data):
name = common.checkAjaxInput(json_data.get("name"))
desc = common.checkAjaxInput(json_data.get("desc"))
enabled = int(json_data.get("enabled"))
+ reconfigure = int(json_data.get("reconfigure"))
try:
smon_sql.update_agent(agent_id, name, desc, enabled)
except Exception as e:
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:
try:
diff --git a/app/routes/admin/routes.py b/app/routes/admin/routes.py
index 5b4d2f56..c1ade31b 100644
--- a/app/routes/admin/routes.py
+++ b/app/routes/admin/routes.py
@@ -19,6 +19,7 @@ import app.modules.roxywi.roxy as roxy
import app.modules.roxywi.auth as roxywi_auth
import app.modules.roxywi.common as roxywi_common
import app.modules.server.server as server_mod
+import app.modules.tools.smon as smon_mod
import app.modules.tools.common as tools_common
@@ -210,4 +211,10 @@ def update_settings(param):
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)
+ if param == 'master_port':
+ try:
+ smon_mod.change_smon_port(val)
+ except Exception as e:
+ return f'{e}'
+
return 'Ok'
diff --git a/app/routes/checker/routes.py b/app/routes/checker/routes.py
index 98e884eb..f06f5fa2 100644
--- a/app/routes/checker/routes.py
+++ b/app/routes/checker/routes.py
@@ -32,18 +32,19 @@ def update_settings():
telegram_id = int(request.form.get('telegram_id'))
slack_id = int(request.form.get('slack_id'))
pd_id = int(request.form.get('pd_id'))
+ mm_id = int(request.form.get('mm_id'))
if service == 'haproxy':
maxconn_alert = int(request.form.get('maxconn'))
backend_alert = int(request.form.get('backend'))
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'):
- 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:
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')
diff --git a/app/routes/smon/routes.py b/app/routes/smon/routes.py
index 83f7c4b9..949b7f71 100644
--- a/app/routes/smon/routes.py
+++ b/app/routes/smon/routes.py
@@ -37,8 +37,9 @@ def smon_main_dashboard():
'smon_status': tools_common.is_tool_active('roxy-wi-smon'),
'user_subscription': roxywi_common.return_user_subscription(),
'telegrams': channel_sql.get_user_telegram_by_group(group_id),
- 'slacks': channel_sql.get_user_pd_by_group(group_id),
- 'pds': channel_sql.get_user_slack_by_group(group_id),
+ 'slacks': 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)
}
@@ -166,6 +167,7 @@ def check(smon_id, check_type_id):
'tg': s.smon_id.telegram_channel_id,
'slack': s.smon_id.slack_channel_id,
'pd': s.smon_id.pd_channel_id,
+ 'mm': s.smon_id.mm_channel_id,
'check_type': s.smon_id.check_type,
'group': s.smon_id.group,
}
diff --git a/app/static/js/channel.js b/app/static/js/channel.js
index 36b8b5e3..c5f76b00 100644
--- a/app/static/js/channel.js
+++ b/app/static/js/channel.js
@@ -14,6 +14,9 @@ $( function() {
$('#add-pd-button').click(function() {
addPDDialog.dialog('open');
});
+ $('#add-mm-button').click(function() {
+ addMMDialog.dialog('open');
+ });
var telegram_tabel_title = $( "#telegram-add-table-overview" ).attr('title');
var addTelegramDialog = $( "#telegram-add-table" ).dialog({
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() {
var id = $(this).attr('id').split('-');
updateReceiver(id[2], 'telegram')
diff --git a/app/templates/ajax/channels.html b/app/templates/ajax/channels.html
index 3a9ec234..13962fbb 100644
--- a/app/templates/ajax/channels.html
+++ b/app/templates/ajax/channels.html
@@ -157,7 +157,59 @@
{% endfor %}
-
+
+
+
{{lang.words.server|title()}} | -Telegram | -Slack | -PagerDuty | +Telegram | +Slack | +PagerDuty | +Mattermost | {{lang.words.email|title()}} | {{lang.words.service|title()}} | {{lang.words.backend|title()}} | @@ -76,6 +77,18 @@ {% endfor %} ++ + |
{% set id = 'haproxy_server_email-' + h.id|string() %}
{% if h.email == 1 %}
@@ -118,9 +131,10 @@
NGINX {{lang.words.servers}} |
{{lang.words.server|title()}} | -Telegram | -Slack | -PagerDuty | +Telegram | +Slack | +PagerDuty | +Mattermost | {{lang.words.email|title()}} | {{lang.words.service|title()}} | @@ -166,6 +180,18 @@ {% endfor %} + | + + |
{% set id = 'nginx_server_email-' + h.id|string() %}
{% if h.email == 1 %}
@@ -192,9 +218,10 @@
Apache {{lang.words.servers}} |
{{lang.words.server|title()}} | -Telegram | -Slack | -PagerDuty | +Telegram | +Slack | +PagerDuty | +Mattermost | {{lang.words.email|title()}} | {{lang.words.service|title()}} | @@ -240,6 +267,18 @@ {% endfor %} + | + + |
{% set id = 'apache_server_email-' + h.id|string() %}
{% if h.email == 1 %}
@@ -266,9 +305,10 @@
Keepalived {{lang.words.servers}} |
{{lang.words.server|title()}} | -Telegram | -Slack | -PagerDuty | +Telegram | +Slack | +PagerDuty | +Mattermost | {{lang.words.email|title()}} | {{lang.words.service|title()}} | {{lang.words.status|title()}} | @@ -315,6 +355,18 @@ {% endfor %} ++ + | {% set id = 'keepalived_server_email-' + h.id|string() %} {% if h.email == 1 %} diff --git a/app/templates/base.html b/app/templates/base.html index 2cdc1146..953289cc 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -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-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-apply="{{lang.words.apply|title()}}" /> + data-apply="{{lang.words.apply|title()}}" data-reconfigure="{{lang.words.reconfigure|title()}}" /> {% include 'include/main_head.html' %} diff --git a/app/templates/include/admin_settings.html b/app/templates/include/admin_settings.html index 86ba8e14..ac76f31c 100644 --- a/app/templates/include/admin_settings.html +++ b/app/templates/include/admin_settings.html @@ -47,8 +47,8 @@ {% else %} {{ input(set.param, size='25', type='password', style='width: 210px;', placeholder='******') }} {% endif %} - {% elif set.param in ('nginx_stats_port', 'session_ttl', 'token_ttl', 'haproxy_stats_port', 'haproxy_sock_port', - 'ldap_port', 'log_time_storage', 'checker_check_interval', 'port_scan_interval', 'smon_keep_history_range', + {% 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', 'agent_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') %} {{ input(set.param, value=set.value, style='width: 210px;', type='number') }} diff --git a/app/templates/include/admins_dialogs.html b/app/templates/include/admins_dialogs.html index d0e8d5bc..dcf37005 100644 --- a/app/templates/include/admins_dialogs.html +++ b/app/templates/include/admins_dialogs.html @@ -261,6 +261,42 @@ {% endif %} |