mqttagent

MQTT Lua Agent
git clone https://git.instinctive.eu/mqttagent.git
Log | Files | Refs | README | LICENSE

commit 377fbe3754e39e74f9ff0a3571bd9a7604aca745
parent b6d283e67970c1564c2a1f11b9e0f916592aad17
Author: Natasha Kerensikova <natgh@instinctive.eu>
Date:   Sat, 19 Apr 2025 17:57:15 +0000

SQL loggers are tracked, re-used, and closed
Diffstat:
Mcmd/mqttagent-full/main.go | 23+++++++++++++++++++----
1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/cmd/mqttagent-full/main.go b/cmd/mqttagent-full/main.go @@ -29,6 +29,7 @@ import ( ) type fullMqttAgent struct { + loggers map[string]*sqlogger } func (agent *fullMqttAgent) Setup(L *lua.LState) { @@ -36,13 +37,20 @@ func (agent *fullMqttAgent) Setup(L *lua.LState) { mt := L.NewTypeMetatable("sqlogger") L.SetGlobal("sqlogger", mt) - L.SetField(mt, "new", L.NewFunction(luaSqloggerNew)) + L.SetField(mt, "new", L.NewFunction(func(L *lua.LState) int { + return luaSqloggerNew(L, agent) + })) L.SetField(mt, "__index", L.SetFuncs(L.NewTable(), luaSqloggerMethods)) } func (agent *fullMqttAgent) Log(L *lua.LState, msg *mqttagent.MqttMessage) {} -func (agent *fullMqttAgent) Teardown(L *lua.LState) {} +func (agent *fullMqttAgent) Teardown(L *lua.LState) { + for _, logger := range agent.loggers { + logger.Close() + } + agent.loggers = nil +} func (logger *sqlogger) Received(msg *mqttagent.MqttMessage) { if logger.insertTopic == nil || logger.insertReceived == nil { @@ -137,14 +145,21 @@ func checkSqlogger(L *lua.LState, index int) *sqlogger { return nil } -func luaSqloggerNew(L *lua.LState) int { +func luaSqloggerNew(L *lua.LState, agent *fullMqttAgent) int { arg := L.CheckString(1) - if logger, err := connect(arg); err != nil { + if logger, found := agent.loggers[arg]; found { + ud := L.NewUserData() + ud.Value = logger + L.SetMetatable(ud, L.GetTypeMetatable("sqlogger")) + L.Push(ud) + return 1 + } else if logger, err := connect(arg); err != nil { log.Println(err) L.Push(lua.LNil) L.Push(lua.LString(err.Error())) return 2 } else { + agent.loggers[arg] = logger ud := L.NewUserData() ud.Value = logger L.SetMetatable(ud, L.GetTypeMetatable("sqlogger"))