]> git.itanic.dy.fi Git - emerge-timer/blob - emerge-timer.py
Fix but with packages with names with '-'s in them
[emerge-timer] / emerge-timer.py
1 #!/usr/bin/python
2
3
4 import sys, subprocess, datetime, os, re
5
6
7 PORTDIR = "/usr/portage/"
8 LOGFILE = "/var/log/emerge.log"
9
10 green_start = "\033[32m"
11 color_stop = "\033[m"
12
13 packages = []
14
15
16 class package:
17     def __init__(self, name):
18         self.name = name
19
20         self.versions = []
21
22     def add_version(self, version, emerge_time, emerge_date):
23
24         self.versions.append((version, emerge_time, emerge_date))
25
26
27     def print_versions(self):
28         for p in self.versions:
29             print("\t" + self.name + p[0] + "  >>>  " +
30                   self.time(p[1]) + "  >>>  " +
31                   green_start + self.date(p[2]) + color_stop)
32
33
34     def time(self, time):
35
36         days = time/(3600*24)
37         hours = (days - int(days))*24
38         minutes = (hours - int(hours))*60
39         seconds = (minutes - int(minutes))*60
40
41         days = int(days)
42         hours = int(hours)
43         minutes = int(minutes)
44         seconds = int(round(seconds))
45
46         pdays = str()
47         phours = str()
48         pminutes = str()
49         pseconds = str()
50
51         if days > 0:
52             pdays = (green_start + str(days) + color_stop + " day")
53             if days != 1:
54                 pdays += "s"
55
56         if hours > 0:
57             phours = (green_start + str(hours) + color_stop + " hour")
58             if hours != 1:
59                 phours += "s"
60
61         if minutes > 0:
62             pminutes = (green_start + str(minutes) + color_stop + " minute")
63             if minutes != 1:
64                 pminutes += "s"
65
66         pseconds = (green_start + str(seconds) + color_stop + " second")
67         if seconds != 1:
68             pseconds += "s"
69
70         return (pdays + phours + pminutes + pdays)
71
72
73     def date(self, emerge_date):
74         date = datetime.datetime.fromtimestamp(emerge_date)
75
76         year = str(date.year)
77         month = str(date.month)
78         day = str(date.day)
79         hour = str(date.hour)
80         minute = str(date.minute)
81         second = str(date.second)
82
83         date = "{:%d.%m.%Y %H:%M:%S}".format(date)
84
85         return date
86
87
88
89 def open_log():
90     """Attempt to open the LOGFILE."""
91
92     try:
93         f = open(LOGFILE, 'r')
94     except IOError as detail:
95         print detail
96         sys.exit(1)
97     finally:
98         return f
99
100
101
102 def search_log_for_package(user_package):
103
104     log = open_log()
105
106     packages.insert(0, package(user_package))
107
108     for line in log:
109         if ((">>>" in line) and ("emerge" in line)):
110             if user_package in line:
111                 version = line.partition(user_package)[2].partition(' ')[0]
112                 digit = version.strip('-')[0].isdigit()
113
114                 if digit:
115                     time_string = line.partition(">>>")
116                     start_time = float(time_string[0].strip().strip(':'))
117
118         elif ((":::" in line) and ("completed emerge" in line)):
119             if user_package in line:
120                 if digit:
121                     time_string = line.partition(":::")
122                     stop_time = float(time_string[0].strip().strip(':'))
123
124                     emerge_time = stop_time - start_time
125
126                     packages[0].add_version(version, emerge_time, start_time)
127
128
129
130 def print_stuff():
131     for p in packages:
132         p.print_versions()
133
134
135
136 def main(status, user_package=None):
137
138     if status == "package":
139         search_log_for_package(user_package)
140         print_stuff()
141
142
143     elif status == "current":
144         pass
145
146     elif status == "pretended":
147         pass
148
149
150
151
152 if __name__ == "__main__":
153
154     if len(sys.argv) == 1:
155         main("current")
156         sys.exit(1)
157
158     elif sys.argv[1] == "-p":
159         main("pretended")
160         sys.exit(1)
161
162     elif len(sys.argv) > 1:
163         main("package", sys.argv[1])
164