1022b5fdf9
Error reporting currently takes place for each error. This can result in many error messages if a server has connectivity issues (i.e. when it re-connects to the internet every 24 hours). This commit adds a new option to the configuration file to define the number of error reports to suppress before returning an error message to the user. Error reports are cached and therefore automatically purged after 24 hours. A successful bridge request does **not** clear the error count as sporadic issues can be the result of actual problems on the server. The implementation currently makes no assumption on the type of error, which means it also suppresses bridge errors in debug mode. The default value is, however, set to 1 which means all errors are reported. References #994
77 lines
1.9 KiB
PHP
77 lines
1.9 KiB
PHP
<?php
|
|
/**
|
|
* This file is part of RSS-Bridge, a PHP project capable of generating RSS and
|
|
* Atom feeds for websites that don't have one.
|
|
*
|
|
* For the full license information, please view the UNLICENSE file distributed
|
|
* with this source code.
|
|
*
|
|
* @package Core
|
|
* @license http://unlicense.org/ UNLICENSE
|
|
* @link https://github.com/rss-bridge/rss-bridge
|
|
*/
|
|
|
|
/**
|
|
* Throws an exception when called.
|
|
*
|
|
* @throws \Exception when called
|
|
* @param string $message The error message
|
|
* @param int $code The HTTP error code
|
|
* @link https://en.wikipedia.org/wiki/List_of_HTTP_status_codes List of HTTP
|
|
* status codes
|
|
*/
|
|
function returnError($message, $code){
|
|
throw new \Exception($message, $code);
|
|
}
|
|
|
|
/**
|
|
* Returns HTTP Error 400 (Bad Request) when called.
|
|
*
|
|
* @param string $message The error message
|
|
*/
|
|
function returnClientError($message){
|
|
returnError($message, 400);
|
|
}
|
|
|
|
/**
|
|
* Returns HTTP Error 500 (Internal Server Error) when called.
|
|
*
|
|
* @param string $message The error message
|
|
*/
|
|
function returnServerError($message){
|
|
returnError($message, 500);
|
|
}
|
|
|
|
/**
|
|
* Stores bridge-specific errors in a cache file.
|
|
*
|
|
* @param string $bridgeName The name of the bridge that failed.
|
|
* @param int $code The error code
|
|
*
|
|
* @return int The total number the same error has appeared
|
|
*/
|
|
function logBridgeError($bridgeName, $code) {
|
|
$cacheFac = new CacheFactory();
|
|
$cacheFac->setWorkingDir(PATH_LIB_CACHES);
|
|
|
|
$cache = $cacheFac->create(Configuration::getConfig('cache', 'type'));
|
|
$cache->setScope('error_reporting');
|
|
$cache->setkey($bridgeName . '_' . $code);
|
|
$cache->purgeCache(86400); // 24 hours
|
|
|
|
if($report = $cache->loadData()) {
|
|
$report = json_decode($report, true);
|
|
$report['time'] = time();
|
|
$report['count']++;
|
|
} else {
|
|
$report = array(
|
|
'error' => $code,
|
|
'time' => time(),
|
|
'count' => 1,
|
|
);
|
|
}
|
|
|
|
$cache->saveData(json_encode($report));
|
|
|
|
return $report['count'];
|
|
}
|