import time
import socket
import base64
+import shutil
from pysqlite2 import dbapi2 as sqlite
sys.path.append(".")
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:
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():
c.close()
self.data = value
self.db.commit()
+ return """Set "%s" to "%s".""" % (self.key, self.data,)
class DurationsConfig:
def __init__(self, db):
"value" : value, })
c.close()
self.db.commit()
+ return """Accepted build duration of %s seconds.""" % (value,)
def get_avg(self):
sum = 0
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:
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):
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,))