我正在运行一个使用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小时等。
有人建议吗?
答案 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));