Universal Request Analyzer - Complete Architecture Overview
Table of Contents
- System Architecture
- Data Architecture
- Code Organization
- Component Architecture
- Analytics & Reporting
- Development Workflow
System Architecture
High-Level Overview
graph TB
subgraph Browser["π Browser Environment"]
subgraph UI["User Interface Components"]
Popup["π Popup UI<br/>(Extension Icon)"]
DevTools["π§ DevTools Panel<br/>(Browser DevTools)"]
Options["βοΈ Options Page<br/>(Settings)"]
end
ContentScript["π Content Scripts<br/>(Injected into pages)"]
subgraph Background["π Background Service Worker (MV3)"]
RequestCapture["π‘ Request Capture<br/>(webRequest API)"]
RequestRunner["βΆοΈ Request Runner<br/>(Execution Engine)"]
EventBus["π Event Bus<br/>(Message routing)"]
MessageHandler["βοΈ Message Handler<br/>(Action dispatcher)"]
subgraph Managers["Core Managers"]
DBManager["πΎ Database Manager<br/>(Medallion Architecture)"]
SettingsManager["βοΈ Settings Manager"]
ExportManager["π€ Export Manager"]
CleanupManager["π§Ή Cleanup Manager"]
AnalyticsProcessor["π Analytics Processor<br/>(Analytics & Trends)"]
end
end
subgraph Database["ποΈ Database Layer (SQL.js + OPFS)"]
Config["Config Schema<br/>(Settings, Flags, Runners)"]
Bronze["Bronze Layer<br/>(Requests, Executions, Events)"]
Silver["Silver Layer<br/>(Validated + Star Schema)"]
Gold["Gold Layer<br/>(Daily Analytics & Insights)"]
end
end
subgraph External["π External Systems"]
WebPages["Web Pages<br/>(HTTP Requests)"]
Storage["Browser Storage<br/>(chrome.storage)"]
end
%% Communication flows
WebPages -->|"HTTP Requests"| RequestCapture
RequestCapture -->|"Captured Data"| Bronze
ContentScript -.->|"chrome.runtime<br/>.sendMessage"| EventBus
Popup -.->|"chrome.runtime<br/>.sendMessage"| EventBus
DevTools -.->|"chrome.runtime<br/>.sendMessage"| EventBus
Options -.->|"chrome.runtime<br/>.sendMessage"| EventBus
EventBus -->|"Route Messages"| MessageHandler
MessageHandler -->|"Query/Update"| Managers
Managers <-->|"Read/Write"| Database
DBManager <-->|"CRUD Operations"| Config
DBManager <-->|"CRUD Operations"| Bronze
DBManager <-->|"CRUD Operations"| Silver
DBManager <-->|"CRUD Operations"| Gold
SettingsManager <-->|"Sync Settings"| Config
SettingsManager <-->|"Sync Settings"| Storage
RequestRunner <-->|"Read Definitions"| Config
RequestRunner -->|"Execute Requests"| WebPages
RequestRunner -->|"Log Results"| Bronze
Bronze -->|"Process & Validate"| Silver
Silver -->|"Aggregate & Analyze"| Gold
AnalyticsProcessor -->|"Compute Analytics"| Silver
AnalyticsProcessor -->|"Generate Insights"| Gold
MessageHandler -.->|"Response"| Popup
MessageHandler -.->|"Response"| DevTools
MessageHandler -.->|"Response"| Options
ExportManager -->|"Export Data"| Bronze
ExportManager -->|"Export Data"| Silver
ExportManager -->|"Export Data"| Gold
CleanupManager -->|"Purge Old Data"| Bronze
CleanupManager -->|"Purge Old Data"| Silver
CleanupManager -->|"Purge Old Data"| Gold
style UI fill:#e3f2fd
style Background fill:#fff3e0
style Database fill:#f3e5f5
style External fill:#e8f5e9
style Managers fill:#fff9c4
Communication Flow Details
-
Request Capture Flow
- Browser makes HTTP request β
webRequest APIintercepts β Background captures β Bronze layer stores
- Browser makes HTTP request β
-
UI β Background Flow
- UI component calls
chrome.runtime.sendMessage()β Event Bus receives β Message Handler routes β Manager processes β Database query/update β Response back to UI
- UI component calls
-
Settings Sync Flow
- Settings Manager maintains settings in both database (
config_app_settings) and browser storage (chrome.storage.local) for fast access
- Settings Manager maintains settings in both database (
-
Data Processing Flow
- Bronze (raw) β Silver (validated + enriched) β Gold (aggregated analytics)
-
Content Script Communication
- Content scripts read config from
chrome.storage.local(set by Settings Manager) and cannot directly import background modules
- Content scripts read config from
Data Architecture
Medallion Architecture with Star Schema
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CONFIG SCHEMA - Application Configuration β
β β’ App Settings β’ Feature Flags β’ User Preferences β
β β’ Performance Settings β’ Storage Settings β’ Export Settingsβ
β β’ Runner Definitions β’ Runner Requests β’ Runner Collectionsβ
β β’ Scheduled Runs β’ Runner Alerts β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β BRONZE SCHEMA - Raw Event Capture Data β
β β’ Requests β’ Headers β’ Timings β’ Events β’ Sessions β
β β’ Errors β’ Performance Entries β’ Runner Executions β
β β’ Runner Execution Results β
β Characteristics: Immutable, Complete, Timestamped, Append-Onlyβ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
Data Processing
(Validation & Enrichment)
β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SILVER SCHEMA - Curated Data + STAR SCHEMA β
β Curated Tables: β
β β’ Validated Requests β’ Metrics β’ Domain Stats β
β β’ Resource Stats β’ Tags β
β β
β Star Schema Dimensions: β
β β’ dim_time (Multi-timeframe) β
β β’ dim_domain (SCD Type 2) β
β β’ dim_resource_type β
β β’ dim_status_code β
β β
β Star Schema Facts: β
β β’ fact_requests (Atomic metrics) β
β β’ fact_performance_trends (Trend tracking) β
β β’ fact_quality_metrics (Quality scores) β
β β
β Characteristics: Validated, Enriched, Indexed, Analytical β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
Aggregation
(Daily/Weekly/Monthly)
β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β GOLD SCHEMA - Analytics & Insights β
β β’ Daily Analytics β’ Performance Insights β
β β’ Domain Performance β’ Optimization Opportunities β
β β’ Trends β’ Anomalies β
β Characteristics: Aggregated, Historical, Actionable β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Data Flow
Browser Event β Bronze (Raw) β Silver (Validated + Star Schema) β Gold (Analytics)
β β β
Immutable Fact Tables Pre-aggregated
Complete Dimensions Insights
Audit Trail Analytics Trends
Code Organization
Directory Structure
src/
βββ lib/ # Shared Library (NEW)
β βββ core/ # Core Classes
β β βββ DataManager.js # Base data management
β βββ ui/ # UI Components
β β βββ BaseComponent.js # Base component class
β β βββ ChartManager.js # Chart management
β β βββ NotificationManager.js # Notifications
β βββ managers/ # Feature Managers
β β βββ ExportManager.js # Export/Import
β βββ utils/ # Utilities
β β βββ helpers.js # Helper functions
β βββ index.js # Main entry point
β
βββ background/ # Background Service Worker
β βββ database/ # Database Layer
β β βββ medallion-schema.js # Medallion architecture (Config + Bronze + Silver + Gold)
β β βββ star-schema.js # Star schema with SCD Type 2
β β βββ medallion-manager.js # Data flow orchestration
β β βββ config-schema-manager.js # Config management
β β βββ analytics-processor.js # Analytics & aggregations
β β βββ medallion-migration.js # Data migration
β β βββ db-manager-medallion.js # Main DB manager with runner CRUD
β β βββ sql-js-loader.js # SQL.js initialization
β β βββ purge-manager.js # Data cleanup
β βββ capture/ # Request Capture & Runner Execution
β β βββ request-capture.js # webRequest API integration
β β βββ request-runner.js # Runner execution engine
β β βββ runner-collections.js # Runner collections manager
β β βββ request-capture-integration.js # Medallion integration
β βββ messaging/ # Event Bus & Message Handlers
β β βββ event-bus.js # Pub/sub event system
β β βββ message-handler.js # Central message router
β β βββ handlers/ # Modular message handlers
β β β βββ vitals-handlers.js # Web vitals & recent requests
β β β βββ stats-handlers.js # Statistics & filtered data
β β β βββ collection-handlers.js # Runner collections
β β β βββ analytics-handlers.js # Analytics & compression
β β β βββ settings-handlers.js # Settings CRUD
β β β βββ export-handlers.js # Data export
β β βββ popup-message-handler.js # Legacy popup handlers
β βββ api/ # API Services
β βββ auth/ # Authentication
β βββ security/ # Security & Encryption
β βββ cleanup/ # Cleanup Manager
β βββ export/ # Export Manager
β βββ compat/ # Browser Compatibility
β β βββ browser-compat.js # Cross-browser API wrapper
β βββ background-medallion.js # Main entry point (Medallion)
β βββ background.js # Legacy entry point
β
βββ popup/ # Popup UI
β βββ components/ # UI Components
β βββ popup.html # Popup page
β
βββ options/ # Options Page (Settings + Dashboard + Runners)
β βββ components/ # UI Components
β β βββ dashboard.js # Dashboard with analytics
β β βββ runners.js # Runner management UI
β β βββ analytics.js # Analytics visualizations
β β βββ alerts.js # Alert configuration
β β βββ export-db.js # Database export
β βββ js/ # JavaScript modules
β β βββ options.js # Main options entry point
β βββ css/ # Stylesheets
β β βββ options.css # Options page styles
β βββ options.html # Options page
β
βββ devtools/ # DevTools Panel
β βββ devtools.html # DevTools page
β
βββ content/ # Content Scripts
βββ content.js # Content script
Shared Library Benefits
- No Code Duplication: Single source of truth
- Reusable Classes: BaseComponent, ChartManager, etc.
- Consistent Behavior: Same utilities everywhere
- Easy Maintenance: Update once, apply everywhere
- Better Testing: Test shared code once
Component Architecture
Base Component Pattern
All UI components extend BaseComponent:
import { BaseComponent } from "@/lib/ui/BaseComponent.js";
class RequestList extends BaseComponent {
async onInit() {
// Initialization
}
setupEventListeners() {
// Event handlers
}
render() {
// Rendering logic
}
onDestroy() {
// Cleanup
}
}
Manager Classes
Encapsulate complex functionality:
- DataManager: CRUD operations with caching
- FilterManager: Multi-filter support
- SortManager: Flexible sorting
- PaginationManager: Pagination logic
- ChartManager: Chart lifecycle
- NotificationManager: User feedback
- ExportManager: Data export/import
Runner Architecture
Overview
The Runner system enables automated HTTP request execution with validation, scheduling, and collections support.
Runner Data Model
erDiagram
config_runner_definitions ||--o{ config_runner_requests : contains
config_runner_definitions ||--o{ bronze_runner_executions : executes
config_runner_collections ||--o{ config_runner_definitions : groups
bronze_runner_executions ||--o{ bronze_runner_execution_results : produces
config_runner_definitions {
text id PK
text name
text description
text collection_id FK
text execution_mode
integer delay_ms
boolean follow_redirects
boolean validate_status
boolean use_variables
text header_overrides
boolean is_active
integer run_count
integer last_run_at
integer created_at
integer updated_at
}
config_runner_requests {
text id PK
text runner_id FK
integer sequence_order
text url
text method
text headers
text body
text domain
text page_url
text captured_request_id
text assertions
text description
boolean is_enabled
integer created_at
}
config_runner_collections {
text id PK
text name
text description
text schedule_cron
boolean is_active
integer created_at
integer updated_at
}
bronze_runner_executions {
text id PK
text runner_id FK
text execution_mode
integer start_time
integer end_time
integer total_requests
integer successful_requests
integer failed_requests
text status
text error
}
bronze_runner_execution_results {
text id PK
text execution_id FK
text request_id
text url
text method
integer status
integer duration
boolean success
text error
text response_body
integer timestamp
}
Runner Execution Flow
sequenceDiagram
participant UI as Options Page
participant BG as Background
participant Runner as Request Runner
participant DB as Database
participant Web as Web Server
UI->>BG: Create Runner Definition
BG->>DB: Store Runner + Requests
UI->>BG: Execute Runner
BG->>DB: Load Runner Definition
DB-->>BG: Runner + Requests
BG->>Runner: Start Execution
Runner->>DB: Create Execution Record
loop For Each Request
Runner->>Web: Execute HTTP Request
Web-->>Runner: HTTP Response
Runner->>DB: Store Execution Result
Runner->>BG: Progress Update
BG-->>UI: Update UI
alt Sequential Mode
Runner->>Runner: Wait delay_ms
end
end
Runner->>DB: Update Execution Record
Runner-->>BG: Execution Complete
BG-->>UI: Show Results
Runner Features
-
Execution Modes
- Sequential: Execute requests one after another with configurable delays
- Parallel: Execute all requests simultaneously
-
Request Configuration
- Custom headers and body
- Follow redirects option
- Status code validation
- Variable interpolation
- Per-request assertions
-
Collections
- Group related runners
- Scheduled execution via cron expressions
- Batch operations (run all in collection)
-
Execution Tracking
- Real-time progress updates
- Success/failure metrics
- Response time tracking
- Error logging
- Historical execution data
-
UI Integration
- Wizard-based runner creation
- Dashboard βRun Selectedβ feature
- Execution history viewer
- Edit, duplicate, export, delete actions
- Context menu for quick actions
Analytics & Reporting
Supported Timeframes
const timeframes = [
"1min", // 1 minute
"5min", // 5 minutes
"15min", // 15 minutes
"1h", // 1 hour
"4h", // 4 hours
"1d", // 1 day
"1w", // 1 week
"1m", // 1 month
];
Quality Metrics
Comprehensive site quality assessment:
- Availability Rate: Success percentage
- Performance Index: Weighted score (0-100)
- Reliability Score: Consistency measure
- Security Score: HTTPS usage
- Cache Hit Rate: Cache efficiency
SCD Type 2 Tracking
Domain attributes tracked over time:
// Version 1
{ domain: 'api.example.com', risk: 'low', valid: [t1, t2], current: false }
// Version 2 (after risk increased)
{ domain: 'api.example.com', risk: 'high', valid: [t2, null], current: true }
Development Workflow
1. Request Capture
// Browser makes request
β Request Intercepted
β Insert to Bronze Schema (raw data)
β Queue for processing
2. Data Processing
// Background processor
β Read from Bronze
β Validate & Enrich
β Insert to Silver (curated + facts)
β Update dimensions (SCD Type 2)
β Queue for aggregation
3. Analytics Generation
// Periodic processor
β Read from Silver/Facts
β Generate quality metrics
β Calculate trends
β Insert to Gold (analytics)
4. UI Display
// User opens dashboard
β Query Gold/Silver schemas
β Load analytics data for selected timeframe
β Render charts using ChartManager
β Display quality metrics
Key Features
1. Multi-Timeframe Analysis
View performance at any granularity:
- Real-time: 1min, 5min
- Short-term: 15min, 1h
- Mid-term: 4h, 1d
- Long-term: 1w, 1m
2. Historical Tracking
Complete audit trail:
- All raw requests in Bronze
- SCD Type 2 domain history
- Trend analysis in Gold
3. Performance Insights
- Percentile calculations (P50, P95, P99)
- Performance distribution over time
- Error rate tracking
- Response time trends
4. Quality Monitoring
- Availability tracking
- Performance scoring
- Reliability measurement
- Security assessment
5. Flexible Querying
Star schema enables:
- Drill-down by domain
- Drill-down by resource type
- Time-series analysis
- Cross-dimensional analysis
Star Schema Details
Dimension Tables
1. Time Dimension (dim_time)
Multi-granularity time tracking with support for 8 timeframes.
Supported Timeframes:
1min- 1 minute periods5min- 5 minute periods15min- 15 minute periods1h- 1 hour periods4h- 4 hour periods1d- Daily periods1w- Weekly periods1m- Monthly periods
Key Columns:
time_key- Primary keytimestamp- Unix timestampyear, quarter, month, week, day, hour, minute- Date/time componentsperiod_1min ... period_1m- Period identifiers for each timeframe
2. Domain Dimension with SCD Type 2 (dim_domain)
Tracks domain attributes with full historical versioning using Slowly Changing Dimensions Type 2.
SCD Type 2 Implementation:
- Maintains complete history of attribute changes
- Each change creates a new version with
valid_fromandvalid_totimestamps is_currentflag identifies the active record- Enables point-in-time queries
Key Columns:
domain_key- Primary keydomain- Domain nameis_third_party- Third-party statuscategory- Domain category (analytics, cdn, social, etc.)risk_level- Security risk assessmentvalid_from, valid_to- Validity periodis_current- Current version flagversion- Version number
Example History:
domain_key | domain | risk_level | valid_from | valid_to | is_current | version
-----------|-------------|------------|------------|------------|------------|--------
1 | api.com | low | 1638316800 | 1640908800 | 0 | 1
2 | api.com | medium | 1640908800 | NULL | 1 | 2
3. Resource Type Dimension (dim_resource_type)
Pre-populated resource type categorization:
- document, stylesheet, script, image, font
- xmlhttprequest, fetch, websocket
- media, other
4. Status Code Dimension (dim_status_code)
HTTP status code metadata with success/error/redirect classifications.
Fact Tables
1. Request Fact Table (fact_requests)
Atomic request metrics linked to all dimensions.
Key Measures:
- Timing: duration_ms, dns_time_ms, tcp_time_ms, ssl_time_ms, wait_time_ms, download_time_ms
- Size: size_bytes, header_size_bytes, body_size_bytes
- Quality: performance_score, quality_score
- Flags: is_cached, is_compressed, has_error, is_secure
2. Performance Trends Fact (fact_performance_trends)
Tracks metric changes with moving averages and volatility measures.
3. Quality Metrics Fact (fact_quality_metrics)
Comprehensive quality assessment including:
- Availability rate, performance index, reliability score
- Performance distribution buckets
- Cache hit rates
Configuration
Application Settings
// Via ConfigSchemaManager
await configManager.setAppSetting("theme", "dark", {
category: "ui",
description: "UI theme preference",
});
const theme = await configManager.getAppSetting("theme");
Feature Flags
// Gradual rollout
await configManager.setFeatureFlag("newFeature", true, {
rolloutPercentage: 25, // 25% of users
});
const isEnabled = await configManager.getFeatureFlag("newFeature");
Performance Settings
await configManager.updatePerformanceSettings({
enabled: true,
samplingRate: 100,
captureNavigationTiming: true,
});
Best Practices
1. Data Layer
β Do:
- Write to Bronze first
- Let system process to Silver/Gold
- Use Config schema for settings
- Query appropriate layer (Silver for UI, Gold for dashboards)
β Donβt:
- Write directly to Silver/Gold
- Skip Bronze layer
- Store config in Bronze/Silver/Gold
2. Components
β Do:
- Extend BaseComponent
- Use shared utilities from /lib
- Implement proper cleanup
- Emit events for communication
β Donβt:
- Duplicate code between popup/options
- Create new utility functions
- Skip lifecycle methods
3. Analytics
β Do:
- Choose appropriate timeframe
- Use percentiles for performance analysis
- Cache aggregated data
- Index fact tables properly
β Donβt:
- Query Bronze for analytics
- Recalculate aggregates on every query
- Skip dimension lookups
Performance Optimization
1. Database
- Indexes on all foreign keys
- Compound indexes on frequently queried columns
- Periodic VACUUM
- Archive old Bronze data
2. Caching
- Cache dimension lookups
- Cache configuration
- Pre-calculate aggregates
- Store aggregates in Gold
3. Query Optimization
- Use star schema for complex queries
- Leverage pre-aggregated analytics data
- Filter by dimensions
- Limit result sets with pagination
Future Enhancements
-
Machine Learning Layer
- Anomaly detection
- Performance predictions
- Optimization recommendations
-
Real-time Streaming
- Live performance updates
- WebSocket support
- Real-time dashboards
-
Advanced Analytics
- Correlation analysis
- Regression analysis
- Forecasting
-
Data Export
- External BI tools integration
- API for analytics
- Scheduled exports
-
Partitioning
- Time-based partitions
- Archive old data
- Improve query performance