Page MenuHomePhabricator

D17539.id42197.diff
No OneTemporary

D17539.id42197.diff

diff --git a/src/daemon/PhutilDaemonOverseerModule.php b/src/daemon/PhutilDaemonOverseerModule.php
--- a/src/daemon/PhutilDaemonOverseerModule.php
+++ b/src/daemon/PhutilDaemonOverseerModule.php
@@ -7,13 +7,17 @@
*/
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.
*/
- abstract public function shouldReloadDaemons();
+ public function shouldReloadDaemons() {
+ return false;
+ }
/**
@@ -32,4 +36,36 @@
->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;
+ }
+
}

File Metadata

Mime Type
text/plain
Expires
May 19 2024, 9:05 AM (4 w, 2 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6276922
Default Alt Text
D17539.id42197.diff (1 KB)

Event Timeline