Skip to content
Snippets Groups Projects
AppServiceProvider.php 2.19 KiB
Newer Older
Dominik Hebeler's avatar
Dominik Hebeler committed
<?php

namespace App\Providers;

Dominik Hebeler's avatar
Dominik Hebeler committed
use Illuminate\Support\ServiceProvider;
use Illuminate\Queue\Events\JobProcessed;
use Illuminate\Queue\Events\JobProcessing;
Dominik Hebeler's avatar
Dominik Hebeler committed

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {

        # Wir loggen im Redis-System für jede Sekunde des Tages, wie viele Worker aktiv am Laufen waren.
        # Dies ist notwendig, damit wir mitbekommen können, ab welchem Zeitpunkt wir zu wenig Worker zur Verfügung haben.
        Queue::before(function (JobProcessing $event) {
            $this->begin = strtotime(date(DATE_RFC822, mktime(date("H"),date("i"), date("s"), date("m"), date("d"), date("Y"))));
        });
        Queue::after(function (JobProcessed $event) {
            $today = strtotime(date(DATE_RFC822, mktime(0,0,0, date("m"), date("d"), date("Y"))));
            $end = strtotime(date(DATE_RFC822, mktime(date("H"),date("i"), date("s"), date("m"), date("d"), date("Y")))) - $today;
            $expireAt = strtotime(date(DATE_RFC822, mktime(0,0,0, date("m"), date("d")+1, date("Y"))));
            $redis = Redis::connection('redisLogs');
            $p = getmypid();
            $host = gethostname();
            $begin = $this->begin - $today;
            $redis->pipeline(function($pipe) use ($p, $expireAt, $host, $begin, $end)
                for( $i = $begin; $i <= $end; $i++)
                {
                    $pipe->sadd("logs.worker.$host.$i", strval($p));
                    $pipe->expire("logs.worker.$host.$i", 10);
                    $pipe->eval("redis.call('hset', 'logs.worker.$host', '$i', redis.call('scard', 'logs.worker.$host.$i'))", 0);
                    $pipe->sadd("logs.worker", $host);
                    if( date("H") !== 0 )
                    {
                        $pipe->expire("logs.worker.$host", $expireAt);
                        $pipe->expire("logs.worker", $expireAt);
                    }
                }
            });
        });
Dominik Hebeler's avatar
Dominik Hebeler committed
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}