forked from MapComplete/MapComplete
Fix: error server properly names files, add status endpoint
This commit is contained in:
parent
8e9c03e258
commit
37c1d46dd4
1 changed files with 36 additions and 15 deletions
|
@ -1,6 +1,6 @@
|
|||
import { Handler, Server } from "./server"
|
||||
import Script from "./Script"
|
||||
import { appendFileSync, existsSync, mkdirSync, writeFileSync } from "fs"
|
||||
import { appendFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "fs"
|
||||
import { mkdir } from "node:fs"
|
||||
import ScriptUtils from "./ScriptUtils"
|
||||
|
||||
|
@ -9,6 +9,17 @@ class ServerErrorReport extends Script {
|
|||
super("A server which receives and logs error reports")
|
||||
}
|
||||
|
||||
private getFilename(logDirectory: string, d: Date): string {
|
||||
return logDirectory +
|
||||
"/" +
|
||||
d.getUTCFullYear() +
|
||||
"_" +
|
||||
(d.getUTCMonth() + 1) +
|
||||
"_" +
|
||||
d.getUTCDate() +
|
||||
".lines.json"
|
||||
}
|
||||
|
||||
async main(args: string[]): Promise<void> {
|
||||
const logDirectory = args[0] ?? "./error_logs"
|
||||
console.log("Logging to directory", logDirectory)
|
||||
|
@ -16,33 +27,43 @@ class ServerErrorReport extends Script {
|
|||
mkdirSync(logDirectory)
|
||||
console.log("Created this directory")
|
||||
}
|
||||
|
||||
let errorReport = 0
|
||||
new Server(2348, {}, [
|
||||
{
|
||||
mustMatch: "status",
|
||||
mimetype: "application/json",
|
||||
handle: async () => {
|
||||
const filename = this.getFilename(logDirectory, new Date())
|
||||
let errorsToday = 0
|
||||
if (existsSync(filename)) {
|
||||
const contents = readFileSync(filename, "utf8")
|
||||
errorsToday = contents.split("\n").length
|
||||
}
|
||||
return JSON.stringify({
|
||||
"online": true,
|
||||
"errors_today": errorsToday
|
||||
})
|
||||
}
|
||||
},
|
||||
<Handler>{
|
||||
mustMatch: "report",
|
||||
mimetype: "application/json",
|
||||
handle: async (_, queryParams, req, body) => {
|
||||
if (!body) {
|
||||
throw '{"error": "No body; use a post request"}'
|
||||
throw "{\"error\": \"No body; use a post request\"}"
|
||||
}
|
||||
console.log(body)
|
||||
const ip = <string>req.headers["x-forwarded-for"]
|
||||
const d = new Date()
|
||||
const date = d.toISOString()
|
||||
const file =
|
||||
logDirectory +
|
||||
"/" +
|
||||
d.getUTCFullYear() +
|
||||
"_" +
|
||||
d.getUTCMonth() +
|
||||
"_" +
|
||||
d.getUTCDay() +
|
||||
".lines.json"
|
||||
|
||||
try {
|
||||
body = JSON.parse(body)
|
||||
} catch (e) {
|
||||
// could not parse, we'll save it as is
|
||||
}
|
||||
const d = new Date()
|
||||
const file = this.getFilename(logDirectory, d)
|
||||
const date = d.toISOString()
|
||||
const contents =
|
||||
"\n" + JSON.stringify({ ip, index: errorReport, date, message: body })
|
||||
if (!existsSync(file)) {
|
||||
|
@ -52,8 +73,8 @@ class ServerErrorReport extends Script {
|
|||
}
|
||||
errorReport++
|
||||
return `{"status":"ok", "nr": ${errorReport}}`
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
])
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue