Отправлять Slack уведомление каждый раз, когда статус меняется в Laravel - PullRequest
0 голосов
/ 07 июня 2018

У меня есть класс уведомлений о состоянии, поэтому при создании статуса он посылает мне слабое сообщение. Проблема, с которой я сталкиваюсь, заключается в том, что новый статус создается каждые несколько минут, а получение слабого сообщения каждые пару минут является повторяющимся.и неконструктивный.Тем более, что существуют десятки серверов, публикующих эти статусы.

Можно ли было бы публиковать сообщения о слабом режиме только в случае изменения статуса определенного сервера?Например, сервер был включен, а затем выключен.

Я попытался получить все статусы сервера, но не могу понять, как получить только последние два с определенным идентификатором сервера.

--------------------------------------------------------- редактирует ------------------------------------------------------------ Ранее пробованная попытка: кроме последней, я бы не хотел там

 $statuses = ServerStatus::all();
    $first = ServerStatus::where('server_id', $notifiable->server_id)->first();
    //dump($first);

    foreach($statuses as $status){
        if($status->server_id === $notifiable->server_id){
            //dump($status);
            if($status->status_id !== $first->status_id){
                return (new SlackMessage)
                    ->content('One of your statuses has been updated!');
            }
            else{
                return (new SlackMessage)
                    ->content('One of your statuses has been not updated!');
            }
        }
    }

и мой ботинокдля отправки уведомления каждый раз при создании ServerStatus:

защищенная статическая функция boot () {

    parent::boot();

    ServerStatus::created(function($model) {

        $original = ServerStatus::where('server_id', $model->server_id)->skip(1)->first();

        dump('original',$original->status_id);
        dump('serverStatus', $model->status_id);

        if ($original && $model->status_id != $original->status_id) {
            $model->notify(new ServerStatusNotification());
        }
    });
}

enter image description here

1 Ответ

0 голосов
/ 07 июня 2018

Я бы связался с событием updating в функции загрузки вашей ServerStatus модели, чтобы вы могли сделать сравнение isDirty.Вы можете позвонить isDirty('status_id'), чтобы определить, был ли изменен идентификатор статуса, что-то вроде этого:

protected static function boot() 
{

    parent::boot();

    ServerStatus::created(function(ServerStatus $serverStatus) {
        $original = ServerStatus::where('server_id', $serverStatus->server_id)->last();
        if ($original && $serverStatus->status_id !== $original->status_id) {
            // send slack notification, status id differs
        }
    });
}

Если вам нужен больший контроль над конкретным статусом, вы можете позвонить getOriginal(), чтобы получить исходное значениеи определите, как, например, в вашем случае, конкретные переходы статуса:

ServerStatus::created(function(ServerStatus $serverStatus) {
    $original = ServerStatus::where('server_id', $serverStatus->server_id)->last();

    if ($original && $original->status->description === 'up' && $serverStatus->status->description === 'down') {
        //send server went down notification
    } else if ($original && $original->status->description === 'down' && $serverStatus->status->description === 'up') {
        //send server is up notification
    }
});

Я на самом деле не знаю, как называется ваше отношение или столбец, в котором хранится текстовая версия status,но что-то вроде вышесказанного должно работать на вас.

...