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/collect/main.go

91 lines
2.3 KiB

package main
import (
"fmt"
"os"
"github.com/curusarn/resh/internal/cfg"
"github.com/curusarn/resh/internal/collect"
"github.com/curusarn/resh/internal/logger"
"github.com/curusarn/resh/internal/opt"
"github.com/curusarn/resh/internal/output"
"github.com/curusarn/resh/internal/recordint"
"github.com/curusarn/resh/record"
"github.com/spf13/pflag"
"go.uber.org/zap"
"path/filepath"
"strconv"
)
// info passed during build
var version string
var commit string
var development string
func main() {
config, errCfg := cfg.New()
logger, err := logger.New("collect", config.LogLevel, development)
if err != nil {
fmt.Printf("Error while creating logger: %v", err)
}
defer logger.Sync() // flushes buffer, if any
if errCfg != nil {
logger.Error("Error while getting configuration", zap.Error(errCfg))
}
out := output.New(logger, "resh-collect ERROR")
args := opt.HandleVersionOpts(out, os.Args, version, commit)
flags := pflag.NewFlagSet("", pflag.ExitOnError)
cmdLine := flags.String("cmd-line", "", "Command line")
gitRemote := flags.String("git-remote", "", "> git remote get-url origin")
home := flags.String("home", "", "$HOME")
pwd := flags.String("pwd", "", "$PWD - present working directory")
recordID := flags.String("record-id", "", "Resh generated record ID")
sessionID := flags.String("session-id", "", "Resh generated session ID")
sessionPID := flags.Int("session-pid", -1, "$$ - Shell session PID")
shell := flags.String("shell", "", "Current shell")
shlvl := flags.Int("shlvl", -1, "$SHLVL")
timeStr := flags.String("time", "-1", "$EPOCHREALTIME")
flags.Parse(args)
time, err := strconv.ParseFloat(*timeStr, 64)
if err != nil {
out.Fatal("Error while parsing flag --time", err)
}
realPwd, err := filepath.EvalSymlinks(*pwd)
if err != nil {
out.Error("Error while evaluating symlinks in PWD", err)
realPwd = ""
}
rec := recordint.Collect{
SessionID: *sessionID,
Shlvl: *shlvl,
SessionPID: *sessionPID,
Shell: *shell,
Rec: record.V1{
SessionID: *sessionID,
RecordID: *recordID,
CmdLine: *cmdLine,
// posix
Home: *home,
Pwd: *pwd,
RealPwd: realPwd,
GitOriginRemote: *gitRemote,
Time: fmt.Sprintf("%.4f", time),
PartOne: true,
PartsNotMerged: true,
},
}
collect.SendRecord(out, rec, strconv.Itoa(config.Port), "/record")
}