mirror of
https://github.com/hrfee/jfa-go.git
synced 2024-12-23 01:20:11 +00:00
Harvey Tindall
b538922c05
Sanitization means change anything in double quotes to "CENSORED". A notice is included telling the user to check for themselves as well.
45 lines
1.3 KiB
Go
45 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"html/template"
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
"time"
|
|
|
|
"github.com/pkg/browser"
|
|
)
|
|
|
|
// Exit dumps the last 100 lines of output to a crash file in /tmp (or equivalent), and generates a prettier HTML file containing it that is opened in the browser if possible.
|
|
func Exit(err interface{}) {
|
|
tmpl, err2 := template.ParseFS(localFS, "html/crash.html", "html/header.html")
|
|
if err2 != nil {
|
|
log.Fatalf("Failed to load template: %v", err)
|
|
}
|
|
logCache := lineCache.String()
|
|
sanitized := sanitizeLog(logCache)
|
|
data := map[string]interface{}{
|
|
"Log": logCache,
|
|
"SanitizedLog": sanitized,
|
|
}
|
|
if err != nil {
|
|
data["Err"] = err
|
|
}
|
|
fpath := filepath.Join(temp, "jfa-go-crash-"+time.Now().Local().Format("2006-01-02T15:04:05"))
|
|
err2 = os.WriteFile(fpath+".txt", []byte(logCache), 0666)
|
|
if err2 != nil {
|
|
log.Fatalf("Failed to write crash dump file: %v", err2)
|
|
}
|
|
log.Printf("\n------\nA crash report has been saved to \"%s\".\n------", fpath+".txt")
|
|
f, err2 := os.OpenFile(fpath+".html", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
|
|
if err2 != nil {
|
|
log.Fatalf("Failed to open crash dump file: %v", err2)
|
|
}
|
|
defer f.Close()
|
|
err2 = tmpl.Execute(f, data)
|
|
if err2 != nil {
|
|
log.Fatalf("Failed to execute template: %v", err2)
|
|
}
|
|
browser.OpenFile(fpath + ".html")
|
|
}
|