diff --git a/.gitignore b/.gitignore index 64ca9b3..ec34bf0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ # Created by https://www.toptal.com/developers/gitignore/api/node # Edit at https://www.toptal.com/developers/gitignore?templates=node +deploy.sh + ### Node ### # Logs logs diff --git a/Dockerfile b/Dockerfile index 1823fde..696dafc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,8 +6,10 @@ COPY package*.json ./ RUN npm install COPY . . +RUN npm run prisma:generate + RUN npm run build EXPOSE 3000 -CMD [ "npm", "start" ] +CMD npm run prisma:deploy && npm start diff --git a/src/controllers/PrinterDiscoveryController.ts b/src/controllers/PrinterDiscoveryController.ts index 8d45605..38305aa 100644 --- a/src/controllers/PrinterDiscoveryController.ts +++ b/src/controllers/PrinterDiscoveryController.ts @@ -10,44 +10,8 @@ const router = Router() class PrinterDiscoveryController { static async discovery(req: Request, res: Response) { - 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) - }) - ) - } - - res.json({ discoveredPrintersIPs, newPrinters }) + const task = await PrinterDiscoveryService.discoverAll() + res.json(task) } } diff --git a/src/jobs/discoverPrinter.ts b/src/jobs/discoverPrinter.ts new file mode 100644 index 0000000..0457bb7 --- /dev/null +++ b/src/jobs/discoverPrinter.ts @@ -0,0 +1,5 @@ +import { PrinterDiscoveryService } from '../services/PrinterDiscoveryService.js' + +async function discoverPrinters() {} + +discoverPrinters() diff --git a/src/services/PrinterDiscoveryService.ts b/src/services/PrinterDiscoveryService.ts index 7affd00..0169774 100644 --- a/src/services/PrinterDiscoveryService.ts +++ b/src/services/PrinterDiscoveryService.ts @@ -1,5 +1,8 @@ import snmp from 'net-snmp' import netmask from 'netmask' +import { PrinterStatusService } from './PrinterStatusService.js' +import { prisma } from '../prisma.js' +import { Printer } from '@prisma/client' export class PrinterDiscoveryService { private static async isPrinter(ip: string) { @@ -65,4 +68,45 @@ export class PrinterDiscoveryService { 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 } + } }