You've already forked haproxy-wi
mirror of
https://github.com/roxy-wi/roxy-wi.git
synced 2025-12-18 12:04:07 +08:00
Replaced raw SQL queries with ORM-based queries in metrics retrieval functions, ensuring better maintainability and readability. Simplified logic in `check_user_group_for_flask` and `get_dick_permit` by removing redundant arguments and unused paths. Adjusted the flow for consistent error handling and improved data grouping across various time ranges for metrics calculations.
861 lines
27 KiB
Python
861 lines
27 KiB
Python
from datetime import datetime
|
|
|
|
from peewee import ForeignKeyField,CharField, DateTimeField, AutoField
|
|
from playhouse.migrate import *
|
|
from playhouse.shortcuts import ReconnectMixin
|
|
from playhouse.sqlite_ext import SqliteExtDatabase
|
|
|
|
import app.modules.roxy_wi_tools as roxy_wi_tools
|
|
|
|
get_config = roxy_wi_tools.GetConfigVar()
|
|
mysql_enable = get_config.get_config_var('mysql', 'enable')
|
|
|
|
if mysql_enable == '1':
|
|
from playhouse.mysql_ext import JSONField
|
|
else:
|
|
from playhouse.sqlite_ext import JSONField
|
|
|
|
|
|
class ReconnectMySQLDatabase(ReconnectMixin, MySQLDatabase):
|
|
pass
|
|
|
|
|
|
def connect(get_migrator=None):
|
|
if mysql_enable == '1':
|
|
mysql_db = get_config.get_config_var('mysql', 'mysql_db')
|
|
kwargs = {
|
|
"user": get_config.get_config_var('mysql', 'mysql_user'),
|
|
"password": get_config.get_config_var('mysql', 'mysql_password'),
|
|
"host": get_config.get_config_var('mysql', 'mysql_host'),
|
|
"port": int(get_config.get_config_var('mysql', 'mysql_port'))
|
|
}
|
|
conn = ReconnectMySQLDatabase(mysql_db, **kwargs)
|
|
migrator = MySQLMigrator(conn)
|
|
else:
|
|
db = "/var/lib/roxy-wi/roxy-wi.db"
|
|
conn = SqliteExtDatabase(db, pragmas=(
|
|
('cache_size', -1024 * 64), # 64MB page-cache.
|
|
('journal_mode', 'wal'),
|
|
('foreign_keys', 1)
|
|
))
|
|
migrator = SqliteMigrator(conn)
|
|
if get_migrator:
|
|
return migrator
|
|
else:
|
|
return conn
|
|
|
|
|
|
class BaseModel(Model):
|
|
class Meta:
|
|
database = connect()
|
|
|
|
|
|
class User(BaseModel):
|
|
user_id = AutoField(column_name='id')
|
|
username = CharField(constraints=[SQL('UNIQUE')])
|
|
email = CharField(constraints=[SQL('UNIQUE')])
|
|
password = CharField(null=True)
|
|
role_id = CharField()
|
|
group_id = CharField()
|
|
ldap_user = IntegerField(constraints=[SQL('DEFAULT "0"')])
|
|
enabled = IntegerField(constraints=[SQL('DEFAULT "1"')])
|
|
user_services = CharField(constraints=[SQL('DEFAULT "1 2 3 4 5 6"')])
|
|
last_login_date = DateTimeField(constraints=[SQL('DEFAULT "0000-00-00 00:00:00"')])
|
|
last_login_ip = CharField(null=True)
|
|
|
|
class Meta:
|
|
table_name = 'user'
|
|
|
|
|
|
class Server(BaseModel):
|
|
server_id = AutoField(column_name='id')
|
|
hostname = CharField()
|
|
ip = CharField(constraints=[SQL('UNIQUE')])
|
|
group_id = CharField(index=True) # Added index for group_id as it's used in joins and filters
|
|
type_ip = IntegerField(constraints=[SQL('DEFAULT 0')])
|
|
enabled = IntegerField(constraints=[SQL('DEFAULT 1')], index=True) # Added index for enabled as it's used in filters
|
|
master = IntegerField(constraints=[SQL('DEFAULT 0')], index=True) # Added index for master as it's used in joins
|
|
cred_id = IntegerField(constraints=[SQL('DEFAULT 1')], index=True) # Added index for cred_id as it's used in joins
|
|
haproxy_alert = IntegerField(constraints=[SQL('DEFAULT 0')])
|
|
haproxy_metrics = IntegerField(constraints=[SQL('DEFAULT 0')])
|
|
port = IntegerField(constraints=[SQL('DEFAULT 22')])
|
|
description = CharField(null=True)
|
|
haproxy_active = IntegerField(constraints=[SQL('DEFAULT 0')], index=True) # Added index for service status
|
|
keepalived = IntegerField(constraints=[SQL('DEFAULT 0')], index=True) # Added index for service type
|
|
nginx = IntegerField(constraints=[SQL('DEFAULT 0')], index=True) # Added index for service type
|
|
haproxy = IntegerField(constraints=[SQL('DEFAULT 0')], index=True) # Added index for service type
|
|
pos = IntegerField(constraints=[SQL('DEFAULT 0')])
|
|
nginx_active = IntegerField(constraints=[SQL('DEFAULT 0')], index=True) # Added index for service status
|
|
firewall_enable = IntegerField(constraints=[SQL('DEFAULT 0')])
|
|
nginx_alert = IntegerField(constraints=[SQL('DEFAULT 0')])
|
|
protected = IntegerField(constraints=[SQL('DEFAULT 0')])
|
|
nginx_metrics = IntegerField(constraints=[SQL('DEFAULT 0')])
|
|
keepalived_active = IntegerField(constraints=[SQL('DEFAULT 0')], index=True) # Added index for service status
|
|
keepalived_alert = IntegerField(constraints=[SQL('DEFAULT 0')])
|
|
apache = IntegerField(constraints=[SQL('DEFAULT 0')], index=True) # Added index for service type
|
|
apache_active = IntegerField(constraints=[SQL('DEFAULT 0')], index=True) # Added index for service status
|
|
apache_alert = IntegerField(constraints=[SQL('DEFAULT 0')])
|
|
apache_metrics = IntegerField(constraints=[SQL('DEFAULT 0')])
|
|
|
|
class Meta:
|
|
table_name = 'servers'
|
|
|
|
|
|
class Role(BaseModel):
|
|
role_id = AutoField(column_name='id')
|
|
name = CharField(constraints=[SQL('UNIQUE')])
|
|
description = CharField()
|
|
|
|
class Meta:
|
|
table_name = 'role'
|
|
|
|
|
|
class Telegram(BaseModel):
|
|
id = AutoField()
|
|
token = CharField()
|
|
chanel_name = CharField()
|
|
group_id = IntegerField()
|
|
|
|
class Meta:
|
|
table_name = 'telegram'
|
|
|
|
|
|
class Slack(BaseModel):
|
|
id = AutoField()
|
|
token = CharField()
|
|
chanel_name = CharField()
|
|
group_id = IntegerField()
|
|
|
|
class Meta:
|
|
table_name = 'slack'
|
|
|
|
|
|
class MM(BaseModel):
|
|
id = AutoField()
|
|
token = CharField()
|
|
chanel_name = CharField()
|
|
group_id = IntegerField()
|
|
|
|
class Meta:
|
|
table_name = 'mattermost'
|
|
|
|
|
|
class PD(BaseModel):
|
|
id = AutoField()
|
|
token = CharField()
|
|
chanel_name = CharField()
|
|
group_id = IntegerField()
|
|
|
|
class Meta:
|
|
table_name = 'pd'
|
|
|
|
|
|
class Setting(BaseModel):
|
|
param = CharField()
|
|
value = CharField(null=True)
|
|
section = CharField()
|
|
desc = CharField()
|
|
group_id = IntegerField(null=True, constraints=[SQL('DEFAULT 1')])
|
|
|
|
class Meta:
|
|
table_name = 'settings'
|
|
primary_key = False
|
|
constraints = [SQL('UNIQUE (param, group_id)')]
|
|
|
|
|
|
class Groups(BaseModel):
|
|
group_id = AutoField(column_name='id')
|
|
name = CharField(constraints=[SQL('UNIQUE')])
|
|
description = CharField(null=True)
|
|
|
|
class Meta:
|
|
table_name = 'groups'
|
|
|
|
|
|
class UserGroups(BaseModel):
|
|
user_id = IntegerField()
|
|
user_group_id = IntegerField()
|
|
user_role_id = IntegerField()
|
|
|
|
class Meta:
|
|
table_name = 'user_groups'
|
|
primary_key = False
|
|
constraints = [SQL('UNIQUE (user_id, user_group_id)')]
|
|
|
|
|
|
class Cred(BaseModel):
|
|
id = AutoField()
|
|
name = CharField()
|
|
key_enabled = IntegerField(constraints=[SQL('DEFAULT 1')])
|
|
username = CharField()
|
|
password = CharField(null=True)
|
|
group_id = IntegerField(constraints=[SQL('DEFAULT 1')])
|
|
passphrase = CharField(null=True)
|
|
shared = IntegerField(constraints=[SQL('DEFAULT 0')])
|
|
private_key = TextField(null=True)
|
|
|
|
class Meta:
|
|
table_name = 'cred'
|
|
constraints = [SQL('UNIQUE (name, `group_id`)')]
|
|
|
|
|
|
class Backup(BaseModel):
|
|
id = AutoField()
|
|
server_id = CharField()
|
|
rserver = CharField()
|
|
rpath = CharField()
|
|
type = CharField(column_name='type')
|
|
time = CharField()
|
|
cred_id = IntegerField()
|
|
description = CharField(null=True)
|
|
|
|
class Meta:
|
|
table_name = 'backups'
|
|
|
|
|
|
class S3Backup(BaseModel):
|
|
id = AutoField()
|
|
server_id = CharField()
|
|
s3_server = CharField()
|
|
bucket = CharField()
|
|
secret_key = CharField()
|
|
access_key = CharField()
|
|
time = CharField()
|
|
description = CharField(null=True)
|
|
|
|
class Meta:
|
|
table_name = 's3_backups'
|
|
|
|
|
|
class Metrics(BaseModel):
|
|
serv = CharField(index=True) # Added index for serv as it's used in joins and filters
|
|
curr_con = IntegerField()
|
|
cur_ssl_con = IntegerField()
|
|
sess_rate = IntegerField()
|
|
max_sess_rate = IntegerField()
|
|
date = DateTimeField(default=datetime.now, index=True) # Added index for date as it's used in time-based queries
|
|
|
|
class Meta:
|
|
table_name = 'metrics'
|
|
primary_key = False
|
|
indexes = (
|
|
# Composite index for queries that filter by both server and date
|
|
(('serv', 'date'), False),
|
|
)
|
|
|
|
|
|
class WafMetrics(BaseModel):
|
|
serv = CharField(index=True) # Added index for serv as it's used in joins and filters
|
|
conn = IntegerField()
|
|
date = DateTimeField(default=datetime.now, index=True) # Added index for date as it's used in time-based queries
|
|
|
|
class Meta:
|
|
table_name = 'waf_metrics'
|
|
primary_key = False
|
|
indexes = (
|
|
# Composite index for queries that filter by both server and date
|
|
(('serv', 'date'), False),
|
|
)
|
|
|
|
|
|
class NginxMetrics(BaseModel):
|
|
serv = CharField(index=True) # Added index for serv as it's used in joins and filters
|
|
conn = IntegerField()
|
|
date = DateTimeField(default=datetime.now, index=True) # Added index for date as it's used in time-based queries
|
|
|
|
class Meta:
|
|
table_name = 'nginx_metrics'
|
|
primary_key = False
|
|
indexes = (
|
|
# Composite index for queries that filter by both server and date
|
|
(('serv', 'date'), False),
|
|
)
|
|
|
|
|
|
class ApacheMetrics(BaseModel):
|
|
serv = CharField(index=True) # Added index for serv as it's used in joins and filters
|
|
conn = IntegerField()
|
|
date = DateTimeField(default=datetime.now, index=True) # Added index for date as it's used in time-based queries
|
|
|
|
class Meta:
|
|
table_name = 'apache_metrics'
|
|
primary_key = False
|
|
indexes = (
|
|
# Composite index for queries that filter by both server and date
|
|
(('serv', 'date'), False),
|
|
)
|
|
|
|
|
|
class Version(BaseModel):
|
|
version = CharField()
|
|
|
|
class Meta:
|
|
table_name = 'version'
|
|
primary_key = False
|
|
|
|
|
|
class Option(BaseModel):
|
|
id = AutoField()
|
|
options = CharField()
|
|
groups = CharField()
|
|
|
|
class Meta:
|
|
table_name = 'options'
|
|
|
|
|
|
class SavedServer(BaseModel):
|
|
id = AutoField()
|
|
server = CharField()
|
|
description = CharField(null=True)
|
|
groups = CharField()
|
|
|
|
class Meta:
|
|
table_name = 'saved_servers'
|
|
|
|
|
|
class Waf(BaseModel):
|
|
server_id = IntegerField()
|
|
metrics = IntegerField()
|
|
|
|
class Meta:
|
|
table_name = 'waf'
|
|
primary_key = False
|
|
constraints = [SQL('UNIQUE (server_id)')]
|
|
|
|
|
|
class WafRules(BaseModel):
|
|
id = AutoField()
|
|
serv = CharField()
|
|
rule_name = CharField()
|
|
rule_file = CharField()
|
|
desc = TextField(null=True)
|
|
en = IntegerField(constraints=[SQL('DEFAULT 1')])
|
|
service = CharField(constraints=[SQL('DEFAULT "haproxy"')])
|
|
|
|
class Meta:
|
|
table_name = 'waf_rules'
|
|
constraints = [SQL('UNIQUE (serv, rule_name, service)')]
|
|
|
|
|
|
class PortScannerSettings(BaseModel):
|
|
server_id = IntegerField()
|
|
user_group_id = IntegerField()
|
|
enabled = IntegerField()
|
|
notify = IntegerField()
|
|
history = IntegerField()
|
|
|
|
class Meta:
|
|
table_name = 'port_scanner_settings'
|
|
primary_key = False
|
|
constraints = [SQL('UNIQUE (server_id)')]
|
|
|
|
|
|
class PortScannerPorts(BaseModel):
|
|
serv = CharField()
|
|
user_group_id = IntegerField()
|
|
port = IntegerField()
|
|
service_name = CharField()
|
|
date = DateTimeField(default=datetime.now)
|
|
|
|
class Meta:
|
|
table_name = 'port_scanner_ports'
|
|
primary_key = False
|
|
|
|
|
|
class PortScannerHistory(BaseModel):
|
|
serv = CharField()
|
|
port = IntegerField()
|
|
status = CharField()
|
|
service_name = CharField()
|
|
date = DateTimeField(default=datetime.now)
|
|
|
|
class Meta:
|
|
table_name = 'port_scanner_history'
|
|
primary_key = False
|
|
|
|
|
|
class MetricsHttpStatus(BaseModel):
|
|
serv = CharField()
|
|
ok_ans = IntegerField(column_name='2xx')
|
|
redir_ans = IntegerField(column_name='3xx')
|
|
not_found_ans = IntegerField(column_name='4xx')
|
|
err_ans = IntegerField(column_name='5xx')
|
|
date = DateTimeField(default=datetime.now)
|
|
|
|
class Meta:
|
|
table_name = 'metrics_http_status'
|
|
primary_key = False
|
|
|
|
|
|
class SMON(BaseModel):
|
|
id = AutoField()
|
|
name = CharField(null=True, index=True) # Added index for name as it's used in filters
|
|
port = IntegerField(null=True, index=True) # Added index for port as it's used in filters
|
|
status = IntegerField(constraints=[SQL('DEFAULT 1')], index=True) # Added index for status as it's used in filters
|
|
en = IntegerField(constraints=[SQL('DEFAULT 1')], index=True) # Added index for en as it's used in filters
|
|
desc = CharField(null=True)
|
|
response_time = CharField(null=True)
|
|
time_state = DateTimeField(constraints=[SQL('DEFAULT "0000-00-00 00:00:00"')], index=True) # Added index for time-based queries
|
|
group = CharField(null=True, index=True) # Added index for group as it's used in filters
|
|
http = CharField(null=True)
|
|
body = CharField(null=True)
|
|
body_status = IntegerField(constraints=[SQL('DEFAULT 1')])
|
|
telegram_channel_id = IntegerField(null=True)
|
|
user_group = IntegerField(index=True) # Added index for user_group as it's used in joins and filters
|
|
slack_channel_id = IntegerField(null=True)
|
|
ssl_expire_warning_alert = IntegerField(constraints=[SQL('DEFAULT 0')])
|
|
ssl_expire_critical_alert = IntegerField(constraints=[SQL('DEFAULT 0')])
|
|
ssl_expire_date = CharField(null=True)
|
|
pd_channel_id = IntegerField(null=True)
|
|
check_type = CharField(constraints=[SQL('DEFAULT "tcp"')], index=True) # Added index for check_type as it's used in filters
|
|
mm_channel_id = IntegerField(null=True)
|
|
|
|
class Meta:
|
|
table_name = 'smon'
|
|
constraints = [SQL('UNIQUE (name, port, http, body)')]
|
|
|
|
|
|
class Alerts(BaseModel):
|
|
message = CharField()
|
|
level = CharField(index=True) # Added index for level as it's used in filters
|
|
ip = CharField(index=True) # Added index for ip as it's used in filters
|
|
port = IntegerField()
|
|
user_group = IntegerField(constraints=[SQL('DEFAULT 1')], index=True) # Added index for user_group as it's used in joins and filters
|
|
service = CharField(index=True) # Added index for service as it's used in filters
|
|
date = DateTimeField(default=datetime.now, index=True) # Added index for date as it's used in time-based queries
|
|
|
|
class Meta:
|
|
table_name = 'alerts'
|
|
primary_key = False
|
|
indexes = (
|
|
# Composite indexes for common query patterns
|
|
(('ip', 'date'), False),
|
|
(('service', 'date'), False),
|
|
(('user_group', 'date'), False),
|
|
(('level', 'date'), False),
|
|
)
|
|
|
|
|
|
class GeoipCodes(BaseModel):
|
|
code = CharField()
|
|
name = CharField()
|
|
|
|
class Meta:
|
|
table_name = 'geoip_codes'
|
|
primary_key = False
|
|
constraints = [SQL('UNIQUE (code, name)')]
|
|
|
|
|
|
class ServiceSetting(BaseModel):
|
|
server_id = IntegerField()
|
|
service = CharField()
|
|
setting = CharField()
|
|
value = CharField()
|
|
|
|
class Meta:
|
|
table_name = 'service_settings'
|
|
primary_key = False
|
|
constraints = [SQL('UNIQUE (server_id, service, setting)')]
|
|
|
|
|
|
class ActionHistory(BaseModel):
|
|
service = CharField(null=True, index=True) # Added index for service as it's used in filters
|
|
server_id = IntegerField(null=True, index=True) # Added index for server_id as it's used in joins and filters
|
|
user_id = IntegerField(null=True, index=True) # Added index for user_id as it's used in joins and filters
|
|
action = CharField(null=True, index=True) # Added index for action as it's used in filters
|
|
ip = CharField(null=True, index=True) # Added index for ip as it's used in filters
|
|
date = DateTimeField(default=datetime.now, index=True) # Added index for date as it's used in time-based queries
|
|
server_ip = CharField(null=True, index=True) # Added index for server_ip as it's used in filters
|
|
hostname = CharField(null=True)
|
|
|
|
class Meta:
|
|
table_name = 'action_history'
|
|
primary_key = False
|
|
indexes = (
|
|
# Composite indexes for common query patterns
|
|
(('server_id', 'date'), False),
|
|
(('user_id', 'date'), False),
|
|
(('service', 'date'), False),
|
|
)
|
|
|
|
|
|
class ConfigVersion(BaseModel):
|
|
id = AutoField()
|
|
server_id = IntegerField()
|
|
user_id = IntegerField()
|
|
service = CharField()
|
|
local_path = CharField()
|
|
remote_path = CharField()
|
|
diff = TextField()
|
|
message = CharField(null=True)
|
|
date = DateTimeField(default=datetime.now)
|
|
|
|
class Meta:
|
|
table_name = 'config_versions'
|
|
|
|
|
|
class SystemInfo(BaseModel):
|
|
id = AutoField()
|
|
server_id = IntegerField()
|
|
os_info = CharField()
|
|
sys_info = CharField()
|
|
cpu = CharField()
|
|
ram = CharField()
|
|
disks = CharField()
|
|
network = TextField()
|
|
|
|
class Meta:
|
|
table_name = 'system_info'
|
|
|
|
|
|
class Services(BaseModel):
|
|
service_id = IntegerField(null=True)
|
|
service = CharField(null=True)
|
|
slug = CharField(null=True)
|
|
|
|
class Meta:
|
|
table_name = 'services'
|
|
primary_key = False
|
|
constraints = [SQL('UNIQUE (service_id, service)')]
|
|
|
|
|
|
class UserName(BaseModel):
|
|
UserName = CharField(null=True)
|
|
Status = IntegerField(constraints=[SQL('DEFAULT 0')])
|
|
Plan = CharField(null=True)
|
|
Method = CharField(null=True)
|
|
|
|
class Meta:
|
|
table_name = 'user_name'
|
|
primary_key = False
|
|
|
|
|
|
class GitSetting(BaseModel):
|
|
id = AutoField()
|
|
server_id = ForeignKeyField(Server, on_delete='Cascade')
|
|
service_id = IntegerField()
|
|
time = CharField()
|
|
repo = CharField(null=True)
|
|
branch = CharField(null=True)
|
|
cred_id = IntegerField()
|
|
description = CharField(null=True)
|
|
|
|
class Meta:
|
|
table_name = 'git_setting'
|
|
constraints = [SQL('UNIQUE (server_id, service_id)')]
|
|
|
|
|
|
class CheckerSetting(BaseModel):
|
|
id = AutoField()
|
|
server_id = ForeignKeyField(Server, on_delete='Cascade')
|
|
service_id = IntegerField()
|
|
email = IntegerField(constraints=[SQL('DEFAULT 1')])
|
|
telegram_id = IntegerField(constraints=[SQL('DEFAULT 0')])
|
|
slack_id = IntegerField(constraints=[SQL('DEFAULT 0')])
|
|
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')])
|
|
mm_id = IntegerField(constraints=[SQL('DEFAULT 0')])
|
|
|
|
class Meta:
|
|
table_name = 'checker_setting'
|
|
constraints = [SQL('UNIQUE (server_id, service_id)')]
|
|
|
|
|
|
class WafNginx(BaseModel):
|
|
id = AutoField()
|
|
server_id = ForeignKeyField(Server, on_delete='Cascade')
|
|
|
|
class Meta:
|
|
table_name = 'waf_nginx'
|
|
constraints = [SQL('UNIQUE (server_id)')]
|
|
|
|
|
|
class ServiceStatus(BaseModel):
|
|
server_id = ForeignKeyField(Server, on_delete='Cascade')
|
|
service_id = IntegerField()
|
|
service_check = CharField()
|
|
status = IntegerField(constraints=[SQL('DEFAULT 1')])
|
|
|
|
class Meta:
|
|
table_name = 'services_statuses'
|
|
constraints = [SQL('UNIQUE (server_id, service_id, service_check)')]
|
|
|
|
|
|
class KeepaliveRestart(BaseModel):
|
|
server_id = ForeignKeyField(Server, on_delete='Cascade')
|
|
service = CharField()
|
|
restarted = IntegerField(constraints=[SQL('DEFAULT 1')])
|
|
|
|
class Meta:
|
|
table_name = 'keepaplive_restarted'
|
|
constraints = [SQL('UNIQUE (server_id, service)')]
|
|
|
|
|
|
class SmonHistory(BaseModel):
|
|
smon_id = ForeignKeyField(SMON, on_delete='Cascade')
|
|
check_id = IntegerField()
|
|
response_time = FloatField()
|
|
status = IntegerField()
|
|
mes = CharField()
|
|
date = DateTimeField(default=datetime.now)
|
|
|
|
class Meta:
|
|
table_name = 'smon_history'
|
|
primary_key = False
|
|
|
|
|
|
class SmonAgent(BaseModel):
|
|
id = AutoField()
|
|
server_id = ForeignKeyField(Server, on_delete='Cascade')
|
|
name = CharField()
|
|
uuid = CharField()
|
|
enabled = IntegerField(constraints=[SQL('DEFAULT 1')])
|
|
desc = CharField()
|
|
|
|
class Meta:
|
|
table_name = 'smon_agents'
|
|
|
|
|
|
class SmonTcpCheck(BaseModel):
|
|
smon_id = ForeignKeyField(SMON, on_delete='Cascade', unique=True)
|
|
ip = CharField()
|
|
port = IntegerField()
|
|
interval = IntegerField(constraints=[SQL('DEFAULT 120')])
|
|
agent_id = IntegerField(constraints=[SQL('DEFAULT 1')])
|
|
|
|
class Meta:
|
|
table_name = 'smon_tcp_check'
|
|
primary_key = False
|
|
|
|
|
|
class SmonHttpCheck(BaseModel):
|
|
smon_id = ForeignKeyField(SMON, on_delete='Cascade', unique=True)
|
|
url = CharField()
|
|
method = CharField(constraints=[SQL('DEFAULT "get"')])
|
|
accepted_status_codes = CharField(constraints=[SQL('DEFAULT "200"')])
|
|
body = CharField(null=True)
|
|
interval = IntegerField(constraints=[SQL('DEFAULT 120')])
|
|
agent_id = IntegerField(constraints=[SQL('DEFAULT 1')])
|
|
|
|
class Meta:
|
|
table_name = 'smon_http_check'
|
|
primary_key = False
|
|
|
|
|
|
class SmonPingCheck(BaseModel):
|
|
smon_id = ForeignKeyField(SMON, on_delete='Cascade', unique=True)
|
|
ip = CharField()
|
|
packet_size = IntegerField(constraints=[SQL('DEFAULT 56')])
|
|
interval = IntegerField(constraints=[SQL('DEFAULT 120')])
|
|
agent_id = IntegerField(constraints=[SQL('DEFAULT 1')])
|
|
|
|
class Meta:
|
|
table_name = 'smon_ping_check'
|
|
primary_key = False
|
|
|
|
|
|
class SmonDnsCheck(BaseModel):
|
|
smon_id = ForeignKeyField(SMON, on_delete='Cascade', unique=True)
|
|
ip = CharField()
|
|
port = IntegerField(constraints=[SQL('DEFAULT 53')])
|
|
resolver = CharField()
|
|
record_type = CharField()
|
|
interval = IntegerField(constraints=[SQL('DEFAULT 120')])
|
|
agent_id = IntegerField(constraints=[SQL('DEFAULT 1')])
|
|
|
|
class Meta:
|
|
table_name = 'smon_dns_check'
|
|
primary_key = False
|
|
|
|
|
|
class SmonStatusPage(BaseModel):
|
|
id = AutoField()
|
|
name = CharField()
|
|
slug = CharField(unique=True)
|
|
desc = CharField(null=True)
|
|
group_id = IntegerField()
|
|
|
|
class Meta:
|
|
table_name = 'smon_status_pages'
|
|
|
|
|
|
class SmonStatusPageCheck(BaseModel):
|
|
page_id = ForeignKeyField(SmonStatusPage, on_delete='Cascade')
|
|
check_id = ForeignKeyField(SMON, on_delete='Cascade')
|
|
|
|
class Meta:
|
|
table_name = 'smon_status_page_checks'
|
|
primary_key = False
|
|
|
|
|
|
class RoxyTool(BaseModel):
|
|
id = AutoField()
|
|
name = CharField()
|
|
current_version = CharField()
|
|
new_version = CharField()
|
|
is_roxy = IntegerField()
|
|
desc = CharField()
|
|
|
|
class Meta:
|
|
table_name = 'roxy_tools'
|
|
constraints = [SQL('UNIQUE (name)')]
|
|
|
|
|
|
class HaCluster(BaseModel):
|
|
id = AutoField()
|
|
name = CharField()
|
|
syn_flood = IntegerField(constraints=[SQL('DEFAULT "0"')])
|
|
group_id = IntegerField()
|
|
description = CharField()
|
|
pos = IntegerField(constraints=[SQL('DEFAULT "0"')])
|
|
|
|
class Meta:
|
|
table_name = 'ha_clusters'
|
|
|
|
|
|
class HaClusterRouter(BaseModel):
|
|
id = AutoField()
|
|
cluster_id = ForeignKeyField(HaCluster, on_delete='Cascade')
|
|
default = IntegerField(constraints=[SQL('DEFAULT "0"')])
|
|
|
|
class Meta:
|
|
table_name = 'ha_cluster_routers'
|
|
|
|
|
|
class HaClusterSlave(BaseModel):
|
|
id = AutoField()
|
|
cluster_id = ForeignKeyField(HaCluster, on_delete='Cascade')
|
|
server_id = ForeignKeyField(Server, on_delete='Cascade')
|
|
master = IntegerField(constraints=[SQL('DEFAULT "0"')])
|
|
eth = CharField(constraints=[SQL('DEFAULT "eth0"')])
|
|
router_id = ForeignKeyField(HaClusterRouter, on_delete='Cascade')
|
|
|
|
class Meta:
|
|
table_name = 'ha_cluster_slaves'
|
|
constraints = [SQL('UNIQUE (cluster_id, server_id, router_id)')]
|
|
|
|
|
|
class HaClusterVip(BaseModel):
|
|
id = AutoField()
|
|
cluster_id = ForeignKeyField(HaCluster, on_delete='Cascade')
|
|
router_id = ForeignKeyField(HaClusterRouter, on_delete='Cascade')
|
|
return_master = IntegerField(constraints=[SQL('DEFAULT "0"')])
|
|
vip = CharField()
|
|
use_src = IntegerField(constraints=[SQL('DEFAULT "0"')])
|
|
|
|
class Meta:
|
|
table_name = 'ha_cluster_vips'
|
|
constraints = [SQL('UNIQUE (cluster_id, vip)')]
|
|
|
|
|
|
class HaClusterVirt(BaseModel):
|
|
cluster_id = ForeignKeyField(HaCluster, on_delete='Cascade')
|
|
virt_id = ForeignKeyField(Server, on_delete='Cascade')
|
|
vip_id = ForeignKeyField(HaClusterVip, on_delete='Cascade')
|
|
|
|
class Meta:
|
|
table_name = 'ha_cluster_virts'
|
|
primary_key = False
|
|
constraints = [SQL('UNIQUE (cluster_id, virt_id)')]
|
|
|
|
|
|
class HaClusterService(BaseModel):
|
|
cluster_id = ForeignKeyField(HaCluster, on_delete='Cascade')
|
|
service_id = CharField()
|
|
|
|
class Meta:
|
|
table_name = 'ha_cluster_services'
|
|
primary_key = False
|
|
constraints = [SQL('UNIQUE (cluster_id, service_id)')]
|
|
|
|
|
|
class UDPBalancer(BaseModel):
|
|
id = AutoField()
|
|
name = CharField()
|
|
cluster_id = IntegerField(null=True)
|
|
server_id = IntegerField(null=True)
|
|
vip = CharField()
|
|
port = IntegerField()
|
|
group_id = ForeignKeyField(Groups)
|
|
config = CharField()
|
|
description = CharField()
|
|
lb_algo = CharField(constraints=[SQL('DEFAULT "rr"')])
|
|
check_enabled = IntegerField(constraints=[SQL('DEFAULT "1"')])
|
|
delay_loop = IntegerField(constraints=[SQL('DEFAULT "10"')])
|
|
delay_before_retry = IntegerField(constraints=[SQL('DEFAULT "10"')])
|
|
retry = IntegerField(constraints=[SQL('DEFAULT "3"')])
|
|
is_checker = IntegerField(constraints=[SQL('DEFAULT "0"')])
|
|
|
|
class Meta:
|
|
table_name = 'udp_balancers'
|
|
constraints = [SQL('UNIQUE (vip, port)')]
|
|
|
|
|
|
class HaproxySection(BaseModel):
|
|
id = AutoField
|
|
server_id = ForeignKeyField(Server, on_delete='Cascade')
|
|
type = CharField()
|
|
name = CharField()
|
|
config = JSONField()
|
|
|
|
class Meta:
|
|
table_name = 'haproxy_sections'
|
|
constraints = [SQL('UNIQUE (server_id, type, name)')]
|
|
|
|
|
|
class NginxSection(BaseModel):
|
|
id = AutoField
|
|
server_id = ForeignKeyField(Server, on_delete='Cascade')
|
|
type = CharField()
|
|
name = CharField()
|
|
config = JSONField()
|
|
|
|
class Meta:
|
|
table_name = 'nginx_sections'
|
|
constraints = [SQL('UNIQUE (server_id, type, name)')]
|
|
|
|
|
|
class LetsEncrypt(BaseModel):
|
|
id = AutoField
|
|
server_id = ForeignKeyField(Server, null=True, on_delete='SET NULL')
|
|
domains = CharField()
|
|
email = CharField()
|
|
api_key = CharField()
|
|
api_token = CharField()
|
|
type = CharField()
|
|
description = CharField()
|
|
|
|
class Meta:
|
|
table_name = 'lets_encrypt'
|
|
|
|
|
|
class InstallationTasks(BaseModel):
|
|
id = AutoField
|
|
service_name = CharField()
|
|
status = CharField(default='created')
|
|
error = CharField(null=True)
|
|
start_date = DateTimeField(default=datetime.now)
|
|
finish_date = DateTimeField(default=datetime.now)
|
|
group_id = ForeignKeyField(Groups, null=True, on_delete='SET NULL')
|
|
user_id = ForeignKeyField(User, null=True, on_delete='SET NULL')
|
|
server_ids = JSONField(null=True)
|
|
|
|
class Meta:
|
|
table_name = 'installation_tasks'
|
|
|
|
|
|
def create_tables():
|
|
conn = connect()
|
|
with conn:
|
|
conn.create_tables(
|
|
[User, Server, Role, Telegram, Slack, Groups, UserGroups, ConfigVersion, Setting, RoxyTool, Alerts,
|
|
Cred, Backup, Metrics, WafMetrics, Version, Option, SavedServer, Waf, ActionHistory, PortScannerSettings,
|
|
PortScannerPorts, PortScannerHistory, ServiceSetting, MetricsHttpStatus, SMON, WafRules, GeoipCodes,
|
|
NginxMetrics, SystemInfo, Services, UserName, GitSetting, CheckerSetting, ApacheMetrics, WafNginx, ServiceStatus,
|
|
KeepaliveRestart, PD, SmonHistory, SmonAgent, SmonTcpCheck, SmonHttpCheck, SmonPingCheck, SmonDnsCheck, S3Backup,
|
|
SmonStatusPage, SmonStatusPageCheck, HaCluster, HaClusterSlave, HaClusterVip, HaClusterVirt, HaClusterService,
|
|
HaClusterRouter, MM, UDPBalancer, HaproxySection, LetsEncrypt, NginxSection, InstallationTasks]
|
|
)
|