Enforce SN
This commit is contained in:
parent
02090fd62e
commit
c2476ba74a
8
prisma/migrations/20230626121422_/migration.sql
Normal file
8
prisma/migrations/20230626121422_/migration.sql
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
/*
|
||||||
|
Warnings:
|
||||||
|
|
||||||
|
- Made the column `serialNumber` on table `Printer` required. This step will fail if there are existing NULL values in that column.
|
||||||
|
|
||||||
|
*/
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Printer" ALTER COLUMN "serialNumber" SET NOT NULL;
|
|
@ -37,8 +37,8 @@ model Printer {
|
||||||
friendlyName String?
|
friendlyName String?
|
||||||
location String?
|
location String?
|
||||||
|
|
||||||
serialNumber String? @unique
|
serialNumber String @unique
|
||||||
ip String @unique
|
ip String @unique
|
||||||
model String
|
model String
|
||||||
|
|
||||||
blackTonerModel String?
|
blackTonerModel String?
|
||||||
|
|
|
@ -2,9 +2,6 @@ import { Router, Request, Response } from 'express'
|
||||||
|
|
||||||
import { hasRolesMiddleware } from '../middlewares/hasRolesMiddleware.js'
|
import { hasRolesMiddleware } from '../middlewares/hasRolesMiddleware.js'
|
||||||
import { PrinterDiscoveryService } from '../services/PrinterDiscoveryService.js'
|
import { PrinterDiscoveryService } from '../services/PrinterDiscoveryService.js'
|
||||||
import { prisma } from '../prisma.js'
|
|
||||||
import { PrinterStatusService } from '../services/PrinterStatusService.js'
|
|
||||||
import { Printer } from '@prisma/client'
|
|
||||||
|
|
||||||
const router = Router()
|
const router = Router()
|
||||||
|
|
||||||
|
|
|
@ -96,8 +96,13 @@ export class PrinterDiscoveryService {
|
||||||
await Promise.allSettled(
|
await Promise.allSettled(
|
||||||
newPrintersIPs.map(async ip => {
|
newPrintersIPs.map(async ip => {
|
||||||
const model = await PrinterStatusService.getPrinterModel(ip)
|
const model = await PrinterStatusService.getPrinterModel(ip)
|
||||||
const printer = await prisma.printer.create({
|
const serialNumber =
|
||||||
data: { ip, model, networkId: network.id }
|
await PrinterStatusService.getPrinterSerialNumber(ip)
|
||||||
|
|
||||||
|
const printer = await prisma.printer.upsert({
|
||||||
|
where: { serialNumber },
|
||||||
|
create: { ip, model, networkId: network.id, serialNumber },
|
||||||
|
update: { ip, model, networkId: network.id }
|
||||||
})
|
})
|
||||||
|
|
||||||
new PrinterStatusService(printer)
|
new PrinterStatusService(printer)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import snmp from 'net-snmp'
|
import snmp from 'net-snmp'
|
||||||
import { Printer, PrinterStatus } from '@prisma/client'
|
import { Printer } from '@prisma/client'
|
||||||
import { prisma } from '../prisma.js'
|
import { prisma } from '../prisma.js'
|
||||||
import {
|
import {
|
||||||
objectIdsRepository,
|
objectIdsRepository,
|
||||||
|
@ -45,27 +45,28 @@ export type PrinterInfo = {
|
||||||
export class PrinterStatusService {
|
export class PrinterStatusService {
|
||||||
constructor(private printer: Printer) {
|
constructor(private printer: Printer) {
|
||||||
this.getPrinterInfo().then(async printerStatus => {
|
this.getPrinterInfo().then(async printerStatus => {
|
||||||
await prisma.printer.update({
|
if (this.printer.serialNumber)
|
||||||
where: { id: this.printer.id },
|
await prisma.printer.update({
|
||||||
data: {
|
where: { serialNumber: this.printer.serialNumber },
|
||||||
serialNumber: printerStatus.serialNumber,
|
data: {
|
||||||
location: printerStatus.location,
|
serialNumber: printerStatus.serialNumber,
|
||||||
blackTonerModel: printerStatus.toners.black.model,
|
location: printerStatus.location,
|
||||||
cyanTonerModel: printerStatus.toners.cyan?.model,
|
blackTonerModel: printerStatus.toners.black.model,
|
||||||
magentaTonerModel: printerStatus.toners.magenta?.model,
|
cyanTonerModel: printerStatus.toners.cyan?.model,
|
||||||
yellowTonerModel: printerStatus.toners.yellow?.model,
|
magentaTonerModel: printerStatus.toners.magenta?.model,
|
||||||
|
yellowTonerModel: printerStatus.toners.yellow?.model,
|
||||||
|
|
||||||
status: {
|
status: {
|
||||||
create: {
|
create: {
|
||||||
counter: printerStatus.counter,
|
counter: printerStatus.counter,
|
||||||
tonerBlackLevel: printerStatus.toners.black.level,
|
tonerBlackLevel: printerStatus.toners.black.level,
|
||||||
tonerCyanLevel: printerStatus.toners.cyan?.level,
|
tonerCyanLevel: printerStatus.toners.cyan?.level,
|
||||||
tonerMagentaLevel: printerStatus.toners.magenta?.level,
|
tonerMagentaLevel: printerStatus.toners.magenta?.level,
|
||||||
tonerYellowLevel: printerStatus.toners.yellow?.level
|
tonerYellowLevel: printerStatus.toners.yellow?.level
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
})
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,6 +120,23 @@ export class PrinterStatusService {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static getPrinterSerialNumber(ip: string): Promise<string> {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const snmpSession = snmp.createSession(ip, 'public')
|
||||||
|
snmpSession.get(
|
||||||
|
['1.3.6.1.2.1.43.5.1.1.17.1'],
|
||||||
|
(error: any, varbinds: any) => {
|
||||||
|
if (error) {
|
||||||
|
reject(error)
|
||||||
|
} else {
|
||||||
|
resolve(varbinds[0].value.toString())
|
||||||
|
}
|
||||||
|
snmpSession.close()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
async getPrinterInfo(): Promise<PrinterInfo> {
|
async getPrinterInfo(): Promise<PrinterInfo> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const session = snmp.createSession(this.printer.ip, 'public')
|
const session = snmp.createSession(this.printer.ip, 'public')
|
||||||
|
|
Loading…
Reference in New Issue
Block a user