]> git.itanic.dy.fi Git - emerge-timer/blob - emerge-timer.py
Add get_package function
[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 def get_package(name):
130     """Take the user-input package name and search for it
131     in PORTDIR. """
132
133     dirlist = os.listdir(PORTDIR)
134     possible_package = []
135
136
137     # If the given name is in the format xxx/zzz
138     # assume that xxx is the package group
139     if '/' in name:
140         group = name.partition('/')[0]
141         pkg = name.partition('/')[2]
142         directory = PORTDIR + group
143
144         if group in dirlist:
145             dirs = os.listdir(directory)
146             if pkg in dirs:
147                 possible_package.append(name)
148
149
150     # Go through the directory listing searching for anything
151     # that matches the given name
152     for i in dirlist:
153         directory = PORTDIR + i
154         if os.path.isdir(directory):
155             dirs = os.listdir(directory)
156             if name in dirs:
157                 possible_package.append(i + '/' + name)
158
159
160     if len(possible_package) > 1:
161         print("Multiple packages found for '" + name + "'.")
162         print("Possible packages: ")
163         for value in possible_package:
164             print("\t" + value)
165
166
167     elif len(possible_package) == 1:
168         package = possible_package[0]
169         return package
170
171
172     else:
173         print("No package '" + name + "' found")
174
175
176     sys.exit(1)
177
178
179
180 def main(status, user_package=None):
181
182     if status == "package":
183         user_package = get_package(user_package)
184
185         search_log_for_package(user_package)
186         packages[0].print_versions()
187
188
189     elif status == "current":
190         pass
191
192     elif status == "pretended":
193         pass
194
195
196
197
198 if __name__ == "__main__":
199
200     if len(sys.argv) == 1:
201         main("current")
202         sys.exit(1)
203
204     elif sys.argv[1] == "-p":
205         main("pretended")
206         sys.exit(1)
207
208     elif len(sys.argv) > 1:
209         main("package", sys.argv[1])
210