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,7 +37,7 @@ model Printer {
|
|||
friendlyName String?
|
||||
location String?
|
||||
|
||||
serialNumber String? @unique
|
||||
serialNumber String @unique
|
||||
ip String @unique
|
||||
model String
|
||||
|
||||
|
|
|
@ -2,9 +2,6 @@ import { Router, Request, Response } from 'express'
|
|||
|
||||
import { hasRolesMiddleware } from '../middlewares/hasRolesMiddleware.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()
|
||||
|
||||
|
|
|
@ -96,8 +96,13 @@ export class PrinterDiscoveryService {
|
|||
await Promise.allSettled(
|
||||
newPrintersIPs.map(async ip => {
|
||||
const model = await PrinterStatusService.getPrinterModel(ip)
|
||||
const printer = await prisma.printer.create({
|
||||
data: { ip, model, networkId: network.id }
|
||||
const serialNumber =
|
||||
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)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import snmp from 'net-snmp'
|
||||
import { Printer, PrinterStatus } from '@prisma/client'
|
||||
import { Printer } from '@prisma/client'
|
||||
import { prisma } from '../prisma.js'
|
||||
import {
|
||||
objectIdsRepository,
|
||||
|
@ -45,8 +45,9 @@ export type PrinterInfo = {
|
|||
export class PrinterStatusService {
|
||||
constructor(private printer: Printer) {
|
||||
this.getPrinterInfo().then(async printerStatus => {
|
||||
if (this.printer.serialNumber)
|
||||
await prisma.printer.update({
|
||||
where: { id: this.printer.id },
|
||||
where: { serialNumber: this.printer.serialNumber },
|
||||
data: {
|
||||
serialNumber: printerStatus.serialNumber,
|
||||
location: printerStatus.location,
|
||||
|
@ -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> {
|
||||
return new Promise((resolve, reject) => {
|
||||
const session = snmp.createSession(this.printer.ip, 'public')
|
||||
|
|
Loading…
Reference in New Issue
Block a user