diff --git a/src/controllers/MonitorController.ts b/src/controllers/MonitorController.ts new file mode 100644 index 0000000..7a357db --- /dev/null +++ b/src/controllers/MonitorController.ts @@ -0,0 +1,30 @@ +import { Router, Request, Response } from 'express' +import { prisma } from '../prisma.js' + +const router = Router() + +class MonitorController { + static async status(req: Request, res: Response) { + // If last status has a toner level below 20%, send an alert + const { printerId } = req.params + + const status = await prisma.printerStatus.findFirst({ + where: { + printer: { + serialNumber: printerId + } + }, + orderBy: { timestamp: 'desc' } + }) + + if (status?.tonerBlackLevel && status.tonerBlackLevel < 25) { + res.send('low toner') + } else { + res.send('ok') + } + } +} + +router.get('/:printerId', MonitorController.status) + +export default router diff --git a/src/server.ts b/src/server.ts index 9fe8075..5884ffe 100644 --- a/src/server.ts +++ b/src/server.ts @@ -10,6 +10,7 @@ import PrinterRouter from './controllers/PrinterController.js' import PrinterStatusRouter from './controllers/PrinterStatusController.js' import PrinterDiscoveryRouter from './controllers/PrinterDiscoveryController.js' import EventsRouter from './controllers/EventsController.js' +import MonitorController from './controllers/MonitorController.js' export const app = express() @@ -29,6 +30,7 @@ app.use('/api/printer', PrinterRouter) app.use('/api/status', PrinterStatusRouter) app.use('/api/discovery', PrinterDiscoveryRouter) app.use('/api/events', EventsRouter) +app.use('/api/monitor', MonitorController) app.use('/', express.static('public'))