diff options
Diffstat (limited to 'buildbot_gentoo_ci/db/workers.py')
-rw-r--r-- | buildbot_gentoo_ci/db/workers.py | 175 |
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 + ) |