Skip to content

Commit c95dfc3

Browse files
feat: Update models and routes for SMTP configuration, application general settings, user dashboard settings, dashboard network settings, network speed test result, and feature toggle settings
1 parent c2d9cce commit c95dfc3

28 files changed

Lines changed: 301 additions & 280 deletions

app.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from src.config import app
33
from src import routes
44
from src.utils import render_template_from_file, get_flask_memory_usage, cpu_usage_percent, get_memory_percent
5-
from src.models import User
5+
from src.models import UserProfile
66
from src.scripts.email_me import send_smpt_email
77

88
def register_routes():
@@ -20,7 +20,7 @@ def register_routes():
2020

2121
def server_up_email():
2222
with app.app_context():
23-
admin_emails = [user.email for user in User.query.filter_by(user_level="admin", receive_email_alerts=True).all()]
23+
admin_emails = [user.email for user in UserProfile.query.filter_by(user_level="admin", receive_email_alerts=True).all()]
2424
if admin_emails:
2525
subject = "SystemGuard Server Started"
2626
context = {

src/models.py

Lines changed: 0 additions & 176 deletions
This file was deleted.

src/models/__init__.py

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
from src.config import db, app
2+
from src.models.user_card_settings import UserCardSettings
3+
from src.models.dashboard_netowrk import DashboardNetworkSettings
4+
from src.models.user_dashboard_settings import UserDashboardSettings
5+
from src.models.feature_toggle_settings import FeatureToggleSettings
6+
from src.models.application_general_settings import ApplicationGeneralSettings
7+
from src.models.smtp_configuration import SMTPSettings
8+
from src.models.network_speed_test_result import NetworkSpeedTestResult
9+
from src.models.system_information import SystemInformation
10+
from src.models.user_profile import UserProfile
11+
from flask_login import current_user
12+
from werkzeug.security import generate_password_hash
13+
import json
14+
15+
16+
17+
with app.app_context():
18+
print("Creating tables")
19+
db.create_all()
20+
21+
# initialize default dashboard settings for users
22+
users = UserProfile.query.all()
23+
for user in users:
24+
if not user.dashboard_settings:
25+
db.session.add(UserDashboardSettings(user_id=user.id))
26+
db.session.add(UserCardSettings(user_id=user.id))
27+
db.session.add(FeatureToggleSettings(user_id=user.id))
28+
db.session.commit()
29+
30+
pre_defined_users_json = "src/assets/predefine_user.json"
31+
with open(pre_defined_users_json, "r") as file:
32+
pre_defined_users = json.load(file)
33+
for user in pre_defined_users:
34+
if not UserProfile.query.filter_by(user_level=user["user_level"]).first():
35+
hashed_password = generate_password_hash(user["password"])
36+
user = UserProfile(
37+
username=user["username"],
38+
email=user["email"],
39+
password=hashed_password,
40+
user_level=user["user_level"],
41+
receive_email_alerts=user["receive_email_alerts"],
42+
profession=user["profession"],
43+
)
44+
45+
db.session.add(user)
46+
db.session.commit()
47+
48+
# Initialize default settings
49+
general_settings = ApplicationGeneralSettings.query.first()
50+
if not general_settings:
51+
db.session.add(ApplicationGeneralSettings())
52+
db.session.commit()
53+
54+
55+
# ibject for all templates
56+
@app.context_processor
57+
def inject_settings():
58+
if current_user.is_anonymous:
59+
return dict(settings=None, card_settings=None)
60+
general_settings = ApplicationGeneralSettings.query.first()
61+
card_settings = UserCardSettings.query.filter_by(user_id=current_user.id).first()
62+
settings = UserDashboardSettings.query.filter_by(
63+
user_id=current_user.id
64+
).first() # Retrieve user-specific settings from DB
65+
feature_toggles_settings = FeatureToggleSettings.query.filter_by(
66+
user_id=current_user.id
67+
).first()
68+
all_settings = dict(
69+
settings=settings,
70+
general_settings=general_settings,
71+
card_settings=card_settings,
72+
feature_toggles_settings=feature_toggles_settings,
73+
)
74+
return all_settings
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from src.config import db
2+
3+
class ApplicationGeneralSettings(db.Model):
4+
__tablename__ = 'general_settings'
5+
6+
id = db.Column(db.Integer, primary_key=True)
7+
enable_alerts = db.Column(db.Boolean, default=True)
8+
timezone = db.Column(db.String(50), default='UTC')
9+
enable_cache = db.Column(db.Boolean, default=False)
10+

src/models/dashboard_netowrk.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from src.config import db
2+
3+
4+
class DashboardNetworkSettings(db.Model):
5+
__tablename__ = "DashboardGroup"
6+
id = db.Column(db.Integer, primary_key=True)
7+
name = db.Column(db.String(50), unique=True, nullable=False)
8+
description = db.Column(db.String(150), nullable=True)
9+
ip_address = db.Column(db.String(50), nullable=True)
10+
port = db.Column(db.Integer, nullable=True)
11+
link = db.Column(db.String(150), nullable=True)
12+
13+
def __repr__(self):
14+
return f"<DashboardGroup {self.name}, {self.description}>"
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from src.config import db
2+
3+
class FeatureToggleSettings(db.Model):
4+
__tablename__ = 'feature_toggle_settings'
5+
6+
id = db.Column(db.Integer, primary_key=True)
7+
user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
8+
9+
# Feature Toggles
10+
is_cpu_info_enabled = db.Column(db.Boolean, default=True)
11+
is_memory_info_enabled = db.Column(db.Boolean, default=True)
12+
is_disk_info_enabled = db.Column(db.Boolean, default=True)
13+
is_network_info_enabled = db.Column(db.Boolean, default=True)
14+
is_process_info_enabled = db.Column(db.Boolean, default=True)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import datetime
2+
3+
from src.config import db
4+
5+
class NetworkSpeedTestResult(db.Model):
6+
__tablename__ = "network_speed_test_result"
7+
id = db.Column(db.Integer, primary_key=True)
8+
download_speed = db.Column(db.String(50))
9+
upload_speed = db.Column(db.String(50))
10+
ping = db.Column(db.String(50))
11+
timestamp = db.Column(db.DateTime, default=datetime.datetime.now())
12+
13+
def __repr__(self):
14+
return (
15+
f"<SpeedTestResult {self.download_speed}, {self.upload_speed}, {self.ping}>"
16+
)

src/models/smtp_configuration.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from src.config import db
2+
3+
4+
class SMTPSettings(db.Model):
5+
__tablename__ = "smtp_settings"
6+
id = db.Column(db.Integer, primary_key=True)
7+
email = db.Column(db.String(150), unique=True, nullable=False)
8+
password = db.Column(db.String(150), nullable=False)

src/models/system_information.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import datetime
2+
3+
from src.config import db
4+
5+
6+
class SystemInformation(db.Model):
7+
__tablename__ = "system_information"
8+
id = db.Column(db.Integer, primary_key=True)
9+
username = db.Column(db.String(50))
10+
cpu_percent = db.Column(db.Float)
11+
memory_percent = db.Column(db.Float)
12+
disk_usage = db.Column(db.Float)
13+
battery_percent = db.Column(db.Float)
14+
cpu_core = db.Column(db.Integer)
15+
boot_time = db.Column(db.String(50))
16+
network_sent = db.Column(db.Float)
17+
network_received = db.Column(db.Float)
18+
process_count = db.Column(db.Integer)
19+
swap_memory = db.Column(db.Float)
20+
uptime = db.Column(db.String(50))
21+
ipv4_connections = db.Column(db.String(50))
22+
dashboard_memory_usage = db.Column(db.String(50))
23+
timestamp = db.Column(db.DateTime, default=datetime.datetime.now())
24+
cpu_frequency = db.Column(db.String(50))
25+
current_temp = db.Column(db.String(50))
26+
27+
def __repr__(self):
28+
return f"<SystemInfo {self.username}, {self.cpu_percent}, {self.memory_percent}, {self.disk_usage}, {self.battery_percent}, {self.cpu_core}, {self.boot_time}, {self.network_sent}, {self.network_received}, {self.process_count}, {self.swap_memory}, {self.uptime}, {self.ipv4_connections}, {self.ipv6_connections}, {self.dashboard_memory_usage}>"

src/models/user_card_settings.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from src.config import db
2+
3+
4+
class UserCardSettings(db.Model):
5+
__tablename__ = "user_card_settings"
6+
7+
id = db.Column(db.Integer, primary_key=True)
8+
user_id = db.Column(db.Integer, db.ForeignKey("users.id"))
9+
10+
# Card Toggles
11+
is_user_card_enabled = db.Column(db.Boolean, default=True)
12+
is_server_card_enabled = db.Column(db.Boolean, default=True)
13+
is_battery_card_enabled = db.Column(db.Boolean, default=True)
14+
is_cpu_core_card_enabled = db.Column(db.Boolean, default=True)
15+
is_cpu_usage_card_enabled = db.Column(db.Boolean, default=True)
16+
is_cpu_temp_card_enabled = db.Column(db.Boolean, default=True)
17+
is_dashboard_memory_card_enabled = db.Column(db.Boolean, default=True)
18+
is_memory_usage_card_enabled = db.Column(db.Boolean, default=True)
19+
is_disk_usage_card_enabled = db.Column(db.Boolean, default=True)
20+
is_system_uptime_card_enabled = db.Column(db.Boolean, default=True)
21+
is_network_statistic_card_enabled = db.Column(db.Boolean, default=True)
22+
is_speedtest_enabled = db.Column(db.Boolean, default=True)

0 commit comments

Comments
 (0)