Reorganize a couple of the legacy helpers [npm node jenkinsplugin dynamic] (#3163)

This commit is contained in:
Paul Melnikow
2019-03-05 21:43:33 -05:00
committed by Caleb Cartwright
parent a801450dd6
commit e159d90516
14 changed files with 25 additions and 23 deletions

View File

@@ -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

View File

@@ -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,
}