From: Michael Tremer Date: Sat, 25 Jan 2025 19:31:10 +0000 (+0000) Subject: builders: Store when a builder has connected last and from where X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f45d77c11322c848358abc7785fcc519a6be7a55;p=pbs.git builders: Store when a builder has connected last and from where Signed-off-by: Michael Tremer --- diff --git a/src/buildservice/builders.py b/src/buildservice/builders.py index 23ecc190..dbbbfcad 100644 --- a/src/buildservice/builders.py +++ b/src/buildservice/builders.py @@ -8,6 +8,7 @@ import logging import sqlalchemy from sqlalchemy import BigInteger, Boolean, Column, DateTime, Double, ForeignKey, Integer, Text +from sqlalchemy.dialects.postgresql import INET from . import base from . import database @@ -860,7 +861,7 @@ class Builder(database.Base, database.BackendMixin, database.SoftDeleteMixin): # Connections - def connected(self, connection): + def connected(self, connection, address=None): """ Called when a builder has connected """ @@ -876,6 +877,12 @@ class Builder(database.Base, database.BackendMixin, database.SoftDeleteMixin): # Store the connection self.backend.builders.connections[self.name] = connection + # Remember when it last connected + self.connected_at = sqlalchemy.func.current_timestamp() + + # Store the IP address the builder connected from + self.connected_from = address + def disconnected(self): """ Called when a builder has disconnected @@ -897,6 +904,14 @@ class Builder(database.Base, database.BackendMixin, database.SoftDeleteMixin): except KeyError: pass + # Connected At + + connected_at = Column(DateTime(timezone=False)) + + # Connected From + + connected_from = Column(INET) + def dispatch_job(self, job): # Throw an error if the builder isn't online any more if not self.is_online(): diff --git a/src/database.sql b/src/database.sql index b9f04e96..22556c01 100644 --- a/src/database.sql +++ b/src/database.sql @@ -209,7 +209,9 @@ CREATE TABLE public.builders ( deleted_at timestamp without time zone, deleted_by_id integer, sys_vendor text, - sys_name text + sys_name text, + connected_at timestamp without time zone, + connected_from inet ); diff --git a/src/web/builders.py b/src/web/builders.py index 46d96293..d1fbb77e 100644 --- a/src/web/builders.py +++ b/src/web/builders.py @@ -19,7 +19,7 @@ class APIv1ControlHandler(base.APIMixin, base.BackendMixin, tornado.websocket.We async def open(self): # The builder has opened a new connection - self.builder.connected(self) + self.builder.connected(self, address=self.current_address) # Update the builder information async with await self.db.transaction():