Skip to content

MKS-01/log-analyzer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

log-analyzer

Go Tested on macOS arm64 Offline Built with Claude Code

CLI for analyzing video SDK / WebRTC call logs. Reads CSV / JSONL / TXT exports, surfaces call-quality issues, and renders a per-participant report with side-by-side timeline and crossover detection.

Early-phase tool — findings may be inaccurate. Always verify against the source dashboard.

Install

git clone https://github.com/manish10mks/log-analyzer
cd log-analyzer
./install.sh

Installs to ~/.local/bin, detects your shell (zsh / bash / fish), and adds the directory to $PATH in the right rc file — creating it if missing. Re-run to upgrade; the previous binary is backed up to <path>.bak.

Overrides: INSTALL_DIR=<path>, NO_BACKUP=1, SKIP_PATH=1. Requires Go 1.21+ (tested with go1.26.1 darwin/arm64).

Runs fully offline — analysis makes no network calls. Only ./install.sh (or go build) needs internet, once, to fetch Go module dependencies.

Usage

log-analyzer analyze <file> [file ...] [flags]
Flag Default Description
-f, --format auto Force format: auto / json / csv / txt
-s, --severity INFO Minimum severity: INFO / WARNING / CRITICAL
-o, --output terminal Output: terminal / json
--session-id Filter to one session ID
--no-color Disable ANSI colors
-v, --verbose Show all log entries alongside issues

Examples

# Single CSV export
log-analyzer analyze export.csv

# Two participants merged into one timeline + crossover report
log-analyzer analyze "export.csv" "export (1).csv"

# Only critical issues
log-analyzer analyze export.csv --severity CRITICAL

# JSON for piping
log-analyzer analyze export.csv --output json | jq .

What it detects

~25 rules, severity-tagged, grouped by category:

  • Connection failures — ICE / DTLS / signaling drops, room-lookup failures, frequent reconnects, slow joins, websocket errors
  • Network degradation — sustained packet loss, jitter spikes, RTT spikes, bitrate drops, low target bitrate
  • Path & device changes — wifi↔cellular handover, audio/camera switches, Bluetooth detection, TURN-relay fallback
  • Permission & hardware errors — denied mic/camera permission, device-busy / not-found, track errors
  • Cross-participant — asymmetric failures (problem was one-sided), early-leave during peer degradation
  • Known browser/SDK quirks — iOS cellular bitrate throttle, Chrome-on-Windows + Bluetooth AEC, Safari sticky permission denial, Edge H.264 hardware accel, React Native Android audio routing

Each issue carries session_id, severity, UTC timestamp, and a short description.

Supported inputs

CSV (video SDK dashboard exports, including BOM-prefixed Excel exports), JSONL, and plain text (React Native console output). Format is auto-detected. Pass multiple files in one run — entries are merged by session ID, useful when each participant exported their own log.

Exporting logs

From your video SDK dashboard, open the call's Logs view, select a date range, and Export — most providers emit one CSV per participant. Then run:

log-analyzer analyze export.csv "export (1).csv" ...

Sample output

══════════════════════════════════════════════════════════════
  Started: 2026-04-21  10:29:49 UTC  │  Duration: 35m 14s

  PARTICIPANTS
  Participant A   React Native 0.81.6 · iOS 26.2.1
                  Network: Cellular ⚠ switched mid-call

  Participant B   Chrome 147.0.0.0 · macOS 26.3.1
                  Network: Wifi

  TIMELINE  (side-by-side view of joins, leaves, and issues)
  Time      Participant A                       Participant B
  +0:30     ✗ signaling-failure
  +3:11     ⚠ network-quality-repeated-warning
  +3:14                                         ⚠ network-quality-repeated-warning

  CROSSOVERS  (issues within 30s across participants — likely shared cause)
  +3:11 → +3:14  (3s span)
    Participant A   ⚠ network-quality-repeated-warning
    Participant B   ⚠ network-quality-repeated-warning

How it works

A linear pipeline: parse → group entries by session → run rules → render report. Parsers auto-detect format from the first 512 bytes ({ → JSONL, comma-heavy header → CSV, else TXT) and map each line into a normalized LogEntry. To add a rule, write func ruleX(s *Session) []Issue and append it to AllRules in internal/analyzer/rules.go — every issue is auto-tagged with session_id, severity, and timestamp by the analyzer.

Development

go test ./...
go build -o log-analyzer .

License

MIT © MKS


Built with Claude Code.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors