new css and functions
This commit is contained in:
57
app.py
57
app.py
@@ -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())
|
||||
|
||||
|
Reference in New Issue
Block a user