peers logic

This commit is contained in:
mr
2024-08-13 14:33:26 +02:00
parent 4911e32ec2
commit 2d9b4587ac
6 changed files with 180 additions and 99 deletions

View File

@@ -1,9 +1,7 @@
package shared_workspace
import (
"encoding/json"
"slices"
"strings"
"cloud.o-forge.io/core/oc-lib/dbs"
"cloud.o-forge.io/core/oc-lib/dbs/mongo"
@@ -23,6 +21,10 @@ func New() *sharedWorkspaceMongoAccessor {
}
func (wfa *sharedWorkspaceMongoAccessor) DeleteOne(id string) (utils.DBObject, int, error) {
set, code, _ := wfa.LoadOne(id)
if code == 200 {
wfa.deleteToPeer(set.(*SharedWorkspace))
}
wfa.sharedWorkflow(&SharedWorkspace{}, id)
wfa.sharedWorkspace(&SharedWorkspace{}, id)
return wfa.GenericDeleteOne(id, wfa)
@@ -39,22 +41,14 @@ func (wfa *sharedWorkspaceMongoAccessor) sharedWorkspace(shared *SharedWorkspace
if wfa.Caller != nil || wfa.Caller.URLS == nil || wfa.Caller.URLS[utils.WORKSPACE.String()] == nil {
continue
}
methods := wfa.Caller.URLS[utils.WORKSPACE.String()]
if _, ok := methods[tools.DELETE]; !ok {
continue
}
paccess := (&peer.Peer{})
for _, p := range shared.Peers {
pp, code, _ := (&peer.Peer{}).GetAccessor(nil).LoadOne(p)
pp, code, _ := paccess.GetAccessor(nil).LoadOne(p)
if code == 200 {
resp, err := wfa.Caller.CallDelete(pp.(*peer.Peer).Url, strings.ReplaceAll(methods[tools.DELETE], ":id", v))
if err != nil {
b, err := paccess.LaunchPeerExecution(p, v, pp.(*peer.Peer).Url, utils.WORKSPACE, tools.DELETE, nil, wfa.Caller)
if err != nil && b == nil {
wfa.Logger.Error().Msg("Could not send to peer " + pp.(*peer.Peer).Url + ". Error: " + err.Error())
}
var r map[string]interface{}
json.Unmarshal(resp, &r)
if e, ok := r["error"]; ok && e != "" {
wfa.Logger.Error().Msg("Could not send to peer " + pp.(*peer.Peer).Url + ". Error" + e.(string))
}
}
}
}
@@ -66,25 +60,17 @@ func (wfa *sharedWorkspaceMongoAccessor) sharedWorkspace(shared *SharedWorkspace
if wfa.Caller != nil || wfa.Caller.URLS == nil || wfa.Caller.URLS[utils.WORKSPACE.String()] == nil {
continue
}
methods := wfa.Caller.URLS[utils.WORKSPACE.String()]
if _, ok := methods[tools.POST]; !ok {
continue
}
for _, p := range shared.Peers {
if code != 200 {
continue
}
pp, code, _ := (&peer.Peer{}).GetAccessor(nil).LoadOne(p)
paccess := (&peer.Peer{})
pp, code, _ := paccess.GetAccessor(nil).LoadOne(p)
if code == 200 {
resp, err := wfa.Caller.CallPost(pp.(*peer.Peer).Url, methods[tools.POST], workspace.Serialize())
if err != nil {
b, err := paccess.LaunchPeerExecution(p, v, pp.(*peer.Peer).Url, utils.WORKSPACE, tools.POST, workspace.Serialize(), wfa.Caller)
if err != nil && b == nil {
wfa.Logger.Error().Msg("Could not send to peer " + pp.(*peer.Peer).Url + ". Error: " + err.Error())
}
var r map[string]interface{}
json.Unmarshal(resp, &r)
if e, ok := r["error"]; ok && e != "" {
wfa.Logger.Error().Msg("Could not send to peer " + pp.(*peer.Peer).Url + ". Error" + e.(string))
}
}
}
}
@@ -113,22 +99,15 @@ func (wfa *sharedWorkspaceMongoAccessor) sharedWorkflow(shared *SharedWorkspace,
if wfa.Caller != nil || wfa.Caller.URLS == nil || wfa.Caller.URLS[utils.WORKFLOW.String()] == nil {
continue
}
methods := wfa.Caller.URLS[utils.WORKFLOW.String()]
if _, ok := methods[tools.DELETE]; !ok {
continue
}
paccess := (&peer.Peer{})
for _, p := range shared.Peers {
pp, code, _ := (&peer.Peer{}).GetAccessor(nil).LoadOne(p)
if code == 200 {
resp, err := wfa.Caller.CallDelete(pp.(*peer.Peer).Url, strings.ReplaceAll(methods[tools.DELETE], ":id", v))
if err != nil {
wfa.Logger.Error().Msg("Could not send to peer " + pp.(*peer.Peer).Url + ". Error: " + err.Error())
}
var r map[string]interface{}
json.Unmarshal(resp, &r)
if e, ok := r["error"]; ok && e != "" {
wfa.Logger.Error().Msg("Could not send to peer " + pp.(*peer.Peer).Url + ". Error" + e.(string))
}
pp, code, _ := paccess.GetAccessor(nil).LoadOne(p)
if code != 200 {
continue
}
b, err := paccess.LaunchPeerExecution(p, v, pp.(*peer.Peer).Url, utils.WORKFLOW, tools.DELETE, nil, wfa.Caller)
if err != nil && b == nil {
wfa.Logger.Error().Msg("Could not send to peer " + pp.(*peer.Peer).Url + ". Error: " + err.Error())
}
}
}
@@ -146,25 +125,17 @@ func (wfa *sharedWorkspaceMongoAccessor) sharedWorkflow(shared *SharedWorkspace,
if wfa.Caller != nil || wfa.Caller.URLS == nil || wfa.Caller.URLS[utils.WORKFLOW.String()] == nil {
continue
}
methods := wfa.Caller.URLS[utils.WORKFLOW.String()]
if _, ok := methods[tools.POST]; !ok {
continue
}
paccess := (&peer.Peer{})
for _, p := range shared.Peers {
if code != 200 {
continue
}
pp, code, _ := (&peer.Peer{}).GetAccessor(nil).LoadOne(p)
pp, code, _ := paccess.GetAccessor(nil).LoadOne(p)
if code == 200 {
resp, err := wfa.Caller.CallPost(pp.(*peer.Peer).Url, methods[tools.POST], workflow.Serialize())
if err != nil {
b, err := paccess.LaunchPeerExecution(p, shared.UUID, pp.(*peer.Peer).Url, utils.WORKFLOW, tools.POST, workflow.Serialize(), wfa.Caller)
if err != nil && b == nil {
wfa.Logger.Error().Msg("Could not send to peer " + pp.(*peer.Peer).Url + ". Error: " + err.Error())
}
var r map[string]interface{}
json.Unmarshal(resp, &r)
if e, ok := r["error"]; ok && e != "" {
wfa.Logger.Error().Msg("Could not send to peer " + pp.(*peer.Peer).Url + ". Error" + e.(string))
}
}
}
}
@@ -177,24 +148,19 @@ func (wfa *sharedWorkspaceMongoAccessor) deleteToPeer(shared *SharedWorkspace) {
if wfa.Caller != nil || wfa.Caller.URLS == nil || wfa.Caller.URLS[utils.SHARED_WORKSPACE.String()] == nil {
return
}
methods := wfa.Caller.URLS[utils.SHARED_WORKSPACE.String()]
if _, ok := methods[tools.DELETE]; !ok {
return
}
paccess := (&peer.Peer{})
for _, v := range shared.Peers {
p, code, _ := (&peer.Peer{}).GetAccessor(nil).LoadOne(v)
if (&peer.Peer{AbstractObject: utils.AbstractObject{UUID: v}}).IsMySelf() {
continue
}
p, code, _ := paccess.GetAccessor(nil).LoadOne(v)
if code != 200 {
continue
}
resp, err := wfa.Caller.CallDelete(p.(*peer.Peer).Url, strings.ReplaceAll(methods[tools.DELETE], ":id", shared.GetID()))
if err != nil {
b, err := paccess.LaunchPeerExecution(p.GetID(), shared.UUID, p.(*peer.Peer).Url, utils.SHARED_WORKSPACE, tools.DELETE, nil, wfa.Caller)
if err != nil && b == nil {
wfa.Logger.Error().Msg("Could not send to peer " + p.(*peer.Peer).Url + ". Error: " + err.Error())
}
var r map[string]interface{}
json.Unmarshal(resp, &r)
if e, ok := r["error"]; ok && e != "" {
wfa.Logger.Error().Msg("Could not send to peer " + p.(*peer.Peer).Url + ". Error" + e.(string))
}
}
}
@@ -202,24 +168,19 @@ func (wfa *sharedWorkspaceMongoAccessor) sendToPeer(shared *SharedWorkspace) {
if wfa.Caller != nil || wfa.Caller.URLS == nil || wfa.Caller.URLS[utils.SHARED_WORKSPACE.String()] == nil {
return
}
methods := wfa.Caller.URLS[utils.SHARED_WORKSPACE.String()]
if _, ok := methods[tools.POST]; !ok {
return
}
paccess := (&peer.Peer{})
for _, v := range shared.Peers {
p, code, _ := (&peer.Peer{}).GetAccessor(nil).LoadOne(v)
if (&peer.Peer{AbstractObject: utils.AbstractObject{UUID: v}}).IsMySelf() {
continue
}
p, code, _ := paccess.GetAccessor(nil).LoadOne(v)
if code != 200 {
continue
}
resp, err := wfa.Caller.CallPost(p.(*peer.Peer).Url, methods[tools.POST], shared.Serialize())
if err != nil {
b, err := paccess.LaunchPeerExecution(p.GetID(), v, p.(*peer.Peer).Url, utils.SHARED_WORKSPACE, tools.POST, shared.Serialize(), wfa.Caller)
if err != nil && b == nil {
wfa.Logger.Error().Msg("Could not send to peer " + p.(*peer.Peer).Url + ". Error: " + err.Error())
}
var r map[string]interface{}
json.Unmarshal(resp, &r)
if e, ok := r["error"]; ok && e != "" {
wfa.Logger.Error().Msg("Could not send to peer " + p.(*peer.Peer).Url + ". Error" + e.(string))
}
}
}
@@ -232,7 +193,6 @@ func (wfa *sharedWorkspaceMongoAccessor) UpdateOne(set utils.DBObject, id string
}
func (wfa *sharedWorkspaceMongoAccessor) StoreOne(data utils.DBObject) (utils.DBObject, int, error) {
wfa.deleteToPeer(data.(*SharedWorkspace))
d, code, err := wfa.GenericStoreOne(data.(*SharedWorkspace), wfa)
if code == 200 {
wfa.sharedWorkflow(d.(*SharedWorkspace), d.GetID())