This commit is contained in:
Douglas Barone 2023-06-21 15:02:12 -04:00
parent 90c03d919d
commit aea8d8d9cd
5 changed files with 56 additions and 39 deletions

2
.gitignore vendored
View File

@ -1,6 +1,8 @@
# Created by https://www.toptal.com/developers/gitignore/api/node # Created by https://www.toptal.com/developers/gitignore/api/node
# Edit at https://www.toptal.com/developers/gitignore?templates=node # Edit at https://www.toptal.com/developers/gitignore?templates=node
deploy.sh
### Node ### ### Node ###
# Logs # Logs
logs logs

View File

@ -6,8 +6,10 @@ COPY package*.json ./
RUN npm install RUN npm install
COPY . . COPY . .
RUN npm run prisma:generate
RUN npm run build RUN npm run build
EXPOSE 3000 EXPOSE 3000
CMD [ "npm", "start" ] CMD npm run prisma:deploy && npm start

View File

@ -10,44 +10,8 @@ const router = Router()
class PrinterDiscoveryController { class PrinterDiscoveryController {
static async discovery(req: Request, res: Response) { static async discovery(req: Request, res: Response) {
const networks = await prisma.network.findMany() const task = await PrinterDiscoveryService.discoverAll()
res.json(task)
const newPrinters: Printer[] = []
const discoveredPrintersIPs: string[] = []
for (const network of networks) {
console.log('Discovering printers for network', network.cidr)
try {
const discoveredPrintersIPsForNetwork =
await PrinterDiscoveryService.discovery(network.cidr)
discoveredPrintersIPs.push(...discoveredPrintersIPsForNetwork)
} catch (error) {
console.log(error)
}
const printers = await prisma.printer.findMany()
const newPrintersIPs = discoveredPrintersIPs.filter(
ip => !printers.find(printer => printer.ip === ip)
)
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 }
})
new PrinterStatusService(printer)
newPrinters.push(printer)
})
)
}
res.json({ discoveredPrintersIPs, newPrinters })
} }
} }

View File

@ -0,0 +1,5 @@
import { PrinterDiscoveryService } from '../services/PrinterDiscoveryService.js'
async function discoverPrinters() {}
discoverPrinters()

View File

@ -1,5 +1,8 @@
import snmp from 'net-snmp' import snmp from 'net-snmp'
import netmask from 'netmask' import netmask from 'netmask'
import { PrinterStatusService } from './PrinterStatusService.js'
import { prisma } from '../prisma.js'
import { Printer } from '@prisma/client'
export class PrinterDiscoveryService { export class PrinterDiscoveryService {
private static async isPrinter(ip: string) { private static async isPrinter(ip: string) {
@ -65,4 +68,45 @@ export class PrinterDiscoveryService {
return printers return printers
} }
static async discoverAll() {
const networks = await prisma.network.findMany()
const newPrinters: Printer[] = []
const discoveredPrintersIPs: string[] = []
for (const network of networks) {
console.log('Discovering printers for network', network.cidr)
try {
const discoveredPrintersIPsForNetwork =
await PrinterDiscoveryService.discovery(network.cidr)
discoveredPrintersIPs.push(...discoveredPrintersIPsForNetwork)
} catch (error) {
console.log(error)
}
const printers = await prisma.printer.findMany()
const newPrintersIPs = discoveredPrintersIPs.filter(
ip => !printers.find(printer => printer.ip === ip)
)
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 }
})
new PrinterStatusService(printer)
newPrinters.push(printer)
})
)
}
return { discoveredPrintersIPs, newPrinters }
}
} }