From 95b055a9f40787d15c42927041c9e65c49b05ea5 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sun, 14 Jul 2024 23:55:53 +0300 Subject: make it all context.Context aware --- cmd/gosd/main.go | 8 ++++++-- internal/client/tui/submit.go | 3 ++- internal/easyhttp/easyhttp.go | 22 +++++++++++----------- internal/server/handler/handler.go | 13 +++++++------ 4 files changed, 26 insertions(+), 20 deletions(-) diff --git a/cmd/gosd/main.go b/cmd/gosd/main.go index e6080e0..6d11756 100644 --- a/cmd/gosd/main.go +++ b/cmd/gosd/main.go @@ -1,6 +1,7 @@ package main import ( + "context" "flag" "fmt" "log" @@ -24,13 +25,16 @@ func main() { hand = handler.New(conf) ) + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + serv.Handle("health", func(w http.ResponseWriter, r *http.Request) error { fmt.Fprint(w, serv.Status.String()) return nil }) serv.Handle("submit", func(w http.ResponseWriter, r *http.Request) error { - return hand.Submit(w, r) + return hand.Submit(ctx, w, r) }) serv.Handle("list", func(w http.ResponseWriter, r *http.Request) error { @@ -42,7 +46,7 @@ func main() { }) serv.Handle("merge", func(w http.ResponseWriter, r *http.Request) error { - return hand.Merge(w, r) + return hand.Merge(ctx, w, r) }) log.Println("Server is starting on", conf.ListenAddr) diff --git a/internal/client/tui/submit.go b/internal/client/tui/submit.go index 1176e3c..5e489cb 100644 --- a/internal/client/tui/submit.go +++ b/internal/client/tui/submit.go @@ -1,6 +1,7 @@ package tui import ( + "context" "fmt" "codeberg.org/snonux/gos/internal/config/client" @@ -23,7 +24,7 @@ func submitMessage(conf client.ClientConfig, filePath string, callback func() er servers, err := conf.Servers() if err == nil { var entry types.Entry - err = easyhttp.PostData("/submit", conf.APIKey, &entry, servers...) + err = easyhttp.PostData(context.Background(), "/submit", conf.APIKey, &entry, servers...) } return func() tea.Msg { diff --git a/internal/easyhttp/easyhttp.go b/internal/easyhttp/easyhttp.go index a28a77e..32a3069 100644 --- a/internal/easyhttp/easyhttp.go +++ b/internal/easyhttp/easyhttp.go @@ -2,6 +2,7 @@ package easyhttp import ( "bytes" + "context" "encoding/json" "fmt" "io" @@ -9,13 +10,13 @@ import ( "sync" ) -func Get(uri, apiKey string) ([]byte, error) { +func Get(ctx context.Context, uri, apiKey string) ([]byte, error) { var ( client = &http.Client{} bytes []byte ) - req, err := http.NewRequest("GET", uri, nil) + req, err := http.NewRequestWithContext(ctx, "GET", uri, nil) if err != nil { return bytes, fmt.Errorf("%s: %w", uri, err) } @@ -37,8 +38,8 @@ func Get(uri, apiKey string) ([]byte, error) { } // Get data from JSON -func GetData[T any](uri, apiKey string, data *T) error { - bytes, err := Get(uri, apiKey) +func GetData[T any](ctx context.Context, uri, apiKey string, data *T) error { + bytes, err := Get(ctx, uri, apiKey) if err != nil { return err } @@ -46,9 +47,8 @@ func GetData[T any](uri, apiKey string, data *T) error { return json.Unmarshal(bytes, data) } -func Post(uri, apiKey string, data []byte) ([]byte, error) { - // TODO: Use contexts in Post and Get requests, e.g. NewRequestWithContext - req, err := http.NewRequest("POST", uri, bytes.NewBuffer(data)) +func Post(ctx context.Context, uri, apiKey string, data []byte) ([]byte, error) { + req, err := http.NewRequestWithContext(ctx, "POST", uri, bytes.NewBuffer(data)) if err != nil { return []byte{}, fmt.Errorf("%s: %w", uri, err) } @@ -71,7 +71,7 @@ func Post(uri, apiKey string, data []byte) ([]byte, error) { } // Submit structure as JSON to API -func PostData[T any](uri, apiKey string, data *T, servers ...string) error { +func PostData[T any](ctx context.Context, uri, apiKey string, data *T, servers ...string) error { if len(servers) == 0 { return fmt.Errorf("no server configured") } @@ -82,7 +82,7 @@ func PostData[T any](uri, apiKey string, data *T, servers ...string) error { wg.Add(1) go func(server string) { defer wg.Done() - errs.Append(postData[T](fmt.Sprintf("%s/%s", server, uri), apiKey, data)) + errs.Append(postData[T](ctx, fmt.Sprintf("%s/%s", server, uri), apiKey, data)) }(server) } @@ -90,11 +90,11 @@ func PostData[T any](uri, apiKey string, data *T, servers ...string) error { return errs.Join() } -func postData[T any](uri, apiKey string, data *T) error { +func postData[T any](ctx context.Context, uri, apiKey string, data *T) error { jsonData, err := json.Marshal(data) if err != nil { return err } - _, err = Post(uri, apiKey, jsonData) + _, err = Post(ctx, uri, apiKey, jsonData) return err } diff --git a/internal/server/handler/handler.go b/internal/server/handler/handler.go index 80494dd..41664b1 100644 --- a/internal/server/handler/handler.go +++ b/internal/server/handler/handler.go @@ -1,6 +1,7 @@ package handler import ( + "context" "errors" "fmt" "io" @@ -25,7 +26,7 @@ func New(conf server.ServerConfig) Handler { } } -func (h Handler) Submit(w http.ResponseWriter, r *http.Request) error { +func (h Handler) Submit(ctx context.Context, w http.ResponseWriter, r *http.Request) error { if r.Method != "POST" { return fmt.Errorf("expexted POST request") } @@ -71,11 +72,11 @@ func (h Handler) Get(w http.ResponseWriter, r *http.Request) error { return nil } -func (h Handler) Merge(w http.ResponseWriter, r *http.Request) error { +func (h Handler) Merge(ctx context.Context, w http.ResponseWriter, r *http.Request) error { var errs []error for _, partner := range h.conf.Partners() { - if err := h.mergeFromPartner(partner); err != nil { + if err := h.mergeFromPartner(ctx, partner); err != nil { errs = append(errs, err) } } @@ -88,7 +89,7 @@ func (h Handler) Merge(w http.ResponseWriter, r *http.Request) error { return nil } -func (h Handler) mergeFromPartner(partner string) error { +func (h Handler) mergeFromPartner(ctx context.Context, partner string) error { var ( errs []error uri = fmt.Sprintf("%s/list", partner) @@ -96,7 +97,7 @@ func (h Handler) mergeFromPartner(partner string) error { pairs []repository.EntryPair ) - if err := easyhttp.GetData(uri, h.conf.APIKey, &pairs); err != nil { + if err := easyhttp.GetData(ctx, uri, h.conf.APIKey, &pairs); err != nil { return err } @@ -110,7 +111,7 @@ func (h Handler) mergeFromPartner(partner string) error { uri = fmt.Sprintf("%s/get?id=%s", partner, pair.ID) ) - if err := easyhttp.GetData(uri, h.conf.APIKey, &entry); err != nil { + if err := easyhttp.GetData(ctx, uri, h.conf.APIKey, &entry); err != nil { errs = append(errs, err) continue } -- cgit v1.2.3