Skip to content

Commit

Permalink
aggiornato algoritmo che salva i dati delle leases nel DB e scrive il…
Browse files Browse the repository at this point in the history
… file di configurazione che andrà ad utilizzare dnsmasq #8
  • Loading branch information
mdslp committed Mar 27, 2020
1 parent 312da65 commit bbd562c
Show file tree
Hide file tree
Showing 7 changed files with 76 additions and 54 deletions.
6 changes: 3 additions & 3 deletions backend/src/services/arpService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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 = {};

Expand Down
73 changes: 29 additions & 44 deletions backend/src/services/dnsService.ts
Original file line number Diff line number Diff line change
@@ -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';
Expand All @@ -18,55 +15,43 @@ 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);
} catch (error) {
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;
}
}
}
21 changes: 21 additions & 0 deletions backend/src/shared/utilities.ts
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down Expand Up @@ -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;
}
}
}
5 changes: 3 additions & 2 deletions backend/src/stores/deviceStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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))}`
Expand Down
10 changes: 8 additions & 2 deletions frontend/src/components/forms/DNSForm.tsx
Original file line number Diff line number Diff line change
@@ -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';
Expand All @@ -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 {
Expand All @@ -33,6 +33,12 @@ const DNSForm = () => {

return (
<>
<Button floated='right' icon primary size='small' className="customButton"
onClick={() => {
history.push(`/devices`);
}}>
<Icon name='arrow left' />
</Button>
<Segment>
<h1>Aggiungi elemento</h1>
<Form>
Expand Down
6 changes: 3 additions & 3 deletions frontend/src/components/forms/deviceForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,10 @@ class DeviceForm extends DNSBaseComponent<CompProps | any, CompState> {
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) {
Expand Down
9 changes: 9 additions & 0 deletions frontend/src/routes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down

0 comments on commit bbd562c

Please sign in to comment.