update
This commit is contained in:
107
backend/init_tracking_db.py
Normal file
107
backend/init_tracking_db.py
Normal file
@@ -0,0 +1,107 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Database initialization script for email tracking system.
|
||||
|
||||
This script creates the necessary MongoDB collections and indexes
|
||||
for tracking email opens and link clicks in the newsletter system.
|
||||
|
||||
Collections created:
|
||||
- newsletter_sends: Tracks each newsletter sent to each subscriber
|
||||
- link_clicks: Tracks individual link clicks
|
||||
- subscriber_activity: Aggregated activity status for each subscriber
|
||||
|
||||
Usage:
|
||||
python init_tracking_db.py
|
||||
"""
|
||||
|
||||
from pymongo import MongoClient, ASCENDING
|
||||
from config import Config
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
def init_tracking_database():
|
||||
"""Initialize tracking collections with proper indexes"""
|
||||
|
||||
print("Connecting to MongoDB...")
|
||||
client = MongoClient(Config.MONGODB_URI)
|
||||
db = client[Config.DB_NAME]
|
||||
|
||||
print(f"Connected to database: {Config.DB_NAME}")
|
||||
|
||||
# Get collection references
|
||||
newsletter_sends = db['newsletter_sends']
|
||||
link_clicks = db['link_clicks']
|
||||
subscriber_activity = db['subscriber_activity']
|
||||
|
||||
print("\n=== Setting up Newsletter Sends Collection ===")
|
||||
# Newsletter Sends Collection Indexes
|
||||
newsletter_sends.create_index('tracking_id', unique=True)
|
||||
print("✓ Created unique index on 'tracking_id'")
|
||||
|
||||
newsletter_sends.create_index('newsletter_id')
|
||||
print("✓ Created index on 'newsletter_id'")
|
||||
|
||||
newsletter_sends.create_index('subscriber_email')
|
||||
print("✓ Created index on 'subscriber_email'")
|
||||
|
||||
newsletter_sends.create_index('sent_at')
|
||||
print("✓ Created index on 'sent_at'")
|
||||
|
||||
print("\n=== Setting up Link Clicks Collection ===")
|
||||
# Link Clicks Collection Indexes
|
||||
link_clicks.create_index('tracking_id', unique=True)
|
||||
print("✓ Created unique index on 'tracking_id'")
|
||||
|
||||
link_clicks.create_index('newsletter_id')
|
||||
print("✓ Created index on 'newsletter_id'")
|
||||
|
||||
link_clicks.create_index('article_url')
|
||||
print("✓ Created index on 'article_url'")
|
||||
|
||||
link_clicks.create_index('subscriber_email')
|
||||
print("✓ Created index on 'subscriber_email'")
|
||||
|
||||
print("\n=== Setting up Subscriber Activity Collection ===")
|
||||
# Subscriber Activity Collection Indexes
|
||||
subscriber_activity.create_index('email', unique=True)
|
||||
print("✓ Created unique index on 'email'")
|
||||
|
||||
subscriber_activity.create_index('status')
|
||||
print("✓ Created index on 'status'")
|
||||
|
||||
subscriber_activity.create_index('last_opened_at')
|
||||
print("✓ Created index on 'last_opened_at'")
|
||||
|
||||
# Display collection statistics
|
||||
print("\n=== Collection Statistics ===")
|
||||
print(f"newsletter_sends: {newsletter_sends.count_documents({})} documents")
|
||||
print(f"link_clicks: {link_clicks.count_documents({})} documents")
|
||||
print(f"subscriber_activity: {subscriber_activity.count_documents({})} documents")
|
||||
|
||||
# List all indexes for verification
|
||||
print("\n=== Index Verification ===")
|
||||
print("\nNewsletter Sends Indexes:")
|
||||
for index in newsletter_sends.list_indexes():
|
||||
print(f" - {index['name']}: {index.get('key', {})}")
|
||||
|
||||
print("\nLink Clicks Indexes:")
|
||||
for index in link_clicks.list_indexes():
|
||||
print(f" - {index['name']}: {index.get('key', {})}")
|
||||
|
||||
print("\nSubscriber Activity Indexes:")
|
||||
for index in subscriber_activity.list_indexes():
|
||||
print(f" - {index['name']}: {index.get('key', {})}")
|
||||
|
||||
print("\n✅ Tracking database initialization complete!")
|
||||
|
||||
client.close()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
init_tracking_database()
|
||||
except Exception as e:
|
||||
print(f"\n❌ Error initializing tracking database: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
exit(1)
|
||||
Reference in New Issue
Block a user