Fence Tracker is a zone-based monitoring and alerting service that identifies when activity levels within specific geographic or logical zones exceed a configured threshold. It fetches data from a centralized Query Gateway, evaluates it against defined rules, and sends alerts when meaningful increases occur.
To prevent redundant notifications, Fence Tracker persists the last triggered state for each zone in a MySQL database. When a new threshold multiple is crossed, it formats and dispatches a structured alert message via an external messaging system.
- Fetch the latest fence activity data using a named query from the Query Gateway
- Detect when the quantity per zone exceeds a defined threshold (e.g., 50)
- Persist trigger states in a MySQL database using Prisma to track previously alerted values
- Prevent duplicate alerts by only triggering when thresholds escalate beyond prior values
- Generate structured alert messages containing relevant zone and account information
- Send alerts to a configurable external messaging endpoint
- Use Basic and Bearer authentication strategies for secure communication with the Query Gateway
- Provide a scalable and maintainable alert pipeline for fence-based activity monitoring
- Node.js ≥
20.14.0
— JavaScript runtime environment - MySQL ≥
8.0
— Relational database - Query Gateway ≥
3.0.3
— Configurable data query service
# Clone & navigate
git clone <repository-url> && cd fence-tracker
# Configure environment
cp .env.example .env # Edit with your settings
# Install dependencies (auto-runs database setup)
npm install
💡 Database: Import
storage.sql.example
before runningnpm install
npm run start:development
npm run build && npm run start:production
Command | Description |
---|---|
npm run start:development |
Start the application in development |
npm run start:production |
Start the application in production |
npm run build |
Build the application for production |
npm run build:watch |
Build the application with watch mode |
npm run clean |
Clean application build artifacts |
Command | Description |
---|---|
npm run db:pull |
Pull database schema into Prisma across all schemas |
npm run db:push |
Push Prisma schema to the database across all schemas |
npm run db:generate |
Generate Prisma Client for all schemas |
npm run db:migrate:dev |
Run development migrations across all schemas |
npm run db:migrate:deploy |
Deploy migrations to production across all schemas |
npm run db:studio |
Open Prisma Studio (GUI) across all schemas |
npm run db:reset |
Reset database (pull + generate) for all schemas |
Command | Description |
---|---|
npm run docker:build:development |
Build Docker image for development |
npm run docker:build:production |
Build Docker image for production |
npm run docker:run:development |
Run development Docker container |
npm run docker:run:production |
Run production Docker container |
npm run docker:compose:up:development |
Start Docker Compose in development |
npm run docker:compose:up:production |
Start Docker Compose in production |
npm run docker:compose:up:build:development |
Start & rebuild Docker Compose in development |
npm run docker:compose:up:build:production |
Start & rebuild Docker Compose in production |
npm run docker:compose:down |
Stop Docker Compose services |
npm run docker:compose:logs |
View Docker Compose logs |
npm run docker:prune |
Clean up unused Docker resources |
Command | Description |
---|---|
npm test |
Run all tests once |
npm run test:watch |
Run tests in watch mode |
npm run test:coverage |
Run tests and generate a coverage report |