]> git.itanic.dy.fi Git - emerge-timer/blobdiff - emerge-timer.py
Fix but with packages with names with '-'s in them
[emerge-timer] / emerge-timer.py
index 82d79fc5411ccdd1c77b9959172c62e2c930830f..18e3a8a1b78c132a964d186b7683a2bdac0110dc 100755 (executable)
 #!/usr/bin/python
 
-import sys, subprocess, datetime, os
 
-try:
-    f = open('/var/log/emerge.log', 'r')
-except IOError:
-    print "Permission denied: '/var/log/emerge.log'"
-    sys.exit(1)
-
-try:
-    package_name = sys.argv[1]
-except IndexError:
-    f.close()
-    sys.exit(1)
-
-emerge_number = 0
-times = []
-
-lista = []
-green_start = "\033[1;32m"
-green_stop = "\033[1;m"
-
-def get_time(string, part):
-    if part == 1:
-        string = string.partition(">>>")
-    elif part == 2:
-        string = line.partition(":::")
-
-    time = float(string[0].strip().strip(":"))
-    return time
+import sys, subprocess, datetime, os, re
 
-def organize_times(time):
-    days = time/(3600*24)
-    hours = (days - int(days))*24
-    minutes = (hours - int(hours))*60
-    seconds = (minutes - int(minutes))*60
-
-    days = int(round(days))
-    hours = int(round(hours))
-    minutes = int(round(minutes))
-    seconds = int(round(seconds))
-
-    if days > 0:
-        print_days = (green_start + str(days) + green_stop + " day")
-        if days != 1:
-            print_days += "s"
-        print print_days,
 
-    if hours > 0:
-        print_hours = (green_start + str(hours) + green_stop + " hour")
-        if hours != 1:
-            print_hours += "s"
-        print print_hours,
+PORTDIR = "/usr/portage/"
+LOGFILE = "/var/log/emerge.log"
 
-    if minutes > 0:
-        print_minutes = (green_start + str(minutes) + green_stop + " minute")
-        if minutes != 1:
-            print_minutes += "s"
-        print print_minutes,
+green_start = "\033[32m"
+color_stop = "\033[m"
 
-    printable_sec = (green_start + str(seconds) + green_stop + " second")
-    if seconds != 1:
-        printable_sec += "s"
-    print printable_sec,
+packages = []
 
 
-def date_printer(package, time1, time2):
-    global emerge_time
+class package:
+    def __init__(self, name):
+        self.name = name
 
-    date = datetime.date.fromtimestamp(time1)
-    emerge_time = time2-time1
-    date = (str(date.day) + "/" + str(date.month)
-            + "/" + str(date.year))
+        self.versions = []
 
-    print("Started emerging " + green_start + package + green_stop +
-          " at " + date)
+    def add_version(self, version, emerge_time, emerge_date):
 
-    print "merge time",
-    organize_times(emerge_time)
-    print "\n"
+        self.versions.append((version, emerge_time, emerge_date))
 
-    return date
 
+    def print_versions(self):
+        for p in self.versions:
+            print("\t" + self.name + p[0] + "  >>>  " +
+                  self.time(p[1]) + "  >>>  " +
+                  green_start + self.date(p[2]) + color_stop)
 
-def get_package(name):
-    global package
-    dirlist = os.listdir('/usr/portage/')
 
-    for i in dirlist:
-        directory = '/usr/portage/' + i
-        if os.path.isdir(directory):
-            dirs = os.listdir(directory)
-            if name in dirs:
-                package = i + '/' + name
+    def time(self, time):
 
+        days = time/(3600*24)
+        hours = (days - int(days))*24
+        minutes = (hours - int(hours))*60
+        seconds = (minutes - int(minutes))*60
 
-def print_times(times):
-    times.sort()
-    times.reverse()
+        days = int(days)
+        hours = int(hours)
+        minutes = int(minutes)
+        seconds = int(round(seconds))
 
-    print(green_start + package + green_stop + " emerged " + green_start +
-          str(emerge_number) + green_stop + " time(s)\n")
+        pdays = str()
+        phours = str()
+        pminutes = str()
+        pseconds = str()
 
-    if emerge_number == 1:
-        print "merge time",
-        organize_times(times[0][0])
+        if days > 0:
+            pdays = (green_start + str(days) + color_stop + " day")
+            if days != 1:
+                pdays += "s"
 
-    else:
-        print "Max time:",
-        organize_times(times[0][0])
-        print
+        if hours > 0:
+            phours = (green_start + str(hours) + color_stop + " hour")
+            if hours != 1:
+                phours += "s"
 
-        print "Min time:",
-        organize_times(times[len(times)-1][0])
-        print
+        if minutes > 0:
+            pminutes = (green_start + str(minutes) + color_stop + " minute")
+            if minutes != 1:
+                pminutes += "s"
 
-        all_times = 0
-        for i in times:
-            all_times += i[0]
+        pseconds = (green_start + str(seconds) + color_stop + " second")
+        if seconds != 1:
+            pseconds += "s"
 
-        print "Average time",
-        organize_times(all_times/len(times))
-        print
+        return (pdays + phours + pminutes + pdays)
 
-        print "In total spent",
-        organize_times(all_times)
-        print("emerging " + green_start +
-              package + green_stop)
 
-get_package(package_name)
+    def date(self, emerge_date):
+        date = datetime.datetime.fromtimestamp(emerge_date)
 
-for line in f:
-    if package in line:
-        if (">>>" in line) and ("emerge" in line):
-            st = line.split(' ')
-            for i in st:
-                if package_name in i:
-                    full_package = st[st.index(i)]
+        year = str(date.year)
+        month = str(date.month)
+        day = str(date.day)
+        hour = str(date.hour)
+        minute = str(date.minute)
+        second = str(date.second)
 
-            time = get_time(line, 1)
+        date = "{:%d.%m.%Y %H:%M:%S}".format(date)
 
-        if (":::" in line) and ("completed emerge" in line):
-            emerge_number += 1
+        return date
 
-            time2 = get_time(line, 2)
 
-            date = date_printer(full_package, time, time2)
 
-            times.append((emerge_time, date))
-            lista.append([date, int(emerge_time)])
+def open_log():
+    """Attempt to open the LOGFILE."""
 
-if emerge_number == 0:
-    print "No package named", package_name, "found"
-    sys.exit(1)
+    try:
+        f = open(LOGFILE, 'r')
+    except IOError as detail:
+        print detail
+        sys.exit(1)
+    finally:
+        return f
 
-f.close()
 
-print_times(times)
 
-g = open('times', 'w')
+def search_log_for_package(user_package):
 
-for i in lista:
-    line = str(i[0]) + " " + str(i[1]) + "\n"
-    g.write(line)
+    log = open_log()
+
+    packages.insert(0, package(user_package))
+
+    for line in log:
+        if ((">>>" in line) and ("emerge" in line)):
+            if user_package in line:
+                version = line.partition(user_package)[2].partition(' ')[0]
+                digit = version.strip('-')[0].isdigit()
+
+                if digit:
+                    time_string = line.partition(">>>")
+                    start_time = float(time_string[0].strip().strip(':'))
+
+        elif ((":::" in line) and ("completed emerge" in line)):
+            if user_package in line:
+                if digit:
+                    time_string = line.partition(":::")
+                    stop_time = float(time_string[0].strip().strip(':'))
+
+                    emerge_time = stop_time - start_time
+
+                    packages[0].add_version(version, emerge_time, start_time)
+
+
+
+def print_stuff():
+    for p in packages:
+        p.print_versions()
+
+
+
+def main(status, user_package=None):
+
+    if status == "package":
+        search_log_for_package(user_package)
+        print_stuff()
+
+
+    elif status == "current":
+        pass
+
+    elif status == "pretended":
+        pass
+
+
+
+
+if __name__ == "__main__":
+
+    if len(sys.argv) == 1:
+        main("current")
+        sys.exit(1)
+
+    elif sys.argv[1] == "-p":
+        main("pretended")
+        sys.exit(1)
+
+    elif len(sys.argv) > 1:
+        main("package", sys.argv[1])
 
-g.close()