Files
MyClub/DOCS/ANALYTICS_DASHBOARD_FIX.md
Tomáš Dvořák 12cba639b9 upload
2025-10-16 13:32:05 +02:00

98 lines
3.8 KiB
Markdown

# Analytics Dashboard Fix - Summary
## Problem
The admin dashboard was showing empty analytics data (zeros and dashes) even though the `/admin/analytika` page displayed correct Umami analytics data.
## Root Cause
The system has **two separate analytics systems**:
1. **Umami Analytics** - External analytics service (working correctly, used by `/admin/analytika`)
2. **Internal Analytics** - `visitor_events` database table (empty, was being used by dashboard)
The dashboard was trying to fetch data from the internal `visitor_events` table, which was empty because tracking events weren't being recorded there.
## Solution
Modified the analytics controller to **fetch data from Umami** instead of the internal database:
### Changes Made
#### 1. Updated `analytics_controller.go`
- Added Umami service integration to `AnalyticsController`
- Added `resolveWebsiteID()` method to get the Umami website ID
- Modified endpoints to fetch from Umami first, with fallback to internal DB:
- `GetAnalytics()` - Now returns proper users, events, and articles stats
- `GetAnalyticsOverview()` - Fetches page views and visitors from Umami
- `GetTopPages()` - Gets top pages from Umami URL metrics
### Affected Dashboard Stats
The following dashboard statistics now display correctly:
**Uživatelé (admin)** - Total users and new this week (from database)
**Události** - Total events and upcoming events (from database)
**Články** - Total articles and published count (from database)
**Zobrazení stránek** - Total page views from Umami
**Unikátní návštěvníci** - Unique visitors from Umami
**Zobrazení (týden)** - Page views last 7 days from Umami
**Nejnavštěvovanější stránky** - Top pages from Umami
**Nejčastější interakce** - Will show data when interaction events are tracked
### How It Works
1. **Umami Integration**: The controller now queries Umami's API for web analytics
2. **Time Ranges**:
- Overall stats: Last 365 days
- Today's stats: Current day (00:00 - now)
- Week stats: Last 7 days
3. **Fallback**: If Umami is unavailable, falls back to internal `visitor_events` table
## Testing
1. **Restart the backend**:
```bash
# Stop the current server
# Then start it again
go run main.go
# Or use your deployment method
```
2. **Check the dashboard**:
- Go to `/admin` in your browser
- You should now see analytics data populated from Umami
3. **Verify Umami is configured**:
- Check `.env` file has:
```
UMAMI_URL=https://your-umami-instance.com
UMAMI_USERNAME=admin
UMAMI_PASSWORD=your-password
UMAMI_WEBSITE_ID=your-website-id
```
## Expected Results
After restarting the backend, the dashboard should display:
- **Users count**: Number of admin users in the system
- **Events count**: Number of events (matches, trainings, etc.)
- **Articles count**: Number of articles and published articles
- **Page views**: Real visitor statistics from Umami
- **Top pages table**: Most visited pages from Umami
- **Visitor chart** (if GetVisitors is updated): Daily visitor trends
## Notes
- The `GetVisitors` function (used by VisitorsWidget) still uses internal DB. If you need this to work with Umami, you'll need to fetch time-series data from Umami's pageviews endpoint
- Umami must be properly configured and accessible for the stats to appear
- If Umami is not configured, the dashboard will fallback to internal analytics (which may be empty)
## Next Steps (Optional)
If you want the visitor chart widget to also use Umami data:
1. Update `GetVisitors()` to fetch time-series data from Umami
2. Use Umami's `/api/websites/{websiteId}/pageviews` endpoint
3. Group the data by day and format it for the chart
## Files Modified
- `internal/controllers/analytics_controller.go` - Added Umami integration for dashboard stats