diff --git a/src/index.ts b/src/index.ts index bfca967..8891dae 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,9 +1,7 @@ import 'dotenv/config' -import * as path from 'node:path' -import { fileURLToPath } from 'node:url' import { app } from './server.js' -import Bree from 'bree' +import { jobs } from './jobs.js' const PORT = process.env.PORT || 8000 @@ -16,22 +14,5 @@ app.listen(PORT, () => { ) }) -// Jobs -const bree = new Bree({ - root: path.join(path.dirname(fileURLToPath(import.meta.url)), 'jobs'), - defaultExtension: process.env.NODE_ENV == 'production' ? 'js' : 'ts', - logger: false, - jobs: [ - { - name: 'updatePrinterStatus', - interval: process.env.UPDATE_INTERVAL || '10m', - timeout: 0 - }, - { - name: 'discoverPrinters', - cron: '0 */12 * * *' - } - ] -}) - -bree.start() +// Start jobs +jobs.start() diff --git a/src/jobs.ts b/src/jobs.ts new file mode 100644 index 0000000..43bec94 --- /dev/null +++ b/src/jobs.ts @@ -0,0 +1,20 @@ +import * as path from 'node:path' +import { fileURLToPath } from 'node:url' +import Bree from 'bree' + +export const jobs = new Bree({ + root: path.join(path.dirname(fileURLToPath(import.meta.url)), 'jobs'), + defaultExtension: process.env.NODE_ENV == 'production' ? 'js' : 'ts', + logger: false, + jobs: [ + { + name: 'updatePrinterStatus', + interval: process.env.UPDATE_INTERVAL || '1m', + timeout: 0 + }, + { + name: 'discoverPrinters', + cron: '0 */12 * * *' + } + ] +}) diff --git a/src/services/PrinterStatusService.ts b/src/services/PrinterStatusService.ts index 548c2e7..ae6545f 100644 --- a/src/services/PrinterStatusService.ts +++ b/src/services/PrinterStatusService.ts @@ -45,11 +45,30 @@ export type PrinterInfo = { export class PrinterStatusService { constructor(private printer: Printer) { this.getPrinterInfo().then(async printerStatus => { - if (this.printer.serialNumber) + const lastStatus = await prisma.printerStatus.findFirst({ + where: { printerId: this.printer.id }, + orderBy: { timestamp: 'desc' } + }) + + if ( + lastStatus?.counter == printerStatus.counter && + lastStatus?.tonerBlackLevel == printerStatus.toners.black.level && + lastStatus?.tonerCyanLevel == printerStatus.toners.cyan?.level && + lastStatus?.tonerMagentaLevel == printerStatus.toners.magenta?.level && + lastStatus?.tonerYellowLevel == printerStatus.toners.yellow?.level + ) { + await prisma.printerStatus.update({ + where: { id: lastStatus.id }, + data: { timestamp: new Date() } + }) + } else { + console.log( + `Updating printer status ${this.printer.serialNumber} (${this.printer.ip}). Counter:${lastStatus?.counter} to ${printerStatus.counter}` + ) + await prisma.printer.update({ where: { serialNumber: this.printer.serialNumber }, data: { - serialNumber: printerStatus.serialNumber, location: printerStatus.location, blackTonerModel: printerStatus.toners.black.model, cyanTonerModel: printerStatus.toners.cyan?.model, @@ -67,6 +86,7 @@ export class PrinterStatusService { } } }) + } }) }