changelog parsowanie wersji

This commit is contained in:
Mateusz Gruszczyński 2025-02-27 11:20:44 +01:00
parent 9cb1c4e3a2
commit 781840066b

32
app.py
View File

@ -26,7 +26,6 @@ try:
except ImportError: except ImportError:
date_parser = None date_parser = None
# Konfiguracja aplikacji # Konfiguracja aplikacji
app = Flask(__name__) app = Flask(__name__)
app.config['SECRET_KEY'] = 'twoj-sekret-klucz' app.config['SECRET_KEY'] = 'twoj-sekret-klucz'
@ -70,7 +69,6 @@ class Device(db.Model):
use_ssl = db.Column(db.Boolean, default=False) # Czy używać SSL? 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 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) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
class Settings(db.Model): class Settings(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
pushover_user_key = db.Column(db.String(255)) pushover_user_key = db.Column(db.String(255))
@ -99,7 +97,6 @@ class UpdateHistory(db.Model):
update_type = db.Column(db.String(50)) update_type = db.Column(db.String(50))
details = db.Column(db.Text) details = db.Column(db.Text)
device = db.relationship('Device', backref='update_histories') device = db.relationship('Device', backref='update_histories')
class Anomaly(db.Model): class Anomaly(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
device_id = db.Column(db.Integer, db.ForeignKey('device.id'), nullable=True) device_id = db.Column(db.Integer, db.ForeignKey('device.id'), nullable=True)
@ -107,7 +104,6 @@ class Anomaly(db.Model):
description = db.Column(db.Text) description = db.Column(db.Text)
resolved = db.Column(db.Boolean, default=False) resolved = db.Column(db.Boolean, default=False)
device = db.relationship('Device', backref='anomalies') device = db.relationship('Device', backref='anomalies')
class ChangelogEntry(db.Model): class ChangelogEntry(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
version = db.Column(db.String(50), nullable=False) version = db.Column(db.String(50), nullable=False)
@ -125,19 +121,16 @@ def load_user(user_id):
return User.query.get(int(user_id)) return User.query.get(int(user_id))
# FUNKCJE POWIADOMIEŃ # FUNKCJE POWIADOMIEŃ
def send_pushover_notification(user, message): def send_pushover_notification(user, message):
# Sprawdzamy, czy użytkownik posiada ustawienia oraz wymagane pola
if not user.settings or not user.settings.pushover_enabled or not user.settings.pushover_user_key or not user.settings.pushover_token: if not user.settings or not user.settings.pushover_enabled or not user.settings.pushover_user_key or not user.settings.pushover_token:
return return
data = { data = {
"token": user.settings.pushover_token, # Używamy pushover_token z ustawień "token": user.settings.pushover_token,
"user": user.settings.pushover_user_key, "user": user.settings.pushover_user_key,
"message": message "message": message
} }
try: try:
r = requests.post("https://api.pushover.net/1/messages.json", data=data) r = requests.post("https://api.pushover.net/1/messages.json", data=data)
# Możesz dodać logowanie odpowiedzi, jeśli potrzebne
except Exception as e: except Exception as e:
print("Błąd przy wysyłaniu powiadomienia Pushover:", e) print("Błąd przy wysyłaniu powiadomienia Pushover:", e)
@ -168,8 +161,7 @@ def check_device_update(device):
update_available = False update_available = False
current_version = None current_version = None
current_firmware = None current_firmware = None
upgrade_firmware = None # Nowa zmienna upgrade_firmware = None
try: try:
app.logger.debug(f"Connecting to device {device.ip}:{device.port} using SSL: {device.use_ssl}, ssl_verify: {not device.ssl_insecure}") 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( api = librouteros.connect(
@ -381,6 +373,18 @@ def get_release_type(version_text):
else: else:
return "stable" return "stable"
@app.template_filter('format_version')
def format_version(value):
import re
# Poprawiona wersja obsługująca różne formaty wersji
match = re.match(r"(\d+\.\d+)(rc|beta)?(\d)(\d{4})?", value)
if match:
main_version, label, number, _ = match.groups()
if label:
return f"{main_version}{label}{number}"
return main_version
return value # Zwraca oryginalną wartość, jeśli nie pasuje
def fetch_changelogs(force=False): def fetch_changelogs(force=False):
changelog_url = "https://mikrotik.com/download/changelogs" changelog_url = "https://mikrotik.com/download/changelogs"
current_date = datetime.utcnow() current_date = datetime.utcnow()
@ -532,14 +536,6 @@ with app.app_context():
scheduler.start() scheduler.start()
# ROUTY APLIKACJI # ROUTY APLIKACJI
@app.template_filter('format_version')
def format_version(value):
import re
# Zamieniamy ciąg, który składa się z: liczba.część_1 + czterocyfrowy rok, na samą część_1.
# Przykładowo: "7.182025" => "7.18"
return re.sub(r"(\d+\.\d+)\d{4}", r"\1", value)
@app.route('/') @app.route('/')
def index(): def index():
if current_user.is_authenticated: if current_user.is_authenticated: