Reorganize a couple of the legacy helpers [npm node jenkinsplugin dynamic] (#3163)
This commit is contained in:
committed by
Caleb Cartwright
parent
a801450dd6
commit
e159d90516
@@ -1,18 +1,9 @@
|
||||
'use strict'
|
||||
|
||||
const coalesce = require('../core/base-service/coalesce')
|
||||
const toArray = require('../core/base-service/to-array')
|
||||
const { makeLogo } = require('./logos')
|
||||
|
||||
function toArray(val) {
|
||||
if (val === undefined) {
|
||||
return []
|
||||
} else if (Object(val) instanceof Array) {
|
||||
return val
|
||||
} else {
|
||||
return [val]
|
||||
}
|
||||
}
|
||||
|
||||
function makeLabel(defaultLabel, overrides) {
|
||||
return `${
|
||||
overrides.label === undefined
|
||||
|
||||
@@ -1,101 +0,0 @@
|
||||
'use strict'
|
||||
|
||||
const { Inaccessible, InvalidResponse } = require('../core/base-service/errors')
|
||||
|
||||
// Map from URL to { timestamp: last fetch time, data: data }.
|
||||
let regularUpdateCache = Object.create(null)
|
||||
|
||||
// url: a string, scraper: a function that takes string data at that URL.
|
||||
// interval: number in milliseconds.
|
||||
// cb: a callback function that takes an error and data returned by the scraper.
|
||||
//
|
||||
// To use this from a service:
|
||||
//
|
||||
// const { promisify } = require('util')
|
||||
// const { regularUpdate } = require('../../lib/regular-update')
|
||||
//
|
||||
// function getThing() {
|
||||
// return promisify(regularUpdate)({
|
||||
// url: ...,
|
||||
// ...
|
||||
// })
|
||||
// }
|
||||
//
|
||||
// in handle():
|
||||
//
|
||||
// const thing = await getThing()
|
||||
|
||||
function regularUpdate(
|
||||
{
|
||||
url,
|
||||
intervalMillis,
|
||||
json = true,
|
||||
scraper = buffer => buffer,
|
||||
options = {},
|
||||
request = require('request'),
|
||||
},
|
||||
cb
|
||||
) {
|
||||
const timestamp = Date.now()
|
||||
const cached = regularUpdateCache[url]
|
||||
if (cached != null && timestamp - cached.timestamp < intervalMillis) {
|
||||
cb(null, cached.data)
|
||||
return
|
||||
}
|
||||
request(url, options, (err, res, buffer) => {
|
||||
if (err != null) {
|
||||
cb(
|
||||
new Inaccessible({
|
||||
prettyMessage: 'intermediate resource inaccessible',
|
||||
underlyingError: err,
|
||||
})
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
if (res.statusCode < 200 || res.statusCode >= 300) {
|
||||
cb(
|
||||
new InvalidResponse({
|
||||
prettyMessage: 'intermediate resource inaccessible',
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
let reqData
|
||||
if (json) {
|
||||
try {
|
||||
reqData = JSON.parse(buffer)
|
||||
} catch (e) {
|
||||
cb(
|
||||
new InvalidResponse({
|
||||
prettyMessage: 'unparseable intermediate json response',
|
||||
underlyingError: e,
|
||||
})
|
||||
)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
reqData = buffer
|
||||
}
|
||||
|
||||
let data
|
||||
try {
|
||||
data = scraper(reqData)
|
||||
} catch (e) {
|
||||
cb(e)
|
||||
return
|
||||
}
|
||||
|
||||
regularUpdateCache[url] = { timestamp, data }
|
||||
cb(null, data)
|
||||
})
|
||||
}
|
||||
|
||||
function clearRegularUpdateCache() {
|
||||
regularUpdateCache = Object.create(null)
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
regularUpdate,
|
||||
clearRegularUpdateCache,
|
||||
}
|
||||
Reference in New Issue
Block a user