This commit is contained in:
2025-08-20 05:06:05 +02:00
parent c9a45d3435
commit b3c389e666
5 changed files with 34 additions and 40 deletions

View File

@@ -24,7 +24,7 @@ def search(l: Logger, args_: SearchArgs) -> List[LogItem]:
raise ValueError('category cannot be longer than 10 chars')
from_time = args.timestamp_from.unix() if args.timestamp_from else 0
to_time = args.timestamp_to.unix() if args.timestamp_to else ourtime_new('2100-01-01').unix()
to_time = args.timestamp_to.unix() + 1 if args.timestamp_to else ourtime_new('2100-01-01').unix()
if from_time > to_time:
raise ValueError(f'from_time cannot be after to_time: {from_time} > {to_time}')
@@ -62,52 +62,41 @@ def search(l: Logger, args_: SearchArgs) -> List[LogItem]:
if len(result) >= args.maxitems:
break
if not line.strip() and current_item:
if from_time <= current_item.timestamp.unix() <= to_time:
if (not args.cat or args.cat == current_item.cat) and \
(not args.log or args.log.lower() in current_item.log.lower()) and \
(args.logtype is None or args.logtype == current_item.logtype):
result.append(current_item)
current_item = None
continue
if not line.startswith(' ') and not line.startswith('E'):
# Helper to add current_item to result if it matches criteria
def _add_item_if_matches():
nonlocal current_item
if current_item:
if from_time <= current_item.timestamp.unix() <= to_time:
if (not args.cat or args.cat == current_item.cat) and \
(not args.log or args.log.lower() in current_item.log.lower()) and \
(args.logtype is None or args.logtype == current_item.logtype):
result.append(current_item)
if (not args.cat or args.cat == current_item.cat) and \
(not args.log or args.log.lower() in current_item.log.lower()) and \
(args.logtype is None or args.logtype == current_item.logtype):
result.append(current_item)
current_item = None # Reset after processing
if not line.strip(): # Empty line, finalize previous item
_add_item_if_matches()
continue
if not line.startswith(' ') and not line.startswith('E'): # New timestamp line
_add_item_if_matches() # Finalize previous item
try:
current_time = ourtime_new(f"{file_time.day()} {line.strip()}")
current_item = None
except ValueError:
current_time = None
current_item = None
current_item = None # Reset for new item
elif current_time:
if line.startswith(' ') or line.startswith('E'):
if len(line) > 14 and line[13] == '-':
if current_item:
if from_time <= current_item.timestamp.unix() <= to_time:
if (not args.cat or args.cat == current_item.cat) and \
(not args.log or args.log.lower() in current_item.log.lower()) and \
(args.logtype is None or args.logtype == current_item.logtype):
result.append(current_item)
is_error = line.startswith('E')
logtype = LogType.ERROR if is_error else LogType.STDOUT
cat = line[2:12].strip()
log_content = line[15:]
if len(line) > 14 and line[13] == '-': # New log entry line
_add_item_if_matches() # Finalize previous item
is_error = line.startswith('E')
logtype = LogType.ERROR if is_error else LogType.STDOUT
cat = line[2:12].strip()
log_content = line[15:]
current_item = LogItem(timestamp=current_time, cat=cat, log=log_content.strip(), logtype=logtype)
elif current_item:
current_item.log += "\n" + (line[15:] if len(line) >15 else line)
current_item = LogItem(timestamp=current_time, cat=cat, log=log_content.strip(), logtype=logtype)
elif current_item: # Continuation line
current_item.log += "\n" + (line[15:] if len(line) >15 else line)
if current_item:
if from_time <= current_item.timestamp.unix() <= to_time:
if (not args.cat or args.cat == current_item.cat) and \
(not args.log or args.log.lower() in current_item.log.lower()) and \
(args.logtype is None or args.logtype == current_item.logtype):
result.append(current_item)
_add_item_if_matches() # Finalize the last item in the file
return result

View File

@@ -93,6 +93,7 @@ def new(time_str: str) -> OurTime:
'%Y-%m-%d %H:%M:%S',
'%Y-%m-%d %H:%M',
'%Y-%m-%d %H',
'%Y-%m-%d-%H', # Add this format for dayhour parsing
'%Y-%m-%d',
'%d-%m-%Y %H:%M:%S',
'%d-%m-%Y %H:%M',