Blog

CSV-Plugin für GenericDashboardStats

21.07.2020 // Renée Bäcker

Im letzten Artikel habe ich bereits die Erweiterung GenericDashboardStats und die Möglichkeiten, deutlich flexiblere Dashboard-Statistiken zu erstellen, vorgestellt. Bisher konnten nur Daten angezeigt werden, die sich mit einer Ticketsuche bestimmen lassen. Das ist aber nicht immer ausreichend.

Seit der aktuellen Version der Erweiterung ist es möglich, Plugins zu nutzen. Wir haben z.B. ein Plugin entwickelt, um Daten aus CSV-Dateien auszulesen. So können Sie von anderen Systemen wie einer CMDB, einer Telefonanlage oder einem CRM eine CSV-Datei exportieren lassen, dessen Inhalte dann in der Statistik angezeigt werden.

Nehmen wir mal an, das CRM erstellt folgende CSV-Datei:

2020-07-01;new_lead;3
2020-07-01;offers;5
2020-07-02;new_lead;2
2020-07-02;offers;2
2020-07-03;new_lead;4
2020-07-03;offers;2
2020-07-04;new_lead;4
2020-07-04;offers;2
2020-07-05;new_lead;3
2020-07-05;offers;3
2020-07-06;new_lead;1
2020-07-06;offers;4
2020-07-07;new_lead;2
2020-07-07;offers;4

Aus dieser Datei sollen zwei Linien in der Statistik erzeugt werden: Eine für die neuen Leads und eine für die Angebote die verschickt wurden.

Hierfür legen wir eine neue Datei in Kernel/Config/Files/XML an (z.B. CRMStats.xml):

<?xml version="1.0" encoding="utf-8"?>
<otrs_config version="2.0" init="Application">
  <!-- Hier kommen dann die "Settings" hin -->
</otrs_config>

Wenn die Statistik in einem extra Widget angezeigt werden soll, dann benötigen wir eine Konfigurationseinstellung für das neue Dashboard-Widget:

    <Setting Name="DashboardBackend###257-CRMStats" Required="0" Valid="1">
        <Description Translatable="1">...</Description>
        <Navigation>Frontend::Agent::View::Dashboard</Navigation>
        <Value>
            <Hash>
                <Item Key="Module">Kernel::Output::HTML::Dashboard::TicketStatsGeneric</Item>
                <Item Key="SysConfigBase">CRMStats</Item>
                <Item Key="Title">CRM Stats</Item>
                <Item Key="Created">1</Item>
                <Item Key="Closed">1</Item>
                <Item Key="Permission">rw</Item>
                <Item Key="Block">ContentSmall</Item>
                <Item Key="Group"></Item>
                <Item Key="Default">1</Item>
                <Item Key="CacheTTL">30</Item>
                <Item Key="Mandatory">0</Item>
            </Hash>
        </Value>
    </Setting>

Jetzt müssen die einzelnen Linien definiert werden. Für die beiden Informationen die wir anzeigen wollen sieht das so aus:

    <Setting Name="CRMStats::Stats###001-new-leads" Required="0" Valid="1">
        <Description Translatable="1">A CSV Dummy</Description>
        <Navigation>Stats</Navigation>
        <Value>
            <Hash>
                <Item Key="OptionKey">CSVNewLeads</Item>
                <Item Key="type">plugin</Item>
                <Item Key="module">Kernel::System::GenericDashboardStats::CSV</Item>
                <Item Key="label">New Leads</Item>
            </Hash>
        </Value>
    </Setting>
    <Setting Name="CRMStats::Stats###002-offers" Required="0" Valid="1">
        <Description Translatable="1">A CSV Dummy</Description>
        <Navigation>Stats</Navigation>
        <Value>
            <Hash>
                <Item Key="OptionKey">CSVOffers</Item>
                <Item Key="type">plugin</Item>
                <Item Key="module">Kernel::System::GenericDashboardStats::CSV</Item>
                <Item Key="label">Offers</Item>
            </Hash>
        </Value>
    </Setting>

Neu ist hier der type plugin , über den entsprechend definiert wird, dass ein Plugin genutzt werden soll. Welches Plugin genutzt werden soll, wird dann über das module eingestellt. Die Arbeit mit der CSV-Datei macht also das Modul Kernel::System::GenericDashboardStats::CSV .

In der Statistiken werden so aber noch keine Werte angezeigt, da noch die Quelle für die Werte fehlt. Und das Plugin kann nicht automatisch wissen, welche Informationen aus der CSV-Datei wie zusammenhängen und was angezeigt werden soll. Wenn wir uns die Datei näher anschauen, sehen wir, dass die Spalten durch ein ; getrennt sind. In der ersten Spalte steht das Datum, die zweiten Zeile bestimmt in welcher Linie etwas angezeigt werden soll und die dritte Spalte ist dann der Wert, der in der Statistik auftauchen soll.

Genau das muss jetzt in der Konfigurationsdatei auch so definiert werden. Beispielhaft für die Neuen Kontakte sieht das folgendermaßen aus:

    <Setting Name="CSVNewLeads" Required="0" Valid="1">
        <Description Translatable="1">Config for the</Description>
        <Navigation>Stats</Navigation>
        <Value>
            <Hash>
                <Item Key="cache_ttl">1</Item>
                <Item Key="count_column">2</Item>
                <Item Key="date_column">0</Item>
                <Item Key="date_format">%Y-%m-%d</Item>
                <Item Key="filter">new_lead</Item>
                <Item Key="filter_by_column">1</Item>
                <Item Key="path">/opt/otrs/var/crm.csv</Item>
                <Item Key="quote">"</Item>
                <Item Key="separator">;</Item>
                <Item Key="skip_first_line">0</Item>
            </Hash>
        </Value>
    </Setting>

Der Name dieser Einstellung bezieht sich auf den Wert, den wir weiter oben bei OptionKey angegeben haben.

Eines muss man bei den Werten beachten: Die Zählung der Spalten beginnt bei 0.

Diese Parameter stehen zur Verfügung:

  • cache_ttl

    Damit nicht bei jedem einzelnen Wert der Statistik immer wieder die CSV-Datei ausgelesen wird, werden die Daten gecached. Wie lange diese Daten gültig sind, wird über cache_ttl eingestellt. Der Wert wird in Sekunden angegeben

  • count_column

    Die Spalte, in der die anzuzeigenden Werte stehen. Achtung: Die Zählung der Spalten beginnt bei 0. Diese Spalte wird benötigt.

  • date_column

    Die Datumsspalte. Diese Spalte wird benötigt.

  • date_format

    Das Format des Datums. Nutzt die Formatierungswerte von strftime .

  • filter

    In der CSV-Datei können viele Daten stehen, die aber nicht in dem Graphen angezeigt werden soll. Dann kann mit dem Filter bestimmt werden, welche Werte herangezogen werden sollen. Hier interessieren wir uns erstmal nur für die neuen Kontakte, daher filtern wir nach new_lead .

  • filter_by_column

    Die Spalte, nach der gefiltert werden soll.

  • path

    Der Pfad zur CSV-Datei

  • quote

    Werden Quoting-Zeichen genutzt (meistens " ), dann muss das hier angegeben werden

  • separator

    Das Trennzeichen zwischen den Spalten

  • skip_first_line

    Sind in der ersten Zeile der CSV-Datei die Spaltenüberschriften zu finden, muss skip_first_line auf 1 gesetzt werden.

Das damit erstellte Dashboard-Widget sieht dann so aus:

Widget mit Graph aus CSV-Datei

Über den Plugin-Mechanismus von GenericDashboardStats sind noch weitere Anbindungen denkbar, z.B. Anbindung von REST-APIs wie Gitlab zur Darstellung von offenen Bugmeldungen.

Sie haben Interesse an dem Modul oder ein anderes Anliegen? Dann kontaktieren Sie uns doch.

Permalink:

Archiv