package main import ( "encoding/json" "io/ioutil" "log" "net/http" "github.com/curusarn/resh/pkg/collect" "github.com/curusarn/resh/pkg/msg" "github.com/curusarn/resh/pkg/records" "github.com/curusarn/resh/pkg/sesshist" ) type recallHandler struct { sesshistDispatch *sesshist.Dispatch } func (h *recallHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { if Debug { log.Println("/recall START") log.Println("/recall reading body ...") } jsn, err := ioutil.ReadAll(r.Body) if err != nil { log.Println("Error reading the body", err) return } rec := records.SlimRecord{} if Debug { log.Println("/recall unmarshaling record ...") } err = json.Unmarshal(jsn, &rec) if err != nil { log.Println("Decoding error:", err) log.Println("Payload:", jsn) return } if Debug { log.Println("/recall recalling ...") } found := true cmd, err := h.sesshistDispatch.Recall(rec.SessionID, rec.RecallHistno, rec.RecallPrefix) if err != nil { log.Println("/recall - sess id:", rec.SessionID, " - histno:", rec.RecallHistno, " -> ERROR") log.Println("Recall error:", err) found = false cmd = "" } resp := collect.SingleResponse{CmdLine: cmd, Found: found} if Debug { log.Println("/recall marshaling response ...") } jsn, err = json.Marshal(&resp) if err != nil { log.Println("Encoding error:", err) log.Println("Response:", resp) return } if Debug { log.Println(string(jsn)) log.Println("/recall writing response ...") } w.Write(jsn) log.Println("/recall END - sess id:", rec.SessionID, " - histno:", rec.RecallHistno, " -> ", cmd, " (found:", found, ")") } type inspectHandler struct { sesshistDispatch *sesshist.Dispatch } func (h *inspectHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { log.Println("/inspect START") log.Println("/inspect reading body ...") jsn, err := ioutil.ReadAll(r.Body) if err != nil { log.Println("Error reading the body", err) return } mess := msg.InspectMsg{} log.Println("/inspect unmarshaling record ...") err = json.Unmarshal(jsn, &mess) if err != nil { log.Println("Decoding error:", err) log.Println("Payload:", jsn) return } log.Println("/inspect recalling ...") cmds, err := h.sesshistDispatch.Inspect(mess.SessionID, int(mess.Count)) if err != nil { log.Println("/inspect - sess id:", mess.SessionID, " - count:", mess.Count, " -> ERROR") log.Println("Inspect error:", err) return } resp := msg.MultiResponse{CmdLines: cmds} log.Println("/inspect marshaling response ...") jsn, err = json.Marshal(&resp) if err != nil { log.Println("Encoding error:", err) log.Println("Response:", resp) return } // log.Println(string(jsn)) log.Println("/inspect writing response ...") w.Write(jsn) log.Println("/inspect END - sess id:", mess.SessionID, " - count:", mess.Count) }