# rakesh0709/prj_111_dvb-s2_analysis architecture

> Architecture diagram of the GitHub repository rakesh0709/prj_111_dvb-s2_analysis, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/rakesh0709/prj_111_dvb-s2_analysis
- Repository: https://github.com/rakesh0709/prj_111_dvb-s2_analysis

## Overview

This is a DVB-S2 receiver-stream analyzer with a Python analysis backend and a Next.js workstation. The main workflow is to submit a stream, detect or select its format, parse it, extract telemetry, and return health, anomaly, pattern, timeline, explanation, comparison, and report results for inspection or export. The README documents all three input formats as alternatives, not a conversion chain. Some subsystem wiring is documented but not sampled; the graph omits uncertain internal calls rather than implying them.

Main entry points: [`05_CODE/dvbs2_analyzer/frontend/coordinator.py`](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/frontend/coordinator.py) (Analysis Coordinator), [`05_CODE/dvbs2_analyzer/ingestion/stream_handler.py`](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/ingestion/stream_handler.py) (Format Detection), [`05_CODE/web/components/LiveAnalyzer.tsx`](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/web/components/LiveAnalyzer.tsx) (Live Analyzer), [`05_CODE/dvbs2_analyzer/frontend/server.py`](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/frontend/server.py) (HTTP API Server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workstation["Workstation UI"]
  node_web_home["Workstation Page<br/>[page.tsx]"]
  node_live_analyzer["Live Analyzer<br/>[LiveAnalyzer.tsx]"]
  node_offline_data["Offline Showcase Data<br/>[offlineData.ts]"]
  node_offline_format["Offline Data Formatter<br/>[formatOffline.ts]"]
  node_browser_client["Backend Client<br/>[app.js]"]
  node_http_server["HTTP API Server<br/>[server.py]"]
end

subgraph group_ingestion["Stream Ingestion"]
  node_stream_handler["Format Detection<br/>[stream_handler.py]"]
  node_ts_parser["MPEG-TS Parser<br/>[ts_parser.py]"]
  node_gse_parser["GSE Parser<br/>[gse_parser.py]"]
  node_bb_parser["BBFrame Parser<br/>[bbframe_parser.py]"]
  node_sanitizer["Stream Sanitizer<br/>[sanitizer.py]"]
end

subgraph group_analysis["Analysis Engine"]
  node_coordinator["Analysis Coordinator<br/>[coordinator.py]"]
  node_extractor["Feature Extraction<br/>[extractor.py]"]
  node_health["Health Analysis<br/>[health.py]"]
  node_anomaly["Anomaly Detection<br/>[anomaly.py]"]
  node_patterns["Pattern Detection<br/>[patterns.py]"]
end

subgraph group_outputs["Diagnostics &amp; Outputs"]
  node_timeline["Activity Timeline<br/>[timeline.py]"]
  node_explanation["Anomaly Explanation<br/>[explanation.py]"]
  node_comparison["Stream Comparison<br/>[comparison.py]"]
  node_report["Report Generator<br/>[report.py]"]
  node_dashboard["HTML Dashboard<br/>[dashboard.py]"]
end

node_engineer(("Engineer"))
node_external_stream["Receiver Stream"]

node_engineer -->|"uses"| node_web_home
node_engineer -->|"submits stream"| node_live_analyzer
node_live_analyzer -->|"uploads / analyzes"| node_http_server
node_live_analyzer -.->|"selects preset"| node_offline_format
node_offline_format -->|"formats data"| node_offline_data
node_external_stream -->|"provides input"| node_live_analyzer
node_browser_client -->|"calls API"| node_http_server
node_http_server -->|"dispatches analysis"| node_coordinator
node_http_server -->|"exports rendered report"| node_report
node_coordinator -->|"ingests stream"| node_stream_handler
node_stream_handler -->|"dispatches TS"| node_ts_parser
node_stream_handler -->|"dispatches GSE"| node_gse_parser
node_stream_handler -->|"dispatches BBFrame"| node_bb_parser
node_coordinator -->|"preprocesses input"| node_sanitizer
node_coordinator -->|"extracts features"| node_extractor
node_coordinator -->|"evaluates health"| node_health
node_coordinator -->|"detects anomalies"| node_anomaly
node_coordinator -->|"finds patterns"| node_patterns
node_coordinator -->|"builds timeline"| node_timeline
node_coordinator -->|"explains findings"| node_explanation
node_coordinator -->|"compares streams"| node_comparison
node_coordinator -->|"generates report"| node_report
node_coordinator -->|"renders dashboard"| node_dashboard

click node_web_home "https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/web/app/page.tsx"
click node_live_analyzer "https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/web/components/LiveAnalyzer.tsx"
click node_offline_data "https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/web/lib/offlineData.ts"
click node_offline_format "https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/web/lib/formatOffline.ts"
click node_browser_client "https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/frontend/static/app.js"
click node_http_server "https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/frontend/server.py"
click node_coordinator "https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/frontend/coordinator.py"
click node_stream_handler "https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/ingestion/stream_handler.py"
click node_ts_parser "https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/parsers/ts_parser.py"
click node_gse_parser "https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/parsers/gse_parser.py"
click node_bb_parser "https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/parsers/bbframe_parser.py"
click node_sanitizer "https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/preprocessing/sanitizer.py"
click node_extractor "https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/features/extractor.py"
click node_health "https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/analysis/health.py"
click node_anomaly "https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/analysis/anomaly.py"
click node_patterns "https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/analysis/patterns.py"
click node_timeline "https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/analysis/timeline.py"
click node_explanation "https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/analysis/explanation.py"
click node_comparison "https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/analysis/comparison.py"
click node_report "https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/analysis/report.py"
click node_dashboard "https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/visualization/dashboard.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_web_home,node_live_analyzer,node_offline_data,node_offline_format,node_browser_client,node_http_server toneBlue
class node_stream_handler,node_ts_parser,node_gse_parser,node_bb_parser,node_sanitizer toneAmber
class node_coordinator,node_extractor,node_health,node_anomaly,node_patterns toneMint
class node_timeline,node_explanation,node_comparison,node_report,node_dashboard toneRose
class node_engineer,node_external_stream toneIndigo
```

## Components

### Workstation UI

- [Workstation Page](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/web/app/page.tsx): `05_CODE/web/app/page.tsx`
- [Live Analyzer](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/web/components/LiveAnalyzer.tsx): `05_CODE/web/components/LiveAnalyzer.tsx`
- [Offline Showcase Data](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/web/lib/offlineData.ts): `05_CODE/web/lib/offlineData.ts`
- [Offline Data Formatter](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/web/lib/formatOffline.ts): `05_CODE/web/lib/formatOffline.ts`
- [Backend Client](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/frontend/static/app.js): `05_CODE/dvbs2_analyzer/frontend/static/app.js`
- [HTTP API Server](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/frontend/server.py): `05_CODE/dvbs2_analyzer/frontend/server.py`

### Stream Ingestion

- [Format Detection](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/ingestion/stream_handler.py): `05_CODE/dvbs2_analyzer/ingestion/stream_handler.py`
- [MPEG-TS Parser](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/parsers/ts_parser.py): `05_CODE/dvbs2_analyzer/parsers/ts_parser.py`
- [GSE Parser](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/parsers/gse_parser.py): `05_CODE/dvbs2_analyzer/parsers/gse_parser.py`
- [BBFrame Parser](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/parsers/bbframe_parser.py): `05_CODE/dvbs2_analyzer/parsers/bbframe_parser.py`
- [Stream Sanitizer](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/preprocessing/sanitizer.py): `05_CODE/dvbs2_analyzer/preprocessing/sanitizer.py`

### Analysis Engine

- [Analysis Coordinator](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/frontend/coordinator.py): `05_CODE/dvbs2_analyzer/frontend/coordinator.py`
- [Feature Extraction](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/features/extractor.py): `05_CODE/dvbs2_analyzer/features/extractor.py`
- [Health Analysis](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/analysis/health.py): `05_CODE/dvbs2_analyzer/analysis/health.py`
- [Anomaly Detection](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/analysis/anomaly.py): `05_CODE/dvbs2_analyzer/analysis/anomaly.py`
- [Pattern Detection](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/analysis/patterns.py): `05_CODE/dvbs2_analyzer/analysis/patterns.py`

### Diagnostics & Outputs

- [Activity Timeline](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/analysis/timeline.py): `05_CODE/dvbs2_analyzer/analysis/timeline.py`
- [Anomaly Explanation](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/analysis/explanation.py): `05_CODE/dvbs2_analyzer/analysis/explanation.py`
- [Stream Comparison](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/analysis/comparison.py): `05_CODE/dvbs2_analyzer/analysis/comparison.py`
- [Report Generator](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/analysis/report.py): `05_CODE/dvbs2_analyzer/analysis/report.py`
- [HTML Dashboard](https://github.com/rakesh0709/prj_111_dvb-s2_analysis/blob/main/05_CODE/dvbs2_analyzer/visualization/dashboard.py): `05_CODE/dvbs2_analyzer/visualization/dashboard.py`

### Other components

- **Engineer**
- **Receiver Stream**

## Connections

- Engineer → Workstation Page: uses
- Engineer → Live Analyzer: submits stream
- Live Analyzer → HTTP API Server: uploads / analyzes
- Live Analyzer → Offline Data Formatter: selects preset
- Offline Data Formatter → Offline Showcase Data: formats data
- Receiver Stream → Live Analyzer: provides input
- Backend Client → HTTP API Server: calls API
- HTTP API Server → Analysis Coordinator: dispatches analysis
- HTTP API Server → Report Generator: exports rendered report
- Analysis Coordinator → Format Detection: ingests stream
- Format Detection → MPEG-TS Parser: dispatches TS
- Format Detection → GSE Parser: dispatches GSE
- Format Detection → BBFrame Parser: dispatches BBFrame
- Analysis Coordinator → Stream Sanitizer: preprocesses input
- Analysis Coordinator → Feature Extraction: extracts features
- Analysis Coordinator → Health Analysis: evaluates health
- Analysis Coordinator → Anomaly Detection: detects anomalies
- Analysis Coordinator → Pattern Detection: finds patterns
- Analysis Coordinator → Activity Timeline: builds timeline
- Analysis Coordinator → Anomaly Explanation: explains findings
- Analysis Coordinator → Stream Comparison: compares streams
- Analysis Coordinator → Report Generator: generates report
- Analysis Coordinator → HTML Dashboard: renders dashboard
