cpu_guest_nice=None, loadavg1=None, loadavg5=None, loadavg15=None, mem_total=None,
mem_available=None, mem_used=None, mem_free=None, mem_active=None, mem_inactive=None,
mem_buffers=None, mem_cached=None, mem_shared=None, swap_total=None, swap_used=None,
- swap_free=None, **kwargs):
+ swap_free=None):
"""
Logs some stats about this builder
"""
except (TypeError, ValueError):
raise tornado.web.HTTPError(400, "%s is not an integer" % arg)
+ def get_argument_float(self, *args, **kwargs):
+ arg = self.get_argument(*args, **kwargs)
+
+ # Return nothing
+ if not arg:
+ return None
+
+ try:
+ return float(arg)
+ except (TypeError, ValueError):
+ raise tornado.web.HTTPError(400, "%s is not an float" % arg)
+
def get_argument_builder(self, *args, **kwargs):
name = self.get_argument(*args, **kwargs)
await self.builder.log_stats(**data)
-class StatsHandler(base.BackendMixin, tornado.websocket.WebSocketHandler):
+class APIv1StatsHandler(base.APIMixin, base.BaseHandler):
+ @base.negotiate
+ async def post(self):
+ stats = {
+ # CPU info
+ "cpu_model" : self.get_argument("cpu_model"),
+ "cpu_count" : self.get_argument_int("cpu_count"),
+ "cpu_arch" : self.get_argument("cpu_arch"),
+
+ # Pakfire Version
+ "pakfire_version" : self.get_argument("pakfire_version"),
+
+ # OS
+ "os_name" : self.get_argument("os_name"),
+
+ # CPU stats
+ "cpu_user" : self.get_argument_float("cpu_user"),
+ "cpu_nice" : self.get_argument_float("cpu_nice"),
+ "cpu_system" : self.get_argument_float("cpu_system"),
+ "cpu_idle" : self.get_argument_float("cpu_idle"),
+ "cpu_iowait" : self.get_argument_float("cpu_iowait"),
+ "cpu_irq" : self.get_argument_float("cpu_irq"),
+ "cpu_softirq" : self.get_argument_float("cpu_softirq"),
+ "cpu_steal" : self.get_argument_float("cpu_steal"),
+ "cpu_guest" : self.get_argument_float("cpu_guest"),
+ "cpu_guest_nice" : self.get_argument_float("cpu_guest_nice"),
+
+ # Load Average
+ "loadavg1" : self.get_argument_float("loadavg1"),
+ "loadavg5" : self.get_argument_float("loadavg5"),
+ "loadavg15" : self.get_argument_float("loadavg15"),
+
+ # Memory
+ "mem_total" : self.get_argument_int("mem_total"),
+ "mem_available" : self.get_argument_int("mem_available"),
+ "mem_used" : self.get_argument_int("mem_used"),
+ "mem_free" : self.get_argument_int("mem_free"),
+ "mem_active" : self.get_argument_int("mem_active"),
+ "mem_inactive" : self.get_argument_int("mem_inactive"),
+ "mem_buffers" : self.get_argument_int("mem_buffers"),
+ "mem_cached" : self.get_argument_int("mem_cached"),
+ "mem_shared" : self.get_argument_int("mem_shared"),
+
+ # Swap
+ "swap_total" : self.get_argument_int("swap_total"),
+ "swap_used" : self.get_argument_int("swap_used"),
+ "swap_free" : self.get_argument_int("swap_free"),
+ }
+
+ with self.db.transaction():
+ await self.builder.log_stats(**stats)
+
+ # Send OK
+ self.finish({})
+
+
+class StatsHandler(base.BaseHandler, tornado.websocket.WebSocketHandler):
# No authentication required
async def open(self, name):
builder = self.backend.builders.get_by_name(name)