mirror of
https://github.com/prymitive/karma
synced 2026-05-05 03:16:51 +00:00
feat(backend): use zstd compression for cached resonses
This commit is contained in:
committed by
Łukasz Mierzwa
parent
84e523ef1c
commit
ee07b80d4b
@@ -2,7 +2,6 @@ package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"compress/gzip"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
@@ -20,6 +19,7 @@ import (
|
||||
"github.com/prymitive/karma/internal/transform"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/klauspost/compress/zstd"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
@@ -38,15 +38,19 @@ func pong(c *gin.Context) {
|
||||
|
||||
func compressResponse(data []byte) ([]byte, error) {
|
||||
var b bytes.Buffer
|
||||
// this only fails if we pass unsupported level (3 is valid)
|
||||
gz, _ := gzip.NewWriterLevel(&b, 3)
|
||||
|
||||
_, err := gz.Write(data)
|
||||
w, err := zstd.NewWriter(&b)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to create a compressor: %s", err.Error())
|
||||
}
|
||||
|
||||
_, err = w.Write(data)
|
||||
if err != nil {
|
||||
w.Close()
|
||||
return nil, fmt.Errorf("failed to compress data: %s", err.Error())
|
||||
}
|
||||
|
||||
if err = gz.Close(); err != nil {
|
||||
if err = w.Close(); err != nil {
|
||||
return nil, fmt.Errorf("failed to close compression writer: %s", err.Error())
|
||||
}
|
||||
|
||||
@@ -58,11 +62,13 @@ func compressResponse(data []byte) ([]byte, error) {
|
||||
|
||||
func decompressCachedResponse(data []byte) ([]byte, error) {
|
||||
b := bytes.NewReader(data)
|
||||
z, err := gzip.NewReader(b)
|
||||
|
||||
r, err := zstd.NewReader(b)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to created new compression reader: %s", err.Error())
|
||||
}
|
||||
p, err := ioutil.ReadAll(z)
|
||||
|
||||
p, err := ioutil.ReadAll(r)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to decompress data: %s", err.Error())
|
||||
}
|
||||
|
||||
1
go.mod
1
go.mod
@@ -27,6 +27,7 @@ require (
|
||||
github.com/google/go-querystring v1.0.0 // indirect
|
||||
github.com/hansrodtang/randomcolor v0.0.0-20160512071917-d27108b3d7a5
|
||||
github.com/jarcoal/httpmock v1.0.5
|
||||
github.com/klauspost/compress v1.10.5
|
||||
github.com/knadh/koanf v0.10.0
|
||||
github.com/mitchellh/mapstructure v1.3.0
|
||||
github.com/patrickmn/go-cache v2.1.1-0.20180815053127-5633e0862627+incompatible
|
||||
|
||||
3
go.sum
3
go.sum
@@ -312,7 +312,10 @@ github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQL
|
||||
github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg=
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
|
||||
github.com/klauspost/compress v1.4.1 h1:8VMb5+0wMgdBykOV96DwNwKFQ+WTI4pzYURP99CcB9E=
|
||||
github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
|
||||
github.com/klauspost/compress v1.10.5 h1:7q6vHIqubShURwQz8cQK6yIe/xC3IF0Vm7TGfqjewrc=
|
||||
github.com/klauspost/compress v1.10.5/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
|
||||
github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
||||
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
||||
github.com/knadh/koanf v0.10.0 h1:yLhpmguhSOvtLNXHqqyVrvNc27PZMHoj7bdbUt3kzes=
|
||||
|
||||
Reference in New Issue
Block a user