Added cancellation by timeout
This commit is contained in:
parent
ea0f9083c1
commit
d7c4d4be15
|
@ -1,8 +1,11 @@
|
|||
import { create } from 'axios'
|
||||
import { create, CancelToken } from 'axios'
|
||||
import https from 'https'
|
||||
import { ouiFinder } from '../utils/ouiFinder'
|
||||
import { logError } from './logger'
|
||||
|
||||
const TIMEOUT_IN_MS = 120000
|
||||
const REQUEST_TIMEOUT_IN_MS = 20000
|
||||
|
||||
const httpsAgent = new https.Agent({
|
||||
rejectUnauthorized: false,
|
||||
ciphers: 'AES256-SHA' // That's necessary to connect to a TLS 1.0 server. Run node with --tls-min-v1.0
|
||||
|
@ -10,55 +13,71 @@ const httpsAgent = new https.Agent({
|
|||
|
||||
const axios = create({
|
||||
httpsAgent: httpsAgent,
|
||||
timeout: REQUEST_TIMEOUT_IN_MS,
|
||||
auth: {
|
||||
username: process.env.CISCO_USER,
|
||||
password: process.env.CISCO_PASSWORD
|
||||
}
|
||||
})
|
||||
|
||||
const getUri = (skip, page, take) =>
|
||||
const getUrl = (skip, page, take) =>
|
||||
`https://${process.env.CISCO_HOST}/data/client-table.html?columns=524287&take=${take}&skip=${skip}&page=${page}&pageSize=50&sort[0][field]=ST&sort[0][dir]=desc`
|
||||
|
||||
async function getDevices() {
|
||||
let skip = 0
|
||||
let page = 1
|
||||
const take = 50
|
||||
function getDevices() {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
const source = CancelToken.source()
|
||||
|
||||
const responsesPromises = []
|
||||
const timeout = setTimeout(() => {
|
||||
source.cancel('timeout')
|
||||
reject(new Error('A operação getDevices foi cancelada pelo tempo limite'))
|
||||
}, TIMEOUT_IN_MS)
|
||||
|
||||
try {
|
||||
let devices = []
|
||||
let url = getUri(skip, page, take)
|
||||
const firstResponse = await axios.get(url)
|
||||
const { total, data: page1devices } = firstResponse.data
|
||||
let skip = 0
|
||||
let page = 1
|
||||
const take = 50
|
||||
|
||||
devices = devices.concat(page1devices)
|
||||
const responsesPromises = []
|
||||
|
||||
do {
|
||||
try {
|
||||
const firstResponse = await axios.get(getUrl(skip, page, take), {
|
||||
cancelToken: source.token
|
||||
})
|
||||
|
||||
const { total, data: page1devices } = firstResponse.data
|
||||
|
||||
let devices = page1devices
|
||||
skip += take
|
||||
page++
|
||||
|
||||
let uri = getUri(skip, page, take)
|
||||
while (total > skip) {
|
||||
responsesPromises.push(
|
||||
axios.get(getUrl(skip, page, take), {
|
||||
cancelToken: source.token
|
||||
})
|
||||
)
|
||||
|
||||
responsesPromises.push(axios.get(uri))
|
||||
} while (total > skip)
|
||||
skip += take
|
||||
page++
|
||||
}
|
||||
|
||||
const responses = await Promise.all(responsesPromises)
|
||||
const responses = await Promise.all(responsesPromises)
|
||||
|
||||
responses.forEach(
|
||||
({ data: { data: pageDevices } }) =>
|
||||
(devices = devices.concat(pageDevices))
|
||||
)
|
||||
clearTimeout(timeout)
|
||||
|
||||
return devices
|
||||
} catch (e) {
|
||||
logError({
|
||||
tags: ['cisco', 'wifiDevices'],
|
||||
message: e.message,
|
||||
data: { ...e, config: { ...e.config, auth: '*****' } }
|
||||
})
|
||||
return []
|
||||
}
|
||||
responses.forEach(
|
||||
({ data: { data: pageDevices } }) =>
|
||||
(devices = devices.concat(pageDevices))
|
||||
)
|
||||
|
||||
resolve(devices)
|
||||
} catch (e) {
|
||||
logError({
|
||||
tags: ['cisco', 'wifiDevices'],
|
||||
message: e.message,
|
||||
data: { ...e, config: { ...e.config, auth: '*****' } }
|
||||
})
|
||||
reject(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export async function getOnlineWifiDevices() {
|
||||
|
|
Loading…
Reference in New Issue
Block a user