Changeset View
Changeset View
Standalone View
Standalone View
src/infrastructure/daemon/PhutilDaemonOverseerModule.php
- This file was added.
<?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(__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 Throttle key. | |||||
* @param float 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; | |||||
} | |||||
} |