Print comprehensive summary statistics.
(sessions, daily_data)
| 142 | |
| 143 | |
| 144 | def print_summary(sessions, daily_data): |
| 145 | """Print comprehensive summary statistics.""" |
| 146 | total_minutes = sum(s["duration_minutes"] for s in sessions) |
| 147 | total_hours = total_minutes / 60 |
| 148 | total_commits = sum(len(s["commits"]) for s in sessions) |
| 149 | |
| 150 | print("=" * 70) |
| 151 | print("PROGRAMMING TIME ANALYSIS SUMMARY") |
| 152 | print("=" * 70) |
| 153 | print( |
| 154 | f"Total Programming Time: {total_hours:.1f} hours ({total_minutes:.0f} minutes)" |
| 155 | ) |
| 156 | print(f"Total Commits: {total_commits}") |
| 157 | print(f"Total Sessions: {len(sessions)}") |
| 158 | print(f"Programming Days: {len(daily_data)}") |
| 159 | |
| 160 | if len(sessions) > 0: |
| 161 | print(f"Average Session Length: {total_minutes/len(sessions):.1f} minutes") |
| 162 | if len(daily_data) > 0: |
| 163 | print(f"Average Hours per Day: {total_hours/len(daily_data):.1f} hours") |
| 164 | |
| 165 | print() |
| 166 | |
| 167 | # Date range |
| 168 | if daily_data: |
| 169 | dates = sorted(daily_data.keys()) |
| 170 | print(f"Project Duration: {dates[0]} to {dates[-1]}") |
| 171 | total_days = (dates[-1] - dates[0]).days + 1 |
| 172 | print(f"Total Calendar Days: {total_days}") |
| 173 | print( |
| 174 | f"Programming Days: {len(daily_data)} ({len(daily_data)/total_days*100:.1f}% of days)" |
| 175 | ) |
| 176 | print() |
| 177 | |
| 178 | # Top programming days |
| 179 | if daily_data: |
| 180 | top_days = sorted( |
| 181 | daily_data.items(), key=lambda x: x[1]["duration_minutes"], reverse=True |
| 182 | )[:10] |
| 183 | print("TOP 10 PROGRAMMING DAYS:") |
| 184 | for i, (date, data) in enumerate(top_days, 1): |
| 185 | hours = data["duration_minutes"] / 60 |
| 186 | print( |
| 187 | f" {i:2d}. {date}: {hours:5.1f} hours ({data['commits']:2d} commits, {data['sessions']} sessions)" |
| 188 | ) |
| 189 | print() |
| 190 | |
| 191 | # Longest sessions |
| 192 | if sessions: |
| 193 | longest_sessions = sorted( |
| 194 | sessions, key=lambda x: x["duration_minutes"], reverse=True |
| 195 | )[:10] |
| 196 | print("LONGEST PROGRAMMING SESSIONS:") |
| 197 | for i, session in enumerate(longest_sessions, 1): |
| 198 | hours = session["duration_minutes"] / 60 |
| 199 | start_time = session["start"].strftime("%Y-%m-%d %H:%M") |
| 200 | end_time = session["end"].strftime("%H:%M") |
| 201 | print( |