Skip to content

Commit 869a25c

Browse files
Age HTTP header
1 parent eacf167 commit 869a25c

4 files changed

Lines changed: 18 additions & 10 deletions

File tree

cmd/sqlite-http-proxy/request.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func (h *requestHandler) Handle(r *http.Request, ctx *goproxy.ProxyCtx) (*http.R
3838
return r, nil
3939
}
4040

41-
if !readOnly && uint(time.Since(resp.Timestamp).Seconds()) > ttl {
41+
if !readOnly && ttl > 0 && uint(time.Since(resp.Timestamp).Seconds()) > ttl {
4242
// data is too old, tell the responseHandler to save the new data
4343
ctx.UserData = fmt.Sprintf("%s:%d", resp.TableName, resp.DatabaseID)
4444
return r, nil
@@ -47,9 +47,17 @@ func (h *requestHandler) Handle(r *http.Request, ctx *goproxy.ProxyCtx) (*http.R
4747
slog.Info("serving from database", "url", url, "status", resp.Status, "timestamp", resp.Timestamp.Format(time.RFC3339))
4848
}
4949

50+
header := http.Header(resp.Header)
51+
if date := header.Get("Date"); date != "" {
52+
d, err := time.Parse(time.RFC1123, date)
53+
if err == nil {
54+
header.Set("Age", fmt.Sprint(int(time.Since(d).Seconds())))
55+
}
56+
}
57+
5058
return r, &http.Response{
5159
StatusCode: resp.Status,
5260
Body: resp.Body,
53-
Header: http.Header(resp.Headers),
61+
Header: header,
5462
}
5563
}

db/reository.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ type Repository interface {
2222
type Response struct {
2323
Status int
2424
Body io.ReadCloser
25-
Headers map[string][]string
25+
Header map[string][]string
2626
Timestamp time.Time
2727
DatabaseID int
2828
TableName string
@@ -78,9 +78,9 @@ func HttpToResponse(resp *http.Response) (*Response, error) {
7878
resp.Body = io.NopCloser(bytes.NewReader(bodyBytes))
7979

8080
return &Response{
81-
Status: resp.StatusCode,
82-
Headers: resp.Header,
83-
Body: io.NopCloser(bytes.NewReader(bodyBytes)),
81+
Status: resp.StatusCode,
82+
Header: resp.Header,
83+
Body: io.NopCloser(bytes.NewReader(bodyBytes)),
8484
}, nil
8585
}
8686

@@ -108,7 +108,7 @@ func rowToResponse(row *sql.Row) (*Response, error) {
108108
return &Response{
109109
Status: status,
110110
Body: io.NopCloser(strings.NewReader(body)),
111-
Headers: headersMap,
111+
Header: headersMap,
112112
Timestamp: timestamp,
113113
}, nil
114114
}
@@ -131,7 +131,7 @@ func execWriter(ctx context.Context, stmt *sql.Stmt, url string, resp *Response)
131131
bodyStr := string(body)
132132

133133
var headersBuf bytes.Buffer
134-
json.NewEncoder(&headersBuf).Encode(resp.Headers)
134+
json.NewEncoder(&headersBuf).Encode(resp.Header)
135135
headers := headersBuf.String()
136136

137137
_, err = stmt.ExecContext(ctx,

http/ro_transport.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ func (t *readOnlyTransport) RoundTrip(req *http.Request) (*http.Response, error)
5151
return &http.Response{
5252
StatusCode: resp.Status,
5353
Body: resp.Body,
54-
Header: http.Header(resp.Headers),
54+
Header: http.Header(resp.Header),
5555
}, nil
5656

5757
}

http/rw_transport.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ func (t *readWriteTransport) RoundTrip(req *http.Request) (*http.Response, error
5858
return &http.Response{
5959
StatusCode: respDB.Status,
6060
Body: respDB.Body,
61-
Header: http.Header(respDB.Headers),
61+
Header: http.Header(respDB.Header),
6262
}, nil
6363

6464
}

0 commit comments

Comments
 (0)