storj/cmd/captplanet/main.go
Egon Elbre 2dbada73ab
Separate storj.io packages in imports (#481)
Format with goimports -w -local storj.io
Add flag to golang lint
Remove commented out imports as they mess with goimports
2018-10-16 14:43:44 +03:00

74 lines
1.4 KiB
Go

// Copyright (C) 2018 Storj Labs, Inc.
// See LICENSE for copying information.
package main
import (
"fmt"
"io/ioutil"
"os"
"os/signal"
"path/filepath"
"runtime"
"syscall"
"time"
"github.com/spf13/cobra"
monkit "gopkg.in/spacemonkeygo/monkit.v2"
"storj.io/storj/internal/memory"
"storj.io/storj/pkg/process"
)
var (
mon = monkit.Package()
rootCmd = &cobra.Command{
Use: "captplanet",
Short: "Captain Planet! With our powers combined!",
}
defaultConfDir = "$HOME/.storj/capt"
)
func main() {
go dumpHandler()
// process.Exec will load this for this command.
runCmd.Flags().String("config",
filepath.Join(defaultConfDir, "config.yaml"), "path to configuration")
setupCmd.Flags().String("config",
filepath.Join(defaultConfDir, "setup.yaml"), "path to configuration")
process.Exec(rootCmd)
}
// dumpHandler listens for Ctrl+\ on Unix
func dumpHandler() {
if runtime.GOOS == "windows" {
// unsupported on Windows
return
}
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGQUIT)
for range sigs {
dumpGoroutines()
}
}
func dumpGoroutines() {
buf := make([]byte, memory.MB)
n := runtime.Stack(buf, true)
p := time.Now().Format("dump-2006-01-02T15-04-05.999999999.log")
if abs, err := filepath.Abs(p); err == nil {
p = abs
}
fmt.Fprintf(os.Stderr, "Writing stack traces to \"%v\"\n", p)
err := ioutil.WriteFile(p, buf[:n], 0644)
if err != nil {
fmt.Fprintln(os.Stderr, err.Error())
}
}