]> git.ipfire.org Git - ipfire.org.git/blobdiff - build/builder.py
Added pxe site.
[ipfire.org.git] / build / builder.py
index f4ff7dc3ece777581d9a95445e480a731686aa6b..73c643aecec6136cc2f53b91bd69e5429d964e7d 100644 (file)
@@ -24,6 +24,7 @@ import sys
 import time
 import socket
 import base64
+import shutil
 from pysqlite2 import dbapi2 as sqlite
 
 sys.path.append(".")
@@ -54,11 +55,12 @@ class Database:
                self.db.commit()
 
 class DatabaseConfig:
-       def __init__(self, db, key):
+       def __init__(self, db, key, base64=0):
                self.db = db
                self.key = key
                self.data = None
                self.date = None
+               self.base64 = base64
 
        def get(self):
                if not self.data:
@@ -89,6 +91,8 @@ class DatabaseConfig:
                return self.date or float(0)
 
        def set(self, value):
+               if self.base64:
+                       value = base64.b64decode(value)
                #value = (value,)
                c = self.db.cursor()
                if not self.get():
@@ -108,6 +112,7 @@ class DatabaseConfig:
                c.close()
                self.data = value
                self.db.commit()
+               return """Set "%s" to "%s".""" % (self.key, self.data,)
 
 class DurationsConfig:
        def __init__(self, db):
@@ -134,6 +139,7 @@ class DurationsConfig:
                                                "value" : value, })
                c.close()
                self.db.commit()
+               return """Accepted build duration of %s seconds.""" % (value,)
 
        def get_avg(self):
                sum = 0
@@ -161,8 +167,8 @@ class DistccConfig(DatabaseConfig):
        def __str__(self):
                if not self.ping() or self.get() == "0":
                        return ""
-               return "%s:%s/%s,lzo   \t# %s" % \
-                       (socket.gethostbyname(self.hostname), self.get(), self.jobs or "4", self.hostname)
+               return "%s:%s/%s,lzo" % \
+                       (self.hostname, self.get(), self.jobs or "4",)
 
        def ping(self):
                if not self.hostname:
@@ -198,6 +204,7 @@ class FileConfig:
                for line in base64.b64decode(lines).split("\n"):
                        f.write("%s\n" % line.rstrip("\n"))
                f.close()
+               return """Saved file content to %s.""" % (self.filename,)
 
 class Builder:
        def __init__(self, config, uuid):
@@ -216,15 +223,45 @@ class Builder:
                self.hostname = DatabaseConfig(self.db, "hostname")
                self.state    = DatabaseConfig(self.db, "state")
                self.package  = DatabaseConfig(self.db, "package")
+               self.target   = DatabaseConfig(self.db, "target")
+               self.toolchain= DatabaseConfig(self.db, "toolchain")
 
                self.duration = DurationsConfig(self.db)
                self.jobs     = DatabaseConfig(self.db, "jobs")
                self.distcc   = DistccConfig(self.db, "distcc", self.hostname(), self.jobs())
+               self.cpu      = DatabaseConfig(self.db, "cpu", base64=1)
+               self.machine  = DatabaseConfig(self.db, "machine")
+               self.system   = DatabaseConfig(self.db, "system", base64=1)
 
                self.log      = FileConfig(self.path, "log")
+               
+               # If host was longer than 3 days in state compiling we set it as idle.
+               if self.state() == "compiling" and \
+                               (time.time() - self.state.time()) > 3*24*60*60:
+                       self.state.set("idle")
+               
+               # If host is idle and distcc is not disabled we set it as distcc host.
+               if self.state() == "idle" and self.distcc() != "0":
+                       self.state.set("distcc")
+
+               # If host is longer than 24h in error state we set it as distcc host.
+               if self.state() == "error" and \
+                               (time.time() - self.state.time()) > 24*60*60:
+                       self.state.set("distcc")
+               
+               # If host was longer than two weeks in distcc state we set it as unknown.
+               if self.state() == "error" and \
+                               (time.time() - self.state.time()) > 2*7*24*60*60:
+                       self.state.set("unknown")
+
+               # If host was longer than four weels in distcc state we delete it.
+               if self.state() in ("distcc", "unknown",) and \
+                               (time.time() - self.state.time()) > 4*7*24*60*60:
+                       del self.db
+                       shutil.rmtree(self.path)
 
        def set(self, key, value):
-               eval("self.%s.set(\"%s\")" % (key, value,))
+               return eval("self.%s.set(\"%s\")" % (key, value,))
 
        def get(self, key):
                return eval("self.%s.get()" % (key,))