From bbd562cc0e1c28fe9e9a362951220b8828686e75 Mon Sep 17 00:00:00 2001 From: Melania Dello Spedale La Paglia Date: Fri, 27 Mar 2020 12:09:24 +0100 Subject: [PATCH] =?UTF-8?q?aggiornato=20algoritmo=20che=20salva=20i=20dati?= =?UTF-8?q?=20delle=20leases=20nel=20DB=20e=20scrive=20il=20file=20di=20co?= =?UTF-8?q?nfigurazione=20che=20andr=C3=A0=20ad=20utilizzare=20dnsmasq=20#?= =?UTF-8?q?8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/services/arpService.ts | 6 +- backend/src/services/dnsService.ts | 73 ++++++++------------ backend/src/shared/utilities.ts | 21 ++++++ backend/src/stores/deviceStore.ts | 5 +- frontend/src/components/forms/DNSForm.tsx | 10 ++- frontend/src/components/forms/deviceForm.tsx | 6 +- frontend/src/routes.tsx | 9 +++ 7 files changed, 76 insertions(+), 54 deletions(-) diff --git a/backend/src/services/arpService.ts b/backend/src/services/arpService.ts index 3b211fa..27b4280 100644 --- a/backend/src/services/arpService.ts +++ b/backend/src/services/arpService.ts @@ -38,7 +38,7 @@ export default class PingService { async addInfoGWAndTenantToDevices(arpData: any, contactedGW: any) { const gwMacs = Object.keys(contactedGW); - const leases = dnsService.getCurrentLeases(); + const leases = Utilities.getCurrentLeases(); if (arpData) { await Object.keys(arpData).forEach(async (interfaceKey: string) => { const mac_addresses = arpData[interfaceKey].mac_addresses; @@ -136,8 +136,8 @@ export default class PingService { try { const tenants = await tenantStore.findAll(); if (tenants) { - // const tenantInterfaces = tenants.map((val: ITenant) => val.edge_interface_name); - const tenantInterfaces: string[] = [cfg.arp.interface]; + const tenantInterfaces = tenants.map((val: ITenant) => val.edge_interface_name); + // const tenantInterfaces: string[] = [cfg.arp.interface]; const promise = new Promise((resolve, reject) => { let tbl: any = {}; diff --git a/backend/src/services/dnsService.ts b/backend/src/services/dnsService.ts index 0b7e79b..a11d344 100644 --- a/backend/src/services/dnsService.ts +++ b/backend/src/services/dnsService.ts @@ -1,9 +1,6 @@ import _ = require('lodash'); import { ILease, IDevice, ITenant } from '../interfaces/interfaces'; const cfg = require('config'); -const fs = require('fs'); -const leases = require('dnsmasq-leases'); -const path = require('path'); import DeviceStore from '../stores/deviceStore'; import TenantStore from '../stores/tenantStore'; import { Utilities } from '../shared/utilities'; @@ -18,33 +15,38 @@ export default class DNSService { async searchAndSaveNewLeases() { try { let prepareFileHost = ""; - let tenantRes = await tenantStore.findBy({ edge_interface_name: cfg.default_tenant }); - if (tenantRes && tenantRes.length == 1) { - const tenant: ITenant = tenantRes[0]; - let leasesData = this.getCurrentLeases(); - if (leasesData) { - for (let i = 0; i < leasesData.length; i++) { - const val = leasesData[i]; - let device: IDevice = { - mac_address: val.mac, - tenant_id: tenant.id - }; - const deviceRes = await deviceStore.findBy(device); - let devicePersistent = null; - if (deviceRes && deviceRes.length == 0) { - device.dns_name_auto = val.host || ""; - await deviceStore.create(device); - devicePersistent = device; - } else { - devicePersistent = deviceRes[0]; - } - if (devicePersistent) { - let dns_name = devicePersistent.dns_name_manual && devicePersistent.dns_name_manual != "" ? devicePersistent.dns_name_manual : devicePersistent.dns_name_auto; - prepareFileHost = prepareFileHost + `${val.ip} ${dns_name}\n`; - } + // const tenantRes = await tenantStore.findAll(); + // let tenantRes = await tenantStore.findBy({ edge_interface_name: cfg.default_tenant }); + + // if (tenantRes) { + let leasesData = Utilities.getCurrentLeases(); + // for (let i = 0; i < tenantRes.length; i++) { + // const tenant: ITenant = tenantRes[i]; + if (leasesData) { + for (let j = 0; j < leasesData.length; j++) { + const val = leasesData[j]; + let device: IDevice = { + mac_address: val.mac, + // tenant_id: tenant.id + }; + + const deviceRes = await deviceStore.findBy(device); + let devicePersistent = null; + if (deviceRes && deviceRes.length == 0) { + device.dns_name_auto = val.host || ""; + await deviceStore.create(device); + devicePersistent = device; + } else { + devicePersistent = deviceRes[0]; + } + if (devicePersistent) { + let dns_name = devicePersistent.dns_name_manual && devicePersistent.dns_name_manual != "" ? devicePersistent.dns_name_manual : devicePersistent.dns_name_auto; + prepareFileHost = prepareFileHost + `${val.ip} ${dns_name}\n`; } } } + // } + // } console.log("ContentFileHost", prepareFileHost); let pathFileHost = cfg.path_file_host ? cfg.path_file_host : "myhostfile"; Utilities.writeFile(pathFileHost, prepareFileHost); @@ -52,21 +54,4 @@ export default class DNSService { console.log("ERROR", error); } } - - // il metodo legge il file relativo alle leases (es. dnsmasq.leases) e ritorna un array di oggetti - // dove ogni oggetto ha come keys: mac, ip, host, timestamp - getCurrentLeases() { - try { - let tmpDirectoryLeases = cfg.watcher && cfg.watcher.leases_path ? cfg.watcher.leases_path : path.join(__dirname, '../../src/leases'); - let leasesData = []; - let data = fs.readFileSync(tmpDirectoryLeases, 'utf8'); - if (data) { - leasesData = leases(data); - } - return leasesData; - } catch (error) { - console.log("ERROR", error); - return null; - } - } } \ No newline at end of file diff --git a/backend/src/shared/utilities.ts b/backend/src/shared/utilities.ts index fd40823..1969852 100644 --- a/backend/src/shared/utilities.ts +++ b/backend/src/shared/utilities.ts @@ -1,5 +1,8 @@ import { IResultRequest } from "../interfaces/interfaces"; +const cfg = require('config'); +const leases = require('dnsmasq-leases'); const fs = require('fs'); +const path = require('path'); const request = require('request'); export class Utilities { @@ -35,4 +38,22 @@ export class Utilities { else console.log("file saved"); }); } + + // il metodo legge il file relativo alle leases (es. dnsmasq.leases) e ritorna un array di oggetti + // dove ogni oggetto ha come keys: mac, ip, host, timestamp + static getCurrentLeases() { + try { + let tmpDirectoryLeases = cfg.watcher && cfg.watcher.leases_path ? cfg.watcher.leases_path : path.join(__dirname, '../../src/leases'); + let leasesData = []; + let data = fs.readFileSync(tmpDirectoryLeases, 'utf8'); + console.log("data", data); + if (data) { + leasesData = leases(data); + } + return leasesData; + } catch (error) { + console.log("ERROR", error); + return null; + } + } } \ No newline at end of file diff --git a/backend/src/stores/deviceStore.ts b/backend/src/stores/deviceStore.ts index 6ac4b93..58cb085 100644 --- a/backend/src/stores/deviceStore.ts +++ b/backend/src/stores/deviceStore.ts @@ -36,8 +36,9 @@ export default class DeviceStore { getAll(options: ISearchOpt) { return knex.raw(`SELECT * FROM devices - WHERE description LIKE '%${options.needle}%' - OR edge_interface_name LIKE '%${options.needle}%' + WHERE mac_address LIKE '%${options.needle}%' + OR dns_name_auto LIKE '%${options.needle}%' + OR dns_name_manual LIKE '%${options.needle}%' ORDER BY created_at DESC LIMIT ${options.itemsPerPage} OFFSET ${(options.itemsPerPage * (options.activePage - 1))}` diff --git a/frontend/src/components/forms/DNSForm.tsx b/frontend/src/components/forms/DNSForm.tsx index c514b43..8f19f15 100644 --- a/frontend/src/components/forms/DNSForm.tsx +++ b/frontend/src/components/forms/DNSForm.tsx @@ -1,7 +1,7 @@ import React, { useState } from 'react'; import DNSBaseComponent from '../dnsBaseComponent'; -import { Grid, Input, Button, Container, Segment, Card, Image, Form } from 'semantic-ui-react'; +import { Grid, Input, Button, Container, Segment, Card, Image, Form, Icon } from 'semantic-ui-react'; import { history } from '../../main'; import _ from 'lodash'; import { Link } from 'react-router-dom'; @@ -11,7 +11,7 @@ import DeviceApi from './../../api/deviceApi'; const DNSForm = () => { const [mac_address, setMacAddress] = useState(''); const [dns_name_manual, setDnsNameManual] = useState(''); - + async function submit() { try { @@ -33,6 +33,12 @@ const DNSForm = () => { return ( <> +

Aggiungi elemento

diff --git a/frontend/src/components/forms/deviceForm.tsx b/frontend/src/components/forms/deviceForm.tsx index 708f134..bfb5355 100644 --- a/frontend/src/components/forms/deviceForm.tsx +++ b/frontend/src/components/forms/deviceForm.tsx @@ -66,10 +66,10 @@ class DeviceForm extends DNSBaseComponent { try { if (this.state.mac_address && this.state.dns_name_manual) { const tenant: IDevice = { - description: this.state.description, - edge_interface_name: this.state.edge_interface_name + mac_address: this.state.mac_address, + dns_name_manual: this.state.dns_name_manual }; - const registerPromise = TenantApi.create(tenant); + const registerPromise = DeviceApi.create(tenant); this.registerPromise(registerPromise); const responseCreate: any = await registerPromise; if (responseCreate && responseCreate.status === 200 && responseCreate.data) { diff --git a/frontend/src/routes.tsx b/frontend/src/routes.tsx index ba38440..f3afd53 100644 --- a/frontend/src/routes.tsx +++ b/frontend/src/routes.tsx @@ -43,6 +43,15 @@ export const appRoutes: ApplicationRouteGroup[] = [ menuLabel: 'device', showTopbar: true }, + { + path: '/device/new', + name: 'device', + restricted: false, + exact: true, + component: DNSForm, + menuLabel: 'device', + showTopbar: true + }, { path: '/home', name: 'home',