]> git.ipfire.org Git - pbs.git/commitdiff
builders: Store when a builder has connected last and from where
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 25 Jan 2025 19:31:10 +0000 (19:31 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 25 Jan 2025 19:31:10 +0000 (19:31 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/builders.py
src/database.sql
src/web/builders.py

index 23ecc1903892dfdc1d800be539fa6d440e9f75ba..dbbbfcad77a3786696d382865a8ffb3785cc5be9 100644 (file)
@@ -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():
index b9f04e968bdd4654219ac67b9e310ffa63ad18a8..22556c01117d6f730b8bdd9da9c4c328dc1a5ecd 100644 (file)
@@ -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
 );
 
 
index 46d96293d8ce59c9b5a2a49c0f1f8bb474cd98ca..d1fbb77e5fb3ea1fc51b44ff546b9dea271816a7 100644 (file)
@@ -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():