Zuckers Operations Hub
Self-hosted reporting platform that pulls per-user email activity, app usage and mailbox storage metrics from the Microsoft Graph Reports API and surfaces them in a fast, filterable dashboard with department scoping, drill-downs and exports to Excel / CSV.
What's included
Reports
- Daily activity — send / receive / read per user per day
- User drill-down — full history + chart per mailbox
- Department comparison — side-by-side bar & line charts
- Inactive users — configurable threshold
- Email app usage — Outlook / Mobile / Web / IMAP / POP adoption
- Mailbox storage — usage, quota warnings, item counts
Platform
- Local user accounts (no Microsoft sign-in required)
- Roles: Reports (scoped to assigned departments) and SuperAdmin
- Departments map mailboxes → users for granular access control
- Background ingestion via Hangfire (in-process)
- Idempotent upserts — safe to re-run any job
- CSV + Excel export on every report
- Audit log of all admin changes
Phone Reports r78
Dedicated Call Center reporting fed by ZuckersBroadSoftFetcher
(pulls BroadSoft CCPRI + KMPIQ Queue Performance every 5 min)
into dbo.BroadSoftCcReport and dbo.KmpiqCallback.
All pages read from SQL only — no live HTTP to Nextiva from IIS.
Daily & historical
- General Report (daily) — Inbound KPIs (Answered / Abandoned / Escaped / Bounced / Transferred / Stranded / Overflowed) with hourly distribution & Phone Reconciliation (PhoneActivity ↔ BroadSoft DID match)
- General Report (monthly) new — Last 3 / 6 / 12 / 24-month roll-up with best/worst/peak month + trend bars
Callbacks (KMPIQ)
- KMPIQ Callbacks new — Customer escapes (pressed "1") with Daily / Monthly / Per-agent rollups, 7d / 30d / 90d / MTD / YTD / 1y quick filters
- Agent drill-down new — Click any agent in the leaderboard to see their individual callbacks (caller, queue entry, assign time, resolve time, disposition)
CallQueue.PhoneGeneralV2,
CallQueue.PhoneGeneralV2Monthly, and CallQueue.Callbacks
modules per user in Admin → Users.
SuperAdmins bypass all module gating.
How it works
-
Hangfire (embedded inside the Web app) schedules three background jobs:
ingest-email-activity— per-day per-user send/receive/read (every 4h)ingest-email-app-usage— per-day per-user app usage (every 6h)ingest-mailbox-usage— mailbox storage snapshot (daily)
-
Each job calls Microsoft Graph (
v1.0/reports/...) with a Client Secret or certificate from the App Registration configured at/Admin/Setup. -
Microsoft returns CSV; the service parses it and upserts into SQL Server by
composite key
(ReportDate, UserPrincipalName, TenantId). - The Razor Pages UI queries SQL directly — no live calls to Graph from the browser.
- Visibility is filtered per role: SuperAdmin sees the whole tenant, Reports users see only the mailboxes assigned to their departments.
Security
- Local accounts only, PBKDF2 password hashes via ASP.NET
PasswordHasher<T> - Cookie auth with HttpOnly + sliding expiration (8h normal, 14d "remember me")
- Forced password change on first login
- Graph backend uses app-only auth (Client Secret or Certificate)
- Only one Graph permission required:
Reports.Read.All - No mailbox content is ever read — metric counts only
Credits
Designed and built by Juan Guzman.
Powered by ASP.NET Core 8 (Razor Pages), EF Core, Hangfire, ClosedXML and Microsoft Graph.
Runtime
| App version | 1.0.0.0 |
|---|---|
| .NET runtime | 8.0.21 |
| Server | RESTORESVR1 |
| Server time (UTC) | 2026-08-12 17:38:33 |