Print summary statistics.
(sessions, daily_data)
| 164 | |
| 165 | |
| 166 | def print_summary(sessions, daily_data): |
| 167 | """Print summary statistics.""" |
| 168 | total_minutes = sum(s["duration_minutes"] for s in sessions) |
| 169 | total_hours = total_minutes / 60 |
| 170 | total_commits = sum(len(s["commits"]) for s in sessions) |
| 171 | |
| 172 | print("=" * 60) |
| 173 | print("PROGRAMMING TIME ANALYSIS SUMMARY") |
| 174 | print("=" * 60) |
| 175 | print( |
| 176 | f"Total Programming Time: {total_hours:.1f} hours ({total_minutes:.0f} minutes)" |
| 177 | ) |
| 178 | print(f"Total Commits: {total_commits}") |
| 179 | print(f"Total Sessions: {len(sessions)}") |
| 180 | print(f"Average Session Length: {total_minutes/len(sessions):.1f} minutes") |
| 181 | print(f"Programming Days: {len(daily_data)}") |
| 182 | print(f"Average Hours per Day: {total_hours/len(daily_data):.1f} hours") |
| 183 | print() |
| 184 | |
| 185 | # Top programming days |
| 186 | top_days = sorted( |
| 187 | daily_data.items(), key=lambda x: x[1]["duration_minutes"], reverse=True |
| 188 | )[:5] |
| 189 | print("TOP 5 PROGRAMMING DAYS:") |
| 190 | for date, data in top_days: |
| 191 | hours = data["duration_minutes"] / 60 |
| 192 | print( |
| 193 | f" {date}: {hours:.1f} hours ({data['commits']} commits, {data['sessions']} sessions)" |
| 194 | ) |
| 195 | print() |
| 196 | |
| 197 | # Longest sessions |
| 198 | longest_sessions = sorted( |
| 199 | sessions, key=lambda x: x["duration_minutes"], reverse=True |
| 200 | )[:5] |
| 201 | print("LONGEST PROGRAMMING SESSIONS:") |
| 202 | for i, session in enumerate(longest_sessions, 1): |
| 203 | hours = session["duration_minutes"] / 60 |
| 204 | start_time = session["start"].strftime("%Y-%m-%d %H:%M") |
| 205 | print( |
| 206 | f" {i}. {start_time}: {hours:.1f} hours ({len(session['commits'])} commits)" |
| 207 | ) |
| 208 | |
| 209 | |
| 210 | def main(): |