add debug information to lua_handler and route

This commit is contained in:
2025-08-02 10:04:00 +03:00
parent 2f071c25b2
commit 27446adf3f
2 changed files with 9 additions and 0 deletions

View File

@@ -21,9 +21,11 @@ func (gs *GatewayServer) Handle(w http.ResponseWriter, r *http.Request) {
if sessionUUID == "" { if sessionUUID == "" {
sessionUUID = uuid.New().String() sessionUUID = uuid.New().String()
} }
gs.x.SLog.Debug("new request", slog.String("session-uuid", sessionUUID), slog.Group("connection", slog.String("ip", r.RemoteAddr)))
w.Header().Set("X-Session-UUID", sessionUUID) w.Header().Set("X-Session-UUID", sessionUUID)
if !gs.sm.Add(sessionUUID) { if !gs.sm.Add(sessionUUID) {
gs.x.SLog.Debug("session is busy", slog.String("session-uuid", sessionUUID))
rpc.WriteError(w, &rpc.RPCResponse{ rpc.WriteError(w, &rpc.RPCResponse{
Error: map[string]any{ Error: map[string]any{
"code": rpc.ErrSessionIsBusy, "code": rpc.ErrSessionIsBusy,
@@ -36,6 +38,7 @@ func (gs *GatewayServer) Handle(w http.ResponseWriter, r *http.Request) {
body, err := io.ReadAll(r.Body) body, err := io.ReadAll(r.Body)
if err != nil { if err != nil {
gs.x.SLog.Debug("failed to read body", slog.String("err", err.Error()))
w.WriteHeader(http.StatusBadRequest) w.WriteHeader(http.StatusBadRequest)
rpc.WriteError(w, &rpc.RPCResponse{ rpc.WriteError(w, &rpc.RPCResponse{
JSONRPC: rpc.JSONRPCVersion, JSONRPC: rpc.JSONRPCVersion,
@@ -55,6 +58,7 @@ func (gs *GatewayServer) Handle(w http.ResponseWriter, r *http.Request) {
var single rpc.RPCRequest var single rpc.RPCRequest
if batch == nil { if batch == nil {
if err := json.Unmarshal(body, &single); err != nil { if err := json.Unmarshal(body, &single); err != nil {
gs.x.SLog.Debug("failed to parse json", slog.String("err", err.Error()))
w.WriteHeader(http.StatusBadRequest) w.WriteHeader(http.StatusBadRequest)
rpc.WriteError(w, &rpc.RPCResponse{ rpc.WriteError(w, &rpc.RPCResponse{
JSONRPC: rpc.JSONRPCVersion, JSONRPC: rpc.JSONRPCVersion,

View File

@@ -38,6 +38,7 @@ func addInitiatorHeaders(sid string, req *http.Request, headers http.Header) {
// I will be only glad. // I will be only glad.
// TODO: make this huge function more harmonious by dividing responsibilities // TODO: make this huge function more harmonious by dividing responsibilities
func (h *HandlerV1) handleLUA(sid string, r *http.Request, req *rpc.RPCRequest, path string) *rpc.RPCResponse { func (h *HandlerV1) handleLUA(sid string, r *http.Request, req *rpc.RPCRequest, path string) *rpc.RPCResponse {
h.x.SLog.Debug("handling LUA", slog.String("session-id", sid))
L := lua.NewState() L := lua.NewState()
defer L.Close() defer L.Close()
@@ -243,6 +244,7 @@ func (h *HandlerV1) handleLUA(sid string, r *http.Request, req *rpc.RPCRequest,
L.PreloadModule("log", loadLogMod) L.PreloadModule("log", loadLogMod)
L.PreloadModule("net", loadNetMod) L.PreloadModule("net", loadNetMod)
h.x.SLog.Debug("preparing environment", slog.String("session-id", sid))
prep := filepath.Join(*h.x.Config.Conf.Node.ComDir, "_prepare.lua") prep := filepath.Join(*h.x.Config.Conf.Node.ComDir, "_prepare.lua")
if _, err := os.Stat(prep); err == nil { if _, err := os.Stat(prep); err == nil {
if err := L.DoFile(prep); err != nil { if err := L.DoFile(prep); err != nil {
@@ -250,6 +252,7 @@ func (h *HandlerV1) handleLUA(sid string, r *http.Request, req *rpc.RPCRequest,
return rpc.NewError(rpc.ErrInternalError, rpc.ErrInternalErrorS, nil, req.ID) return rpc.NewError(rpc.ErrInternalError, rpc.ErrInternalErrorS, nil, req.ID)
} }
} }
h.x.SLog.Debug("executing script", slog.String("script", path), slog.String("session-id", sid))
if err := L.DoFile(path); err != nil { if err := L.DoFile(path); err != nil {
h.x.SLog.Error("script error", slog.String("script", path), slog.String("error", err.Error())) h.x.SLog.Error("script error", slog.String("script", path), slog.String("error", err.Error()))
return rpc.NewError(rpc.ErrInternalError, rpc.ErrInternalErrorS, nil, req.ID) return rpc.NewError(rpc.ErrInternalError, rpc.ErrInternalErrorS, nil, req.ID)
@@ -279,6 +282,7 @@ func (h *HandlerV1) handleLUA(sid string, r *http.Request, req *rpc.RPCRequest,
tag := sessionTbl.RawGetString("__gosally_internal") tag := sessionTbl.RawGetString("__gosally_internal")
if tag.Type() != lua.LTString || tag.String() != fmt.Sprint(seed) { if tag.Type() != lua.LTString || tag.String() != fmt.Sprint(seed) {
h.x.SLog.Debug("stock session module is not imported: wrong seed", slog.String("script", path), slog.String("session-id", sid))
return rpc.NewResponse(map[string]any{ return rpc.NewResponse(map[string]any{
"responsible-node": h.cs.UUID32, "responsible-node": h.cs.UUID32,
}, req.ID) }, req.ID)
@@ -292,6 +296,7 @@ func (h *HandlerV1) handleLUA(sid string, r *http.Request, req *rpc.RPCRequest,
} }
if errVal := outTbl.RawGetString("error"); errVal != lua.LNil { if errVal := outTbl.RawGetString("error"); errVal != lua.LNil {
h.x.SLog.Debug("catch error table", slog.String("script", path), slog.String("session-id", sid))
if errTbl, ok := errVal.(*lua.LTable); ok { if errTbl, ok := errVal.(*lua.LTable); ok {
code := rpc.ErrInternalError code := rpc.ErrInternalError
message := rpc.ErrInternalErrorS message := rpc.ErrInternalErrorS