|
87 | 87 | return offset*year |
88 | 88 | } |
89 | 89 |
|
| 90 | + function timeout(duration) { |
| 91 | + // https://stackoverflow.com/a/49857905 |
| 92 | + return new Promise((_, reject) => |
| 93 | + setTimeout(() => reject(new Error(`timeout after ${duration} msec`)), duration)) |
| 94 | + } |
| 95 | + |
| 96 | + |
90 | 97 | function activate(slugitem) { |
91 | 98 |
|
92 | 99 | console.log('activate', slugitem) |
|
103 | 110 | // return `${assets}/plugins/datalog/${slug}/${utc(new Date(clock),chunk)}.log` |
104 | 111 | // } |
105 | 112 |
|
106 | | - function timeout(duration) { |
107 | | - // https://stackoverflow.com/a/49857905 |
108 | | - return new Promise((_, reject) => |
109 | | - setTimeout(() => reject(new Error(`timeout after ${duration} msec`)), duration)) |
110 | | - } |
111 | | - |
112 | 113 | function sample() { |
113 | 114 |
|
114 | 115 | let clock = Date.now() |
|
241 | 242 | }) |
242 | 243 |
|
243 | 244 | app.get('/plugin/datalog/curl', cors, (req, res) => { |
244 | | - console.log(req.query) |
245 | | - let curl = `curl -m 3 -s '${req.query.url}'` |
| 245 | + let url = /^http/.test(req.query.url) ? req.query.url : `http://${req.query.url}` |
246 | 246 | let t0 = Date.now() |
247 | | - exec(curl, (err, stdout, stderr) => { |
248 | | - let sample = { |
249 | | - exit: err ? err.code : 0, |
250 | | - time: Date.now() - t0, |
251 | | - stdout: stdout.length, |
252 | | - stderr: stderr.length |
253 | | - } |
| 247 | + |
| 248 | + function send(sample) { |
| 249 | + sample.time = Date.now() - t0 |
254 | 250 | res.send(JSON.stringify(sample)) |
| 251 | + } |
| 252 | + |
| 253 | + Promise.race([ |
| 254 | + fetch(url,{redirect:'manual'}), |
| 255 | + timeout(3000) |
| 256 | + ]) |
| 257 | + .then(response => { |
| 258 | + if (!response.ok && !response.status==302) { |
| 259 | + return send({exit: 1, error: response.statusText, code: response.status}) |
| 260 | + } |
| 261 | + return response.text() |
| 262 | + }) |
| 263 | + .then(data => { |
| 264 | + return send({exit: 0, stdout:data.length}) |
| 265 | + }) |
| 266 | + .catch(error => { |
| 267 | + return send({exit: 2, error: error.message}) |
255 | 268 | }) |
256 | 269 | }) |
257 | 270 |
|
|
0 commit comments