有条件的定期IF脚本

时间:2019-01-21 22:53:08

标签: php

我正在运行一个使用Google Analytics Realtime API的简单PHP条件。

我的脚本检查网页的活动访问者数量,将其值存储到变量中,然后将其与> 10进行比较。 如果发现正确,它将向我发送一封电子邮件,告诉我我有10位以上的访客。 如果发现错误,它将停止。

由于我是在cronjob下运行此程序的,因此每隔一分钟我收到10个以上的访客后,就会收到多封电子邮件。

为了消除此问题,我添加了一个file_put_contents执行,该执行将写入一个简单文件以及一个带有file_exists的简单条件,以检查文件是否存在。

现在,只有在我的访客超过10人的第一张支票上,我才会收到通知。

但是尖峰呢? 如果一个cronjob连续执行Z次并且访问者> 10,我希望设置一个类似“警告,您的XX位访问者超过Z分钟”的警报。

我正在寻找一种解决方法。虽然我的第一个操作是设置另一个更改,以将time()-filemtime($ filename)检查为$ age,但是我仍然需要创建它的许多实例,例如30分钟,1小时等。

有人建议吗?

1 个答案:

答案 0 :(得分:1)

将信息放入文件中,以便您了解上一次运行的状态。您可以保留访问者人数超过阈值的次数以及最大访问者数的计数器。

$threshold = 100; // Alert when more than 100 visitors
$burst_cycle = 10; // Alert every 10 minutes over the threshold

$json = @file_get_contents("data.json");
if ($json) {
    $data = json_decode($json, true);
} else {
    $data = array('counter' => 0, 'max' => 0);
}
if ($visitors < $threshold) {
    $data = array('counter' => 0, 'max' => $visitors);
} else {
    if ($visitors > $data['max']) {
        $data['max'] = $visitors;
    }
    $data['counter']++;
    // Send alert when we first cross threshold and every $burst_cycle minutes it continues
    if ($data['counter'] == 1 || $data['counter'] % $burst_cycle == 0) {
        send_alert("Heavy load for {$data['counter']} minutes, peak = {$data['max']} visitors.");
    }
}
file_put_contents("data.json", json_encode($data));