new json_data model

This commit is contained in:
Adrian Zuercher
2025-05-04 22:21:12 +02:00
parent 7d6b09cf11
commit 5203fb8543
13 changed files with 79 additions and 45 deletions

View File

@@ -13,14 +13,15 @@ func (d *DBMHandler) SaveData(c *gin.Context) {
s := time.Now()
if err := d.SaveDb(); err != nil {
r := json_dataModels.NewResponse()
r.SendError(err.Error())
r.SetError()
r.SetMessage(err.Error())
c.JSON(http.StatusBadRequest, r)
return
}
r := json_dataModels.NewResponse()
r.SendMessage(fmt.Sprintf("DBM %d datapoints saved in: %v", d.GetNumbersOfDatapoints(), time.Since(s)))
r.SetMessage(fmt.Sprintf("DBM %d datapoints saved in: %v", d.GetNumbersOfDatapoints(), time.Since(s)))
d.Log.Info("db.SaveData", fmt.Sprintf("DBM %d datapoints saved in: %v", d.GetNumbersOfDatapoints(), time.Since(s)))
c.JSON(http.StatusOK, r)
}

View File

@@ -5,23 +5,25 @@ import (
json_dataModels "github.com/tecamino/tecamino-json_data/models"
)
func (d *DBMHandler) Get(gets []json_dataModels.Get, id, id2 string) {
if gets == nil {
func (d *DBMHandler) Get(req *json_dataModels.Request, id string) {
if req == nil {
return
} else if len(req.Get) == 0 {
return
}
d.RLock()
defer d.RUnlock()
r := json_data.NewResponse()
r.Id = id2
for _, get := range gets {
resp := json_data.NewResponse()
resp.Id = req.Id
for _, get := range req.Get {
var depth uint = 1
if get.Query != nil {
depth = get.Query.Depth
}
for _, dp := range d.DB.QueryDatapoints(depth, get.Path) {
r.AddGet(json_dataModels.Get{
resp.AddGet(json_dataModels.Get{
Uuid: dp.Uuid,
Path: dp.Path,
Type: dp.Type,
@@ -31,7 +33,7 @@ func (d *DBMHandler) Get(gets []json_dataModels.Get, id, id2 string) {
}
}
if err := d.Conns.SendResponse(id, r); err != nil {
if err := d.Conns.SendResponse(id, resp); err != nil {
d.Log.Error("get.Get", err.Error())
}
}

View File

@@ -13,7 +13,8 @@ func (d *DBMHandler) Json_Data(c *gin.Context) {
payload, err := json_data.ParseRequest(c.Request.Body)
if err != nil {
r := json_data.NewResponse()
r.SendError(err.Error())
r.SetError()
r.SetMessage(err.Error())
c.JSON(http.StatusBadRequest, r)
return
}
@@ -44,14 +45,14 @@ func (d *DBMHandler) Json_Data(c *gin.Context) {
respond.Set, err = d.CreateDatapoints(payload.Set...)
if err != nil {
r := json_data.NewResponse()
r.SendError(err.Error())
r.SetError()
r.SetMessage(err.Error())
c.JSON(http.StatusBadRequest, r)
return
}
}
c.JSON(200, respond)
return
}
func (d *DBMHandler) Delete(c *gin.Context) {
@@ -59,7 +60,8 @@ func (d *DBMHandler) Delete(c *gin.Context) {
payload, err := json_data.ParseRequest(c.Request.Body)
if err != nil {
r := json_data.NewResponse()
r.SendError(err.Error())
r.SetError()
r.SetMessage(err.Error())
c.JSON(http.StatusBadRequest, r)
return
}
@@ -71,12 +73,12 @@ func (d *DBMHandler) Delete(c *gin.Context) {
response.Set, err = d.RemoveDatapoint(payload.Set...)
if err != nil {
r := json_data.NewResponse()
r.SendError(err.Error())
r.SetError()
r.SetMessage(err.Error())
c.JSON(http.StatusBadRequest, r)
return
}
}
c.JSON(200, response)
return
}

View File

@@ -4,14 +4,16 @@ import (
json_dataModels "github.com/tecamino/tecamino-json_data/models"
)
func (d *DBMHandler) Set(sets []json_dataModels.Set) {
if sets == nil {
func (d *DBMHandler) Set(req *json_dataModels.Request) {
if req == nil {
return
} else if len(req.Set) == 0 {
return
}
d.RLock()
defer d.RUnlock()
for _, set := range sets {
for _, set := range req.Set {
for _, dp := range d.DB.QueryDatapoints(1, set.Path) {
dp.UpdateValue(d.Conns, set.Value)
}

View File

@@ -4,17 +4,20 @@ import (
json_dataModels "github.com/tecamino/tecamino-json_data/models"
)
func (d *DBMHandler) Subscribe(subs []json_dataModels.Subscribe, id, id2 string) {
if subs == nil {
func (d *DBMHandler) Subscribe(req *json_dataModels.Request, id string) {
if req == nil {
return
}
if len(req.Subscribe) == 0 {
return
}
d.RLock()
defer d.RUnlock()
r := json_dataModels.NewResponse()
r.Id = id2
resp := json_dataModels.NewResponse()
resp.Id = req.Id
for _, sub := range subs {
for _, sub := range req.Subscribe {
for _, dp := range d.DB.QueryDatapoints(sub.Depth, sub.Path) {
if sub.Driver != "" {
if dp.Drivers == nil || dp.Drivers[sub.Driver] == nil {
@@ -22,7 +25,7 @@ func (d *DBMHandler) Subscribe(subs []json_dataModels.Subscribe, id, id2 string)
}
}
dp.AddSubscribtion(id, sub)
r.AddSubscription(json_dataModels.Subscribe{
resp.AddSubscription(json_dataModels.Subscription{
Uuid: dp.Uuid,
Path: dp.Path,
Value: dp.Value,
@@ -32,34 +35,37 @@ func (d *DBMHandler) Subscribe(subs []json_dataModels.Subscribe, id, id2 string)
}
}
if err := d.Conns.SendResponse(id, r); err != nil {
if err := d.Conns.SendResponse(id, resp); err != nil {
d.Log.Error("subscribe.Subscribe", err.Error())
}
}
func (d *DBMHandler) Unsubscribe(subs []json_dataModels.Subscribe, id string) {
if subs == nil {
func (d *DBMHandler) Unsubscribe(req *json_dataModels.Request, id string) {
if req == nil {
return
}
if len(req.Unsubscribe) == 0 {
return
}
d.RLock()
defer d.RUnlock()
r := json_dataModels.NewResponse()
resp := json_dataModels.NewResponse()
for _, sub := range subs {
for _, sub := range req.Unsubscribe {
for _, dp := range d.DB.QueryDatapoints(sub.Depth, sub.Path) {
if _, ok := dp.Subscriptions[id]; !ok {
continue
}
dp.RemoveSubscribtion(id)
r.AddUnsubscription(json_dataModels.Subscribe{
resp.AddUnsubscription(json_dataModels.Subscription{
Uuid: dp.Uuid,
Path: dp.Path,
})
}
}
if err := d.Conns.SendResponse(id, r); err != nil {
if err := d.Conns.SendResponse(id, resp); err != nil {
d.Log.Error("subscribe.Unsubscribe", err.Error())
}
}

View File

@@ -45,20 +45,20 @@ func (d *DBMHandler) WebSocket(c *gin.Context) {
// Sets
d.Get(request.Get, id, request.Id)
d.Get(request, id)
// Sets
d.Set(request.Set)
d.Set(request)
// Subscribe
d.Subscribe(request.Subscribe, id, request.Id)
d.Subscribe(request, id)
// Unsubscribe
d.Unsubscribe(request.Unsubscribe, id)
d.Unsubscribe(request, id)
request.Get = make([]json_dataModels.Get, 0)
request.Set = make([]json_dataModels.Set, 0)
request.Subscribe = make([]json_dataModels.Subscribe, 0)
request.Unsubscribe = make([]json_dataModels.Subscribe, 0)
request.Subscribe = make([]json_dataModels.Subscription, 0)
request.Unsubscribe = make([]json_dataModels.Subscription, 0)
request = nil
}
}