AI platform insights monitoring and website analysis monitoring services added
This commit is contained in:
136
backend/services/platform_insights_monitoring_service.py
Normal file
136
backend/services/platform_insights_monitoring_service.py
Normal file
@@ -0,0 +1,136 @@
|
||||
"""
|
||||
Platform Insights Monitoring Service
|
||||
Creates and manages platform insights (GSC/Bing) fetch tasks.
|
||||
"""
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
from typing import Dict, Any, Optional, List
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from models.platform_insights_monitoring_models import PlatformInsightsTask
|
||||
from utils.logger_utils import get_service_logger
|
||||
|
||||
logger = get_service_logger("platform_insights_monitoring")
|
||||
|
||||
|
||||
def create_platform_insights_task(
|
||||
user_id: str,
|
||||
platform: str, # 'gsc' or 'bing'
|
||||
site_url: Optional[str] = None,
|
||||
db: Session = None
|
||||
) -> Dict[str, Any]:
|
||||
"""
|
||||
Create a platform insights fetch task for a user.
|
||||
|
||||
This should be called when user connects GSC or Bing in Step 5.
|
||||
|
||||
Args:
|
||||
user_id: Clerk user ID (string)
|
||||
platform: Platform name ('gsc' or 'bing')
|
||||
site_url: Optional site URL (for GSC/Bing specific site)
|
||||
db: Database session
|
||||
|
||||
Returns:
|
||||
Dictionary with success status and task details
|
||||
"""
|
||||
try:
|
||||
logger.info(
|
||||
f"[Platform Insights] Creating {platform} insights task for user: {user_id}"
|
||||
)
|
||||
|
||||
# Check if task already exists
|
||||
existing = db.query(PlatformInsightsTask).filter(
|
||||
PlatformInsightsTask.user_id == user_id,
|
||||
PlatformInsightsTask.platform == platform
|
||||
).first()
|
||||
|
||||
if existing:
|
||||
logger.info(
|
||||
f"[Platform Insights] Task already exists for user {user_id}, platform {platform}"
|
||||
)
|
||||
return {
|
||||
'success': True,
|
||||
'task_id': existing.id,
|
||||
'message': 'Task already exists',
|
||||
'existing': True
|
||||
}
|
||||
|
||||
# Calculate next check (7 days from now, weekly schedule)
|
||||
next_check = datetime.utcnow() + timedelta(days=7)
|
||||
|
||||
# Create new task
|
||||
task = PlatformInsightsTask(
|
||||
user_id=user_id,
|
||||
platform=platform,
|
||||
site_url=site_url,
|
||||
status='active',
|
||||
next_check=next_check,
|
||||
created_at=datetime.utcnow(),
|
||||
updated_at=datetime.utcnow()
|
||||
)
|
||||
|
||||
db.add(task)
|
||||
db.commit()
|
||||
db.refresh(task)
|
||||
|
||||
logger.info(
|
||||
f"[Platform Insights] Created {platform} insights task {task.id} for user {user_id}, "
|
||||
f"next_check: {next_check}"
|
||||
)
|
||||
|
||||
return {
|
||||
'success': True,
|
||||
'task_id': task.id,
|
||||
'platform': platform,
|
||||
'next_check': next_check.isoformat(),
|
||||
'message': f'{platform.upper()} insights task created successfully'
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
f"Error creating {platform} insights task for user {user_id}: {e}",
|
||||
exc_info=True
|
||||
)
|
||||
db.rollback()
|
||||
return {
|
||||
'success': False,
|
||||
'error': str(e)
|
||||
}
|
||||
|
||||
|
||||
def get_user_insights_tasks(
|
||||
user_id: str,
|
||||
platform: Optional[str] = None,
|
||||
db: Session = None
|
||||
) -> List[PlatformInsightsTask]:
|
||||
"""
|
||||
Get all platform insights tasks for a user.
|
||||
|
||||
Args:
|
||||
user_id: Clerk user ID (string)
|
||||
platform: Optional platform filter ('gsc' or 'bing')
|
||||
db: Database session
|
||||
|
||||
Returns:
|
||||
List of PlatformInsightsTask instances
|
||||
"""
|
||||
try:
|
||||
query = db.query(PlatformInsightsTask).filter(
|
||||
PlatformInsightsTask.user_id == user_id
|
||||
)
|
||||
|
||||
if platform:
|
||||
query = query.filter(PlatformInsightsTask.platform == platform)
|
||||
|
||||
tasks = query.all()
|
||||
|
||||
logger.debug(
|
||||
f"[Platform Insights] Found {len(tasks)} insights tasks for user {user_id}"
|
||||
)
|
||||
|
||||
return tasks
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error getting insights tasks for user {user_id}: {e}", exc_info=True)
|
||||
return []
|
||||
|
||||
Reference in New Issue
Block a user