|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import { request } from "../../src/common/http.js"; |
|
|
import retryer from "../../src/common/retryer.js"; |
|
|
import { logger } from "../../src/common/log.js"; |
|
|
|
|
|
export const RATE_LIMIT_SECONDS = 60 * 5; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const uptimeFetcher = (variables, token) => { |
|
|
return request( |
|
|
{ |
|
|
query: ` |
|
|
query { |
|
|
rateLimit { |
|
|
remaining |
|
|
} |
|
|
} |
|
|
`, |
|
|
variables, |
|
|
}, |
|
|
{ |
|
|
Authorization: `bearer ${token}`, |
|
|
}, |
|
|
); |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const shieldsUptimeBadge = (up) => { |
|
|
const schemaVersion = 1; |
|
|
const isError = true; |
|
|
const label = "Public Instance"; |
|
|
const message = up ? "up" : "down"; |
|
|
const color = up ? "brightgreen" : "red"; |
|
|
return { |
|
|
schemaVersion, |
|
|
label, |
|
|
message, |
|
|
color, |
|
|
isError, |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export default async (req, res) => { |
|
|
let { type } = req.query; |
|
|
type = type ? type.toLowerCase() : "boolean"; |
|
|
|
|
|
res.setHeader("Content-Type", "application/json"); |
|
|
|
|
|
try { |
|
|
let PATsValid = true; |
|
|
try { |
|
|
await retryer(uptimeFetcher, {}); |
|
|
} catch (err) { |
|
|
|
|
|
err; |
|
|
|
|
|
PATsValid = false; |
|
|
} |
|
|
|
|
|
if (PATsValid) { |
|
|
res.setHeader( |
|
|
"Cache-Control", |
|
|
`max-age=0, s-maxage=${RATE_LIMIT_SECONDS}`, |
|
|
); |
|
|
} else { |
|
|
res.setHeader("Cache-Control", "no-store"); |
|
|
} |
|
|
|
|
|
switch (type) { |
|
|
case "shields": |
|
|
res.send(shieldsUptimeBadge(PATsValid)); |
|
|
break; |
|
|
case "json": |
|
|
res.send({ up: PATsValid }); |
|
|
break; |
|
|
default: |
|
|
res.send(PATsValid); |
|
|
break; |
|
|
} |
|
|
} catch (err) { |
|
|
|
|
|
logger.error(err); |
|
|
res.setHeader("Cache-Control", "no-store"); |
|
|
res.send("Something went wrong: " + err.message); |
|
|
} |
|
|
}; |
|
|
|