PHPackages                             do1emu/module-ekkon - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. do1emu/module-ekkon

ActiveLibrary

do1emu/module-ekkon
===================

Ekkon – Task-System mit Lauf-Historie und MSSQL-Anbindung als Modul für die Intranet-Plattform.

v1.13.0(2w ago)051↓41.7%MITPHPPHP ^8.3

Since Jul 17Pushed 1w agoCompare

[ Source](https://github.com/kleinebekele/intranet-module-ekkon-base)[ Packagist](https://packagist.org/packages/do1emu/module-ekkon)[ RSS](/packages/do1emu-module-ekkon/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependenciesVersions (19)Used By (0)

Ekkon – Task-System für die Intranet-Plattform
==============================================

[](#ekkon--task-system-für-die-intranet-plattform)

Ekkon führt wiederkehrende Aufgaben aus und macht sie sichtbar: Lauf-Historie mit Dauer und Ergebnis, „jetzt ausführen" auf Knopfdruck, Pause-Schalter je Aufgabe, Benachrichtigungen bei Auffälligkeiten – und eine fertige MSSQL-Anbindung für Aufgaben, die aus einem SQL Server lesen.

Pausierte Aufgaben stehen in der Übersicht **am Ende ihrer Kategorie** und sind **bernsteinfarben** abgesetzt – sie laufen nicht, und das soll man sehen, statt es aus einem fehlenden „nächster Lauf" zu erschließen. Auf der Detailseite sagt es ein Hinweisbalken samt der wichtigen Einschränkung: Pausiert ist nur der Zeitplan, „jetzt ausführen" startet die Aufgabe weiterhin.

> **Voraussetzung:** Dieses Paket ist ein Modul der Intranet-Plattform (`intranet-core`) und erbt von deren `App\Modules\Support\ModuleServiceProvider`. In einem beliebigen Laravel-Projekt läuft es nicht.

Installation
------------

[](#installation)

```
composer require do1emu/module-ekkon
php artisan migrate && php artisan modules:sync
```

Der Server braucht genau **einen** Cron-Eintrag – alles Weitere plant Ekkon selbst:

```
* * * * * php /pfad/zum/intranet/artisan schedule:run

```

In der `.env`:

```
EKKON_TASKS_ENABLED=true

```

Ohne diesen Schalter läuft **kein** Task – weder per Scheduler noch per Button noch per `artisan ekkon:task`. Absicht: Auf Entwicklungsrechnern soll nie versehentlich ein echtes Fremdsystem angefasst werden.

Eine Aufgabe schreiben
----------------------

[](#eine-aufgabe-schreiben)

Eine Klasse unter `src/Tasks//.php`, die von `EkkonTask` erbt – mehr nicht. Registrieren muss man sie nicht, der Key ergibt sich aus dem Pfad:

```
namespace Intranet\Modules\MeinModul\Tasks\Import;

use Intranet\Modules\Ekkon\Tasks\EkkonTask;

class Nachtlauf extends EkkonTask
{
    public string $category = 'Täglich';
    public string $description = 'Liest die Stammdaten der Nacht ein.';

    public function schedule(): string
    {
        return '15 3 * * *';   // Cron-Ausdruck
    }

    public function run(): array
    {
        $this->msg('42 Datensätze übernommen.');   // Klartext für die Historie
        $this->debug['ids'] = [1, 2, 3];           // Details, nur die letzten 10 Läufe

        return ['uebernommen' => 42];              // Kennzahlen als Ergebnis-JSON
    }
}
```

Statt eines starren Cron kann eine Aufgabe ihren nächsten Lauf auch selbst bestimmen (`$this->setInterval($zeitpunkt)`); der Cron wird dann zum Herzschlag.

Aufgaben aus eigenen Modulen beisteuern
---------------------------------------

[](#aufgaben-aus-eigenen-modulen-beisteuern)

Jedes Modul meldet sein Tasks-Verzeichnis im **`register()`** seines Providers an:

```
public function register(): void
{
    parent::register();

    $this->app->singletonIf(TaskRegistry::class);

    $this->app->make(TaskRegistry::class)->addSource(
        $this->moduleBasePath().'/src/Tasks',
        __NAMESPACE__.'\\Tasks',
        'meinvendor/mein-modul',
    );
}
```

`singletonIf` statt `singleton` ist hier nicht Geschmack: Bände ein Modul die Registry hart, würde es die bereits befüllte Instanz eines anderen ersetzen – und dessen Aufgaben wären lautlos verschwunden. `addSource()` gehört ins `register()`, nicht ins `boot()`; aufgelöst wird erst beim ersten Zugriff, dadurch ist die Ladereihenfolge der Provider egal.

> **Konvention: Eine Gruppe gehört genau einem Paket.** Der Task-Key („Gruppe/Name") ist zugleich Schlüssel der Lauf-Historie, Name der Sperre, Route-Parameter und Pause-Schalter. Zwei Aufgaben unter einem Key würden sich Historie und Pause teilen. Passiert es doch, gewinnt die zuerst gefundene; die andere wird verworfen und im Dashboard sowie von `artisan ekkon:task` (Exit-Code
>
> 1. gemeldet.

MSSQL-Anbindung
---------------

[](#mssql-anbindung)

Ekkon registriert eine Laravel-Connection zu einem SQL Server. Aufgaben holen den Namen über die schmale API des Pakets, nicht aus der Config:

```
DB::connection(Ekkon::mssqlConnection())->select('SELECT …');

if (! Ekkon::mssqlKonfiguriert()) { /* … */ }
```

Zwei Wege, je nach installierter PHP-Erweiterung – **nativ** (`pdo_sqlsrv`) oder über **ODBC** (`pdo_odbc` + Microsoft ODBC Driver):

```
MSSQL_CONNECTION=mssql          # Name der Connection; darf zur Quelle passen (z. B. "wawi")

# nativ
MSSQL_HOST=sql.example.local
MSSQL_PORT=1433
MSSQL_DB_DATABASE=meinedb
MSSQL_DB_USERNAME=leser
MSSQL_DB_PASSWORD=…

# oder über ODBC (hat Vorrang, sobald gesetzt)
MSSQL_ODBC_DSN="Driver={ODBC Driver 18 for SQL Server};Server=host,1433;Database=meinedb;TrustServerCertificate=yes"

```

Welcher Treiber vorhanden ist und ob die Verbindung steht, beantwortet die mitgelieferte Aufgabe **`Mssql/Ping`**: Sie meldet fehlende Zugangsdaten und fehlende Erweiterungen im Klartext, statt einen PDO-Fehler zu werfen, den niemand deuten kann.

Benachrichtigungen
------------------

[](#benachrichtigungen)

Eine Aufgabe kann melden, ohne zu wissen, wer es bekommt:

```
public array $meldungsarten = ['import-leer' => 'Nächtlicher Import ohne Ergebnis'];

$this->benachrichtige('import-leer', 'Import leer', 'Heute Nacht kam nichts an.');
```

Die Ziele (Teams-Webhook, Mail) pflegt man unter „Benachrichtigungen" in der Oberfläche. Aufgelöst werden sie beim **Anlegen** der Meldung, zugestellt wird **dumm** – dadurch kennt der Versand weder Meldungsarten noch Empfänger und kann nicht zur `if`-Wüste wachsen. Gibt es für eine Meldungsart keine Route, verschwindet die Meldung nicht, sondern bleibt als `ohne_ziel` sichtbar: Sonst vergisst man die Route und merkt monatelang nicht, dass niemand informiert wird.

Lizenz
------

[](#lizenz)

MIT.

###  Health Score

46

—

FairBetter than 92% of packages

Maintenance97

Actively maintained with recent releases

Popularity12

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity57

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~2 days

Total

18

Last Release

15d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/37b420578fb749b9cba48fbc4eb30fc8ebc63a12e4f607fbcba68041767f2cc2?d=identicon)[do1emu](/maintainers/do1emu)

---

Top Contributors

[![kleinebekele](https://avatars.githubusercontent.com/u/297846298?v=4)](https://github.com/kleinebekele "kleinebekele (20 commits)")

---

Tags

schedulerlaravelmssqlintranetTasks

### Embed Badge

![Health badge](/badges/do1emu-module-ekkon/health.svg)

```
[![Health](https://phpackages.com/badges/do1emu-module-ekkon/health.svg)](https://phpackages.com/packages/do1emu-module-ekkon)
```

###  Alternatives

[matviib/scheduler

Service for scheduling and managing cron tasks in laravel application

203.3k](/packages/matviib-scheduler)[a-bashtannik/fasti

Laravel task scheduler with calendar-based management.

134.7k](/packages/a-bashtannik-fasti)[devakshay/scheduler-list-laravel

A beautiful, real-time developer control center to monitor, search, and manually execute scheduled tasks directly from a premium Pulse-like web interface.

767.7k](/packages/devakshay-scheduler-list-laravel)[moharrum/laravel-adminer

Adminer database management tool for your Laravel application.

451.0k](/packages/moharrum-laravel-adminer)[ramadan/easy-model

A Laravel package for enjoyably managing database queries.

111.6k](/packages/ramadan-easy-model)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
