mirror of https://github.com/curusarn/resh
parent
7ae8e34ce8
commit
6e08ff08cf
@ -1,152 +0,0 @@ |
||||
package main |
||||
|
||||
import ( |
||||
"flag" |
||||
"fmt" |
||||
"log" |
||||
"os" |
||||
"os/user" |
||||
"path/filepath" |
||||
|
||||
"github.com/curusarn/resh/pkg/histanal" |
||||
"github.com/curusarn/resh/pkg/strat" |
||||
) |
||||
|
||||
// version from git set during build
|
||||
var version string |
||||
|
||||
// commit from git set during build
|
||||
var commit string |
||||
|
||||
func main() { |
||||
const maxCandidates = 50 |
||||
|
||||
usr, _ := user.Current() |
||||
dir := usr.HomeDir |
||||
historyPath := filepath.Join(dir, ".resh_history.json") |
||||
historyPathBatchMode := filepath.Join(dir, "resh_history.json") |
||||
sanitizedHistoryPath := filepath.Join(dir, "resh_history_sanitized.json") |
||||
// tmpPath := "/tmp/resh-evaluate-tmp.json"
|
||||
|
||||
showVersion := flag.Bool("version", false, "Show version and exit") |
||||
showRevision := flag.Bool("revision", false, "Show git revision and exit") |
||||
input := flag.String("input", "", |
||||
"Input file (default: "+historyPath+" OR "+sanitizedHistoryPath+ |
||||
" depending on --sanitized-input option)") |
||||
// outputDir := flag.String("output", "/tmp/resh-evaluate", "Output directory")
|
||||
sanitizedInput := flag.Bool("sanitized-input", false, |
||||
"Handle input as sanitized (also changes default value for input argument)") |
||||
plottingScript := flag.String("plotting-script", "resh-evaluate-plot.py", "Script to use for plotting") |
||||
inputDataRoot := flag.String("input-data-root", "", |
||||
"Input data root, enables batch mode, looks for files matching --input option") |
||||
slow := flag.Bool("slow", false, |
||||
"Enables strategies that takes a long time (e.g. markov chain strategies).") |
||||
skipFailedCmds := flag.Bool("skip-failed-cmds", false, |
||||
"Skips records with non-zero exit status.") |
||||
debugRecords := flag.Float64("debug", 0, "Debug records - percentage of records that should be debugged.") |
||||
|
||||
flag.Parse() |
||||
|
||||
// handle show{Version,Revision} options
|
||||
if *showVersion == true { |
||||
fmt.Println(version) |
||||
os.Exit(0) |
||||
} |
||||
if *showRevision == true { |
||||
fmt.Println(commit) |
||||
os.Exit(0) |
||||
} |
||||
|
||||
// handle batch mode
|
||||
batchMode := false |
||||
if *inputDataRoot != "" { |
||||
batchMode = true |
||||
} |
||||
// set default input
|
||||
if *input == "" { |
||||
if *sanitizedInput { |
||||
*input = sanitizedHistoryPath |
||||
} else if batchMode { |
||||
*input = historyPathBatchMode |
||||
} else { |
||||
*input = historyPath |
||||
} |
||||
} |
||||
|
||||
var evaluator histanal.HistEval |
||||
if batchMode { |
||||
evaluator = histanal.NewHistEvalBatchMode(*input, *inputDataRoot, maxCandidates, *skipFailedCmds, *debugRecords, *sanitizedInput) |
||||
} else { |
||||
evaluator = histanal.NewHistEval(*input, maxCandidates, *skipFailedCmds, *debugRecords, *sanitizedInput) |
||||
} |
||||
|
||||
var simpleStrategies []strat.ISimpleStrategy |
||||
var strategies []strat.IStrategy |
||||
|
||||
// dummy := strategyDummy{}
|
||||
// simpleStrategies = append(simpleStrategies, &dummy)
|
||||
|
||||
simpleStrategies = append(simpleStrategies, &strat.Recent{}) |
||||
|
||||
// frequent := strategyFrequent{}
|
||||
// frequent.init()
|
||||
// simpleStrategies = append(simpleStrategies, &frequent)
|
||||
|
||||
// random := strategyRandom{candidatesSize: maxCandidates}
|
||||
// random.init()
|
||||
// simpleStrategies = append(simpleStrategies, &random)
|
||||
|
||||
directory := strat.DirectorySensitive{} |
||||
directory.Init() |
||||
simpleStrategies = append(simpleStrategies, &directory) |
||||
|
||||
// dynamicDistG := strat.DynamicRecordDistance{
|
||||
// MaxDepth: 3000,
|
||||
// DistParams: records.DistParams{Pwd: 10, RealPwd: 10, SessionID: 1, Time: 1, Git: 10},
|
||||
// Label: "10*pwd,10*realpwd,session,time,10*git",
|
||||
// }
|
||||
// dynamicDistG.Init()
|
||||
// strategies = append(strategies, &dynamicDistG)
|
||||
|
||||
// NOTE: this is the decent one !!!
|
||||
// distanceStaticBest := strat.RecordDistance{
|
||||
// MaxDepth: 3000,
|
||||
// DistParams: records.DistParams{Pwd: 10, RealPwd: 10, SessionID: 1, Time: 1},
|
||||
// Label: "10*pwd,10*realpwd,session,time",
|
||||
// }
|
||||
// strategies = append(strategies, &distanceStaticBest)
|
||||
|
||||
recentBash := strat.RecentBash{} |
||||
recentBash.Init() |
||||
strategies = append(strategies, &recentBash) |
||||
|
||||
if *slow { |
||||
|
||||
markovCmd := strat.MarkovChainCmd{Order: 1} |
||||
markovCmd.Init() |
||||
|
||||
markovCmd2 := strat.MarkovChainCmd{Order: 2} |
||||
markovCmd2.Init() |
||||
|
||||
markov := strat.MarkovChain{Order: 1} |
||||
markov.Init() |
||||
|
||||
markov2 := strat.MarkovChain{Order: 2} |
||||
markov2.Init() |
||||
|
||||
simpleStrategies = append(simpleStrategies, &markovCmd2, &markovCmd, &markov2, &markov) |
||||
} |
||||
|
||||
for _, strategy := range simpleStrategies { |
||||
strategies = append(strategies, strat.NewSimpleStrategyWrapper(strategy)) |
||||
} |
||||
|
||||
for _, strat := range strategies { |
||||
err := evaluator.Evaluate(strat) |
||||
if err != nil { |
||||
log.Println("Evaluator evaluate() error:", err) |
||||
} |
||||
} |
||||
|
||||
evaluator.CalculateStatsAndPlot(*plottingScript) |
||||
} |
||||
@ -1,7 +0,0 @@ |
||||
package main |
||||
|
||||
import "fmt" |
||||
|
||||
func main() { |
||||
fmt.Println("Hell world") |
||||
} |
||||
@ -1,87 +0,0 @@ |
||||
package main |
||||
|
||||
import ( |
||||
"bytes" |
||||
"encoding/json" |
||||
"flag" |
||||
"fmt" |
||||
"io/ioutil" |
||||
"log" |
||||
"net/http" |
||||
"time" |
||||
|
||||
"github.com/BurntSushi/toml" |
||||
"github.com/curusarn/resh/pkg/cfg" |
||||
"github.com/curusarn/resh/pkg/msg" |
||||
|
||||
"os/user" |
||||
"path/filepath" |
||||
"strconv" |
||||
) |
||||
|
||||
// version from git set during build
|
||||
var version string |
||||
|
||||
// commit from git set during build
|
||||
var commit string |
||||
|
||||
func main() { |
||||
usr, _ := user.Current() |
||||
dir := usr.HomeDir |
||||
configPath := filepath.Join(dir, "/.config/resh.toml") |
||||
|
||||
var config cfg.Config |
||||
if _, err := toml.DecodeFile(configPath, &config); err != nil { |
||||
log.Fatal("Error reading config:", err) |
||||
} |
||||
|
||||
sessionID := flag.String("sessionID", "", "resh generated session id") |
||||
count := flag.Uint("count", 10, "Number of cmdLines to return") |
||||
flag.Parse() |
||||
|
||||
if *sessionID == "" { |
||||
fmt.Println("Error: you need to specify sessionId") |
||||
} |
||||
|
||||
m := msg.InspectMsg{SessionID: *sessionID, Count: *count} |
||||
resp := SendInspectMsg(m, strconv.Itoa(config.Port)) |
||||
for _, cmdLine := range resp.CmdLines { |
||||
fmt.Println("`" + cmdLine + "'") |
||||
} |
||||
} |
||||
|
||||
// SendInspectMsg to daemon
|
||||
func SendInspectMsg(m msg.InspectMsg, port string) msg.MultiResponse { |
||||
recJSON, err := json.Marshal(m) |
||||
if err != nil { |
||||
log.Fatal("send err 1", err) |
||||
} |
||||
|
||||
req, err := http.NewRequest("POST", "http://localhost:"+port+"/inspect", |
||||
bytes.NewBuffer(recJSON)) |
||||
if err != nil { |
||||
log.Fatal("send err 2", err) |
||||
} |
||||
req.Header.Set("Content-Type", "application/json") |
||||
|
||||
client := http.Client{ |
||||
Timeout: 3 * time.Second, |
||||
} |
||||
resp, err := client.Do(req) |
||||
if err != nil { |
||||
log.Fatal("resh-daemon is not running - try restarting this terminal") |
||||
} |
||||
|
||||
defer resp.Body.Close() |
||||
body, err := ioutil.ReadAll(resp.Body) |
||||
if err != nil { |
||||
log.Fatal("read response error") |
||||
} |
||||
// log.Println(string(body))
|
||||
response := msg.MultiResponse{} |
||||
err = json.Unmarshal(body, &response) |
||||
if err != nil { |
||||
log.Fatal("unmarshal resp error: ", err) |
||||
} |
||||
return response |
||||
} |
||||
Loading…
Reference in new issue