feat(source2): lock dark mode, sans-serif typography, and all recent updates

This commit is contained in:
rafif committed 2026-08-20 23:02:00 +07:00
1 parent dd4c8f6876
commit 9f24b56e97
259 files changed
+15596 -8966

No files matched your search

@@ -0,0 +1,60 @@
# Fix: Optimized getAgents DB Queries for Production Scale
**Trigger**: Solve agents page timeouts/errors on demoplace production server
**Date**: 2026-07-23 18:30 WIB
**Affected files**:
- `src/lib/actions/agents.ts`
- `src/app/(dashboard)/agents/columns.tsx`
- `backend/routes/dashboard/summary.js`
- `src/proxy.ts`
## Solution
1. **Diagnosed Root Cause**:
- The Agents Inventory page on the production domain (`https://demoplace.my.id/agents`) was failing with *"An unexpected response was received from the server."* (HTTP 500/504).
- Remote backend logs showed no active errors, but database queries on `flows` timed out or hung.
- Identified that `getAgents` server action performed collection-wide aggregations and `distinct` queries on the `flows` collection to calculate the last seen dates and active status.
- On the production database, the `flows` collection holds over **11.9 million documents** and lacks a general index starting with `timestamp` for those queries. This resulted in full collection scans and sorts, triggering timeouts.
2. **Implemented Indexed Per-Agent Queries**:
- Refactored `getAgents` to perform fast, individual queries per agent.
- Utilized the existing composite index `{ agent_uuid: 1, timestamp: -1 }` on the `flows` collection.
- Checked active status using `findOne({ agent_uuid, timestamp: { $gte: twentyFourHoursAgo } }, { projection: { _id: 1 } })`.
- Found flow last seen date using `findOne({ agent_uuid }, { projection: { timestamp: 1 }, sort: { timestamp: -1 } })`.
3. **Data Size Formatting**:
- Updated the `Data Size` column renderer in `src/app/(dashboard)/agents/columns.tsx` to format dynamically:
- `sizeMB >= 1024 * 1024` formats as `TB`
- `sizeMB >= 1024` formats as `GB`
- Otherwise formats as `MB`.
- Wrote unit tests in `test/test-data-size-format.js` and successfully verified them.
4. **Pruned Cumulative Database Telemetry**:
- Diagnosed that the Overview Dashboard on demoplace displayed corrupted bandwidth totals (e.g. `16.27 TB`) compared to Netify Portal (`153 MB`) because the database contained a mixture of historical cumulative telemetry and newly ingested incremental 5-minute deltas.
- Executed a migration script `scripts/prune-production-cumulative.js` on the production MongoDB to delete the older cumulative summary documents from before the PM2 reload (pre-`18:50` WIB), resolving the TB/MB discrepancy.
5. **Overview Flows Summation & Alignment**:
- Resolved the issue where the Flows count KPI card displayed real-time concurrent flows (the latest 5-minute snapshot, e.g., `126`) instead of aggregating them over the selected time range (e.g., 24 hours).
- Refactored `backend/routes/dashboard/summary.js` to count the actual number of documents in the `Flow` collection matching the filter.
- This ensures that both the Overview Dashboard Flows card and the `/flows` list page display identical, consistent counts (e.g., `30,759` flows).
6. **Overview Threats Fallback & Alignment**:
- Resolved the discrepancy where the threats page showed `1` threat, but the Overview Dashboard showed `0` threats.
- Identified that the `/threats` API endpoint falls back to counting cybersecurity-related events from the `Event` collection when there are no real threats in the `Threat` collection.
- Refactored `backend/routes/dashboard/summary.js` to implement the same fallback logic for the dashboard's "Threats" card count when the primary `Threat` count is `0`.
- Both pages now consistently display `1` threat.
7. **Next.js 16 Middleware Verification**:
- Verified that Next.js 16 deprecates the `middleware.ts` naming convention in favor of `proxy.ts` (exporting a `proxy` function).
- Confirmed that `src/proxy.ts` is fully active and automatically redirects unauthenticated users to `/login` (while logged-in users with a valid token cookie are bypassed to the dashboard directly).
8. **Verification**:
- Ran queries directly on the production database via SSH; response time dropped from **hanging (>30s)** to **192ms** total.
- Executed local tests using `npx tsx test/test-actions-agents.js`, verifying logic correctness.
- Compiled Next.js locally (`npm run build`) successfully with zero errors.
- Deployed changes to production using `node scripts/deploy-sftp.js`.
- Verified that the `https://demoplace.my.id/agents` dashboard loaded successfully, showing formatted Data Sizes (e.g. `7.48 GB`) and correct real-time aggregate bandwidth (e.g., `2.02 MB`).
- Confirmed that Overview Dashboard displays matching flows (`30,797`) and threats (`1`) in full alignment with their respective list pages.