chore: add favicon
All checks were successful
Go Bump / bump (push) Successful in 37s

This commit was merged in pull request #1.
This commit is contained in:
xuu
2023-11-09 11:42:33 -07:00
parent f71e50fbe6
commit 1b8e8ad26a
13 changed files with 87 additions and 9 deletions

View File

@@ -17,6 +17,7 @@ import (
"github.com/h2non/filetype"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/metric"
"go.opentelemetry.io/otel/trace"
"golang.org/x/sys/unix"
@@ -27,11 +28,15 @@ import (
type image struct {
store string
maxSize int64
m_image_get metric.Int64Counter
m_image_post metric.Int64Counter
m_image_error metric.Int64Counter
}
const DefaultMaxSize = 500 * 1024 * 1024
func New(store string, maxSize int64) (a *image, err error) {
func New(ctx context.Context, store string, maxSize int64) (a *image, err error) {
a = &image{
store: store,
maxSize: DefaultMaxSize,
@@ -45,13 +50,31 @@ func New(store string, maxSize int64) (a *image, err error) {
return nil, fmt.Errorf("image Store location [%s] does not exist or is not writable", a.store)
}
return a, nil
m := lg.Meter(ctx)
var merr error
a.m_image_get, merr = m.Int64Counter("m_image_get",
metric.WithDescription("retrieve image from store"),
)
err = errors.Join(err, merr)
a.m_image_post, merr = m.Int64Counter("m_image_post",
metric.WithDescription("save image to store"),
)
err = errors.Join(err, merr)
a.m_image_error, merr = m.Int64Counter("m_image_error",
metric.WithDescription("image api error"),
)
err = errors.Join(err, merr)
return a, err
}
func (a *image) RegisterHTTP(mux *http.ServeMux) {
mux.Handle("/i", http.StripPrefix("/i", a))
mux.Handle("/i/", http.StripPrefix("/i/", a))
mux.Handle("/3/upload", a)
}
func (a *image) ServeHTTP(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
@@ -60,10 +83,13 @@ func (a *image) ServeHTTP(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodGet, http.MethodHead:
a.m_image_get.Add(ctx, 1)
name := strings.TrimPrefix(r.URL.Path, "/")
if name != "" {
rdr, head, err := a.loadFile(ctx, name)
if err != nil {
a.m_image_error.Add(ctx, 1)
writeError(w, err)
span.RecordError(err)
return
@@ -88,6 +114,8 @@ func (a *image) ServeHTTP(w http.ResponseWriter, r *http.Request) {
}
case http.MethodPost:
a.m_image_post.Add(ctx, 1)
var err error
defer r.Body.Close()
@@ -121,6 +149,7 @@ func (a *image) ServeHTTP(w http.ResponseWriter, r *http.Request) {
}
id, err := a.put(ctx, fd, length)
if err != nil {
a.m_image_error.Add(ctx, 1)
writeError(w, err)
span.RecordError(err)
return
@@ -183,7 +212,7 @@ func (a *image) loadFile(ctx context.Context, name string) (io.ReadSeekCloser, *
return nil, nil, err
}
f.Seek(0,0)
f.Seek(0, 0)
return f,
&Header{Mime: mime, Modified: stat.ModTime(), ETag: name},

View File

@@ -2,6 +2,7 @@ package image_test
import (
"bytes"
"context"
"encoding/base64"
"fmt"
"mime/multipart"
@@ -21,10 +22,12 @@ var testImage = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z/C
func TestPostImgur(t *testing.T) {
is := is.New(t)
ctx := context.Background()
dir, err := os.MkdirTemp("", "image")
is.NoErr(err)
im, err := image.New(dir, 0)
im, err := image.New(ctx, dir, 0)
is.NoErr(err)
{
@@ -78,11 +81,12 @@ func TestPostImgur(t *testing.T) {
func TestPost(t *testing.T) {
is := is.New(t)
ctx := context.Background()
dir, err := os.MkdirTemp("", "image")
is.NoErr(err)
im, err := image.New(dir, 0)
im, err := image.New(ctx, dir, 0)
is.NoErr(err)
{
@@ -107,7 +111,6 @@ func TestPost(t *testing.T) {
s := base64.StdEncoding.EncodeToString(res.Body.Bytes())
is.Equal(s, testImage)
}
err = os.RemoveAll(dir)