我有一个状态通知类,所以当创建状态时它会向我发送一条松弛的消息。我遇到的问题是每隔几分钟就会创建一个新状态,并且每隔几分钟就会重复发送一条松弛消息和非建设性的。特别是因为有数十台服务器发布了这些状态。
如果特定服务器状态发生了变化,是否只能发布松弛消息?例如服务器上升然后下降。
我已尝试获取所有服务器状态,但无法弄清楚如何只获取具有特定服务器ID的最后两个。
----------------------------------------------- ---------- EDITS --------------------------------------- --------------------- 以前试过的尝试:除了我不想要的最后一个
$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时发送通知的引导:
protected static function 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());
}
});
}
答案 0 :(得分:2)
我会绑定到updating
模型的启动功能中的ServerStatus
事件,以便您进行isDirty
比较。您可以致电isDirty('status_id')
以确定状态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
文本版本的列是什么,但上述内容应该对您有用。