Php 根据http响应更改警报频率
我的代码在发送Php 根据http响应更改警报频率,php,laravel,slack,Php,Laravel,Slack,我的代码在发送http请求时运行良好,如果网站关闭或响应代码不是200,它会发送一个延迟通知。我现在想弄清楚的是,在通知表中,我有检查频率和警报频率。如果一个网站关闭了,它应该使用alert\u frequency,而不是使用check frequency来计算经过的时间 namespace App\Http\Controllers; use GuzzleHttp\Client; use App\Utilities\Reporter; use GuzzleHttp\Exception\Cli
http
请求时运行良好,如果网站关闭或响应代码不是200
,它会发送一个延迟通知。我现在想弄清楚的是,在通知表中,我有检查频率
和警报频率
。如果一个网站关闭了,它应该使用alert\u frequency
,而不是使用check frequency来计算经过的时间
namespace App\Http\Controllers;
use GuzzleHttp\Client;
use App\Utilities\Reporter;
use GuzzleHttp\Exception\ClientException;
use App\Notification;
use App\Status;
use App\Setting;
class GuzzleController extends Controller
{
private $default_check_frequency;
protected $client;
protected $reporter;
public function __construct()
{
$this->client = new Client;
$this->reporter = new Reporter;
$this->default_check_frequency = Setting::defaultCheckFrequency();
}
public function status()
{
$notifications = Notification::where('active', 1)->get();
$status = Status::where('name', 'health')->first();
foreach ($notifications as $notification) {
$this->updateStatus($notification, $status);
}
}
private function updateStatus(Notification $notification, Status $status)
{
$status_health = $notification->status('health');
$frequency = $this->getFrequency($notification);
$elapsed_time = \Carbon\Carbon::parse($status_health['timestamp'])->diffInMinutes();
if($elapsed_time >= $frequency) {
$response = $this->client->get($notification->website_url, [
'http_errors' => false
]);
$resCode = $response->getStatusCode();
$notification->statuses()->attach($status, [
'values' => $resCode === 200 ? 'up' : 'down'
]);
if($resCode != 200){
/* how to send slack to different slach channels, now it is sending only to one channel!*/
$this->reporter->slack($notification->website_url.':'.' is down'. ' please check your email for the status code!'.' @- '.$notification->email,
$notification->slack_channel);
$this->reporter->mail($notification->email,$resCode );
}
}
}
private function getFrequency(Notification $notification)
{
return isset($notification->check_frequency)
? intval($notification->check_frequency)
: $this->default_check_frequency;
}
}
我不确定这是否是您需要的,但以下是您可以根据状态从表中选择不同列的方法:
<?php
class GuzzleController extends Controller
{
private $default_check_frequency;
protected $client;
protected $reporter;
public function __construct()
{
$this->client = new Client;
$this->reporter = new Reporter;
$this->default_check_frequency = Setting::defaultCheckFrequency();
}
public function status()
{
$notifications = Notification::where('active', 1)->get();
$status = Status::where('name', 'health')->first();
foreach ($notifications as $notification) {
$this->updateStatus($notification, $status);
}
}
private function updateStatus(Notification $notification, Status $status)
{
$status_health = $notification->status('health');
/// move it here
$response = $this->client->get($notification->website_url, [
'http_errors' => false
]);
$resCode = $response->getStatusCode();
/// --- end
$frequency = $this->getFrequency($notification, $resCode);
$elapsed_time = \Carbon\Carbon::parse($status_health['timestamp'])->diffInMinutes();
if($elapsed_time >= $frequency) {
$notification->statuses()->attach($status, [
'values' => $resCode === 200 ? 'up' : 'down'
]);
if($resCode != 200){
/* how to send slack to different slach channels, now it is sending only to one channel!*/
$this->reporter->slack($notification->website_url.':'.' is down'. ' please check your email for the status code!'.' @- '.$notification->email,
$notification->slack_channel);
$this->reporter->mail($notification->email,$resCode );
}
}
}
private function getFrequency(Notification $notification, $resCode)
{
/// -- select your column here
$column = $resCode == '200' ? 'check_frequency' : 'alert_frequence';
return isset($notification->{$column})
? intval($notification->{$column})
: $this->default_check_frequency;
}
}
我不确定这是否是您需要的,但以下是您可以根据状态从表中选择不同列的方法:
<?php
class GuzzleController extends Controller
{
private $default_check_frequency;
protected $client;
protected $reporter;
public function __construct()
{
$this->client = new Client;
$this->reporter = new Reporter;
$this->default_check_frequency = Setting::defaultCheckFrequency();
}
public function status()
{
$notifications = Notification::where('active', 1)->get();
$status = Status::where('name', 'health')->first();
foreach ($notifications as $notification) {
$this->updateStatus($notification, $status);
}
}
private function updateStatus(Notification $notification, Status $status)
{
$status_health = $notification->status('health');
/// move it here
$response = $this->client->get($notification->website_url, [
'http_errors' => false
]);
$resCode = $response->getStatusCode();
/// --- end
$frequency = $this->getFrequency($notification, $resCode);
$elapsed_time = \Carbon\Carbon::parse($status_health['timestamp'])->diffInMinutes();
if($elapsed_time >= $frequency) {
$notification->statuses()->attach($status, [
'values' => $resCode === 200 ? 'up' : 'down'
]);
if($resCode != 200){
/* how to send slack to different slach channels, now it is sending only to one channel!*/
$this->reporter->slack($notification->website_url.':'.' is down'. ' please check your email for the status code!'.' @- '.$notification->email,
$notification->slack_channel);
$this->reporter->mail($notification->email,$resCode );
}
}
}
private function getFrequency(Notification $notification, $resCode)
{
/// -- select your column here
$column = $resCode == '200' ? 'check_frequency' : 'alert_frequence';
return isset($notification->{$column})
? intval($notification->{$column})
: $this->default_check_frequency;
}
}
我会检查代码并回复您。您是对的,iam只发送到一个slack通道,其中端点(web钩子)在config/slack.php中硬编码。但我不知道如何去推翻它。有什么建议吗?我会检查代码并回复你。您是对的,iam只发送到一个slack通道,其中端点(web钩子)在config/slack.php中硬编码。但我不知道如何去推翻它。有什么建议吗?