--- a/log_source.py Wed Feb 11 22:01:53 2009 +0200
+++ b/log_source.py Wed Feb 11 22:24:55 2009 +0200
@@ -8,6 +8,9 @@
import config, utils
+# a timedelta that represents one day
+ONE_DAY = datetime.timedelta(days=1)
+
class LogSourceDecoder (object) :
"""
Handles decoding of LogSource lines
@@ -157,7 +160,7 @@
def get_month_days (self, dt) :
"""
- Return a sequence of dates, telling which days in the given month (as a datetime) have logs available
+ Return an ordered sequence of dates, telling which days in the given month (as a datetime) have logs available.
"""
abstract
@@ -175,6 +178,20 @@
"""
abstract
+
+ def get_prev_date (self, dt) :
+ """
+ Get the next distinct date of logs available preceeding the given date, or None
+ """
+
+ abstract
+
+ def get_next_date (self, dt) :
+ """
+ Get the next distinct date of logs following the given date, or None.
+ """
+
+ abstract
class LogFile (object) :
"""
@@ -416,21 +433,21 @@
else :
raise
- def _iter_logfile_dates (self, after=None, until=None) :
+ def _iter_logfile_dates (self, after=None, until=None, reverse=False) :
"""
Yields a series of naive datetime objects representing the logfiles that are available, in time order.
-
- If after is given, only dates from said date onwards will be returned
- If until is given, only dates up to and including said date will be returned
+
+ Parameters :
+ after only dates from said date onwards will be returned
+ until only dates up to and including said date will be returned
+ reverse the dates are returned in reverse order instead. Note that the meaning of after/until doesn't change
"""
# listdir
filenames = os.listdir(self.path)
# sort
- filenames.sort()
-
-
+ filenames.sort(reverse=reverse)
# iter files
for filename in filenames :
@@ -443,13 +460,16 @@
continue
else :
- if (not after or date >= after) and (not until or date <= until) :
+ if (after and date < after) or (until and date > until) :
+ # ignore
+ continue
+
+ else :
+# print
+# print "iter_logfile_dates: after=%s, until=%s, reverse=%s -> %s" % (after, until, reverse, date)
+
# yield
yield date
-
- else :
- # ignore
- continue
def _iter_date_reverse (self, dt=None) :
"""
@@ -465,9 +485,6 @@
# convert to target timezone
dtz = dt.astimezone(self.tz)
- # our timedelta
- ONE_DAY = datetime.timedelta(1)
-
# iterate unto infinity
while True :
# yield
@@ -526,7 +543,7 @@
def get_latest (self, count) :
"""
- Uses _iter_backwards + _get_logfile_date to read the yield the given lines from as many logfiles as needed
+ Uses _logfile_reverse to read the yield the given lines from as many logfiles as needed
"""
# read the events into here
@@ -645,3 +662,27 @@
for line in logfile.read_full() :
yield line
+ def get_prev_date (self, dt) :
+ """
+ Just use _iter_logfile_dates
+ """
+
+ # use for to "iter" once
+ for log_date in self._iter_logfile_dates(until=dt - ONE_DAY, reverse=True) :
+ return log_date
+
+ else :
+ return None
+
+ def get_next_date (self, dt) :
+ """
+ Just use _iter_logfile_dates
+ """
+
+ # use for to "iter" once
+ for log_date in self._iter_logfile_dates(after=dt + ONE_DAY) :
+ return log_date
+
+ else :
+ return None
+