Befehlszeile

Die Anwendung lässt sich auch über die Befehlszeile steuern. Dazu muss die Befehlszeilen-App angesprochen werden. Dies erfolgt über den Aufruf:

/opt/alvine-platform/bin/alvine-platform

Hinweis

Einige Sonderzeichen, wie $ oder Klammern {, (, usw. haben in unterschiedlichen Shells Sonderfunktionen und müssen u.U. escaped werden. Wie das genau erfolgt ist in der Dokumentation zur entsprechenden Shell nachzulesen.

Die Befehle verwenden - auf kompatiblen Terminals - Steuercodes zur Darstellung der Ausgabe. Sollen diese Steuercodes nicht ausgegeben werden, so kann über die Umgebungsvariable TERM=raw das Verhalten deaktiviert werden.

Im Folgenden werden die einzelnen Befehle ausgeführt.

Allgemeine Befehle

Hilfe

Mittels help wird eine Hilfe mit allen Befehlen angezeigt. Über die Option --filter kann die Ausgabe auf einen Befehl beschränkt werden. Im folgenden Beispiel werden nur Befehle, die im Namensraum dev liegen, ausgegeben.

/opt/alvine-platform/bin/alvine-platform help --filter dev
Argument Kurzform Beschreibung Beispiel
--filter Filterung der Ausgabe auf den angegebenen Befehl dev

Version

Der Befehl version zeigt die Version des Alvine-Systems und die Version der aktuellen Daten an.

Dieser Befehl hat keine Argumente

Legacy

Legacy-Befehle ausführen

Befehle (cmd) des Legacy-Backends lassen sich über das legacy:run aufrufen. Die Ausführung erfolgt im Legacy-Kontext. Über die Optionen können verschiedene Werte übergeben werden.

Argument Kurzform Beschreibung Beispiel
--argument -a URL-Encoded Zeichenkette mit den an das System zu übergebenden Variablenwerten. a=4&b=5
--cmd -c CMD des Alvine Backends 5
--output -o Ausgabe des Befehls in eine Datei schreiben /tmp/out.txt
--uid -u Die für den Befehl zu verwendende User-ID 100
--debug -d Debugausgabe ausgeben
/opt/alvine-platform/bin/alvine-platform legacy:run --uid=1 --cmd=5 -d --argument="sxx_export=true&submit=true&sxx_cli_systemintern=true"

Devop

Die folgenden Befehle sind für den Betrieb des Systems ausgelegt.

Dateiänderungen prüfen

Mit dem Befehl devop:changedfiles lassen sich Änderungen im Dateisystem prüfen. Beim ersten Durchlauf werden für die Dateien Prüfsummen gebildet und die Datei über --md5file angegebene Datei geschrieben. Bei weiteren Durchläufen werden die angegebenen Dateien mit den Werten in der Prüfdatei verglichen und Änderungen ausgegeben.

Die Ausgabe der Änderungen kann als text (default), json oder xml erfolgen.

Dieser Befehl kann zum Beispiel mit cron oder inotifywait Anwendung finden.

Argument Kurzform Beschreibung Beispiel
--path -p Das zu prüfende Verzeichnis /srv/images/
--md5file -m Der Dateiname der MD5-Prüfdatei (die Datei sollte nicht im zu prüfenden Verzeichnis liegen /srv/img.md5
--format -f Das Ausgabeformat (Unterstützt werden text (default), json und XML xml
--host -h Parameter für den Hostname für den Zugriff auf eine externe Ressource sftp.example.com
--user -u Parameter für den Benutzer für den Zugriff auf eine externe Ressource sftpuser
--login -l Parameter für den Password für den Zugriff auf eine externe Ressource sftppassword
--output -o Ausgabe des Befehls in eine Datei schreiben /tmp/out.txt
/opt/alvine-platform/bin/alvine-platform  devop:changedfiles --path=/srv/www/images \
      --md5file=/srv/www/images.md5 --format=json

Die Ausgabe ist im Fall von JSON sieht folgendermaßen aus:

{
  "changed": [],   // geänderte Dateien
  "created": [],   // neue Dateien
  "removed": [],   // entfernete Dateien
  "files": [],     // Alle geänderten, neuen und entfernten Dateien
  "errors": [],    // Fehler im Script
  "totals": { 
    "created": 0,  // Anzahl der neuen Dateien
    "changed": 0,  // Anzahl der geänderten Dateien
    "removed": 0,  // Anzahl der entferneten Dateien
    "files": 0,    // Anzahl aller geänderten Dateien
    "total": 0     // Anzahl aller Dateien im Verzeichnis
  }
}

Die gleiche Ausgabe im XML-Format:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<result>
  <changed>
  </changed>
  <created>
  </created>
  <removed>
  </removed>
  <files>
  </files>
</result>
<totals>
  <changed>0</changed>
  <created>0</created>
  <removed>0</removed>
  <files>0</files>
  <total>0</total>
</totals>

Webseite crawlen

Der Befehl devop:sitemap:crawl erstellt eine (Sitemap)[https://support.google.com/webmasters/answer/183668?hl=de] der über die URL -- erreichbaren Webseite.

Über die Optionen können verschiedene Werte übergeben werden.

Argument Kurzform Beschreibung Beispiel
--url -u Erstellen einer Sitemap.xml durch Einlesen einer URL http://example.com/home
--sitemap -s Dateiname der zu erstellenden Sitemap /srv/sitemap.xml
--force -f Alte Elemente werden gelöscht und die Sitmap neu erstellt
--exclude -e Urls die auf eines der angegebenen Muster zutreffen werden nicht verarbeitet index.php
--domain -a Wenn angegeben, so werden nur URL dieser Domain verarbeitet www.example.com
--debug -d Debugging des Befehls einschalten
--output -o Ausgabe in Datei umleiten
--user-agent -g Verwendeter User-Agent. Als Standard wird ein aktueller Chrome-Agent verwendet Chrome
--show-status Zeigt alle URL die mit diesem Status ausgeliefert wurden an. 200
--show-statistics Zeigt eine Statistik zum letzten durchlauf an.

Wenn --sitemap angegeben wird, so wird eine fertige XML an den angegebenen Ort gespeichert.

/opt/alvine-platform/bin/alvine-platform devop:sitemap:crawl \
      --url https://www.example.com/ --domain www.example.com \
      --debug --sitemap sitemap.xml --exclude "index\.php" \
      --force

Mit der Option --show-statistics wird die Statistik des letzten Laufes angezeigt.

/opt/alvine-platform/bin/alvine-platform devop:sitemap:crawl \
      --url https://www.example.com/   \
      --show-statistics

Mit der Option --show-status können alle URLs die beim letzten Lauf in diesem Status ausgeliefert wurden angezeigt werden. Mit folgendem Aufruf können alle 200er und 404er angezeigt werden.

/opt/alvine-platform/bin/alvine-platform devop:sitemap:crawl \
      --url https://www.example.com/   \
      --show-status 200 --show-status 404

Die Arbeitsdateien werden im temporären Verzeichnis des Systems im Verzeichnis alvine-platform/crawler/ gespeichert.

Scripte ausführen

Der Befehl devop:run-script führt das über das Argument --script angegebene Skript aus.

Hinweis

Neben dem Standardmodus, in dem die Skripte im Anwendungskontext ausgeführt werden, können auch ältere Skripte im Legacy-Modus ausgeführt werden. Der Legacy-Modus darf für neue Scripte nicht mehr verwendet werden.

Über die Optionen können verschiedene Werte übergeben werden.

Argument Kurzform Beschreibung Beispiel
--argument -a URL-Encoded Zeichenkette mit den an das System zu übergebenden Variablenwerten. a=4&b=5
--legacy -l Use legacy Environment (deprecated) 1
--uid -u Die für den Befehl zu verwendende User-ID 100
--debug -d Debugausgabe ausgeben
--path -p Verzeichnis in dem das Script liegt, ansonsten das aktuelle Verzeichnis. /Pfad/zum/Script
--script -s Name des Scripts testscript.php
--output -o Ausgabe des Befehls in eine Datei schreiben /tmp/out.txt
/opt/alvine-platform/bin/alvine-platform devop:run-script --legacy=1 \
      --uid=1 -d --path=/Pfad/zum/Script -s=testscript.php 

Die einzubindenden Scriptdatei wird im Kontext einer Funktion aufgerufen. In dieser Funktion kann zum Beispiel über Assembly::getInstance() auf die Anwendung und darüber auf die Datenbankverbindung zugegriffen werden.

Überwachung von cron Vorgängen

Über die Optionen können verschiedene Werte übergeben werden.

Argument Kurzform Beschreibung Beispiel
--name -n eindeutiger Name myJob
--exit -e Exitcode des Programmes $?
--message -m Mitteilung my message
--period Interval der Prüfung 1 Minutes
/opt/alvine-platform/bin/alvine-platform devop:check-cron -n mycron -e $? --period='1 minute'

Beispiele: mit diesem Aufruf wird ein Fehlereintrag geschrieben, verursacht durch den vorangehenden Wert false

false ; alvine-platform devop:check-cron -n mycron -e $? --period='1 minute'

dieser Aufruf erzeugt einen OK Eintrag, verursacht durch den vorangehenden Wert true

true ; alvine-platform devop:check-cron -n mycron -e $? --period='1 minute'

Mit folgendem API Aufruf /api/util/cron-monitoring lassen sich die Einträge auslesen.

Datenbankverbindung prüfen

Der Befehl devop:mysql:info gibt die Werte von MySQL-Systemvariablen (wenn man die Rechte hat) aus

Name Wert
auto_increment_increment 1
auto_increment_offset 1
autocommit ON
automatic_sp_privileges ON
avoid_temporal_upgrade OFF
back_log 80
basedir /usr/
big_tables OFF
bind_address *
binlog_cache_size 32768
binlog_checksum CRC32
binlog_direct_non_transactional_updates OFF
binlog_error_action ABORT_SERVER
binlog_format ROW
binlog_group_commit_sync_delay 0
binlog_group_commit_sync_no_delay_count 0

folgende Optionen können an den Befehl zusätzlich übergeben werden

Argument Kurzform Beschreibung Beispiel
--no-trunc Werte werden ungekürzt ausgegeben
--as-json Ausgabe erfolgt im JSON Format

Der Befehl devop:mysql:ping prüft ob Verbindung möglich ist und gibt 0 bzw 1 als exit zurück

folgende Optionen können an den Befehl zusätzlich übergeben werden

Argument Kurzform Beschreibung Beispiel
--version gibt die Versionsnummer des MYSQL-Servers zurück

Dokumentation

UML-Diagramm erstellen

Mit diesem Befehl dev:createuml können für Klassen UML-Diagramme im plantUML Format erzeugt werden.

Argument Kurzform Beschreibung Beispiel
--class -c Name der Klasse inklusive Namespace /A/B/C
--output -o Ausgabe des Ergebnisses in eine Datei und nicht auf die Konsole c:tempa.puml

Entwicklung

Im Bereich Entwicklung dev sind Befehle zur Systementwicklung und Erweiterung des Systems zusammengefasst.

Phars herunterladen

Mit dem Befehl dev:downloadphars werden die aktuell in der assembly.ini definierten Phars heruntergeladen.

Argument Kurzform Beschreibung Beispiel
--output -o Verzeichnis in das die Phars gespeichert werden sollen. c:temp
--verbose -v Namen der Phar-Archive ausgeben

Wird kein Pfad angegeben, so werden die Dateien in das in der Konfiguration definierte Vendor-Verzeichnis geschrieben.

Datenbank exportieren

der Befehl dev:databaseexport erstellt ein Dump der übergebenen Datenbank so fern diese über die im System hinterlegten Konfigurationsvariablen erreichbar ist.

Argument Kurzform Beschreibung Beispiel
--name -n Name des Datenbankschemas alvine_platform
--path -p Speicherort des Dumps
--exclude -e Kommagetrennte Auflistung der Datenbanktabellen die ausgeschlossen werden sollen sh_shoppingcard,sh_order
--compress -c die exportierten SQL Dateien werden in einem Archiv zusammengefasst
--triggers -t wird dieser Parameter übergeben so werden die Datenbank Trigger mit exportiert

Datenbank importieren

der Befehl dev:databaseimport importiert die SQL Dateienin die Datenbank des übergebenen Schemas so fern diese über die im System hinterlegten Konfigurationsvariablen erreichbar ist.

Achtung

die jeweilige übergebene Tabelle wird über diesen Befehl vor dem Import geleert, die Inhalte sind dann unwiderruflich gelöscht.

Argument Kurzform Beschreibung Beispiel
--name -n Name des Datenbankschemas alvine_platform
--path -p Importpfad für die Dateien / Archiv
--compress -c über diesen Parameter werden die SQL Dateien aus einem Archiv extrahiert

Webkomponenten erstellen

Vorlagen für neue Webkomponenten zur Darstellung in der Benutzerschnittstellen lassen sich über dev:createwebcomponent erstellen.

Argument Kurzform Beschreibung Beispiel
--namespace Namensraum a.b.c
--version -v Version 1.0.0
--name -n Name der Komponente myComponent

Klassen erstellen

Neue Klassen können über das Argument dev:createclass erstellt, bzw. aktualisiert werden.

Argument Kurzform Beschreibung Beispiel
--class -c Name der Klasse inklusive Namespace /A/B/C
--type -t Typ der Klasse (model) model

Weitere Konfigurationsoptionen hängen vom Typ ab.

Modelklassen (Typ model)

Argument Kurzform Beschreibung Beispiel
--table Name der Tabelle, die das Model repräsentiert co_user
--exclude -e Felder, die nicht in die Objektmap übernommen werden sollen sys_erpID
--use -u Zu verwendende Traits (erp, archived, ranking) archive
alvine-platform dev:createclass --table sh_order_search --type model --class \\Alvine\\Application\\Platform\\Model\\Commerce\\OrderSearch

Delta SQL Statements erstellen

Ein Delta Statement kann über das Argument dev:createdeltasql erstellt, bzw. aktualisiert werden.

Argument Kurzform Pflicht Beschreibung Beispiel
--name -n ja Name der Tabelle sh_order
--id -i ja ID der Tabelle 7
--output -o ja Ausgabe des Statements (print, file, database) print
--file -f nein Ausgabe in einer Datei
--print -p nein Ausgabe in der Console
--database -d nein Ausgabe in der Datenbank
--primarykey -k nein Primary Key der Tabelle wird automatisch ermittelt OID
--exclude -e nein Die Felder, die nicht für den MD5 verwendet werden sollen zum Beispiel:-e sys_erpLastUpdate -e sys_erpCreation sys_erpLastUpdate
--dateto nein Feld für Gültig ab 1 date_from
--datefrom nein Feld für Gültig bis 1 date_to
/opt/alvine-platform/bin/alvine-platform createdeltasql --name=sh_order -i 7 -o print -e sys_erpLastUpdate -e sys_erpCreation

Die ID muss in der Delta Route definiert und hier übergeben werden. Der Nummernraum der IDs ist im Standard ab der ID '1' und Benutzerdefinierte IDs ab der ID '1000'

Beispiel : Hier wurde die ID 1 für die Items vergeben.

<configuration>
     <urls>
        <url name="item" id="1" ><![CDATA[/api/commerce/item/search?q=item.iid%20IN%20%22${idlist}%22]]></url>
     </urls>   
</configuration>

Ausgabeoptionen

Die Ausgabe kann kommagetrennt -o print, file oder einzeln -o print -o file oder mit --print -- file übergeben werden

print

Bei der Ausgabe print werden die Statements direkt in der Console ausgegeben und können kopiert werden.

file

Bei der Ausgabe file werden die Statements in eine sql Datei geschrieben deploymentdatabasetrigger_[Name der Tabelle].sql

database

Bei der Ausgabe database werden die Statements in der Datenbank ausgeführt.

Builder

Suchdatenbank aktualisieren

Mit dem Befehl build:update-index kann die Suchdatenbank aktualisiert werden.

Argument Kurzform Beschreibung Beispiel
--datasource -s DataSource-Klasse vom Typ AlvineApplicationPlatformTypesDataSource
--indexer -i Indexer-Klasse vom Typ AlvineApplicationPlatformBuilderIndexer
--locale -l Zu verwendende Lokale
--company -c Mandant
--debug -d Debugging des Befehls einschalten
--config Json Konfiguration Datei
--idlist -i Einschränkungen der zu ladenen IDs, Kommaliste der Primären Schlüssel zum Beispiel IIDs 10094,10095
--disable-delta abschalten der Delta Funktion true
--delta-uuid UUID für die Abfrage des letzten Datums in der co_delta_lastrequest 57a69a47-8f1f-482d-b9e8-ffa1ebc8548b

Json Konfiguration

{
    "company": "1",
    "locale": "de",
    "datasource": "\\Customisation\\Builder\\DataSource\\Commerce\\Item",
    "indexer": "\\Customisation\\Builder\\Indexer\\Commerce\\Item",
    "delta-uuid": "5b4b135b-5d3b-4fc4-b148-9bbb051fb17c" 
}

Die von \Alvine\Application\Platform\Types\DataSource abgeleitete Klasse muss die Daten bereitstellen.

Abgeleitete Klassen können Traits verwenden, die Inject-Methode definieren. Alle Methoden, die mit inject anfangen werden beim Erstellen der Datasource aufgerufen.

Die von \Alvine\Application\Platform\Builder\Indexer abgeleitete Klasse trägt die Daten in die entsprechende Datenbank ein.

HTML-Fragmente bauen

Der Befehl build:create-fragment erlaubt es mit den Daten einer \Alvine\Application\Platform\Types\DataSource HTML-Fragmente zu bauen.
Es können Parameter oder eine Konfigurationsdatei übergeben werden. Bei Parametern ist nur ein Template und ein Ausgabefile erlaubt.

Argument Kurzform Beschreibung Beispiel
--datasource -s DataSource-Klasse vom Typ AlvineApplicationPlatformTypesDataSource
--template -t Pfad auf die zu verwendende HTML-Datei /tmp/template.html
--locale -l Zu verwendende Lokale de
--company -c Mandant 1
--idlist -i Einschränkungen der zu ladenen IDs, Kommaliste der Primären Schlüssel zum Beispiel IIDs 10094,10095
--delta-uuid UUID für die Abfrage des letzten Datums in der co_delta_lastrequest 57a69a47-8f1f-482d-b9e8-ffa1ebc8548b
--disable-delta abschalten der Delta Funktion true
--selector -e DOM-Selektor zum Ausschneiden von Nodes. #myID
--output -o Zieldatei, in das das Ergebnis geschrieben wird. Der Dateiname kann Platzhalter aus der Datasource enthalten (Die Platzhalter müssen mit geschweiften Klammern eingefasst sein z.B. /tmp/result
--debug -d Debugging des Befehls einschalten
--config Json Konfiguration Datei

Json Konfiguration

{
    "company": "1",
    "locale": "de",
    "datasource": "\\Customisation\\Builder\\DataSource\\Commerce\\Item",
    "delta-uuid": "5b4b135b-5d3b-4fc4-b148-9bbb051fb17c", 
    "files": [
        {
            "template": "{CUSTOMISATIONPATH}resource/frontend/template/detail_guest.html",
            "selector": ".myClass",
            "output": "{CUSTOMISATIONPATH}resource/frontend/html/detail/guest/{iid}_item.html"
        },
        {
            "template": "{CUSTOMISATIONPATH}resource/frontend/template/detail.html",
            "selector": "",
            "output": "{CUSTOMISATIONPATH}resource/frontend/html/detail/customer/{iid}_item.html"
        },
        {
            "template": "{CUSTOMISATIONPATH}resource/frontend/template/gallery.html",
            "selector": "",
            "output": "{CUSTOMISATIONPATH}resource/frontend/html/gallery/customer/{iid}_gallery.html"
        },
        {
            "template": "{CUSTOMISATIONPATH}resource/frontend/template/gallery_guest.html ",
            "selector": "",
            "output": "{CUSTOMISATIONPATH}resource/frontend/html/gallery/guest/{iid}_gallery.html"
        },
        {
            "template": "{CUSTOMISATIONPATH}resource/frontend/template/interested.html",
            "selector": "",
            "output": "{CUSTOMISATIONPATH}resource/frontend/html/youmightalsobeinterested/{iid}_gallery.html"
        }
    ]
}

Javscript zusammenfassen

Mit dem Befehl build:js könne Javascript-Dateien zu einer Datei zusammengefasst werden. Es können mehrere Verzeichnisse und Dateien über den Parameter --source hinzugefügt werden. Die Dateien werden mittels Babel und Uglify-JS bearbeitet. Externa Bibliotheken können über den Parameter --extern hinzugefügt werden. Diese Dateien werden ohne Bearbeitung hinzugefügt.

/opt/alvine-platform/bin/alvine-platform build:js -s source/ -s /dev-source/main.js -e https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/core.js

Hinweis

Für diese Funktion werden die Node-Module babel und uglifyJS benötigt.

Die Konfiguration von Babel muss über Konfigurationsdateien erfolgen. Eine mögliche Konfiguration sieht folgendermaßen aus babel.config.js:

module.exports = function (api) {
    api.cache(true);

    const presets = ['@babel/preset-env'];

    return {
                presets,
              };
}
Argument Kurzform Beschreibung Beispiel
--source -s Verzeichnis in dem die Quelldateien liegen oder Javascript-Datei. /src
--output -o Zieldatei in das das Ergebnis geschrieben wird. /dist
--node-path -n Verzeichnis in dem das Verzeichnis node_modules liegt. /var/lib/nodejs
--extern -e URL externer Dateien, die eingebunden werden sollen (Datei wird nicht bearbeitet). /var/lib/nodejs
--no-minify Ergebnis nicht minimieren.
--no-babel BabelJS nicht verwenden

Css zusammenfassen

Mit dem Befehl build:css können CSS-Dateien zu einer Datei zusammengefasst werden.

Argument Kurzform Beschreibung Beispiel
--source -s Verzeichnis in dem die Quelldateien liegen. /src
--output -o Zieldatei in das das Ergebnis geschrieben wird. /dist
--node-path -n Verzeichnis in dem das Verzeichnis node_modules liegt. /var/lib/nodejs
--extern -e URL externer Dateien, die eingebunden werden sollen. /var/lib/nodejs
--no-minify Ergebnis nicht minimieren.

Voraussetzungen

Für einige Befehle sind NodeJS Bibliotheken notwendig. Diese können über folgendes Skript installiert werden:

cat <<"EOF" > package.json
{
  "devDependencies": {
    "@babel/cli": "^7.2.3",
    "@babel/core": "^7.2.2",
    "@babel/highlight": "^7.0.0",
    "@babel/polyfill": "^7.2.5",
    "@babel/preset-env": "^7.2.3",
    "html-minifier": "^3.5.21",
    "uglify-js": "^3.4.9",
    "uglifycss": "0.0.29",
    "uglifyjs": "^2.4.11",
    "webpack": "^4.28.3",
    "webpack-cli": "^3.2.0"
  },
  "dependencies": {
    "core-js": "^2.6.1"
  }
}
EOF

npm install

Infos zum Setup von Babel finden sich hier.


  1. Datensätze die eine Gültigkeit haben, die evtl. in der Zukunft erst gültig werden oder die Gültigkeit verlieren. Müssen zu den Entsprechenden Zeitpunkten wieder getriggert werden damit das Delta erkannt wird. Hierzu wird der Trigger erweitert mit einem Insert in die ´co_delta_schedule_event´ Tabelle.