Optimize Status Jobs

This commit is contained in:
Douglas Barone 2023-06-26 08:34:14 -04:00
parent c2476ba74a
commit 0955cce688
3 changed files with 45 additions and 24 deletions

View File

@ -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()

20
src/jobs.ts Normal file
View File

@ -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 * * *'
}
]
})

View File

@ -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 {
}
}
})
}
})
}