Direkt zum Hauptinhalt

Initiator: Generisches Python-Template für "Process"

Generisches Python-Template für Initiatoren

Dieses einfache Template schreibt abwechseln alle 2 Sekunden den Zustand Free und den Zustand InUse durch einen Nutzer für eine Ressource. Es hat keinen praktischen Nutzen, zeigt jedoch, wie der Initiator zu bedienen ist. Ein Initiator erlaubt als das aktive Verändern des Zustand einer Ressource, an die er gebunden ist.

Wichtig: Die OID 1.3.6.1.4.1.48398.612.2.4 muss angegeben werden, damit FabAccess weiß, dass es sich um einen Zustand hält, der an die API übermittelt wird.

Erlaubte Zustände sind:

  • Free
  • InUse:<UserId>
  • ToCheck:<UserId>
  • Blocked:<UserId>
  • Disabled
  • Reserved:<UserId>
  • Raw:<data>
mkdir -p /opt/fabinfra/adapters/initiator_process_example/
vim init.py
#!/usr/bin/env python

import os
import sys
import time
import logging
LOG_FILE = os.path.join(os.path.dirname(__file__), 'init.err.log')
logging.basicConfig(
    filename=LOG_FILE,
    format='%(asctime)s %(levelname)-8s %(message)s',
    level=logging.DEBUG,
    datefmt='%Y-%m-%d %H:%M:%S')

try:
    # Statements, die per print() an stdout gegeben werden, werden in bffhd geschrieben

    t_sleep = 3 #darf nicht 0 sein. Sonst wechseln die Zustände zu schnell durch und verursachen Fehler und ein gefülltes BFFH Log (journalctl)

    # Versetze die Ressource (Maschine) in den Zustand "Free"
    state = '{ "state": "Free" }'
    print(state)
    sys.stdout.flush()
    logging.debug(state)
    time.sleep(t_sleep)

    # Versetze die Ressource (Maschine) in den Zustand "Blocked" durch den Nutzer "Admin"
    state = '{ "state": { "InUse": { "id": "Admin" } } }'
    print(state)
    sys.stdout.flush()
    logging.debug(state)
    time.sleep(t_sleep)

    # Versetze die Ressource (Maschine) in den Zustand "Reserved" durch den Nutzer "Admin"
    state = '{ "state": { "Reserved": { "id": "Admin" } } }'
    print(state)
    sys.stdout.flush()
    logging.debug(state)
    time.sleep(t_sleep)

    # Versetze die Ressource (Maschine) in den Zustand "ToCheck" durch den Nutzer "Admin"
    state = '{ "state": { "ToCheck": { "id": "Admin" } } }'
    print(state)
    sys.stdout.flush()
    logging.debug(state)
    time.sleep(t_sleep)

    # Versetze die Ressource (Maschine) in den Zustand "Blocked" durch den Nutzer "Admin"
    state = '{ "state": { "Blocked": { "id": "Admin" } } }'
    print(state)
    sys.stdout.flush()
    logging.debug(state)
    time.sleep(t_sleep)

    # Versetze die Ressource (Maschine) in den Zustand "Disabled"
    state = '{ "state": "Disabled" }'
    print(state)
    sys.stdout.flush()
    logging.debug(state)
    time.sleep(t_sleep)

except Exception as e:
    logging.debug(e)
    sys.exit(1)

sys.exit(0)
chmod +x /opt/fabinfra/adapters/initiator_process_example/init.py

Wir binden den Inititator entsprechend in unsere Konfiguration ein.

Siehe auch Aktor: Generisches Python-Template für "Process"