new css and functions

This commit is contained in:
Mateusz Gruszczyński
2025-02-27 00:02:29 +01:00
parent d5c8aedfd4
commit f9215590ea
6 changed files with 325 additions and 119 deletions

57
app.py
View File

@@ -66,6 +66,7 @@ class Device(db.Model):
last_log = db.Column(db.Text)
current_version = db.Column(db.String(50))
current_firmware = db.Column(db.String(50))
upgrade_firmware = db.Column(db.String(50))
use_ssl = db.Column(db.Boolean, default=False) # Czy używać SSL?
ssl_insecure = db.Column(db.Boolean, default=False) # Jeśli True nie weryfikować certyfikatu SSL
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
@@ -167,6 +168,8 @@ def check_device_update(device):
update_available = False
current_version = None
current_firmware = None
upgrade_firmware = None # Nowa zmienna
try:
app.logger.debug(f"Connecting to device {device.ip}:{device.port} using SSL: {device.use_ssl}, ssl_verify: {not device.ssl_insecure}")
api = librouteros.connect(
@@ -200,10 +203,15 @@ def check_device_update(device):
app.logger.debug(f"Routerboard response: {board_resp}")
if board_resp:
board_info = board_resp[0]
# Próba odczytania firmware z kilku możliwych kluczy
firmware = board_info.get('firmware', board_info.get('firmware-version', board_info.get('upgrade-firmware', 'N/A')))
current_firmware = firmware
log_entries.append(f"Firmware: {firmware}")
# Pobieramy oddzielnie obie wersje:
current_fw = board_info.get('firmware',
board_info.get('firmware-version',
board_info.get('current-firmware', 'N/A')))
upgrade_fw = board_info.get('upgrade-firmware', 'N/A')
current_firmware = current_fw
upgrade_firmware = upgrade_fw
log_entries.append(f"Firmware: {current_fw}")
log_entries.append(f"Upgrade Firmware: {upgrade_fw}")
# Sprawdzenie dostępnych aktualizacji
log_entries.append("Checking for updates...")
@@ -229,10 +237,12 @@ def check_device_update(device):
update_available = True
else:
log_entries.append("No updates available.")
return "\n".join(log_entries), update_available, current_version, current_firmware
# Zwracamy 5-elementową krotkę
return "\n".join(log_entries), update_available, current_version, current_firmware, upgrade_firmware
except Exception as e:
app.logger.error(f"Error connecting to device {device.ip}: {e}", exc_info=True)
return f"Error: {str(e)}", False, None, None
return f"Error: {str(e)}", False, None, None, None
def get_email_template(subject, message):
return f"""
@@ -299,19 +309,17 @@ def check_all_devices():
with app.app_context():
devices = Device.query.all()
for device in devices:
result, update_available, current_version, current_firmware = check_device_update(device)
result, update_available, current_version, current_firmware, upgrade_firmware = check_device_update(device)
device.last_log = result
device.last_check = datetime.utcnow()
device.update_required = update_available
device.current_version = current_version
device.current_firmware = current_firmware
device.upgrade_firmware = upgrade_firmware
db.session.commit()
log_entry = Log(message=result, device_id=device.id, user_id=device.user_id)
#log_message = f"Urządzenie {device.name or device.ip} - {result}"
#log_entry = Log(message=log_message, device_id=device.id, user_id=device.user_id)
db.session.add(log_entry)
db.session.commit()
# Powiadomienia, jeśli dostępna aktualizacja
if update_available:
user = device.owner
message = f"Urządzenie {device.name or device.ip} ma dostępną aktualizację."
@@ -747,12 +755,13 @@ def force_check(device_id):
if device.user_id != current_user.id:
flash("Brak dostępu.")
return redirect(url_for('devices'))
result, update_available, current_version, current_firmware = check_device_update(device)
result, update_available, current_version, current_firmware, upgrade_firmware = check_device_update(device)
device.last_log = result
device.last_check = datetime.utcnow()
device.update_required = update_available
device.current_version = current_version
device.current_firmware = current_firmware
device.upgrade_firmware = upgrade_firmware
db.session.commit()
flash("Sprawdzenie urządzenia zakończone.")
return redirect(url_for('devices'))
@@ -907,14 +916,14 @@ def update_selected_devices():
for device_id in selected_ids:
device = Device.query.get(device_id)
if device and device.user_id == current_user.id:
result, update_available, current_version, current_firmware = check_device_update(device)
result, update_available, current_version, current_firmware, upgrade_firmware = check_device_update(device)
device.last_log = result
device.last_check = datetime.utcnow()
device.update_required = update_available
device.current_version = current_version
device.current_firmware = current_firmware
device.upgrade_firmware = upgrade_firmware
db.session.commit()
# Dodaj log dla aktualizacji
log_entry = Log(message=result, device_id=device.id, user_id=device.user_id)
db.session.add(log_entry)
db.session.commit()
@@ -958,6 +967,28 @@ def force_fetch_changelogs():
flash("Changelog został całkowicie odświeżony.", "success")
return redirect(url_for('routeros_changelog'))
@app.route('/device/<int:device_id>/restart', methods=['POST'])
@login_required
def restart_device(device_id):
device = Device.query.get_or_404(device_id)
if device.user_id != current_user.id:
flash("Brak dostępu.")
return redirect(url_for('devices'))
try:
api = librouteros.connect(
host=device.ip,
username=device.device_username,
password=device.device_password,
port=device.port,
timeout=15
)
# Wysyłamy komendę reboot
list(api('/system/reboot'))
flash("Komenda reboot została wysłana.")
except Exception as e:
flash(f"Błąd podczas wysyłania komendy reboot: {e}")
return ('', 204) # Zwracamy odpowiedź bez treści dla żądania AJAX
# Zamknięcie harmonogramu przy zatrzymaniu aplikacji
atexit.register(lambda: scheduler.shutdown())