import functools
import json
import logging
-
import sqlalchemy
-from sqlalchemy import BigInteger, Boolean, Column, DateTime, Double, ForeignKey, Integer, Text
+import sqlmodel
+
from sqlalchemy.dialects.postgresql import INET
from . import base
# Setup logging
log = logging.getLogger("pbs.builders")
-class BuilderStat(database.Base):
+class BuilderStat(sqlmodel.SQLModel, table=True):
__tablename__ = "builder_stats"
# Builder ID
- builder_id = Column(Integer, ForeignKey("builders.id"), primary_key=True, nullable=False)
+ builder_id : int = sqlmodel.Field(foreign_key="builders.id", primary_key=True)
# Builder
- builder = sqlalchemy.orm.relationship(
- "Builder", foreign_keys=[builder_id], lazy="joined", innerjoin=True,
- )
+ builder : "Builder" = sqlmodel.Relationship()
# Created At
- created_at = Column(DateTime(timezone=False), primary_key=True, nullable=False,
- server_default=sqlalchemy.func.current_timestamp())
+ created_at : datetime.datetime = sqlmodel.Field(
+ sa_column_kwargs = {"server_default" : sqlalchemy.text("CURRENT_TIMESTAMP")}
+ )
# CPU User
- cpu_user = Column(Double, nullable=False)
+ cpu_user : float
# CPU Nice
- cpu_nice = Column(Double, nullable=False)
+ cpu_nice : float
# CPU System
- cpu_system = Column(Double, nullable=False)
+ cpu_system : float
# CPU Idle
- cpu_idle = Column(Double, nullable=False)
+ cpu_idle : float
# CPU IO Wait
- cpu_iowait = Column(Double, nullable=False)
+ cpu_iowait : float
# CPU IRQ
- cpu_irq = Column(Double, nullable=False)
+ cpu_irq : float
# CPU Soft IRQ
- cpu_softirq = Column(Double, nullable=False)
+ cpu_softirq : float
# CPU Steal
- cpu_steal = Column(Double, nullable=False)
+ cpu_steal : float
# CPU Guest
- cpu_guest = Column(Double, nullable=False)
+ cpu_guest : float
# CPU Guest Nice
- cpu_guest_nice = Column(Double, nullable=False)
+ cpu_guest_nice : float
@property
def cpu_usage(self):
# Load Average 1
- loadavg1 = Column(Double, nullable=False)
+ loadavg1 : float
# Load Average 5
- loadavg5 = Column(Double, nullable=False)
+ loadavg5 : float
# Load Average 15
- loadavg15 = Column(Double, nullable=False)
+ loadavg15 : float
# Memory Total
- mem_total = Column(BigInteger, nullable=False)
+ mem_total : int = sqlmodel.Field(
+ sa_column=sqlalchemy.Column(sqlalchemy.BigInteger, nullable=False))
# Memory Available
- mem_available = Column(BigInteger, nullable=False)
+ mem_available : int = sqlmodel.Field(
+ sa_column=sqlalchemy.Column(sqlalchemy.BigInteger, nullable=False))
# Memory Used
- mem_used = Column(BigInteger, nullable=False)
+ mem_used : int = sqlmodel.Field(
+ sa_column=sqlalchemy.Column(sqlalchemy.BigInteger, nullable=False))
# Memory Free
- mem_free = Column(BigInteger, nullable=False)
+ mem_free : int = sqlmodel.Field(
+ sa_column=sqlalchemy.Column(sqlalchemy.BigInteger, nullable=False))
# Memory Active
- mem_active = Column(BigInteger, nullable=False)
+ mem_active : int = sqlmodel.Field(
+ sa_column=sqlalchemy.Column(sqlalchemy.BigInteger, nullable=False))
# Memory Inactive
- mem_inactive = Column(BigInteger, nullable=False)
+ mem_inactive : int = sqlmodel.Field(
+ sa_column=sqlalchemy.Column(sqlalchemy.BigInteger, nullable=False))
# Memory Buffers
- mem_buffers = Column(BigInteger, nullable=False)
+ mem_buffers : int = sqlmodel.Field(
+ sa_column=sqlalchemy.Column(sqlalchemy.BigInteger, nullable=False))
# Memory Cached
- mem_cached = Column(BigInteger, nullable=False)
+ mem_cached : int = sqlmodel.Field(
+ sa_column=sqlalchemy.Column(sqlalchemy.BigInteger, nullable=False))
# Memory Shared
- mem_shared = Column(BigInteger, nullable=False)
+ mem_shared : int = sqlmodel.Field(
+ sa_column=sqlalchemy.Column(sqlalchemy.BigInteger, nullable=False))
@property
def mem_usage(self):
# Swap Total
- swap_total = Column(BigInteger, nullable=False)
+ swap_total : int = sqlmodel.Field(
+ sa_column=sqlalchemy.Column(sqlalchemy.BigInteger, nullable=False))
# Swap Used
- swap_used = Column(BigInteger, nullable=False)
+ swap_used : int = sqlmodel.Field(
+ sa_column=sqlalchemy.Column(sqlalchemy.BigInteger, nullable=False))
# Swap Free
- swap_free = Column(BigInteger, nullable=False)
+ swap_free: int = sqlmodel.Field(
+ sa_column=sqlalchemy.Column(sqlalchemy.BigInteger, nullable=False))
@property
def swap_usage(self):
)
-class Builder(database.Base, database.BackendMixin, database.SoftDeleteMixin):
+class Builder(sqlmodel.SQLModel, database.BackendMixin, database.SoftDeleteMixin, table=True):
__tablename__ = "builders"
def __lt__(self, other):
# ID
- id = Column(Integer, primary_key=True)
+ id : int = sqlmodel.Field(primary_key=True)
# Description
- description = Column(Text, nullable=False, default="")
+ description : str = sqlmodel.Field(default="")
# Created At
- created_at = Column(DateTime(timezone=False), nullable=False,
- server_default=sqlalchemy.func.current_timestamp())
+ created_at : datetime.datetime = sqlmodel.Field(
+ sa_column_kwargs = {"server_default" : sqlalchemy.text("CURRENT_TIMESTAMP")}
+ )
# Created By ID
- created_by_id = Column(Integer, ForeignKey("users.id"), nullable=False)
+ created_by_id : int = sqlmodel.Field(foreign_key="users.id", exclude=True)
# Created By
- created_by = sqlalchemy.orm.relationship(
- "User", foreign_keys=[created_by_id], lazy="joined", innerjoin=True,
- )
+ created_by : "User" = sqlmodel.Relationship(
+ sa_relationship_kwargs={ "foreign_keys" : "[Builder.created_by_id]" })
# Deleted By ID
- deleted_by_id = Column(Integer, ForeignKey("users.id"))
+ deleted_by_id : int = sqlmodel.Field(foreign_key="users.id", exclude=True)
# Deleted By
- deleted_by = sqlalchemy.orm.relationship(
- "User", foreign_keys=[deleted_by_id], lazy="selectin",
- )
+ deleted_by : "User" = sqlmodel.Relationship(
+ sa_relationship_kwargs={ "foreign_keys" : "[Builder.deleted_by_id]" })
def is_online(self):
"""
# Maintenance
- maintenance = Column(Boolean, nullable=False, default=False)
+ maintenance : bool = sqlmodel.Field(default=False)
# Enabled
- enabled = Column(Boolean, nullable=False, default=False)
+ enabled : bool = sqlmodel.Field(default=False)
# Permissions
# Max Jobs
- max_jobs = Column(Integer, nullable=False, default=1)
+ max_jobs : int = sqlmodel.Field(default=1)
async def is_full(self):
"""
# Name
- name = Column(Text, unique=True, nullable=False)
+ name : str = sqlmodel.Field(unique=True)
# (Pakfire) Version
- version = Column(Text, nullable=False, default="")
+ version : str = sqlmodel.Field(default="")
# OS Name
- os_name = Column(Text, nullable=False, default="")
+ os_name : str = sqlmodel.Field(default="")
# System Vendor
- sys_vendor = Column(Text)
+ sys_vendor : str | None
# System Name
- sys_name = Column(Text)
+ sys_name : str | None
# CPU Model
- cpu_model = Column(Text, nullable=False, default="")
+ cpu_model : str = sqlmodel.Field(default="")
# CPU Count
- cpu_count = Column(Integer, nullable=False, default=1)
+ cpu_count : int = sqlmodel.Field(default=1)
# Architecture
- arch = Column(Text)
+ arch : str
# AWS - Instance ID
- instance_id = Column(Text)
+ instance_id : str
# AWS - Instance Type
- instance_type = Column(Text)
+ instance_type : str
@functools.cached_property
def instance(self):
# Connected At
- connected_at = Column(DateTime(timezone=False))
+ connected_at : datetime.datetime | None
# Connected From
- connected_from = Column(INET)
+ connected_from : str | None = sqlmodel.Field(default=None, sa_column=sqlalchemy.Column(INET))
# Send Message
Returns all uploads that belong to this builder
"""
stmt = (
- sqlalchemy
+ sqlmodel
.select(uploads.Upload)
.where(
uploads.Upload.builder == self,