AI Web FeedsAI Web FeedsOpen web AI reader
  • Guides
    Documentation

    Analytics & Monitoring

    Comprehensive guide to feed analytics, monitoring, and reporting capabilities

    Source: apps/web/content/docs/guides/analytics.mdx

    AI Web Feeds provides robust analytics and monitoring capabilities to track feed health, performance, and content trends.

    Overview

    The analytics system provides:

    • Summary Metrics - Feed counts, active feed counts, validation success rate, and response times
    • Trending Topics - Topic activity ranked by feed count and validation frequency
    • Publication Velocity - Daily publication volume and average articles per day
    • Snapshots - Daily analytics snapshots stored in the runtime database
    • CSV Export - Portable analytics extracts for reports and dashboards

    Analytics Commands

    Summary Metrics

    Get a high-level view of all your feeds:

    ai-web-feeds analytics summary --date-range 30d

    Provides:

    • Total feeds and active feeds
    • Validation success rate
    • Average response time
    • Feed health distribution

    Rank active topics by feed activity:

    ai-web-feeds analytics trending --limit 10 --date-range 30d

    Shows:

    • Topic IDs
    • Feed counts
    • Validation frequency
    • Average health score

    Publication Velocity

    Track publishing volume over a date range:

    ai-web-feeds analytics velocity --date-range 30d

    Displays:

    • Total article count
    • Average articles per day
    • Daily publication buckets

    Quality Scoring

    Each feed receives three scores (0-1):

    • Completeness: How complete is the feed metadata?
    • Richness: How rich and detailed is the content?
    • Structure: How well-structured is the feed?

    Daily Snapshot

    Persist the current analytics snapshot:

    ai-web-feeds analytics snapshot

    Metrics:

    • Summary metrics
    • Trending topic records
    • Validation aggregates

    CSV Export

    Export analytics for reports:

    ai-web-feeds analytics export --output reports/analytics.csv

    Provides:

    • One row per analytics record
    • Feed and validation metrics
    • Spreadsheet-friendly CSV output

    Quality Scoring System

    Completeness Score (0-1)

    Measures how complete the feed metadata is:

    ✓ Has title ✓ Has description ✓ Has link ✓ Has language ✓ Has timestamps ✓ Has author/publisher ✓ Has canonical topics and raw feed labels ✓ Has image/logo

    Richness Score (0-1)

    Evaluates content depth and quality:

    ✓ Items have content ✓ Content coverage percentage ✓ Author attribution ✓ Average content length ✓ Full content availability ✓ Media/images present

    Structure Score (0-1)

    Assesses feed validity and structure:

    ✓ No parsing errors ✓ Has items ✓ Items have GUIDs ✓ Has timestamps ✓ Has links

    Monitoring Workflows

    Daily Health Check

    Set up a daily monitoring routine:

    #!/bin/bash
    # daily-health-check.sh
    
    # Fetch active catalog sources
    ai-web-feeds fetch all --limit 100
    
    # Generate health report
    ai-web-feeds analytics summary --date-range 30d > daily-summary.txt
    ai-web-feeds analytics velocity --date-range 7d > daily-velocity.txt
    
    # Persist a daily snapshot
    ai-web-feeds analytics snapshot

    Weekly Analytics Review

    Generate weekly analytics:

    #!/bin/bash
    # weekly-analytics.sh
    
    DATE=$(date +%Y-%m-%d)
    
    # Generate CSV report
    ai-web-feeds analytics export --output "reports/analytics-${DATE}.csv"
    
    # View trends
    ai-web-feeds analytics trending --date-range 7d
    ai-web-feeds analytics velocity --date-range 7d

    Alert on Feed Failures

    Monitor for failing feeds:

    #!/bin/bash
    # check-failures.sh
    
    # Get summary stats
    STATS=$(ai-web-feeds analytics summary --date-range 7d)
    
    # Extract success rate
    SUCCESS_RATE=$(echo "$STATS" | grep "Success Rate" | awk '{print $3}' | tr -d '%')
    
    if (( $(echo "$SUCCESS_RATE < 90" | bc -l) )); then
        echo "WARNING: Success rate below 90%: ${SUCCESS_RATE}%"
        # Send alert (email, Slack, etc.)
    fi

    Advanced Analytics

    Custom Python Analysis

    Use the Python API for custom analytics:

    from ai_web_feeds.analytics import FeedAnalytics
    from ai_web_feeds.storage import DatabaseManager
    
    # Initialize
    db = DatabaseManager("sqlite:///data/ai-web-feeds.db")
    analytics = FeedAnalytics(db.get_session())
    
    # Custom query: Find all feeds with quality < 0.5
    feeds = db.get_all_feed_sources()
    low_quality = [
        f for f in feeds
        if f.quality_score and f.quality_score < 0.5
    ]
    
    print(f"Found {len(low_quality)} low quality feeds:")
    for feed in low_quality:
        print(f"  - {feed.title}: {feed.quality_score:.2f}")
    
    # Generate custom report
    report = analytics.generate_full_report()
    
    # Analyze specific dimension
    quality_by_type = {}
    for feed in feeds:
        if feed.source_type and feed.quality_score:
            type_name = feed.source_type.value
            if type_name not in quality_by_type:
                quality_by_type[type_name] = []
            quality_by_type[type_name].append(feed.quality_score)
    
    # Calculate averages
    for source_type, scores in quality_by_type.items():
        avg = sum(scores) / len(scores)
        print(f"{source_type}: {avg:.3f}")

    Database Queries

    Direct SQL queries for advanced analysis:

    from sqlalchemy import select, func
    from ai_web_feeds.models import ArticleEntry, FeedSource
    
    # Get sources with most articles
    stmt = (
        select(FeedSource.id, FeedSource.title, func.count(ArticleEntry.id))
        .join(ArticleEntry, ArticleEntry.feed_id == FeedSource.id)
        .group_by(FeedSource.id)
        .order_by(func.count(ArticleEntry.id).desc())
        .limit(10)
    )
    
    results = session.exec(stmt).all()
    for feed_id, title, count in results:
        print(f"{title}: {count} items")

    Export Formats

    JSON Reports

    Comprehensive analytics in JSON:

    {
      "generated_at": "2025-10-15T12:00:00Z",
      "overview": {
        "totals": {
          "feeds": 150,
          "items": 5000,
          "topics": 25
        },
        "feed_status": {
          "verified": 120,
          "active": 100,
          "inactive": 5
        }
      },
      "quality": {
        "average_quality": 0.85,
        "median_quality": 0.87
      }
    }

    CSV Export (via Python)

    import csv
    from ai_web_feeds.storage import DatabaseManager
    
    db = DatabaseManager()
    feeds = db.get_all_feed_sources()
    
    with open('feeds-export.csv', 'w', newline='') as f:
        writer = csv.writer(f)
        writer.writerow(['ID', 'Title', 'Type', 'Quality', 'Verified'])
    
        for feed in feeds:
            writer.writerow([
                feed.id,
                feed.title,
                feed.source_type.value if feed.source_type else '',
                feed.quality_score or '',
                feed.verified
            ])

    Integration Examples

    Grafana Dashboard

    Export metrics for Grafana:

    import json
    from datetime import datetime
    
    def export_metrics():
        analytics = FeedAnalytics(session)
        stats = analytics.get_overview_stats()
    
        metrics = {
            "timestamp": datetime.utcnow().isoformat(),
            "feeds_total": stats["totals"]["feeds"],
            "feeds_active": stats["feed_status"]["active"],
            "items_24h": stats["recent_activity_24h"]["new_items"]
        }
    
        with open('/var/lib/grafana/metrics/ai-web-feeds.json', 'w') as f:
            json.dump(metrics, f)

    Prometheus Exporter

    from prometheus_client import Gauge, generate_latest
    
    feeds_total = Gauge('ai_web_feeds_total', 'Total number of feeds')
    feeds_active = Gauge('ai_web_feeds_active', 'Number of active feeds')
    
    def update_metrics():
        stats = analytics.get_overview_stats()
        feeds_total.set(stats["totals"]["feeds"])
        feeds_active.set(stats["feed_status"]["active"])

    Best Practices

    1. Regular Monitoring - Run analytics daily to track changes
    2. Health Checks - Monitor feed health scores regularly
    3. Performance Tracking - Watch for degrading fetch success rates
    4. Quality Improvement - Address low-quality feeds
    5. Trend Analysis - Understand publishing patterns
    6. Report Generation - Keep historical analytics for comparison
    7. Alert on Anomalies - Set up alerts for critical issues
    Analytics & Monitoring | AI Web Feeds