mirror of
https://github.com/DRYTRIX/TimeTracker.git
synced 2026-05-07 21:10:46 -05:00
e4789cc26e
Implement comprehensive analytics and monitoring system with PostHog integration, complete observability stack (Prometheus, Grafana, Loki, Promtail), and CI/CD workflows for automated builds. Features: - Add PostHog telemetry integration with privacy-focused event tracking - Implement installation flow for opt-in telemetry configuration - Add telemetry management UI in admin panel with detailed transparency - Track key user events across all major features (projects, tasks, timer, etc.) Infrastructure: - Set up Prometheus for metrics collection - Configure Grafana for visualization dashboards - Integrate Loki and Promtail for log aggregation - Add separate analytics docker-compose configuration CI/CD: - Add GitHub Actions workflows for building and publishing Docker images - Implement separate dev and production build pipelines - Configure automated image publishing to registry Documentation: - Restructure documentation into organized docs/ directory - Add comprehensive guides for telemetry, analytics, and local development - Create transparency documentation for tracked events - Add CI/CD and build configuration guides Code improvements: - Integrate telemetry hooks across all route handlers - Add feature flags and configuration management - Refactor test suite for analytics functionality - Clean up root directory by moving docs and removing test artifacts Breaking changes: - Requires new environment variables for PostHog configuration - Docker compose setup now supports analytics stack Changes: 73 files changed, 955 insertions(+), 14126 deletions(-)
331 lines
7.3 KiB
Markdown
331 lines
7.3 KiB
Markdown
# Local Development with Analytics
|
|
|
|
## Running TimeTracker Locally with PostHog
|
|
|
|
Since analytics keys are embedded during the build process and cannot be overridden via environment variables, here's how to test PostHog locally during development.
|
|
|
|
## Option 1: Temporary Local Configuration (Recommended)
|
|
|
|
### Step 1: Get Your Development Keys
|
|
|
|
1. **Create a PostHog account** (or use existing):
|
|
- Go to https://posthog.com (or your self-hosted instance)
|
|
- Create a new project called "TimeTracker Dev"
|
|
- Copy your **Project API Key** (starts with `phc_`)
|
|
|
|
2. **Create a Sentry account** (optional):
|
|
- Go to https://sentry.io
|
|
- Create a new project
|
|
- Copy your **DSN**
|
|
|
|
### Step 2: Temporarily Edit Local File
|
|
|
|
Create a local configuration file that won't be committed:
|
|
|
|
```bash
|
|
# Create a local config override (gitignored)
|
|
cp app/config/analytics_defaults.py app/config/analytics_defaults_local.py
|
|
```
|
|
|
|
Edit `app/config/analytics_defaults_local.py`:
|
|
|
|
```python
|
|
# Local development keys (DO NOT COMMIT)
|
|
POSTHOG_API_KEY_DEFAULT = "phc_your_dev_key_here"
|
|
POSTHOG_HOST_DEFAULT = "https://app.posthog.com"
|
|
|
|
SENTRY_DSN_DEFAULT = "https://your_dev_dsn@sentry.io/project"
|
|
SENTRY_TRACES_RATE_DEFAULT = "1.0" # 100% sampling for dev
|
|
```
|
|
|
|
### Step 3: Update Import (Temporarily)
|
|
|
|
In `app/config/__init__.py`, temporarily change:
|
|
|
|
```python
|
|
# Temporarily use local config for development
|
|
try:
|
|
from app.config.analytics_defaults_local import get_analytics_config, has_analytics_configured
|
|
except ImportError:
|
|
from app.config.analytics_defaults import get_analytics_config, has_analytics_configured
|
|
```
|
|
|
|
### Step 4: Add to .gitignore
|
|
|
|
Ensure your local config is ignored:
|
|
|
|
```bash
|
|
echo "app/config/analytics_defaults_local.py" >> .gitignore
|
|
```
|
|
|
|
### Step 5: Run the Application
|
|
|
|
```bash
|
|
docker-compose up -d
|
|
```
|
|
|
|
Or without Docker:
|
|
|
|
```bash
|
|
# Activate virtual environment
|
|
source venv/bin/activate # or venv\Scripts\activate on Windows
|
|
|
|
# Run Flask
|
|
python app.py
|
|
```
|
|
|
|
### Step 6: Enable Telemetry
|
|
|
|
1. Access http://localhost:5000
|
|
2. Complete setup and **enable telemetry**
|
|
3. Or go to Admin → Telemetry Dashboard → Enable
|
|
|
|
### Step 7: Test Events
|
|
|
|
Perform actions and check PostHog:
|
|
- Login/logout
|
|
- Start/stop timer
|
|
- Create project
|
|
- Create task
|
|
|
|
Events should appear in your PostHog dashboard within seconds!
|
|
|
|
## Option 2: Direct File Edit (Quick & Dirty)
|
|
|
|
For quick testing, directly edit `app/config/analytics_defaults.py`:
|
|
|
|
```python
|
|
# Temporarily replace placeholders (DON'T COMMIT THIS)
|
|
POSTHOG_API_KEY_DEFAULT = "phc_your_dev_key_here" # was: "%%POSTHOG_API_KEY_PLACEHOLDER%%"
|
|
```
|
|
|
|
**⚠️ IMPORTANT:** Revert this before committing!
|
|
|
|
```bash
|
|
# Before committing, revert your changes
|
|
git checkout app/config/analytics_defaults.py
|
|
```
|
|
|
|
## Option 3: Use Docker Build with Secrets
|
|
|
|
Build a local image with your dev keys:
|
|
|
|
```bash
|
|
# Create a local build script
|
|
cat > build-dev-local.sh <<'EOF'
|
|
#!/bin/bash
|
|
|
|
# Your dev keys
|
|
export POSTHOG_API_KEY="phc_your_dev_key"
|
|
export SENTRY_DSN="https://your_dev_dsn@sentry.io/xxx"
|
|
|
|
# Inject keys into local copy
|
|
sed -i "s|%%POSTHOG_API_KEY_PLACEHOLDER%%|${POSTHOG_API_KEY}|g" app/config/analytics_defaults.py
|
|
sed -i "s|%%SENTRY_DSN_PLACEHOLDER%%|${SENTRY_DSN}|g" app/config/analytics_defaults.py
|
|
|
|
# Build image
|
|
docker build -t timetracker:dev .
|
|
|
|
# Revert changes
|
|
git checkout app/config/analytics_defaults.py
|
|
|
|
echo "✅ Built timetracker:dev with your dev keys"
|
|
EOF
|
|
|
|
chmod +x build-dev-local.sh
|
|
./build-dev-local.sh
|
|
```
|
|
|
|
Then run:
|
|
|
|
```bash
|
|
docker run -p 5000:5000 timetracker:dev
|
|
```
|
|
|
|
## Option 4: Development Branch Build
|
|
|
|
Push to a development branch and let GitHub Actions build with dev keys:
|
|
|
|
1. Add development secrets to GitHub:
|
|
```
|
|
POSTHOG_API_KEY_DEV
|
|
SENTRY_DSN_DEV
|
|
```
|
|
|
|
2. Push to `develop` branch - workflow builds with keys
|
|
|
|
3. Pull and run:
|
|
```bash
|
|
docker pull ghcr.io/YOUR_USERNAME/timetracker:develop
|
|
docker run -p 5000:5000 ghcr.io/YOUR_USERNAME/timetracker:develop
|
|
```
|
|
|
|
## Verifying It Works
|
|
|
|
### Check PostHog Dashboard
|
|
|
|
1. Go to PostHog dashboard
|
|
2. Navigate to "Events" or "Live Events"
|
|
3. Perform actions in TimeTracker
|
|
4. Events should appear immediately:
|
|
- `auth.login`
|
|
- `timer.started`
|
|
- `project.created`
|
|
- etc.
|
|
|
|
### Check Application Logs
|
|
|
|
```bash
|
|
# Docker
|
|
docker-compose logs app | grep PostHog
|
|
|
|
# Local
|
|
tail -f logs/app.jsonl | grep PostHog
|
|
```
|
|
|
|
Should see:
|
|
```
|
|
PostHog product analytics initialized (host: https://app.posthog.com)
|
|
```
|
|
|
|
### Check Local Event Logs
|
|
|
|
```bash
|
|
# All events logged locally regardless of PostHog
|
|
tail -f logs/app.jsonl | grep event_type
|
|
```
|
|
|
|
## Testing Telemetry Toggle
|
|
|
|
### Enable Telemetry
|
|
1. Login as admin
|
|
2. Go to http://localhost:5000/admin/telemetry
|
|
3. Click "Enable Telemetry"
|
|
4. Perform actions
|
|
5. Check PostHog for events
|
|
|
|
### Disable Telemetry
|
|
1. Go to http://localhost:5000/admin/telemetry
|
|
2. Click "Disable Telemetry"
|
|
3. Perform actions
|
|
4. No events should appear in PostHog (but still logged locally)
|
|
|
|
## Best Practices
|
|
|
|
### For Daily Development
|
|
|
|
Use **Option 1** (local config file):
|
|
- ✅ Keys stay out of git
|
|
- ✅ Easy to toggle
|
|
- ✅ Revert friendly
|
|
|
|
### For Testing Official Build Process
|
|
|
|
Use **Option 3** (Docker build):
|
|
- ✅ Simulates production
|
|
- ✅ Tests full flow
|
|
- ✅ Clean separation
|
|
|
|
### For Quick Testing
|
|
|
|
Use **Option 2** (direct edit):
|
|
- ✅ Fast
|
|
- ⚠️ Easy to accidentally commit
|
|
- ⚠️ Need to remember to revert
|
|
|
|
## Common Issues
|
|
|
|
### Events Not Appearing in PostHog
|
|
|
|
**Check 1:** Is telemetry enabled?
|
|
```bash
|
|
cat data/installation.json | grep telemetry_enabled
|
|
# Should show: "telemetry_enabled": true
|
|
```
|
|
|
|
**Check 2:** Is PostHog initialized?
|
|
```bash
|
|
docker-compose logs app | grep "PostHog product analytics initialized"
|
|
```
|
|
|
|
**Check 3:** Is the API key valid?
|
|
- Go to PostHog project settings
|
|
- Verify API key is correct
|
|
- Check it's not revoked
|
|
|
|
**Check 4:** Network connectivity
|
|
```bash
|
|
# From inside Docker container
|
|
docker-compose exec app curl -I https://app.posthog.com
|
|
# Should return 200 OK
|
|
```
|
|
|
|
### "Module not found" Errors
|
|
|
|
Make sure you're in the right directory and dependencies are installed:
|
|
|
|
```bash
|
|
# Check location
|
|
pwd # Should be in TimeTracker root
|
|
|
|
# Install dependencies
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
### Keys Visible in Git
|
|
|
|
If you accidentally committed keys:
|
|
|
|
```bash
|
|
# Remove from git history (if not pushed)
|
|
git reset --soft HEAD~1
|
|
git checkout app/config/analytics_defaults.py
|
|
|
|
# If already pushed, rotate the keys immediately!
|
|
# Then force push (careful!)
|
|
git push --force
|
|
```
|
|
|
|
## Clean Up
|
|
|
|
### Before Committing
|
|
|
|
```bash
|
|
# Make sure no dev keys are in the file
|
|
git diff app/config/analytics_defaults.py
|
|
|
|
# Should only show %%PLACEHOLDER%% values
|
|
# If you see actual keys, revert:
|
|
git checkout app/config/analytics_defaults.py
|
|
```
|
|
|
|
### Remove Local Config
|
|
|
|
```bash
|
|
rm app/config/analytics_defaults_local.py
|
|
```
|
|
|
|
## Summary
|
|
|
|
**Recommended workflow:**
|
|
|
|
1. Create `analytics_defaults_local.py` with your dev keys
|
|
2. Add to `.gitignore`
|
|
3. Modify `__init__.py` to import local version
|
|
4. Run application normally
|
|
5. Enable telemetry in admin dashboard
|
|
6. Test events in PostHog
|
|
|
|
**Remember:**
|
|
- ✅ Never commit real API keys
|
|
- ✅ Use separate PostHog project for development
|
|
- ✅ Test both enabled and disabled states
|
|
- ✅ Revert local changes before committing
|
|
|
|
---
|
|
|
|
Need help? Check:
|
|
- PostHog docs: https://posthog.com/docs
|
|
- TimeTracker telemetry docs: `docs/all_tracked_events.md`
|
|
|