import sys
import time
import socket
+import base64
from pysqlite2 import dbapi2 as sqlite
sys.path.append(".")
return time.ctime(eta)
class DistccConfig(DatabaseConfig):
- def __init__(self, db, key, hostname):
+ def __init__(self, db, key, hostname, jobs):
DatabaseConfig.__init__(self, db, key)
self.hostname = hostname
+ self.jobs = jobs
def __str__(self):
if not self.ping() or self.get() == "0":
return ""
- return "%s:%s/4,lzo" % \
- (socket.gethostbyname(self.hostname), self.get(),)
+ return "%s:%s/%s,lzo \t# %s" % \
+ (socket.gethostbyname(self.hostname), self.get(), self.jobs or "4", self.hostname)
def ping(self):
if not self.hostname:
def version(self):
return os.popen("distcc --version").readlines()
+class FileConfig:
+ def __init__(self, path, filetype):
+ self.filename = os.path.join(path, config["path"][filetype])
+
+ # Create the file if not existant
+ if not os.access(self.filename, os.R_OK):
+ f = open(self.filename, "w")
+ f.close()
+
+ def get(self):
+ ret = []
+ try:
+ f = open(self.filename)
+ ret = f.readlines()
+ f.close()
+ except:
+ pass
+ return ret or ["Log is empty."]
+
+ __call__ = get
+
+ def set(self, lines):
+ f = open(self.filename, "w")
+ for line in base64.b64decode(lines).split("\n"):
+ f.write("%s\n" % line.rstrip("\n"))
+ f.close()
+
class Builder:
def __init__(self, config, uuid):
self.uuid = uuid
pass
self.db = Database(self.path)
-
+
self.hostname = DatabaseConfig(self.db, "hostname")
self.state = DatabaseConfig(self.db, "state")
self.package = DatabaseConfig(self.db, "package")
-
+
self.duration = DurationsConfig(self.db)
- self.distcc = DistccConfig(self.db, "distcc", self.hostname.get())
+ self.jobs = DatabaseConfig(self.db, "jobs")
+ self.distcc = DistccConfig(self.db, "distcc", self.hostname(), self.jobs())
+
+ self.log = FileConfig(self.path, "log")
def set(self, key, value):
eval("self.%s.set(\"%s\")" % (key, value,))
config = {
"title" : "IPFire - Builder",
"nightly_url" : ("ftp://ftp.ipfire.org/pub/nightly-builds/", "http://www.rowie.at/upload/ipfire/builds/",),
- "path" : { "db" : "db", },
+ "path" : { "db" : "db", "log" : "error.log", },
"script" : os.environ['SCRIPT_NAME'],
"db_name" : "builder.db",
}
None : "",
"compiling" : "background: #8C8; border: 1px solid #0e0;",
"error" : "background: #c33; border: 1px solid #e00;",
- "idle" : "height: 60px; background: #ddd; border: 1px solid #eee;",
+ "idle" : "background: #ddd; border: 1px solid #eee;",
}
builder = Builder(config, uuid)
key = None
- for key in [ "distcc", "duration", "hostname", "state", "package", ]:
+ for key in [ "distcc", "duration", "hostname", "jobs", "log", "state", "package", ]:
for value in data.getlist(key):
builder.set(key, value)
elif action == "get":
for value in data.getlist(key):
if value == "raw":
builders = []
+ jobs = "4"
for builder in getAllBuilders():
- if uuid == builder.uuid: continue
+ if uuid == builder.uuid:
+ jobs = builder.jobs()
+ continue
builders.append("%s" % builder.distcc)
- string = "localhost/1\n--randomize\n"
+ string = "localhost/%s\n--randomize\n" % (jobs or "4",)
while True:
if not builders: break
rand = random.randint(0, len(builders)-1)