return True
+ # Maintenance
+
+ def get_maintenance(self):
+ return self.data.maintenance
+
+ def set_maintenance(self, maintenance):
+ self._set_attribute("maintenance", maintenance)
+
+ maintenance = property(get_maintenance, set_maintenance)
+
# Stats
def _get_stats(self, query, *args, **kwargs):
if await self.is_running():
return
+ # Don't start when in maintenance mode
+ if self.maintenance:
+ log.warning("Won't start %s in maintenance mode" % self)
+ return
+
await asyncio.to_thread(self._start, wait=wait)
def _start(self, wait):
if await self.is_shutting_down() or await self.is_shut_down():
return
+ # Don't stop when in maintenance mode
+ if self.maintenance:
+ log.warning("Won't stop %s in maintenance mode" % self)
+ return
+
await asyncio.to_thread(self._stop, wait=wait)
def _stop(self, wait):
if not self.instance:
return 0
- # Running builds should come first
+ # Running builders should come first
if await self.is_running():
return 1
enabled boolean DEFAULT false NOT NULL,
deleted boolean DEFAULT false NOT NULL,
loadavg text DEFAULT '0'::character varying NOT NULL,
- testmode boolean DEFAULT true NOT NULL,
+ maintenance boolean DEFAULT false NOT NULL,
max_jobs bigint DEFAULT (1)::bigint NOT NULL,
pakfire_version text,
os_name text,
</div>
</div>
- {# Test Mode #}
+ {# Maintenance #}
<div class="field">
<div class="control">
<label class="checkbox">
- <input type="checkbox" name="testmode"
- {% if builder.testmode %}checked{% end %}>
- {{ _("Enable Test Mode") }}
+ <input type="checkbox" name="maintenance"
+ {% if builder.maintenance %}checked{% end %}>
+ {{ _("Enable Maintenance Mode") }}
</label>
</div>
<p class="help">
- {{ _("Only build test jobs on this builder") }}
+ {{ _("When in maintenance mode, builders won't be automatically started or stopped") }}
</p>
</div>
</fieldset>
raise tornado.web.HTTPError(403)
with self.db.transaction():
- builder.enabled = self.get_argument("enabled", False)
- builder.testmode = self.get_argument("testmode", False)
- builder.max_jobs = self.get_argument_int("max_jobs")
+ builder.enabled = self.get_argument("enabled", False)
+ builder.maintenance = self.get_argument_bool("maintenance")
+ builder.max_jobs = self.get_argument_int("max_jobs")
# Try to dispatch more jobs
await self.backend.jobs.queue.dispatch()