[inhalt]
Projekt BISO 3 - Handbuch

Konfiguration

English Version

Scheduler (Cron)

BISO verwendet crunz als zentralen Task-Scheduler. Anstatt für jede wiederkehrende Aufgabe einen eigenen Cronjob einzurichten, wird nur ein einziger Cronjob benötigt. Der Scheduler prüft selbständig, welche Tasks fällig sind und führt diese aus.

Die Task-Dateien befinden sich im Verzeichnis webroot/backend/scheduler/tasks/. Einzelne Tasks werden je nach Konfiguration (Config) oder Parameter (Admin > Parameter) bedingt aktiviert.

Einrichtung Cronjob

Auf dem Kundensystem muss ein einziger Crontab-Eintrag eingerichtet werden, der jede Minute läuft:

* * * * *   www-data   /usr/bin/php /var/www/biso/webroot/biso-cli scheduler run

Hinweis: Der Pfad /var/www/biso/webroot/ muss an die jeweilige Installation angepasst werden.

Der Scheduler delegiert an crunz, welches die einzelnen Task-Dateien einliest und nur die zum jeweiligen Zeitpunkt fälligen Tasks ausführt. Überlappende Ausführungen werden durch preventOverlapping() verhindert.

CLI-Befehle

Befehl Beschreibung
php biso-cli scheduler list Alle registrierten Tasks mit Zeitplan anzeigen
php biso-cli scheduler run Fällige Tasks ausführen
php biso-cli scheduler run --force Alle Tasks sofort ausführen (unabhängig vom Zeitplan)
php biso-cli scheduler run --task=N Bestimmten Task nach Nummer ausführen

Neuen Task erstellen

Um einen neuen Scheduler-Task hinzuzufügen, wird eine neue PHP-Datei im Verzeichnis webroot/backend/scheduler/tasks/ erstellt. Der Dateiname muss auf Tasks.php enden (z.B. MeinNeuerTasks.php).

Grundstruktur einer Task-Datei:

<?php

use Crunz\Schedule;

require_once __DIR__ . '/../../../components/composer/kadenpartner/gaia/bootstrap.php';

$schedule = new Schedule();

// Bedingte Aktivierung (optional):
if (Param::get('mein_feature_aktiv', false)) {
    $schedule->run(PHP_BINARY . ' ' . Config::get('rootdir') . '/biso-cli mein-command')
        ->daily()->at('08:00')
        ->description('Beschreibung des Tasks')
        ->preventOverlapping()
        ->appendOutputTo(Config::get('tmpdir') . '/mein-task.log');
}

return $schedule;

Scheduling-Methoden Beispiele

Methode Beschreibung
->everyMinute() Jede Minute
->hourly() Stündlich
->hourlyAt('15') Stündlich um Minute 15
->daily() Täglich um Mitternacht
->daily()->at('08:00') Täglich um 08:00
->weekly() Wöchentlich
->weeklyOn(1, '13:30') Wöchentlich am Montag um 13:30 (0=Sonntag)
->monthly() Monatlich
->cron('30 8 * * Mon,Fri') Beliebiger Cron-Ausdruck

Best Practices

Logging

Jeder Task schreibt seine Ausgabe in eine eigene Log-Datei im Verzeichnis data/tmp/:

SMS-Erinnerung

SMS-Erinnerungen können via SMTP-Gateway versendet werden.

config.php

In der Config.php muss die SMS-Gateway Mail-Domain und -Sender gesetzt werden:

Config::set('sms_gateway_mail_domain', 'smsc.admin.ch');
Config::set('sms_gateway_mail_sender', 'info@kunde.ch');
Config::set('sms_ausloeser_username', 'admin');

Parameter

Parameter Bezeichnung Bedeutung
sms_versand Mit Termin-SMS Termin-SMS Modul ein/aus
sms_notification_time Erinnerungs-Distanz in Stunden Definiert die zeitliche Distanz vor dem Termin, in der eine SMS-Erinnerung ausgelöst wird
sms_versand_manuell manuell Auslösen SMS kann über die Termin-Oberfläche manuell ausgelöst werden
sms_versand_termin_vorlage Termin-Vorlage Vorlage für die BF-Termine kann max. 160 Zeichen lang sein
sms_versand_test_vorlage Gruppentest-Vorlage Vorlage für die Gruppentest-Termine kann max. 160 Zeichen lang sein

Cronjob

Damit die SMS-Termin Mail's an den SMS-Gateway gesendet werden, muss in regelmaessigen Abstaenden das CLI-Command biso-cli termin-sms --do-it ausgeführt werden.

Beispiel Linux Crontab:

0 *    * * *   www-data    /usr/bin/php /var/www/biso/webroot/biso-cli termin-sms --do-it

Nachbefragungs-Emails

Nach Fallabschluss können Fälle mit einem Nachbefragungs-Email beliefert werden. Dazu sind folgende Voraussetzungen notwendig:

Die Nachbefragung wird via Cron-Job z.B. täglich angestossen:

$ php webroot/biso-cli send-nachbefragung

Konfiguration

Folgende Konfigurationen sind für die Nachbefragung relevant:

Kunden-Spezialconfigs

Logging

Der Nachbefragungs-CLI-Job loggt seinen Output in ein separates Logging-Target:

SendNachbefragung

Die Logs können somit in ein eigenes Logfile oder auf die Konsole geleitet werden:

// config.php:
Config::set('LOGGING', [
    'SendNachbefragung' => [
        'type' => Logger::TYPE_CONSOLE,
        'level' => Logger::DEBUG,
    ]
]);

DB-Log-System

SQL

Das Log-System setzt eine zweite Datenbank mit der Tabelle Log voraus.

CREATE DATABASE biso_log
    WITH
    OWNER = bisoadm
    ENCODING = 'UTF8'
    LC_COLLATE = 'de_CH.utf8'
    LC_CTYPE = 'de_CH.utf8'
    TABLESPACE = pg_default
    CONNECTION LIMIT = -1

CREATE TABLE IF NOT EXISTS log
(
    id serial NOT NULL,
    logtime timestamp,
    context text,
    benutzer text,
    action text,
    record_id int,
    record text ,
    CONSTRAINT log_pkey PRIMARY KEY (id)
)

config.php

In der Config.php muss man eine zweite DB Connection eintragen sowie kann man das Log-System für Store oder Destroy Aktionen seperat aktivieren.

$db['log'] = array();
$db['log']['pdo-dsn'] = 'pgsql:host=XXX.XXX.XXX.XXX port=5432 dbname=biso_log';
$db['log']['username'] = 'bisoadm';
$db['log']['password'] = 'PASSWORD';
$db['log']['schema'] = 'public';

Config::set('LOG_STORE', false);
Config::set('LOG_DESTROY', true);

Job-Queue

Siehe Background-Job-System für die Dokumentation des Job-Queue-Systems.