Rich Enhanced Shell History - Contextual shell history for zsh and bash
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
resh/cmd/daemon/main.go

86 lines
2.0 KiB

package main
import (
//"flag"
"io/ioutil"
"log"
"os"
"os/user"
"path/filepath"
"strconv"
"github.com/BurntSushi/toml"
"github.com/curusarn/resh/pkg/cfg"
)
// version from git set during build
var version string
// commit from git set during build
var commit string
// Debug switch
var Debug = false
func main() {
log.Println("Daemon starting... \n" +
"version: " + version +
" commit: " + commit)
usr, _ := user.Current()
dir := usr.HomeDir
pidfilePath := filepath.Join(dir, ".resh/resh.pid")
configPath := filepath.Join(dir, ".config/resh.toml")
reshHistoryPath := filepath.Join(dir, ".resh_history.json")
bashHistoryPath := filepath.Join(dir, ".bash_history")
zshHistoryPath := filepath.Join(dir, ".zsh_history")
logPath := filepath.Join(dir, ".resh/daemon.log")
f, err := os.OpenFile(logPath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)
if err != nil {
log.Fatal("Error opening file:", err)
}
defer f.Close()
log.SetOutput(f)
log.SetPrefix(strconv.Itoa(os.Getpid()) + " | ")
var config cfg.Config
if _, err := toml.DecodeFile(configPath, &config); err != nil {
log.Println("Error reading config", err)
return
}
if config.Debug {
Debug = true
log.SetFlags(log.LstdFlags | log.Lmicroseconds)
}
res, err := isDaemonRunning(config.Port)
if err != nil {
log.Println("Error while checking if the daemon is runnnig", err)
}
if res {
log.Println("Daemon is already running - exiting!")
return
}
_, err = os.Stat(pidfilePath)
if err == nil {
log.Println("Pidfile exists")
// kill daemon
err = killDaemon(pidfilePath)
if err != nil {
log.Println("Error while killing daemon", err)
}
}
err = ioutil.WriteFile(pidfilePath, []byte(strconv.Itoa(os.Getpid())), 0644)
if err != nil {
log.Fatal("Could not create pidfile", err)
}
runServer(config, reshHistoryPath, bashHistoryPath, zshHistoryPath)
log.Println("main: Removing pidfile ...")
err = os.Remove(pidfilePath)
if err != nil {
log.Println("Could not delete pidfile", err)
}
log.Println("main: Shutdown - bye")
}