Prozesszustände¶
Der Zustand eines Prozesses kann verschiedene Dinge beschreiben. Zum Beispiel, ob ein Befehl oder eine Aktion erfolgreich ausgeführt wurde oder ob es Probleme gab. Da jedes ausgeführte Programm auf unterschiedliche Weise seinen Erfolg oder Zustand meldet, enthält Actions ein flexibles System, um diesen Zustand zu erkennen.
Schlussendlich wird der Zustand einer ausgeführten Aktion dem Benutzer gemeldet und optional an den Statistik-Server gesendet, wo er später analysiert werden kann. Zum Beispiel: Wenn du eine Aktion hast, die einen Prozess beenden soll, kannst du Zustände erstellen, um zu analysieren, in wie vielen Fällen die Beendigung erfolgreich war.
Der Prozesszustand¶
Ein Prozesszustand ist ein Text, den du mehr oder weniger frei definieren kannst. Siehe den Abschnitt zur Konfiguration für Einschränkungen. Dieser Text beschreibt eine gegebene Situation, wie zum Beispiel „Erfolg“, wenn die Aktion erfolgreich war.
Es gibt einen initialen Zustand, den du setzen musst. Wenn der Prozess gestartet wird, wird der Prozesszustand auf diesen initialen Zustand gesetzt.
Ereignisse¶
Während der Prozess läuft, werden Ereignisse generiert. Derzeit gibt es zwei verschiedene Arten von Ereignissen. Das erste Ereignis wird jedes Mal erzeugt, wenn der Prozess eine Ausgabezeile auf der Konsole produziert.
Das zweite Ereignis wird erzeugt, wenn der Prozess beendet wird. Es wird in jedem Fall erzeugt, in dem ein Prozess beendet wird, selbst im Falle eines Absturzes oder wenn der Prozess aus irgendeinem Grund nicht starten konnte.
Diese Ereignisse können einen Übergang zwischen zwei Zuständen auslösen. Wann ein solcher Übergang stattfindet, ist in einer Regel festgelegt, die den Ereignistyp und eine Bedingung angibt, die erfüllt sein muss, bevor der Übergang erfolgt.
Regeln, Übergänge und Bedingungen¶
Um den aktuellen Zustand in einen anderen zu ändern, erstellst du einen Übergang zwischen zwei Zuständen. In der Konfiguration definierst du lediglich die Regeln, bei welchem Ereignis und unter welcher Bedingung ein Übergang zwischen früheren Zuständen in einen neuen Zustand stattfindet.
Siehe das folgende Konfigurationsfragment, das eine Regel für einen Übergang konfiguriert.
1...
2<Value name="initialStateName">Success</Value>
3<List name="stateRules">
4 <ListEntry>
5 <Value name="newState">Error</Value>
6 <Value name="previousStates">Success</Value>
7 <Value name="event">Output</Value>
8 <Value name="condition">/ERROR/.test(line)</Value>
9 </ListEntry>
10</List>
Dieses Konfigurationsfragment erstellt einen Übergang, wie in der folgenden Illustration dargestellt:
Der Anfangszustand ist Success
. Jeder Listeneintrag ist eine einzelne Regel. Im Beispiel ist der neue Zustand als Error
definiert.
Der vorherige Zustand ist auf Success
gesetzt. Diese Regel wird daher nur überprüft, wenn der aktuelle Prozesszustand Success
ist, in allen anderen Fällen wird diese Regel einfach übersprungen.
Als Ereignis ist Output
angegeben. Jedes Mal, wenn der Prozess eine neue Ausgabezeile produziert, wird diese Regel überprüft. Zuerst wird der vorherige Zustand überprüft, ob er den von dir angegebenen Zuständen entspricht, bei Erfolg wird die Bedingung überprüft.
Die Bedingung in unserem Beispiel ist auf /ERROR/.test(line)
gesetzt. Dies ist ein ECMA-Script-Ausdruck. Der erste Teil /ERROR/
ist ein regulärer Ausdruck, der in ein reguläres Ausdrucksobjekt umgewandelt wird. Auf diesem Objekt wird die Methode .test()
mit line
als Argument aufgerufen. Die Variable line
enthält die Ausgabe vom Prozess. Diese Ausgabe wird gegen den definierten regulären Ausdruck getestet, der nach dem Text ERROR
in der Zeile sucht.
Wenn das Ergebnis dieses Ausdrucks wahr ist, wird der Übergang vollzogen und der neue Prozesszustand wird Error
sein.
Wichtige Hinweise zur Konfiguration von Zustandsregeln¶
Du kannst beliebig viele Regeln definieren und so viele Zustände festlegen, wie du benötigst, um das Ergebnis der Aktion auszudrücken. Es ist wichtig zu wissen, dass stets alle Regeln in der konfigurierten Reihenfolge geprüft werden. Daher ist es möglich, dass der Zustand bei demselben Ereignis mehrmals geändert wird, wenn mehrere Regeln zutreffen. Dennoch kannst du keine „Schleifen“ erzeugen, da jede Regel pro Ereignis nur einmal geprüft wird.
Lies den Abschnitt Die Liste stateRules für Details zur Konfiguration der Regeln.