Merge pull request #13473 from annando/timelimit
There is now a time limit when fetching AP endpoints
This commit is contained in:
commit
70aacc8a5e
2 changed files with 15 additions and 7 deletions
|
@ -601,7 +601,7 @@ class Worker
|
||||||
$rest = round(max(0, $up_duration - (self::$db_duration + self::$lock_duration)), 2);
|
$rest = round(max(0, $up_duration - (self::$db_duration + self::$lock_duration)), 2);
|
||||||
$exec = round($duration, 2);
|
$exec = round($duration, 2);
|
||||||
|
|
||||||
Logger::info('Performance:', ['state' => self::$state, 'count' => $dbcount, 'stat' => $dbstat, 'write' => $dbwrite, 'lock' => $dblock, 'total' => $dbtotal, 'rest' => $rest, 'exec' => $exec]);
|
Logger::info('Performance:', ['function' => $funcname, 'state' => self::$state, 'count' => $dbcount, 'stat' => $dbstat, 'write' => $dbwrite, 'lock' => $dblock, 'total' => $dbtotal, 'rest' => $rest, 'exec' => $exec]);
|
||||||
|
|
||||||
self::coolDown();
|
self::coolDown();
|
||||||
|
|
||||||
|
@ -622,7 +622,7 @@ class Worker
|
||||||
Logger::info('Longer than 2 minutes.', ['priority' => $queue['priority'], 'id' => $queue['id'], 'duration' => round($duration/60, 3)]);
|
Logger::info('Longer than 2 minutes.', ['priority' => $queue['priority'], 'id' => $queue['id'], 'duration' => round($duration/60, 3)]);
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger::info('Process done.', ['priority' => $queue['priority'], 'id' => $queue['id'], 'duration' => round($duration, 3)]);
|
Logger::info('Process done.', ['function' => $funcname, 'priority' => $queue['priority'], 'retrial' => $queue['retrial'], 'id' => $queue['id'], 'duration' => round($duration, 3)]);
|
||||||
|
|
||||||
DI::profiler()->saveLog(DI::logger(), 'ID ' . $queue['id'] . ': ' . $funcname);
|
DI::profiler()->saveLog(DI::logger(), 'ID ' . $queue['id'] . ': ' . $funcname);
|
||||||
}
|
}
|
||||||
|
|
|
@ -241,12 +241,20 @@ class ActivityPub
|
||||||
/**
|
/**
|
||||||
* Fetch items from AP endpoints
|
* Fetch items from AP endpoints
|
||||||
*
|
*
|
||||||
* @param string $url Address of the endpoint
|
* @param string $url Address of the endpoint
|
||||||
* @param integer $uid Optional user id
|
* @param integer $uid Optional user id
|
||||||
|
* @param integer $start_timestamp Internally used parameter to stop fetching after some time
|
||||||
* @return array Endpoint items
|
* @return array Endpoint items
|
||||||
*/
|
*/
|
||||||
public static function fetchItems(string $url, int $uid = 0): array
|
public static function fetchItems(string $url, int $uid = 0, int $start_timestamp = 0): array
|
||||||
{
|
{
|
||||||
|
$start_timestamp = $start_timestamp ?: time();
|
||||||
|
|
||||||
|
if ((time() - $start_timestamp) > 60) {
|
||||||
|
Logger::info('Fetch time limit reached', ['url' => $url, 'uid' => $uid]);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
$data = self::fetchContent($url, $uid);
|
$data = self::fetchContent($url, $uid);
|
||||||
if (empty($data)) {
|
if (empty($data)) {
|
||||||
return [];
|
return [];
|
||||||
|
@ -257,13 +265,13 @@ class ActivityPub
|
||||||
} elseif (!empty($data['first']['orderedItems'])) {
|
} elseif (!empty($data['first']['orderedItems'])) {
|
||||||
$items = $data['first']['orderedItems'];
|
$items = $data['first']['orderedItems'];
|
||||||
} elseif (!empty($data['first']) && is_string($data['first']) && ($data['first'] != $url)) {
|
} elseif (!empty($data['first']) && is_string($data['first']) && ($data['first'] != $url)) {
|
||||||
return self::fetchItems($data['first'], $uid);
|
return self::fetchItems($data['first'], $uid, $start_timestamp);
|
||||||
} else {
|
} else {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($data['next']) && is_string($data['next'])) {
|
if (!empty($data['next']) && is_string($data['next'])) {
|
||||||
$items = array_merge($items, self::fetchItems($data['next'], $uid));
|
$items = array_merge($items, self::fetchItems($data['next'], $uid, $start_timestamp));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $items;
|
return $items;
|
||||||
|
|
Loading…
Reference in a new issue