PORTDIR = "/usr/portage/"
LOGFILE = "/var/log/emerge.log"
+
green_start = "\033[32m"
color_stop = "\033[m"
+
packages = []
+
class package:
def __init__(self, name, version=0):
self.name = name
self.versions = []
self.emerge_time = 12*3600
- def add_version(self, version, emerge_time, emerge_date):
+ def add_version(self, version, emerge_time, emerge_date):
+ """Add version to the class version list"""
self.versions.append((version, emerge_time, emerge_date))
def average_time(self):
+ """Return average time from class version list"""
total_time = 0
for i in self.versions:
total_time += i[1]
return average_time
+
def total_time(self):
+ """Return total time from class version list"""
total_time = 0
for i in self.versions:
total_time += i[1]
def max_time(self):
+ """Return maximum time from class version list"""
self.versions.sort()
return self.versions[len(self.versions)-1][1]
def min_time(self):
+ """Return minimum time from class version list"""
self.versions.sort()
return self.versions[0][1]
def print_current_emerge(self):
+ """Function used to print all the current emerge stuff"""
print("\t" + green_start + self.name + '-' + self.version +
color_stop + "\n\t current time: " + self.time(self.emerge_time) +
def print_versions(self):
+ """This prints the emerge times for different versions in the
+ normal operating mode of the script"""
+
for p in self.versions:
+
print('-'*90 + "\n" +
green_start + self.name + p[0] + color_stop + " >>> " +
self.time(p[1]) + " >>> " +
self.date(p[2]))
+
print('-'*90 + "\n" + "Package " + green_start +
self.name + color_stop + " emerged " +
str(len(self.versions)) + " times.")
+
print
+
def print_pretended_times(self):
+ """This is used the print all the pretended times"""
print("\t" + green_start + self.name + '-' + self.version + color_stop),
if len(self.versions) > 1:
"\nIn total spent " + self.time(total) +
" emerging " + green_start + self.name + color_stop)
- def time(self, time):
+ def time(self, time):
+ """Converts time in seconds to human readable form"""
days = time/(3600*24)
hours = (days - int(days))*24
minutes = (hours - int(hours))*60
def date(self, emerge_date):
+ """Returns a date string from a standard POSIX time"""
date = datetime.datetime.fromtimestamp(emerge_date)
date = "{:%d.%m.%Y %H:%M:%S}".format(date)
def search_log_for_package(package_class):
+ """Searchs emerge log for given package and adds all found
+ versions with their emerge times to the class"""
log = open_log()
for line in log:
if ((">>>" in line) and ("emerge" in line)):
if package_class.name in line:
+
version = line.partition(package_class.name)[2].partition(' ')[0]
digit = version.strip('-')[0].isdigit()
start_time = float(time_string[0].strip().strip(':'))
elif ((":::" in line) and ("completed emerge" in line)):
+
if package_class.name in line:
if digit:
time_string = line.partition(":::")
package_class.add_version(version, emerge_time, start_time)
+
def get_package(name):
"""Take the user-input package name and search for it
in PORTDIR. """
sys.exit(1)
+
def list_pretended():
+ """List all the pretended packages given by emerge -p
+ output. Create a class out of each of those packages and add them
+ to the list."""
+
log = open_log()
for line in sys.stdin:
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
-
-
def main(status, user_package=None):
+ """Main function. Hanlde all the different modes of operation."""
if status == "package":
user_package = get_package(user_package)
print
+
def usage():
usage = """Usage: emerge-timer.py [package] [options]
mode = "package"
input_package = None
+
for arg in sys.argv[1:]:
if arg == "-p" or arg == "--pretended":