From 00d65035d0f47e31e876e8bb8b81d7d35bc62c27 Mon Sep 17 00:00:00 2001 From: matst80 Date: Fri, 15 Nov 2024 09:28:58 +0100 Subject: [PATCH 1/8] update --- pool-server.go | 7 +++++++ remote-grain.go | 30 ------------------------------ remote-host.go | 4 ++-- 3 files changed, 9 insertions(+), 32 deletions(-) diff --git a/pool-server.go b/pool-server.go index e7f5db9..84c3539 100644 --- a/pool-server.go +++ b/pool-server.go @@ -57,6 +57,7 @@ func ErrorHandler(fn func(w http.ResponseWriter, r *http.Request) error) func(w func (s *PoolServer) WriteResult(w http.ResponseWriter, result *FrameWithPayload) error { w.Header().Set("Content-Type", "application/json") + w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("X-Pod-Name", s.pod_name) if result.StatusCode != 200 { log.Printf("Call error: %d\n", result.StatusCode) @@ -117,6 +118,12 @@ func (s *PoolServer) HandleSetDelivery(w http.ResponseWriter, r *http.Request) e func (s *PoolServer) Serve() *http.ServeMux { mux := http.NewServeMux() + mux.HandleFunc("OPTIONS /{id}", func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Access-Control-Allow-Origin", "*") + w.Header().Set("Access-Control-Allow-Methods", "GET, POST, DELETE") + w.Header().Set("Access-Control-Allow-Headers", "Content-Type") + w.WriteHeader(http.StatusOK) + }) mux.HandleFunc("GET /{id}", ErrorHandler(s.HandleGet)) mux.HandleFunc("GET /{id}/add/{sku}", ErrorHandler(s.HandleAddSku)) mux.HandleFunc("DELETE /{id}/{itemId}", ErrorHandler(s.HandleDeleteItem)) diff --git a/remote-grain.go b/remote-grain.go index 533c7eb..5dad844 100644 --- a/remote-grain.go +++ b/remote-grain.go @@ -3,9 +3,6 @@ package main import ( "fmt" "strings" - - "github.com/prometheus/client_golang/prometheus" - "github.com/prometheus/client_golang/prometheus/promauto" ) func (id CartId) String() string { @@ -54,33 +51,6 @@ func NewRemoteGrain(id CartId, host string) (*RemoteGrain, error) { }, nil } -var ( - remoteCartLatency = promauto.NewCounter(prometheus.CounterOpts{ - Name: "cart_remote_grain_calls_total_latency", - Help: "The total latency of remote grains", - }) - remoteCartCallsTotal = promauto.NewCounter(prometheus.CounterOpts{ - Name: "cart_remote_grain_calls_total", - Help: "The total number of calls to remote grains", - }) -) - -// var start time.Time - -// func MeasureLatency(fn func() (*CallResult, error)) (*CallResult, error) { -// start = time.Now() -// data, err := fn() -// if err != nil { -// return data, err -// } -// elapsed := time.Since(start).Milliseconds() -// go func() { -// remoteCartLatency.Add(float64(elapsed)) -// remoteCartCallsTotal.Inc() -// }() -// return data, nil -// } - func (g *RemoteGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPayload, error) { data, err := GetData(message.Write) diff --git a/remote-host.go b/remote-host.go index 2dff28c..385dfba 100644 --- a/remote-host.go +++ b/remote-host.go @@ -24,7 +24,7 @@ func (h *RemoteHost) Initialize(p *SyncedPool) { return } log.Printf("Remote %s has %d grains\n", h.Host, len(ids)) - p.mu.Lock() + local := 0 remoteNo := 0 for _, id := range ids { @@ -32,7 +32,7 @@ func (h *RemoteHost) Initialize(p *SyncedPool) { remoteNo++ } log.Printf("Removed %d local grains, added %d remote grains\n", local, remoteNo) - p.mu.Unlock() + go p.Negotiate() } From 3cf8d3c0b8a72ca955541419f5bbee09e1004411 Mon Sep 17 00:00:00 2001 From: matst80 Date: Fri, 15 Nov 2024 09:29:38 +0100 Subject: [PATCH 2/8] allow all origins --- pool-server.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pool-server.go b/pool-server.go index e85cd35..0b1e56d 100644 --- a/pool-server.go +++ b/pool-server.go @@ -61,7 +61,6 @@ func (s *PoolServer) WriteResult(w http.ResponseWriter, result *FrameWithPayload w.Header().Set("Content-Type", "application/json") w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("X-Pod-Name", s.pod_name) - w.Header().Set("Access-Control-Allow-Origin", "https://tornberg.me") if result.StatusCode != 200 { log.Printf("Call error: %d\n", result.StatusCode) if result.StatusCode >= 200 && result.StatusCode < 600 { @@ -243,7 +242,7 @@ func (s *PoolServer) HandleCheckout(w http.ResponseWriter, r *http.Request) erro buf.ReadFrom(res.Body) w.Header().Set("Content-Type", "application/json") w.Header().Set("X-Pod-Name", s.pod_name) - w.Header().Set("Access-Control-Allow-Origin", "https://tornberg.me") + w.Header().Set("Access-Control-Allow-Origin", "*") w.WriteHeader(res.StatusCode) w.Write(buf.Bytes()) From 26a3b76ec49b36ff5f23608bf11dc8b7db676b6b Mon Sep 17 00:00:00 2001 From: matst80 Date: Fri, 15 Nov 2024 09:38:40 +0100 Subject: [PATCH 3/8] update pool server --- pool-server.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pool-server.go b/pool-server.go index 0b1e56d..c9f0ad0 100644 --- a/pool-server.go +++ b/pool-server.go @@ -59,6 +59,7 @@ func ErrorHandler(fn func(w http.ResponseWriter, r *http.Request) error) func(w func (s *PoolServer) WriteResult(w http.ResponseWriter, result *FrameWithPayload) error { w.Header().Set("Content-Type", "application/json") + w.Header().Set("Cache-Control", "no-cache") w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("X-Pod-Name", s.pod_name) if result.StatusCode != 200 { @@ -242,6 +243,7 @@ func (s *PoolServer) HandleCheckout(w http.ResponseWriter, r *http.Request) erro buf.ReadFrom(res.Body) w.Header().Set("Content-Type", "application/json") w.Header().Set("X-Pod-Name", s.pod_name) + w.Header().Set("Cache-Control", "no-cache") w.Header().Set("Access-Control-Allow-Origin", "*") w.WriteHeader(res.StatusCode) From 79b66c216dfa83f85659e1353369f4d39376a106 Mon Sep 17 00:00:00 2001 From: matst80 Date: Fri, 15 Nov 2024 10:24:19 +0100 Subject: [PATCH 4/8] allow put --- pool-server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pool-server.go b/pool-server.go index c9f0ad0..4044f5e 100644 --- a/pool-server.go +++ b/pool-server.go @@ -255,7 +255,7 @@ func (s *PoolServer) Serve() *http.ServeMux { mux := http.NewServeMux() mux.HandleFunc("OPTIONS /{id}", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") - w.Header().Set("Access-Control-Allow-Methods", "GET, POST, DELETE") + w.Header().Set("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE") w.Header().Set("Access-Control-Allow-Headers", "Content-Type") w.WriteHeader(http.StatusOK) }) From de3d6a8bebf452b9736a7aad3c7ae748d6a4cd9f Mon Sep 17 00:00:00 2001 From: matst80 Date: Fri, 15 Nov 2024 10:29:38 +0100 Subject: [PATCH 5/8] update handle quantity change --- cart-grain.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cart-grain.go b/cart-grain.go index 27b2390..3079d48 100644 --- a/cart-grain.go +++ b/cart-grain.go @@ -294,11 +294,12 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa for i, item := range c.Items { if item.Id == int(msg.Id) { if item.Quantity <= int(msg.Quantity) { + c.TotalPrice -= item.Price * int64(msg.Quantity) c.Items = append(c.Items[:i], c.Items[i+1:]...) } else { item.Quantity -= int(msg.Quantity) + c.TotalPrice -= item.Price * int64(msg.Quantity) } - c.TotalPrice -= item.Price * int64(msg.Quantity) break } From 7bf3e3dccdd6af453f6ebe6211370b1f4b31f39f Mon Sep 17 00:00:00 2001 From: matst80 Date: Fri, 15 Nov 2024 10:34:00 +0100 Subject: [PATCH 6/8] better change qty --- cart-grain.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/cart-grain.go b/cart-grain.go index 3079d48..ec03340 100644 --- a/cart-grain.go +++ b/cart-grain.go @@ -289,7 +289,7 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa case ChangeQuantityType: msg, ok := message.Content.(*messages.ChangeQuantity) if !ok { - err = fmt.Errorf("expected RemoveItem") + err = fmt.Errorf("expected ChangeQuantity") } else { for i, item := range c.Items { if item.Id == int(msg.Id) { @@ -297,8 +297,9 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa c.TotalPrice -= item.Price * int64(msg.Quantity) c.Items = append(c.Items[:i], c.Items[i+1:]...) } else { - item.Quantity -= int(msg.Quantity) - c.TotalPrice -= item.Price * int64(msg.Quantity) + diff := int(msg.Quantity) - item.Quantity + item.Quantity = int(msg.Quantity) + c.TotalPrice += item.Price * int64(diff) } break From 85d2a0a572e87288c69f11721a5104e9c8af0a5e Mon Sep 17 00:00:00 2001 From: matst80 Date: Fri, 15 Nov 2024 10:34:33 +0100 Subject: [PATCH 7/8] handle remove --- cart-grain.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cart-grain.go b/cart-grain.go index ec03340..0454596 100644 --- a/cart-grain.go +++ b/cart-grain.go @@ -293,7 +293,7 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa } else { for i, item := range c.Items { if item.Id == int(msg.Id) { - if item.Quantity <= int(msg.Quantity) { + if msg.Quantity <= 0 { c.TotalPrice -= item.Price * int64(msg.Quantity) c.Items = append(c.Items[:i], c.Items[i+1:]...) } else { From dd7f599c24ddd2f7276ec7e269084c89430c2fa0 Mon Sep 17 00:00:00 2001 From: matst80 Date: Fri, 15 Nov 2024 10:34:49 +0100 Subject: [PATCH 8/8] should be item qty --- cart-grain.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cart-grain.go b/cart-grain.go index 0454596..b6c512c 100644 --- a/cart-grain.go +++ b/cart-grain.go @@ -294,7 +294,7 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa for i, item := range c.Items { if item.Id == int(msg.Id) { if msg.Quantity <= 0 { - c.TotalPrice -= item.Price * int64(msg.Quantity) + c.TotalPrice -= item.Price * int64(item.Quantity) c.Items = append(c.Items[:i], c.Items[i+1:]...) } else { diff := int(msg.Quantity) - item.Quantity