55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
#!/usr/bin/env python3
|
|
"""Forge Log Analyzer - generates JSON report."""
|
|
import sys
|
|
import json
|
|
from pathlib import Path
|
|
from datetime import datetime
|
|
import re
|
|
|
|
def analyze_forge_log(filepath):
|
|
"""Analyze a forge log file and return key metrics."""
|
|
content = Path(filepath).read_text()
|
|
|
|
filename = Path(filepath).name
|
|
duration_match = re.match(r'forge-(\d{4}-\d{2}-\d{2}-\d{6})\.txt', filename)
|
|
|
|
metrics = {
|
|
'file': str(filepath),
|
|
'filename': filename,
|
|
'lines': len(content.split('\n')),
|
|
'words': len(content.split()),
|
|
'chars': len(content),
|
|
}
|
|
|
|
if duration_match:
|
|
ts_str = duration_match.group(1)
|
|
try:
|
|
dt = datetime.strptime(ts_str, '%Y-%m-%d-%H%M%S')
|
|
metrics['session_time'] = dt.strftime('%Y-%m-%d %H:%M:%S')
|
|
except:
|
|
pass
|
|
|
|
return metrics
|
|
|
|
def main():
|
|
outputs_dir = Path('/root/.hermes/wizard-outputs')
|
|
forge_logs = sorted(outputs_dir.glob('forge-*.txt'))
|
|
|
|
results = {
|
|
'generated_at': datetime.now().isoformat(),
|
|
'total_files': len(forge_logs),
|
|
'files_analyzed': len(forge_logs[:10]),
|
|
'analysis': [analyze_forge_log(log) for log in forge_logs[:10]]
|
|
}
|
|
|
|
chars = [m['chars'] for m in results['analysis']]
|
|
results['total_lines'] = sum(m['lines'] for m in results['analysis'])
|
|
results['total_chars'] = sum(chars)
|
|
results['avg_file_chars'] = sum(chars) / len(chars) if chars else 0
|
|
|
|
# Output as JSON
|
|
print(json.dumps(results, indent=2))
|
|
return 0
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main()) |