aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'buildbot_gentoo_ci/db/workers.py')
-rw-r--r--buildbot_gentoo_ci/db/workers.py175
1 files changed, 175 insertions, 0 deletions
diff --git a/buildbot_gentoo_ci/db/workers.py b/buildbot_gentoo_ci/db/workers.py
new file mode 100644
index 0000000..afc7815
--- /dev/null
+++ b/buildbot_gentoo_ci/db/workers.py
@@ -0,0 +1,175 @@
+# This file has parts from Buildbot and is modifyed by Gentoo Authors.
+# Buildbot is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation, version 2.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 51
+# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright Buildbot Team Members
+# Origins: buildbot.db.*
+# Modifyed by Gentoo Authors.
+# Copyright 2021 Gentoo Authors
+
+import sqlalchemy as sa
+
+from twisted.internet import defer
+
+from buildbot.db import base
+
+class WorkersConnectorComponent(base.DBConnectorComponent):
+
+ @defer.inlineCallbacks
+ def getWorkerByUuid(self, uuid):
+ def thd(conn):
+ tbl = self.db.model.workers
+ q = tbl.select()
+ q = q.where(tbl.c.uuid == uuid)
+ res = conn.execute(q)
+ row = res.fetchone()
+ if not row:
+ return None
+ return self._row2dict(conn, row)
+ res = yield self.db.pool.do(thd)
+ return res
+
+ @defer.inlineCallbacks
+ def getWorkersByTypeAndEnable(self, type):
+ def thd(conn):
+ tbl = self.db.model.workers
+ q = tbl.select()
+ q = q.where(tbl.c.type == type)
+ q = q.where(tbl.c.enable == true)
+ return [self._row2dict(conn, row)
+ for row in conn.execute(q).fetchall()]
+ res = yield self.db.pool.do(thd)
+ return res
+
+ @defer.inlineCallbacks
+ def getWorkersByNodeUuid(self, uuid):
+ def thd(conn):
+ tbl = self.db.model.nodes_workers
+ q = tbl.select()
+ q = q.where(tbl.c.node_uuid == uuid)
+ return [self._row2dict_node_worker(conn, row)
+ for row in conn.execute(q).fetchall()]
+ res = yield self.db.pool.do(thd)
+ return res
+
+ @defer.inlineCallbacks
+ def getFlavorById(self, id):
+ def thd(conn):
+ tbl = self.db.model.workers_flavors
+ q = tbl.select()
+ q = q.where(tbl.c.id == id)
+ res = conn.execute(q)
+ row = res.fetchone()
+ if not row:
+ return None
+ return self._row2dict_flavor(conn, row)
+ res = yield self.db.pool.do(thd)
+ return res
+
+ @defer.inlineCallbacks
+ def getImageById(self, id):
+ def thd(conn):
+ tbl = self.db.model.workers_images
+ q = tbl.select()
+ q = q.where(tbl.c.id == id)
+ res = conn.execute(q)
+ row = res.fetchone()
+ if not row:
+ return None
+ return self._row2dict_image(conn, row)
+ res = yield self.db.pool.do(thd)
+ return res
+
+ @defer.inlineCallbacks
+ def getWorkerConfigByWorkerUuid(self, uuid):
+ def thd(conn):
+ tbl = self.db.model.worker_configs
+ q = tbl.select()
+ q = q.where(tbl.c.project_uuid == uuid)
+ return [self._row2dict_node_config(conn, row)
+ for row in conn.execute(q).fetchall()]
+ res = yield self.db.pool.do(thd)
+ return res
+
+
+ @defer.inlineCallbacks
+ def getNodeByUuid(self, uuid):
+ def thd(conn):
+ tbl = self.db.model.nodes
+ q = tbl.select()
+ q = q.where(tbl.c.uuid == uuid)
+ res = conn.execute(q)
+ row = res.fetchone()
+ if not row:
+ return None
+ return self._row2dict_node(conn, row)
+ res = yield self.db.pool.do(thd)
+ return res
+
+ @defer.inlineCallbacks
+ def getNodeByWorkerUuid(self, uuid):
+ def thd(conn):
+ tbl = self.db.model.nodes_workers
+ q = tbl.select()
+ q = q.where(tbl.c.worker_uuid == uuid)
+ res = conn.execute(q)
+ row = res.fetchone()
+ if not row:
+ return None
+ return self._row2dict_node_worker(conn, row)
+ res = yield self.db.pool.do(thd)
+ return res
+
+ def _row2dict(self, conn, row):
+ return dict(
+ uuid=row.uuid,
+ type=row.type,
+ enable=row.enable,
+ flavor_id=row.flavor_id,
+ image_id=row.image_id
+ )
+ def _row2dict_flavor(self, conn, row):
+ return dict(
+ id=row.id,
+ name=row.name,
+ ram=row.ram,
+ cpu=row.cpu
+ )
+ def _row2dict_image(self, conn, row):
+ return dict(
+ id=row.id,
+ name=row.name,
+ tag=row.tag,
+ dockerfile=row.dockerfile,
+ bootstrap_image_tag=row.bootstrap_image_tag
+ )
+ def _row2dict_worker_config(self, conn, row):
+ return dict(
+ id=row.id,
+ worker_uuid=row.worker_uuid,
+ type=row.type,
+ value=row.value
+ )
+ def _row2dict_node(self, conn, row):
+ return dict(
+ uuid=row.uuid,
+ name=row.name,
+ host_url=row.host_url,
+ enable=row.enable
+ )
+ def _row2dict_node_worker(self, conn, row):
+ return dict(
+ id=row.id,
+ node_uuid=row.node_uuid,
+ worker_uuid=row.worker_uuid
+ )