Compare commits

...

10 Commits

Author SHA1 Message Date
312e4e713f docker refresh 2026-03-25 14:01:26 +01:00
7d5d3dc0c8 script német verzio 2026-03-25 11:51:13 +01:00
8167a3ffff neue script, check file age 2026-03-25 11:34:33 +01:00
3e68e96c8a script de verzio 2026-03-25 10:18:00 +01:00
3b9b7f8789 1 2026-03-25 10:09:23 +01:00
62f739344c . 2026-03-25 10:09:04 +01:00
9b913a48bb képek sharepointhoz pl 2026-03-25 08:31:57 +01:00
c1f1b48f6b . 2026-03-24 16:17:51 +01:00
acd7daf36f dokument update 2026-03-24 15:56:24 +01:00
36ac72ec82 neu diabetes dokument 2026-03-24 14:49:43 +01:00
17 changed files with 445 additions and 85 deletions

View File

@@ -1,61 +1,56 @@
# Systemdokumentation: APS-SFTP01 Datenaustausch-Server # Systemdokumentation: APS-SFTP01 Datenaustausch-Server
Dieses Dokument beschreibt die Funktionsweise, das Berechtigungssystem und die Zugriffspfade des Servers **APS-SFTP01 (10.102.1.202)**. Dieses Dokument beschreibt die Funktionsweise, das Berechtigungssystem und die Zugriffspfade des Servers **APS-SFTP01 (10.102.1.202)**. Der Server dient zwei getrennten Importprozessen.
## 1. Systemübersicht ## 1. Systemübersicht
Der Server dient primär der Bereitstellung der **Amondis Schnittstelle**. Er bietet zwei parallele Zugriffsmethoden auf dieselben Daten: Der Server fungiert als zentraler Datenaustauschpunkt für die Systeme Bremen und Amondis:
1. **Samba (SMB):** Windows-Freigabe für das interne Netzwerk. 1. **Bremen-Mave Import:** Empfang externer Daten über SFTP.
2. **SFTP:** Sicherer Datentransfer über eine verschlüsselte SSH-Verbindung für externe oder automatisierte Übertragungen. 2. **Amondis-Mave Import:** Empfang externer Daten über SMB (Samba), und import nach Mave mit SFTP Protokolle.
## 2. Benutzer und Zugriff ## 2. Benutzer und Zugriff
| Benutzer | Typ | Shell | Aufgabe | ┌──────────────────┬──────────────┬───────────────┬─────────────────┬─────────────────────────────┐
| :--- | :--- | :--- | :--- | │ Benutzer │ Prozess │ Typ │ Shell │ Aufgabe │
| `mave-amondis` | SFTP/SMB | `/sbin/nologin` | Datenupload und Verarbeitung | ├──────────────────┼──────────────┼───────────────┼─────────────────┼─────────────────────────────┤
│ mave-sftp │ Bremen-Mave │ Nur SFTP │ /sbin/nologin │ Import von Bremen-Daten │
*Hinweis: Der Benutzer hat keine Berechtigung für eine interaktive SSH-Anmeldung (Terminal).* │ mave-amondis │ Amondis-Mave │ SFTP & SMB │ /sbin/nologin │ Import von Amondis-Daten │
└──────────────────┴──────────────┴───────────────┴─────────────────┴─────────────────────────────┘
*Hinweis: Keiner der Benutzer ist für eine interaktive SSH-Anmeldung (Terminal) berechtigt.*
## 3. Verzeichnisstruktur und Berechtigungen ## 3. Verzeichnisstruktur und Berechtigungen
Aufgrund der SFTP-Sicherheitsanforderungen (Chroot) und der gemeinsamen Schreibrechte ist die Struktur wie folgt aufgebaut:
| Pfad | Besitzer | Berechtigung | Rolle | ### Bremen-Mave Import (mave-sftp)
| :--- | :--- | :--- | :--- | ┌────────────────────────────────────────┬─────────────────────┬──────────────┬──────────────────────────────────┐
| `/home/mave-amondis` | `root:root` | `755` | SFTP Home (nicht beschreibbar) | │ Pfad │ Besitzer │ Berechtigung │ Rolle │
| `/home/mave-amondis/Schnittstellen` | `root:root` | `755` | **SFTP Chroot-Gefängnis** | ├────────────────────────────────────────┼─────────────────────┼──────────────┼──────────────────────────────────┤
| `/home/mave-amondis/Schnittstellen/Amondis` | `mave-amondis:mave-amondis` | `775` | Beschreibbares Arbeitsverzeichnis | /home/mave-sftp │ root:root │ 755 │ SFTP Chroot-Gefängnis │
| `/home/mave-amondis/Schnittstellen/Amondis/APO` | `mave-amondis:mave-amondis` | `775` | Konkreter Datenübergabepunkt | /home/mave-sftp/Schnittstellen/Bremen │ mave-sftp:mave-sftp │ 775 │ Beschreibbarer Ordner für Bremen │
└────────────────────────────────────────┴─────────────────────┴──────────────┴──────────────────────────────────┘
### Amondis-Mave Import (mave-amondis)
┌───────────────────────────────────────────────┬───────────────────────────┬──────────────┬─────────────────────────────┐
│ Pfad │ Besitzer │ Berechtigung │ Rolle │
├───────────────────────────────────────────────┼───────────────────────────┼──────────────┼─────────────────────────────┤
│ /home/mave-amondis │ root:root │ 755 │ SFTP Home (nicht schreibbar)|
│ /home/mave-amondis/Schnittstellen │ root:root │ 755 │ SFTP Chroot-Gefängnis │
│ /home/mave-amondis/Schnittstellen/Amondis/APO │ mave-amondis:mave-amondis │ 775 │ Beschreibbares Verzeichnis │
└───────────────────────────────────────────────┴───────────────────────────┴──────────────┴─────────────────────────────┘
## 4. Netzwerkzugriff ## 4. Netzwerkzugriff
### SMB (Windows Freigabe) ### SMB (Windows Freigabe)
* **Pfad:** `\\10.102.1.202\mave-amondis\Schnittstellen\Amondis\APO` * **Amondis-Pfad:** `\\10.102.1.202\mave-amondis\Schnittstellen\Amondis\APO`
* **Konfiguration:** Samba verwendet die Einstellung `force user = mave-amondis`. Dadurch wird jede über SMB erstellte Datei automatisch dem Benutzer `mave-amondis` zugewiesen, um Berechtigungskonflikte zu vermeiden. * **Funktionsweise:** Samba verwendet die Einstellung `force user = mave-amondis`, um Berechtigungskonflikte zu vermeiden.
### SFTP (Secure FTP) ### SFTP (Secure FTP)
* **Host:** `10.102.1.202` * **Bremen-Verbindung:** `sftp://mave-sftp@10.102.1.202` (sieht nach der Anmeldung den Ordner `mave-amondis\Schnittstellen\Bremen`).
* **Port:** `22` (SSH Standard) * **Amondis-Verbindung:** `sftp://mave-amondis@10.102.1.202` (sieht nach der Anmeldung den Ordner `Amondis\APO`).
* **Funktionsweise:** Nach der Anmeldung sieht der Benutzer sofort den Inhalt des Ordners `Schnittstellen` (d.h. den Ordner `Amondis`). Ein Wechsel in höhere Verzeichnisebenen ist nicht möglich.
## 5. Automatische Benachrichtigungen (Monitoring) ## 5. Automatische Benachrichtigungen (Monitoring)
Auf dem Server läuft ein benutzerdefiniertes PAM-Skript (Pluggable Authentication Module): Bei jeder erfolgreichen Anmeldung (für beide Benutzer) wird eine E-Mail-Benachrichtigung an den Administrator gesendet (`i.meszely@antares-apo.de`).
* **Skript-Pfad:** `/usr/local/bin/sftp-notify.sh`
* **Funktion:** Sendet bei jeder erfolgreichen Anmeldung (SFTP und SSH) eine E-Mail an den Administrator (`i.meszely@antares-apo.de`).
* **Log-Datei:** `/tmp/sftp-notify.log`
## 6. Wartungsbefehle (Cheat Sheet) * **Script-Speicherort:** `/usr/local/sbin/sftp-notify.sh`
* **Funktionsweise:** Das Script wird durch das PAM-System (Pluggable Authentication Modules) bei jedem `open_session`-Ereignis aufgerufen. Es unterscheidet zwischen SFTP (eingeschränkt) und interaktiven SSH-Anmeldungen anhand der Benutzer-Shell und versendet die Details (Benutzer, Remote-IP, Zeitstempel) per E-Mail.
### Berechtigungen reparieren (falls erforderlich): * **Logdatei:** `/tmp/sftp-notify.log` (für das Debugging).
```bash
sudo chown root:root /home/mave-amondis /home/mave-amondis/Schnittstellen
sudo chown -R mave-amondis:mave-amondis /home/mave-amondis/Schnittstellen/Amondis
sudo chmod 755 /home/mave-amondis /home/mave-amondis/Schnittstellen
sudo chmod -R 775 /home/mave-amondis/Schnittstellen/Amondis
```
### Dienste neu starten:
```bash
sudo systemctl restart smb nmb # Samba
sudo systemctl restart ssh # SFTP/SSH
```
--- ---
*Erstellt am: 24. März 2026* *Aktualisiert am: 25. März 2026*

View File

@@ -1,61 +1,56 @@
# Rendszerdokumentáció: APS-SFTP01 Adatcsere Szerver # Rendszerdokumentáció: APS-SFTP01 Adatcsere Szerver
Ez a dokumentum az **APS-SFTP01 (10.102.1.202)** szerver működését, jogosultsági rendszerét és elérési útjait foglalja össze. Ez a dokumentum az **APS-SFTP01 (10.102.1.202)** szerver működését, jogosultsági rendszerét és elérési útjait foglalja össze. A szerver két elkülönített import folyamatot szolgál ki.
## 1. Rendszer Áttekintés ## 1. Rendszer Áttekintés
A szerver elsődleges feladata az **Amondis Schnittstelle** (interfész) kiszolgálása. Két párhuzamos elérési módot biztosít ugyanazokhoz az adatokhoz: A szerver központi adatcsere pontként funkcionál a Bremen és az Amondis rendszerek felé:
1. **Samba (SMB):** Belső hálózaton keresztüli Windows megosztás. 1. **Bremen-Mave Import:** lső adatok fogadása SFTP-n keresztül.
2. **SFTP:** lső vagy automatizált adatátvitel biztonságos SSH kapcsolaton keresztül. 2. **Amondis-Mave Import:** Belső és külső adatcsere SMB (Samba) és SFTP protokollokon.
## 2. Felhasználók és Hozzáférés ## 2. Felhasználók és Hozzáférés
| Felhasználó | Típus | Shell | Feladat | ┌──────────────────┬──────────────┬───────────────┬─────────────────┬───────────────────────────┐
| :--- | :--- | :--- | :--- | │ Felhasználó │ Folyamat │ Típus │ Shell │ Feladat │
| `mave-amondis` | SFTP/SMB | `/sbin/nologin` | Adatfeltöltés és feldolgozás | ├──────────────────┼──────────────┼───────────────┼─────────────────┼───────────────────────────┤
│ mave-sftp │ Bremen-Mave │ Csak SFTP │ /sbin/nologin │ Bremen adatok importálása │
*Megjegyzés: A felhasználó interaktív SSH (terminál) belépésre nem jogosult.* │ mave-amondis │ Amondis-Mave │ SFTP & SMB │ /sbin/nologin │ Amondis adatok kezelése │
└──────────────────┴──────────────┴───────────────┴─────────────────┴───────────────────────────┘
*Megjegyzés: Egyik felhasználó sem jogosult interaktív SSH (terminál) belépésre.*
## 3. Könyvtárstruktúra és Jogosultságok ## 3. Könyvtárstruktúra és Jogosultságok
Az SFTP biztonsági előírásai (Chroot) és a közös írhatóság miatt a struktúra az alábbi:
| Elérési út | Tulajdonos | Jogosultság | Szerep | ### Bremen-Mave Import (mave-sftp)
| :--- | :--- | :--- | :--- | ┌────────────────────────────┬─────────────────────┬─────────────┬─────────────────────────────────┐
| `/home/mave-amondis` | `root:root` | `755` | SFTP Home (nem írható) | │ Elérési út │ Tulajdonos │ Jogosultság │ Szerep │
| `/home/mave-amondis/Schnittstellen` | `root:root` | `755` | **SFTP Chroot Börtön** | ├────────────────────────────┼─────────────────────┼─────────────┼─────────────────────────────────┤
| `/home/mave-amondis/Schnittstellen/Amondis` | `mave-amondis:mave-amondis` | `775` | Írható munkakönyvtár | /home/mave-sftp │ root:root │ 755 │ SFTP Chroot Börtön │
| `/home/mave-amondis/Schnittstellen/Amondis/APO` | `mave-amondis:mave-amondis` | `775` | Konkrét adatátvételi pont | /home/mave-sftp/feltoltes │ mave-sftp:mave-sftp │ 775 │ Írható mappa a Bremen adatoknak │
└────────────────────────────┴─────────────────────┴─────────────┴─────────────────────────────────┘
### Amondis-Mave Import (mave-amondis)
┌───────────────────────────────────────────┬───────────────────────────┬─────────────┬────────────────────────┐
│ Elérési út │ Tulajdonos │ Jogosultság │ Szerep │
├───────────────────────────────────────────┼───────────────────────────┼─────────────┼────────────────────────┤
│ /home/mave-amondis │ root:root │ 755 │ SFTP Home (nem írható) │
│ /home/mave-amondis/Schnittstellen │ root:root │ 755 │ SFTP Chroot Börtön │
│ /home/mave-amondis/Schnittstellen/Amondis │ mave-amondis:mave-amondis │ 775 │ Írható munkakönyvtár │
└───────────────────────────────────────────┴───────────────────────────┴─────────────┴────────────────────────┘
## 4. Hálózati Elérések ## 4. Hálózati Elérések
### SMB (Windows Megosztás) ### SMB (Windows Megosztás)
* **Útvonal:** `\\10.102.1.202\mave-amondis\Schnittstellen\Amondis\APO` * **Amondis Útvonal:** `\\10.102.1.202\mave-amondis\Schnittstellen\Amondis\APO`
* **Konfiguráció:** A Samba a `force user = mave-amondis` beállítást használja, így minden SMB-n keresztül létrehozott fájl automatikusan a mave-amondis tulajdona lesz, megelőzve a jogosultsági vitákat. * **Működés:** A Samba a `force user = mave-amondis` beállítást használja a jogosultsági hibák elkerülése érdekében.
### SFTP (Biztonságos FTP) ### SFTP (Biztonságos FTP)
* **Host:** `10.102.1.202` * **Bremen Kapcsolat:** `sftp://mave-sftp@10.102.1.202` (belépéskor a `feltoltes` mappát látja).
* **Port:** `22` (SSH alapértelmezett) * **Amondis Kapcsolat:** `sftp://mave-amondis@10.102.1.202` (belépéskor az `Amondis` mappát látja).
* **Működés:** Belépéskor a felhasználó egyből a `Schnittstellen` mappa tartalmát látja (vagyis az `Amondis` mappát). Nem tud "feljebb" lépni a rendszerben.
## 5. Automatikus Értesítések (Monitoring) ## 5. Automatikus Értesítések (Monitoring)
A szerveren egy egyedi PAM (Pluggable Authentication Module) script fut: Minden sikeres bejelentkezéskor (mindkét felhasználó esetén) e-mail értesítés érkezik az adminisztrátornak (`i.meszely@antares-apo.de`).
* **Script helye:** `/usr/local/bin/sftp-notify.sh` (vagy ahogy beállítottuk)
* **Funkció:** Minden sikeres bejelentkezéskor (SFTP és SSH) e-mailt küld az adminisztrátornak (`i.meszely@antares-apo.de`).
* **Log fájl:** `/tmp/sftp-notify.log`
## 6. Karbantartási parancsok (Cheat Sheet) * **Script helye:** `/usr/local/sbin/sftp-notify.sh`
* **Működés:** A scriptet a PAM (Pluggable Authentication Modules) rendszer hívja meg minden `open_session` eseménynél. A script megkülönbözteti az SFTP (korlátozott) és az interaktív SSH belépéseket a felhasználó shellje alapján, majd elküldi az adatokat (felhasználó, távoli IP, időpont) e-mailben.
### Jogosultságok javítása (ha elromlana): * **Log fájl:** `/tmp/sftp-notify.log` (hibakereséshez).
```bash
sudo chown root:root /home/mave-amondis /home/mave-amondis/Schnittstellen
sudo chown -R mave-amondis:mave-amondis /home/mave-amondis/Schnittstellen/Amondis
sudo chmod 755 /home/mave-amondis /home/mave-amondis/Schnittstellen
sudo chmod -R 775 /home/mave-amondis/Schnittstellen/Amondis
```
### Szolgáltatások újraindítása:
```bash
sudo systemctl restart smb nmb # Samba
sudo systemctl restart ssh # SFTP/SSH
```
--- ---
*Készült: 2026. március 24.* *Frissítve: 2026. március 24.*

View File

@@ -0,0 +1,45 @@
#!/bin/bash
# Locale-Einstellungen, damit der Mail-Befehl keine Zeichenkodierungsfehler verursacht
export LC_ALL=C.UTF-8
export LANG=C.UTF-8
# Logdatei für das Debugging (Schreibrechte setzen: chmod 666 /tmp/sftp-notify.log)
LOGFILE="/tmp/sftp-notify.log"
# Benachrichtigung nur bei erfolgreichen Anmeldungen (open_session)
if [ "$PAM_TYPE" = "open_session" ]; then
# Umgebung in Log speichern
echo "--- $(/usr/bin/date): Anmeldeversuch für $PAM_USER von $PAM_RHOST ---" >> "$LOGFILE"
# Überprüfung der Benutzer-Shell
USER_SHELL=$(/usr/bin/getent passwd "$PAM_USER" | /usr/bin/cut -d: -f7)
# Bestimmung des Typs
if [[ "$USER_SHELL" == *"/nologin" ]] || [[ "$USER_SHELL" == *"/false" ]]; then
LOGIN_TYPE="SFTP (Eingeschränkt)"
else
LOGIN_TYPE="SSH (Interaktiv)"
fi
MESSAGE="Anmeldebenachrichtigung ($PAM_SERVICE):
Typ: $LOGIN_TYPE
Benutzer: $PAM_USER
Remote-Host: $PAM_RHOST
Shell: $USER_SHELL
Zeitpunkt: $(/usr/bin/date)
Host: $(/usr/bin/hostname)"
# E-Mail-Versand (mit absolutem Pfad)
# Prüfen, ob der 'mail'-Befehl unter /usr/sbin/mail verfügbar ist!
echo "$MESSAGE" | /usr/sbin/mail -s "$LOGIN_TYPE: $PAM_USER" i.meszely@antares-apo.de >> "$LOGFILE" 2>&1
if [ $? -eq 0 ]; then
echo "Erfolg: E-Mail gesendet." >> "$LOGFILE"
else
echo "FEHLER: E-Mail-Versand fehlgeschlagen! (Exit code: $?)" >> "$LOGFILE"
fi
fi
exit 0

View File

@@ -0,0 +1,6 @@
docker compose pull
docker compose up -d
docker image prune -f

View File

@@ -33,3 +33,5 @@ PG19 : Officin
15454 15454
ilka banemann - laptop - outlook (profile)
inten im Officein drucker von Iphone

BIN
Doc/Bilders/Development.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 877 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 789 KiB

BIN
Doc/Bilders/Scripts.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 760 KiB

View File

@@ -0,0 +1,31 @@
# SOP: Behebung winmail.dat Anhang-Fehler (Office 365)
## Problembeschreibung
Wenn E-Mails an externe Empfänger gesendet werden, werden Anhänge (z. B. PDF-Dateien) nicht korrekt angezeigt, sondern sind in einer einzigen `winmail.dat`-Datei verpackt. Dies wird durch das Outlook-eigene **TNEF (Transport Neutral Encapsulation Format)** verursacht, das andere E-Mail-Clients nicht interpretieren können.
## Lösungsmöglichkeiten
### 1. Globale Lösung (Exchange Online Admin) - EMPFOHLEN
Diese Einstellung gilt für die gesamte Organisation und deaktiviert die TNEF-Codierung auf Serverebene für externe Empfänger.
1. Melden Sie sich im **Exchange Admin Center** an.
2. Navigieren Sie zu: **Mail flow** (Nachrichtenfluss) -> **Remote domains** (Remote-Domänen).
3. Wählen Sie die Domäne **Default** (*) aus.
4. Suchen Sie die Einstellung **Use Table Neutral Encapsulation Format (TNEF)**.
5. Setzen Sie den Wert auf **Never** (Niemals).
6. Speichern Sie die Änderungen.
### 2. PowerShell-Lösung (Schnellere Administration)
Führen Sie den folgenden Befehl im Exchange Online PowerShell-Modul aus:
```powershell
Set-RemoteDomain -Identity Default -TNEFEnabled $false
```
### 3. Einzelne Benutzerlösung (Outlook Client)
Wenn die Korrektur nur an einem PC erfolgen soll:
1. **Datei -> Optionen -> E-Mail**.
2. Im Abschnitt **Nachrichtenformat**: *"Beim Senden von Nachrichten im Rich-Text-Format an externe Empfänger"* -> Auf **In HTML-Format konvertieren** umstellen.
---
*Erstellt am: 24. März 2026*

View File

@@ -0,0 +1,31 @@
# SOP: winmail.dat csatolmány hiba javítása (Office 365)
## Probléma leírása
Külső címzetteknek küldött e-mailek esetén a csatolmányok (például PDF fájlok) nem megfelelően érkeznek meg, hanem egyetlen `winmail.dat` fájlba csomagolva látszanak. Ezt az Outlook saját **TNEF (Transport Neutral Encapsulation Format)** kódolása okozza, amit más levelezőrendszerek nem tudnak értelmezni.
## Megoldási lehetőségek
### 1. Globális megoldás (Exchange Online Admin) - JAVASOLT
Ez a beállítás az egész szervezetre vonatkozik, és szerver szinten tiltja le a TNEF kódolást a külső címzettek felé.
1. Lépj be az **Exchange Admin Center** felületre.
2. Navigálj ide: **Mail flow** (Üzenetküldés) -> **Remote domains** (Távoli tartományok).
3. Válaszd ki a **Default** (*) tartományt.
4. Keresd meg a **Use Table Neutral Encapsulation Format (TNEF)** beállítást.
5. Állítsd az értékét **Never** (Soha) típusra.
6. Mentsd el a módosításokat.
### 2. PowerShell megoldás (Gyorsabb adminisztráció)
Futtasd az alábbi parancsot az Exchange Online PowerShell modulban:
```powershell
Set-RemoteDomain -Identity Default -TNEFEnabled $false
```
### 3. Egyéni felhasználói megoldás (Outlook kliens)
Ha csak egy gépen kell javítani:
1. **Fájl -> Beállítások -> Posta**.
2. Az **Üzenetformátum** résznél: *"Üzenetek küldése RTF formátumban külső címzetteknek"* -> Állítsd át **Konvertálás HTML formátumra** értékre.
---
*Készült: 2026. március 24.*

View File

@@ -34,6 +34,7 @@ A kedvenc programozási nyelvem a Python.
Weboldalak amiket hasznälni szoktunk: Weboldalak amiket hasznälni szoktunk:
mermaid.live mermaid.live
Általában fedora linux alatt dolgozunk. Általában szerver oldalon Fedora Linux alatt dolgozunk.
Második leggyakrabban használt linux az Ubuntu alapu. A második leggyakrabban használt linux az Ubuntu alapú (szintén szerver).
Virtualizácionk Proxmox VE Kliens oldalon (munkaállomás) Windows 11-et vagy macOS-t használunk.
Virtualizációnk Proxmox VE.

Binary file not shown.

View File

@@ -0,0 +1,92 @@
#!/usr/bin/env python3
"""
Fájl kor ellenőrző script n8n automatizáláshoz.
Használat: python3 check_file_age.py <mappa_utvonal> <max_perc>
Kimenet: JSON formátum (n8n barát)
Exit kód: 0 (ha minden rendben), 1 (ha régi fájlt talált vagy hiba történt)
"""
import os
import time
import sys
import json
def check_files(directory, max_age_minutes=40):
now = time.time()
max_age_seconds = max_age_minutes * 60
too_old_files = []
# Mappa létezésének ellenőrzése
if not os.path.exists(directory):
return {
"status": "error",
"alert": True,
"message": f"A megadott könyvtár nem létezik: {directory}",
"files": []
}
try:
# Fájlok listázása
files_in_dir = os.listdir(directory)
for filename in files_in_dir:
filepath = os.path.join(directory, filename)
# Csak a fájlokat ellenőrizzük (mappákat nem)
if os.path.isfile(filepath):
file_age_seconds = now - os.path.getmtime(filepath)
if file_age_seconds > max_age_seconds:
age_min = round(file_age_seconds / 60, 1)
too_old_files.append({
"file": filename,
"age_minutes": age_min,
"last_modified": time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(os.path.getmtime(filepath)))
})
if too_old_files:
return {
"status": "alert",
"alert": True,
"message": f"Találtam {len(too_old_files)} db fájlt, ami régebbi mint {max_age_minutes} perc!",
"directory": directory,
"limit_minutes": max_age_minutes,
"files": too_old_files
}
return {
"status": "ok",
"alert": False,
"message": "Minden fájl friss.",
"directory": directory,
"files": []
}
except Exception as e:
return {
"status": "error",
"alert": True,
"message": f"Hiba történt az ellenőrzés közben: {str(e)}",
"files": []
}
if __name__ == "__main__":
# Paraméterek átvétele a parancssorból
if len(sys.argv) < 2:
print(json.dumps({"status": "error", "message": "Hiányzó paraméter! Használat: python3 check_file_age.py <mappa> <perc>"}))
sys.exit(1)
dir_to_check = sys.argv[1]
age_limit = int(sys.argv[2]) if len(sys.argv) > 2 else 40
result = check_files(dir_to_check, age_limit)
# JSON kimenet az n8n számára
print(json.dumps(result, indent=2))
# Exit code beállítása az n8n SSH Node számára
if result.get("alert"):
sys.exit(1)
else:
sys.exit(0)

View File

@@ -0,0 +1,92 @@
#!/usr/bin/env python3
"""
Skript zur Überprüfung des Dateialters für n8n-Automatisierung.
Verwendung: python3 check_file_age_de.py <verzeichnispfad> <max_minuten>
Ausgabe: JSON-Format (n8n-freundlich)
Exit-Code: 0 (wenn alles ok), 1 (wenn eine alte Datei gefunden wurde oder ein Fehler auftrat)
"""
import os
import time
import sys
import json
def check_files(directory, max_age_minutes=40):
now = time.time()
max_age_seconds = max_age_minutes * 60
too_old_files = []
# Überprüfung, ob das Verzeichnis existiert
if not os.path.exists(directory):
return {
"status": "error",
"alert": True,
"message": f"Das angegebene Verzeichnis existiert nicht: {directory}",
"files": []
}
try:
# Dateien auflisten
files_in_dir = os.listdir(directory)
for filename in files_in_dir:
filepath = os.path.join(directory, filename)
# Nur Dateien prüfen (keine Verzeichnisse)
if os.path.isfile(filepath):
file_age_seconds = now - os.path.getmtime(filepath)
if file_age_seconds > max_age_seconds:
age_min = round(file_age_seconds / 60, 1)
too_old_files.append({
"file": filename,
"age_minutes": age_min,
"last_modified": time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(os.path.getmtime(filepath)))
})
if too_old_files:
return {
"status": "alert",
"alert": True,
"message": f"{len(too_old_files)} Datei(en) gefunden, die älter als {max_age_minutes} Minuten sind!",
"directory": directory,
"limit_minutes": max_age_minutes,
"files": too_old_files
}
return {
"status": "ok",
"alert": False,
"message": "Alle Dateien sind aktuell.",
"directory": directory,
"files": []
}
except Exception as e:
return {
"status": "error",
"alert": True,
"message": f"Fehler während der Überprüfung aufgetreten: {str(e)}",
"files": []
}
if __name__ == "__main__":
# Parameter aus der Befehlszeile übernehmen
if len(sys.argv) < 2:
print(json.dumps({"status": "error", "message": "Fehlender Parameter! Verwendung: python3 check_file_age_de.py <verzeichnis> <minuten>"}))
sys.exit(1)
dir_to_check = sys.argv[1]
age_limit = int(sys.argv[2]) if len(sys.argv) > 2 else 40
result = check_files(dir_to_check, age_limit)
# JSON-Ausgabe für n8n
print(json.dumps(result, indent=2))
# Exit-Code für den n8n SSH-Node festlegen
if result.get("alert"):
sys.exit(1)
else:
sys.exit(0)

View File

@@ -0,0 +1,70 @@
"""
Használati útmutató / Usage:
1. Telepítés / Installation:
pip install markdown-pdf
2. Futtatás / Execution:
- Aktuális könyvtár bejárása:
python Scripts/python/md_to_pdf_recursive.py
- Konkrét könyvtár megadása:
python Scripts/python/md_to_pdf_recursive.py Dev/APS-SFTP01
A script rekurzívan végigjárja a megadott könyvtárat, és minden .md fájl mellé
létrehoz egy azonos nevű .pdf fájlt. A .git, .venv és __pycache__ könyvtárakat kihagyja.
"""
import os
import sys
from markdown_pdf import Section, MarkdownPdf
def convert_md_to_pdf(root_dir):
"""
Rekurzívan végigjárja a megadott könyvtárat és minden .md fájlból PDF-et készít.
"""
print(f"Keresés indítása a következő könyvtárban: {root_dir}")
# Kizárandó könyvtárak (pl. git, virtuális környezet)
exclude_dirs = {'.git', '.venv', '__pycache__', 'node_modules'}
count = 0
for root, dirs, files in os.walk(root_dir):
# Alkönyvtárak szűrése (helyben módosítva a dirs listát)
dirs[:] = [d for d in dirs if d not in exclude_dirs]
for file in files:
if file.endswith(".md"):
md_path = os.path.join(root, file)
pdf_path = os.path.splitext(md_path)[0] + ".pdf"
print(f"Konvertálás: {md_path} -> {pdf_path}")
try:
# Markdown olvasása
with open(md_path, "r", encoding="utf-8") as f:
md_content = f.read()
# PDF generálása
pdf = MarkdownPdf(toc_level=2)
pdf.add_section(Section(md_content, toc=False))
pdf.save(pdf_path)
count += 1
except Exception as e:
print(f"Hiba a fájl feldolgozása közben ({md_path}): {e}")
print(f"\nKész! Összesen {count} fájl lett konvertálva.")
if __name__ == "__main__":
# Ha nincs megadva útvonal, az aktuális könyvtárat használja
target_path = sys.argv[1] if len(sys.argv) > 1 else "."
# Ellenőrizzük a függőséget
try:
import markdown_pdf
except ImportError:
print("Hiba: A 'markdown-pdf' könyvtár nincs telepítve.")
print("Telepítés: pip install markdown-pdf")
sys.exit(1)
convert_md_to_pdf(target_path)