Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据http响应更改警报频率_Php_Laravel_Slack - Fatal编程技术网

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中硬编码。但我不知道如何去推翻它。有什么建议吗?