Something went wrong. Try again.
@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
Something went wrong. Try again.
1.7 kB · 71 lines
PHP
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172<?php
/** * Overseer modules allow daemons to be externally influenced. * * See @{class:PhabricatorDaemonOverseerModule} for a concrete example. */abstract class PhutilDaemonOverseerModule extends Phobject {
private $throttles = array();
/** * This method is used to indicate to the overseer that daemons should reload. * * @return bool True if the daemons should reload, otherwise false. */ public function shouldReloadDaemons() { return false; }
/** * Should a hibernating daemon pool be awoken immediately? * * @return bool True to awaken the pool immediately. */ public function shouldWakePool(PhutilDaemonPool $pool) { return false; }
public static function getAllModules() { return id(new PhutilClassMapQuery()) ->setAncestorClass(self::class) ->execute(); }
/** * Throttle checks from executing too often. * * If you throttle a check like this, it will only execute once every 2.5 * seconds: * * if ($this->shouldThrottle('some.check', 2.5)) { * return; * } * * @param string $name Throttle key. * @param float $duration Duration in seconds. * @return bool True to throttle the check. */ protected function shouldThrottle($name, $duration) { $throttle = idx($this->throttles, $name, 0); $now = microtime(true);
// If not enough time has elapsed, throttle the check. $elapsed = ($now - $throttle); if ($elapsed < $duration) { return true; }
// Otherwise, mark the current time as the last time we ran the check, // then let it continue. $this->throttles[$name] = $now;
return false; }
}