Zum Inhalt

Events#

Mit dem Event-Add-on automatisierst du Aktionen bei Änderungen an deiner IT-Dokumentation. Wird etwas in i-doit geändert, kannst du Dritt-Systeme automatisch informieren. Dokumentierst du beispielsweise eine neue VM, kann diese automatisch auf einem Virtualisierungs-Host erstellt und provisioniert werden.

Ein Praxisbeispiel findest du auf unserem Blog

Rechtevergabe#

Unter Verwaltung → Berechtigungen → Events können Rechte für Personen und Personengruppen angepasst werden.

Rechtevergabe

Konfiguration#

Die Konfiguration wird über Verwaltung → Add-ons → Events → Hooks erreicht.

Konfiguration

404 Not Found

Erscheint beim Aufruf der Event-Konfiguration lediglich eine Fehlermeldung, die Seite könne nicht gefunden werden, liegt das mit aller Wahrscheinlichkeit an einer fehlerhaften Konfiguration des Webservers. Sowohl das Apache-Modul rewrite muss aktiviert sein, als auch das Einlesen der .htaccess-Datei im Installationsverzeichnis von i-doit muss erlaubt sein (AllowOverride All).

Du kombinierst Events mit Befehlsaufrufen. Ein Event wird durch einen Hook ausgelöst -- also bei einer internen Routine in i-doit. Folgende Events stehen zur Verfügung:

  • Kategorie
    • Neuanlage (nur über die Web GUI)
    • Speichern
    • Archivieren/Löschen/Wiederherstellen/Purge
  • Objekt
    • Neuanlage
    • Purge
  • Objekttyp
    • Neuanlage/Speichern
    • Purge

Für alle Zustände in der IT-Dokumentation gibt es passende Events. Du kannst beliebig viele Event-zu-Befehlsaufruf-Kombinationen anlegen.

Beim Eintreten eines konfigurierten Events führt i-doit sofort ein Shellscript aus. Beachte dabei:

  • Das Script muss vom Benutzer bzw. der Gruppe ausführbar sein, unter der der Webserver läuft (unter Debian: www-data).
  • Setze unter GNU/Linux das Rechtebit zum Ausführen (chmod +x).
  • Die Programmiersprache ist beliebig, solange das Betriebssystem sie unterstützt (Bash, PHP, Python, Perl etc.).

Befehlsaufruf

Das Shellscript erhält Informationen zum Event als BASE64-kodiertes JSON. Hier ein Beispiel nach der Dekodierung -- es zeigt das Speichern eines Kategorie-Eintrags:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
{
    "success": 0,
    "objectID": "2912",
    "categoryID": 1,
    "categoryConst": "C__CATG__GLOBAL",
    "categoryDataID": "2949",
    "multivalue": false,
    "changes": [],
    "postData": {
        "data_id": "2948",
        "properties": {
            "title": {
                "tag": "title",
                "value": "Headquarter Network",
                "title": "LC__UNIVERSAL__TITLE"
            },
            "created": {
                "tag": "created",
                "value": "2016-04-26 14:41:01",
                "title": "LC__TASK__DETAIL__WORKORDER__CREATION_DATE"
            },
            "created_by": {
                "tag": "created_by",
                "value": "admin",
                "title": "LC__UNIVERSAL__CREATED_BY"
            },
            "changed_by": {
                "tag": "changed_by",
                "value": "admin",
                "title": "LC__CMDB__LAST_CHANGE_BY"
            },
            "purpose": {
                "tag": "purpose",
                "value": "1",
                "id": "1",
                "title_lang": "LC__CMDB__CATG__PURPOSE_PRODUCTION",
                "title": "LC__CMDB__CATG__GLOBAL_PURPOSE"
            },
            "category": {
                "tag": "category",
                "value": "2",
                "id": "2",
                "title_lang": "Demo",
                "title": "LC__CMDB__CATG__GLOBAL_CATEGORY"
            },
            "sysid": {
                "tag": "sysid",
                "value": "SYSID_1461677372",
                "title":"SYSID"
            },
            "cmdb_status": {
                "tag": "cmdb_status",
                "value": "6",
                "id": "6",
                "const": "C__CMDB_STATUS__IN_OPERATION",
                "title_lang": "LC__CMDB_STATUS__IN_OPERATION",
                "title": "LC__UNIVERSAL__CMDB_STATUS"
            },
            "type": {
                "tag": "type",
                "value": "77",
                "id": "77",
                "const": "C__OBJTYPE__SUPERNET",
                "title_lang": "LC__OBJTYPE__SUPERNET",
                "title": "LC__REPORT__FORM__OBJECT_TYPE"
            },
            "tag": {
                "tag": "tag",
                "title": "LC__CMDB__CATG__GLOBAL_TAG",
                "value": []
            },
            "description": {
                "tag": "description",
                "title": "LC__CMDB__LOGBOOK__DESCRIPTION"
            }
        }
    },
    "data": {
        "2949":{
            "title": "Headquarter Network",
            "status": "Normal",
            "created": "2016-04-26 14:47:57",
            "created_by": "admin",
            "changed": "2016-04-26 14:47:57",
            "changed_by": "admin",
            "purpose": "Produktion",
            "category": "Demo",
            "sysid": "SYSID_1461674878",
            "cmdb_status": "In Betrieb",
            "type": "Supernet",
            "tag": null,
            "description": "",
            "_id": 2912,
            "_title": "<span class=\"hide\">Headquarter Network<\/span><a name=\"Headquarter Network\" href=\"?objID=2912\" id=\"lb_58_2912\">Headquarter Network<\/a><script type='text\/javascript'>if ($('lb_58_2912')) new Tip('lb_58_2912', '', {ajax: {url: '\/i-doit\/?ajax=1&call=quick_info&objID=2912'}, delay: '0', stem: 'topLeft', style: 'default', className: 'objectinfo'});<\/script>",
            "_created": "<span data-date=\"2016-04-26 14:47:57\" class=\"hide\"><\/span>26.04.2016 (admin)",
            "_changed": "<span data-date=\"2016-04-26 14:47:57\" class=\"hide\"><\/span>26.04.2016 (admin)",
            "_cmdb_status": "<div class=\"cmdb-marker\" style=\"background-color:#33C20A;\"><\/div> In Betrieb"
        }
    }
}

In diesem Beispiel wurde die Kategorie Allgemein für das Objekt "Headquarter Network" erfolgreich gespeichert.

Du kannst zusätzliche, statische Parameter konfigurieren, die dem Shellscript übergeben werden. Platzhalter werden dabei nicht unterstützt.

i-doit Controller

Die beschriebenen Shellscripte sind nicht nur dafür geeignet, Dritt-Systeme zu steuern, sondern auch i-doit selbst. Es spricht nichts dagegen, über ein solches Shellscript das Kommandozeilen-Tool von i-doit, den Controller, oder die API aufzurufen. Dadurch können automatisierte Arbeiten innerhalb der IT-Dokumentation erledigt werden.

Performance

Die Befehlsaufrufe werden synchron ausgeführt -- beim Klick auf Speichern wartet i-doit, bis das Shellscript beendet ist. Bei vielen oder umfangreichen Scripts kann das die Web GUI ausbremsen.

Empfehlung: Baue eine Queue. Dein Shellscript nimmt die Parameter entgegen und speichert sie in einer temporären Datei. Ein separater Cronjob arbeitet diese Queue dann asynchron ab. So spürt der Benutzer keine Verzögerung.

Logging#

Jede Ausführung eines Event-Befehlsaufrufs wird protokolliert. Die letzten 500 Einträge findest du unter Verwaltung → Add-ons → Events → Historie (Log).

Logging

Releases#

Version Datum Changelog
1.3 05.09.2022 [Task] Change link to knowledgebase
[Task] PHP 8.0 Compatibilit
[Task] Design Compatibility
[Bug] Events are not triggered when changing/assigning roles
1.2 [Improvement] The event contains information about the user
[Bug] Custom category constants are not passed, when ranking entries
1.1.1 31.07.2019 [Bug] Drop-down empty in hooks for object types
1.1 30.01.2019 [Bug] Constant of user defined categories is missing
1.0.1 [Bug] i-doit 1.12 compatibility
1.0 03.07.2018 Initiales Release