aboutsummaryrefslogtreecommitdiff
path: root/tools/src/crashhandler
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2020-01-03 18:04:08 +0200
committerAqua-sama <aqua@iserlohn-fortress.net>2020-01-03 20:24:29 +0200
commit23a7f3baa33265519840609dc54e950615ec39b1 (patch)
treeff2737f76b63a2acf5f8a9fffd5c15e3eb4c46c8 /tools/src/crashhandler
parentWebProfile refactoring (diff)
downloadsmolbote-23a7f3baa33265519840609dc54e950615ec39b1.tar.xz
Merge some QoL improvements from staging branch
- Build executable in top-level buildroot - Use meson sourceset - Pull in poi-crash and poi-update from staging - Remove extraneous scripts in tools/ - Pull in configure scripts in scripts/
Diffstat (limited to 'tools/src/crashhandler')
-rw-r--r--tools/src/crashhandler/defaults.go.in4
-rw-r--r--tools/src/crashhandler/main.go79
2 files changed, 83 insertions, 0 deletions
diff --git a/tools/src/crashhandler/defaults.go.in b/tools/src/crashhandler/defaults.go.in
new file mode 100644
index 0000000..2ea5827
--- /dev/null
+++ b/tools/src/crashhandler/defaults.go.in
@@ -0,0 +1,4 @@
+package main
+
+var dumpPath = "@PATH_CRASHDUMP@"
+
diff --git a/tools/src/crashhandler/main.go b/tools/src/crashhandler/main.go
new file mode 100644
index 0000000..00ce0cd
--- /dev/null
+++ b/tools/src/crashhandler/main.go
@@ -0,0 +1,79 @@
+package main
+
+import (
+ "flag"
+ "fmt"
+ "io/ioutil"
+ "os"
+ "strings"
+)
+
+type CrashDump struct {
+ Name string
+ DumpPath string
+ MetadataPath string
+}
+
+func expandHomeDir(path string) (string, error) {
+ home, err := os.UserHomeDir()
+ if err != nil {
+ return path, err
+ }
+
+ return strings.Replace(path, "~/", home, -1), nil
+}
+
+func dumps(path string) ([]CrashDump, error) {
+ files, err := ioutil.ReadDir(path)
+ if err != nil {
+ return nil, err
+ }
+
+ var crashes []CrashDump
+
+ for i, file := range files {
+ if strings.HasSuffix(file.Name(), ".dmp") {
+ if i+1 < len(files) && files[i+1].Name() == file.Name()+".txt" {
+ crashes = append(crashes, CrashDump{Name: strings.TrimSuffix(file.Name(), ".dmp"),
+ DumpPath: file.Name(), MetadataPath: files[i+1].Name()})
+ } else {
+ crashes = append(crashes, CrashDump{Name: strings.TrimSuffix(file.Name(), ".dmp"), DumpPath: file.Name()})
+ }
+ }
+ }
+
+ return crashes, nil
+}
+
+func main() {
+ helpFlag := flag.Bool("help", false, "Show help information.")
+ flag.StringVar(&dumpPath, "crashd", dumpPath, "Crash dump path")
+
+ // create crash report flags
+ crashedFlag := flag.String("c", "", "Create crash report at specified location and write any specified data into it")
+
+ flag.Parse()
+ dumpPath, _ = expandHomeDir(dumpPath)
+
+ if *helpFlag {
+ flag.PrintDefaults()
+ return
+ }
+
+ if *crashedFlag != "" {
+ fmt.Println("Creating crash dump report", *crashedFlag)
+ contents := []byte("Additional information: " + strings.Join(flag.Args(), ""))
+ ioutil.WriteFile(*crashedFlag+".txt", contents, 0644)
+ return
+ }
+
+ fmt.Printf("[%s]\n", dumpPath)
+ c, err := dumps(dumpPath)
+ if err != nil {
+ panic(err)
+ }
+ for _, d := range c {
+ fmt.Printf("\t- %s\n", d.Name)
+ }
+
+}