summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-07-14 23:55:53 +0300
committerPaul Buetow <paul@buetow.org>2024-07-14 23:55:53 +0300
commit95b055a9f40787d15c42927041c9e65c49b05ea5 (patch)
tree62a3361cf520077c88a4c672810e9f31c7549954
parent50b06ab176a24d7ee842e3e07d7462ef465b6762 (diff)
make it all context.Context aware
-rw-r--r--cmd/gosd/main.go8
-rw-r--r--internal/client/tui/submit.go3
-rw-r--r--internal/easyhttp/easyhttp.go22
-rw-r--r--internal/server/handler/handler.go13
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
}