]> git.itanic.dy.fi Git - emerge-timer/blobdiff - emerge-timer.py
Add current emerge time feature
[emerge-timer] / emerge-timer.py
index 5c8fd89bcfa49f9aea1134a727960b5d52834a67..31aae32b8538b0c144b49cfe06a9914f6a8405be 100755 (executable)
@@ -18,6 +18,7 @@ class package:
         self.name = name
         self.version = version
         self.versions = []
+        self.emerge_time = 12*3600
 
     def add_version(self, version, emerge_time, emerge_date):
 
@@ -53,6 +54,18 @@ class package:
         return self.versions[0][1]
 
 
+    def print_current_emerge(self):
+
+        print("\t" + green_start + self.name + '-' + self.version +
+              color_stop + "\n\t current time: " + self.time(self.emerge_time)
+              + "\n\t average time: " + self.time(self.average_time())),
+
+        finish_time = self.average_time() - self.emerge_time
+
+        print("\n\t " + '-'*45 +
+              "\n\t time to finish: " + self.time(finish_time))
+
+
     def print_versions(self):
         for p in self.versions:
             print('-'*90 + "\n" +
@@ -238,6 +251,50 @@ def list_pretended():
             packages.append(package(package_name, version))
 
 
+def list_emerge_processes():
+    """Look for the ebuild process with ps. If the process is found parse
+    the command for the package. With this package search the LOGFILE for
+    the emerge startup time."""
+
+    f = open_log()
+
+    now = datetime.datetime.today()
+
+    for i in os.popen("ps ax"):
+        if (("ebuild.sh" in i) and ("/bin/bash" not in i)):
+            pack = i.partition('[')[2].partition(']')[0]
+
+            version = pack.partition('/')[2].partition('-')[2]
+
+            while not version[0].isdigit():
+                version = version.partition('-')[2]
+
+            package_name = pack[:-len(version)-1]
+
+            packages.append(package(package_name, version))
+
+
+    if len(packages) == 0:
+        print "No current emerge process found."
+        return
+
+
+    for line in f:
+        if ((">>>" in line) and ("emerge" in line)):
+            for p in packages:
+                if (p.name + '-' + p.version in line):
+
+                    time = float(line.partition(' ')[0].strip(":"))
+
+                    timestamp = datetime.datetime.fromtimestamp(time)
+                    difference = (now - timestamp).total_seconds()
+
+                    if difference < p.emerge_time:
+                        p.emerge_time = difference
+
+
+
+
 
 def main(status, user_package=None):
 
@@ -252,7 +309,13 @@ def main(status, user_package=None):
 
 
     elif status == "current":
-        pass
+        list_emerge_processes()
+
+        print "Currently emerging:"
+
+        for p in packages:
+            search_log_for_package(p)
+            p.print_current_emerge()
 
 
     elif status == "pretended":