Shop Management Interface
Web-Applikation zur Ausführung und Planung von Synchronisationen.
Rahmendaten
Zur Installation wird die ess.exe benötigt. Für diese Datei ist die Config-Datei management.ini essenziell. Dieser liegt in dem gleichen Ordner wie die ess.exe Datei.
Die Datei wird beim Ausführen von ess.exe --init automatisch mit Standardwerten erstellt, sofern sie noch nicht existiert.
Vor dem ersten Start müssen in der management.ini Datei einige Änderungen vorgenommen werden.
Diese Config-Datei ist folgendermaßen aufgebaut.
management.ini
Die Kategorien ACTIVE und SHOPS bilden den Grundbaustein der zu ansteuerenden Shops. Je nach Wunsch können neue Shops als Keys aufgenommen oder gelöscht werden.
In der SHOPS Kategorie wird jedem Shop der Pfad zu seiner config.ini zugewiesen. Die Shop-URL wird automatisch aus der jeweiligen config.ini ([SHOP] → url) ausgelesen. Der Launcher-Pfad (ess.exe bzw. Python) wird automatisch bestimmt.
Beispiel: Einen Shop hinzufügen
[ACTIVE]
default = mostwanted
[SHOPS]
mostwanted = C:\Program Files\energy shop-sync\config.ini
Die URL des Shops (z.B. https://shop.example.de/) wird automatisch aus der hinterlegten
config.ini ([SHOP] → url) ausgelesen und im Interface angezeigt.
Beispiel: Mehrere Shops
[ACTIVE]
default = local
[SHOPS]
local = conf\config.ini
mostwanted = C:\Program Files\energy shop-sync\config.ini
Weitere Kategorien sind für die Funktionsweise der Syncs notwendig und können angepasst werden.
[TIMER]
| Parameter | Defaultwert | Beschreibung |
|---|---|---|
| wakeup | 1300 | Timer zum Abchecken der Sync-Warteschlange in Sekunden-Intervall |
| overtimekill | 85500 | Maximale Laufzeit eines Syncs in Sekunden bevor er abgebrochen wird |
Synceinstellungen sind Shop-abhängig, d.h. für jeden Shop ist eine Config-Kategorie notwendig bei der der Sektionsname dem Shopnamen in Großbuchstaben entspricht.
Vom obigen Beispiel also:
[MOSTWANTED]
| Parameter | Defaultwert /Wert wenn Aktiv | Beschreibung |
|---|---|---|
| debuglvl | -d | Debug-Level (-d=ERROR, -dd=WARNING, -ddd=INFO, -dddd=DEBUG) |
| -wc | -wc | Sync ohne Kategorien. Value frei lassen falls mit Kategorien. |
| -wa | -wa | Sync ohne Attribute. Value frei lassen falls mit Attributen. |
| -to | -to wl | Target-Option für den Sync |
| -we | -we | Sync ohne Eigenschaften. Value frei lassen falls mit Eigenschaften. |
Beispiel: Shop-Einstellungen
[LOCAL]
debuglvl = -d
-wc = -wc
-wa = -wa
-we = -we
-m =
-ai =
-to = -to wl
[MOSTWANTED]
debuglvl = -dddd
-wc = -wc
-wa = -wa
-we = -we
-m =
-ai =
-to = -to wl
Zusätzlich ist es möglich einzelne Synchronisationsarten auszublenden. Der Defaultwert, wenn der Sync aktiv sein soll: Key = Value. Falls diese ausgeblendet werden sollen, muss der jeweilige Value einer Syncart freigelassen werden.
[SYNCRENAME]
Steuert, welche Sync-Kacheln auf dem Dashboard angezeigt werden und wie sie beschriftet sind. Die Reihenfolge der Zeilen bestimmt zugleich die Default-Reihenfolge der Kacheln, sofern keine [DASHBOARD]-Sektion (siehe unten) definiert ist.
| Parameter | Defaultwert | Beschreibung |
|---|---|---|
| syncProductsAndPrices | Artikel & Preise | Combo-Sync: Artikel und anschließend Preise |
| syncCustomersAndOrders | Kunden & Bestellungen | Combo-Sync: Kunden und anschließend Bestellungen |
| syncProducts | Artikel | Der Artikel-Sync |
| syncProductsAll | Artikel[–all] | Artikel-Sync mit –all Flag |
| syncPrices | Preise | Synchronisiert die Preise |
| syncOrders | Bestellungen | Der Bestellungen-Sync |
| syncCustomers | Kunden | Synchronisiert die Kunden-Daten |
| syncCategories | Kategorien | Der Kategorien-Sync |
| syncAttr | Eigenschaften | Synchronisiert die Eigenschaften |
| syncCross | Cross-Artikel | Synchronisiert die Cross-Selling-Artikel |
| syncBestand | Bestand | Synchronisiert die Bestände |
| syncProperties | Properties | Synchronisiert die Properties |
| syncImages | Bilder | Synchronisiert die Bilder |
| syncDownloads | Downloads | Synchronisiert die Downloads |
| syncTranslations | Übersetzungen | Synchronisiert die Übersetzungen |
| syncFilteredCustomers | Kunden SW-WL | Synchronisiert gefilterte Kundendaten |
| syncOrderStatus | Bestellstatus | Synchronisiert den Bestellstatus |
| syncShipmenttype | Versandart | Synchronisiert die Versandart |
| syncAll | Alles | Synchronisiert alles |
Beispiel: Sync-Bezeichnungen
[SYNCRENAME]
# "" = inaktiv. Reihenfolge dieser Zeilen = Default-Reihenfolge der Kacheln.
syncProductsAndPrices = Artikel & Preise
syncCustomersAndOrders = Kunden & Bestellungen
syncProducts = Artikel
syncProductsAll = Artikel[--all]
syncPrices = Preise
syncOrders = Bestellungen
syncCustomers = Kunden
syncCategories = Kategorien
syncAttr = Eigenschaften
syncCross = Cross-Artikel
syncBestand = Bestand
syncProperties = Properties
syncImages = Bilder
syncDownloads = Downloads
syncTranslations = Übersetzungen
syncFilteredCustomers = Kunden SW-WL
syncOrderStatus = Bestellstatus
syncShipmenttype = Versandart
syncAll = Alles
[DASHBOARD] und [DASHBOARDGROUP:*]
Optional. Erlaubt es, die Kacheln auf dem Dashboard in mehrere Bereiche zu gruppieren und die Reihenfolge frei festzulegen. Die erste Gruppe wird als Featured gerendert (größere Kacheln, dezent hervorgehoben). Fehlt die Sektion, werden alle aktiven Kacheln aus [SYNCRENAME] als eine flache Liste in INI-Reihenfolge angezeigt.
| Sektion / Parameter | Beschreibung |
|---|---|
[DASHBOARD] groups |
Komma-getrennte Liste der Gruppen-IDs in Anzeigereihenfolge. Jede ID verweist auf eine Sektion [DASHBOARDGROUP:<id>]. |
[DASHBOARDGROUP:<id>] title |
Überschrift über der Gruppe. Leer = keine Überschrift (z. B. für die Featured-Zeile). Nur Gruppen mit Titel sind aufklappbar. |
[DASHBOARDGROUP:<id>] keys |
Komma-getrennte Liste der Sync-Keys in der gewünschten Reihenfolge. * als alleiniger oder zusätzlicher Eintrag steht für „alle übrigen aktiven Keys aus [SYNCRENAME], die nicht von einer anderen Gruppe explizit beansprucht werden”. Unbekannte oder inaktive Keys werden ignoriert. Bei mehreren *-Gruppen gewinnt die erste in groups-Reihenfolge. |
[DASHBOARDGROUP:<id>] collapsed |
Optional, Default false. Bei true wird die Gruppe initial zugeklappt dargestellt; ein Klick auf den Gruppen-Header klappt sie auf. |
Beispiel: Featured-Zeile + Restbereich
[DASHBOARD]
groups = featured, weitere
[DASHBOARDGROUP:featured]
title =
keys = syncProductsAndPrices, syncOrders
[DASHBOARDGROUP:weitere]
title = Weitere Synchronisationen
keys = *
collapsed = false
Mit dieser Konfiguration erscheinen oben in größeren Kacheln “Artikel & Preise” und “Bestellungen”, darunter durch eine horizontale Linie abgegrenzt alle übrigen Sync-Kacheln in [SYNCRENAME]-Reihenfolge. Mit collapsed = true lässt sich die Restgruppe initial zuklappen.
Beispiel: Drei Gruppen mit Wildcard in der Mitte
[DASHBOARD]
groups = featured, weitere, footer
[DASHBOARDGROUP:featured]
title =
keys = syncProductsAndPrices, syncOrders
[DASHBOARDGROUP:weitere]
title = Weitere Synchronisationen
keys = *
[DASHBOARDGROUP:footer]
title = Bestand & Bilder
keys = syncBestand, syncImages
syncBestand und syncImages landen verlässlich im Footer-Block, weil die Wildcard erst danach ausgewertet wird und nur Tiles aufnimmt, die nirgendwo explizit beansprucht sind.
Vollständige Beispiel management.ini
[ACTIVE]
default = local
[SHOPS]
local = conf\config.ini
mostwanted = C:\Program Files\energy shop-sync\config.ini
[TIMER]
# in Sekunden
wakeup = 1300
overtimekill = 85500
[LOCAL]
debuglvl = -d
-wc = -wc
-wa = -wa
-we = -we
-m =
-ai =
-to = -to wl
[MOSTWANTED]
debuglvl = -dddd
-wc = -wc
-wa = -wa
-we = -we
-m =
-ai =
-to = -to wl
[SYNCRENAME]
# "" = inaktiv. Reihenfolge dieser Zeilen = Default-Reihenfolge der Kacheln.
syncProductsAndPrices = Artikel & Preise
syncCustomersAndOrders = Kunden & Bestellungen
syncProducts = Artikel
syncProductsAll = Artikel[--all]
syncPrices = Preise
syncOrders = Bestellungen
syncCustomers = Kunden
syncCategories = Kategorien
syncAttr = Eigenschaften
syncCross = Cross-Artikel
syncBestand = Bestand
syncProperties = Properties
syncImages = Bilder
syncDownloads = Downloads
syncTranslations = Übersetzungen
syncFilteredCustomers = Kunden SW-WL
syncOrderStatus = Bestellstatus
syncShipmenttype = Versandart
syncAll = Alles
[DASHBOARD]
groups = featured, weitere
[DASHBOARDGROUP:featured]
title =
keys = syncProductsAndPrices, syncOrders
[DASHBOARDGROUP:weitere]
title = Weitere Synchronisationen
keys = *
collapsed = false
## Installation
Die management.ini wird beim Ausführen von ess.exe --init automatisch mit Standardwerten erstellt.
Anschließend müssen die Shops manuell hinzugefügt werden.
Dies erfolgt dadurch, dass jeder Shop in der Kategorie [SHOPS] mit seinem Namen als Key und dem Pfad zur config.ini
als Value aufgenommen wird. Die Shop-URL und der Launcher-Pfad werden automatisch bestimmt.
Ist die Management.ini entsprechend erstellt worden, reicht die Ausführung von ess.exe manage runserver aus.
Die Web-Applikation läuft standardmäßig auf dem Hostnamen mit dem Port 8000 und kann über jeden beliebigen Web-Browser
erreicht werden. Der Port kann beim Start angepasst werden (z.B. ess.exe manage runserver 0.0.0.0:9000).
Bspw. : nerdpool:8000
## Ausführung von Synchronisationen
Das Management-Interface bietet 2 verschiedene Möglichkeiten Synchronisationen auszführen bzw. 3, letzteres ist aber über die erweiterte Ansicht erreichbar.
### 1. Live-Sync

Live-Syncs sind über die Startseite des Interfaces erreichbar. Mit einem Klick auf die Schaltflächen lassen sich einzelne Syncs startet. Wird eine Sync gestartet erscheint dazu ein Live-Log der solange bleibt bis man eine andere Seite lädt. Zusätzlich kann der Sync über den Progressbar oberhalb der Seite verfolgt werden. Der Progressbar wird auf jeder Seite neugeladen.
2. Geplante Syncs (Scheduler)
Über den Scheduler im erweiterten Bereich können Synchronisationen zeitlich geplant werden. Die geplanten Jobs werden über APScheduler in einer separaten SQLite-Datenbank (apevents.db) persistiert.
Scheduler verwalten
Job erstellen:
- Im Menü auf “Scheduler” klicken
- Bezeichnung für den Job vergeben
- Sync-Art auswählen (z.B. Artikel, Bestellungen)
- Frequenz wählen:
- Einmalig: Einmaliger Sync zu einem bestimmten Zeitpunkt
- Minütlich/Stündlich/Täglich: Wiederkehrender Sync im gewählten Intervall
- Wöchentlich: Sync an bestimmten Wochentagen
- Optional: Parameter als freie CLI-Argumente angeben (z. B.
-afür Vollsync,-wcohne Kategorien). Mehrere Argumente werden per Leerzeichen getrennt, Quoting wird unterstützt. Eine Übersicht aller Flags liefertess.exe --help. - Startzeit festlegen und Job speichern
- Optional: Verpasste Aufgaben nachholen ankreuzen, wenn die Aufgabe auch dann noch laufen soll, wenn ihr planmäßiger Zeitpunkt während einer Down-Zeit (z. B. Wochenend-Reboot) verpasst wurde. Mehrfach verpasste Ausführungen werden zu einer einzelnen zusammengefasst (
coalesce). Ohne diese Option verwirft APScheduler Ausführungen, die mehr als 15 Minuten zu spät dran sind.
Job verwalten:
- Pausieren: Einen laufenden Job vorübergehend anhalten
- Fortsetzen: Einen pausierten Job wieder aktivieren
- Bearbeiten: Bezeichnung, Zeitplan, Parameter oder die Catchup-Option eines Jobs ändern. Im Bearbeiten-Dialog stehen die Intervalle Einmal / Minütlich / Stündlich / Täglich zur Auswahl; wöchentliche Cron-Jobs werden grundsätzlich neu angelegt statt editiert.
- Löschen: Einen Job dauerhaft entfernen
Alle geplanten Jobs werden persistent gespeichert und überleben einen Neustart des Management Interfaces.
Standard-Zeitplan laden
Über den Button “Standard-Zeitplan laden” im Kopfbereich der Aufgabenplan-Tabelle lassen sich drei typische Hintergrundaufgaben für den aktuellen Shop mit einem Klick anlegen:
| Aufgabe | Sync-Art | Parameter | Zeitplan | Catchup |
|---|---|---|---|---|
| Artikel & Preise Mo-Fr 01:00 | syncProductsAndPrices |
– | Mo–Fr um 01:00 | – |
| Artikel & Preise So 01:00 | syncProductsAndPrices |
-a |
Sonntag um 01:00 | ja |
| Bestellungen Mo-Fr 06-18 Uhr alle 15 Min | syncOrders |
– | Mo–Fr zwischen 06:00 und 18:00 alle 15 Minuten | – |
Unter der Woche läuft ein kombinierter Artikel- und Preissync inkrementell (nur Änderungen). Der Sonntags-Vollsync läuft mit -a (Artikel & Preise ohne Berücksichtigung des Änderungsdatums), damit übers Wochenende alle Daten garantiert synchron sind. Bei einem Wochenend-Reboot wird der Vollsync dank Catchup beim nächsten Start des Dienstes nachgeholt.
Bereits vorhandene Aufgaben mit identischem Namen bleiben unangetastet – das erneute Laden des Presets fügt lediglich fehlende Jobs hinzu. Soll ein bestehender Sonntags-Job auf -a umgestellt werden, muss er manuell gelöscht und das Preset erneut geladen werden.
3. Einzelsync
Über die erweiterte Ansicht kann ein einzelner Artikel per Artikelnummer synchronisiert werden.
Warteschlange
Wird ein Sync gestartet während bereits ein anderer Sync für denselben Shop läuft, wird der neue Sync automatisch in eine Warteschlange eingereiht. Sobald der laufende Sync abgeschlossen ist, wird der nächste Sync aus der Warteschlange automatisch gestartet.
Ausnahme: Bestellungen
Der Bestellungssync (syncOrders) kann unabhängig von anderen Syncs parallel laufen, da er keine Artikeldaten verändert.
Sync-Fortschritt
Der Fortschritt einer laufenden Synchronisation wird in Echtzeit über einen Progressbar angezeigt. Der ProcessManager parst die Stdout-Ausgabe des Sync-Prozesses im Format:
PROGRESS: {process}: {step} von {max} - {nachricht}
Der Fortschritt wird in zwei Phasen unterteilt:
- Vorbereitung (0-50%): Daten werden aus der WinLine gelesen
- Übertragung (50-100%): Daten werden an den Shop übermittelt
Der Status wird über AJAX-Polling (/api/sync-progress/{shop}) abgefragt und auf jeder Seite im Progressbar angezeigt.
Mögliche Status: running → finished / error / overtime
Ein Overtime-Schutz beendet Syncs automatisch nach der in [TIMER] konfigurierten overtimekill-Zeit (Standard: 85500 Sekunden).
Sync-Fehler-Management
Unter /{shop}/errors können Sync-Fehler eingesehen und verwaltet werden.
Jeder Fehler enthält folgende Informationen:
| Feld | Beschreibung |
|---|---|
| Shop-URL | Betroffener Shop |
| Sync-Typ | Art der Synchronisation |
| Entity-Typ | Betroffener Datentyp |
| Entity-ID | ID des betroffenen Datensatzes |
| Fehlermeldung | Beschreibung des Fehlers |
| Status | Aufgelöst / Offen |
Funktionen:
- Filtern nach Shop-URL, Entity-Typ und Auflösungsstatus
- Bulk-Aktionen: Fehler auflösen oder wieder öffnen
- Automatische Auflösung bei Full-Sync (nicht bei Differential-Sync)
Scheduler-Events-Dashboard
Unter /advanced/apdashboard kann der Status aller geplanten Scheduler-Events eingesehen werden.
Angezeigte Events:
- Hinzugefügt
- Entfernt
- Geändert
- Erfolgreich ausgeführt
- Fehlgeschlagen
- Verpasst
Die Events werden in einer separaten SQLite-Datenbank (apevents.db) gespeichert.
Konfigurationseditor
Über den erweiterten Bereich können Konfigurationsdateien direkt im Browser bearbeitet werden:
| Route | Beschreibung |
|---|---|
/advanced/management/ |
management.ini bearbeiten |
/advanced/settings/{shop} |
config.ini eines Shops bearbeiten |
/advanced/mappings/{shop} |
Mapping-Dateien eines Shops bearbeiten |
Zusätzlich können Debug-Level und Sync-Timestamps pro Shop eingestellt werden.
Log-Ansicht
Logdateien können direkt im Browser eingesehen und heruntergeladen werden:
| Route | Beschreibung |
|---|---|
/logs |
Liste aller verfügbaren Logdateien |
/logs/view/{file} |
Logdatei im Browser anzeigen |
/logs/download/{file} |
Logdatei herunterladen |