Skip to content

Commit 3a10ff7

Browse files
authored
Release/v0.8.3 (#116)
* Bump up APIFW version to v0.8.3 * Bump up Go version to 1.22.8 * Add additional conf params in proxy and API modes * Add version package. Update Makefile and Dockerfile
1 parent d3a6a01 commit 3a10ff7

File tree

20 files changed

+207
-118
lines changed

20 files changed

+207
-118
lines changed

.github/workflows/binaries.yml

+6-6
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ jobs:
5151
needs:
5252
- draft-release
5353
env:
54-
X_GO_DISTRIBUTION: "https://go.dev/dl/go1.22.7.linux-amd64.tar.gz"
54+
X_GO_DISTRIBUTION: "https://go.dev/dl/go1.22.8.linux-amd64.tar.gz"
5555
strategy:
5656
matrix:
5757
include:
@@ -160,7 +160,7 @@ jobs:
160160
needs:
161161
- draft-release
162162
env:
163-
X_GO_VERSION: "1.22.7"
163+
X_GO_VERSION: "1.22.8"
164164
strategy:
165165
matrix:
166166
include:
@@ -267,19 +267,19 @@ jobs:
267267
include:
268268
- arch: armv6
269269
distro: bullseye
270-
go_distribution: https://go.dev/dl/go1.22.7.linux-armv6l.tar.gz
270+
go_distribution: https://go.dev/dl/go1.22.8.linux-armv6l.tar.gz
271271
artifact: armv6-libc
272272
- arch: aarch64
273273
distro: bullseye
274-
go_distribution: https://go.dev/dl/go1.22.7.linux-arm64.tar.gz
274+
go_distribution: https://go.dev/dl/go1.22.8.linux-arm64.tar.gz
275275
artifact: arm64-libc
276276
- arch: armv6
277277
distro: alpine_latest
278-
go_distribution: https://go.dev/dl/go1.22.7.linux-armv6l.tar.gz
278+
go_distribution: https://go.dev/dl/go1.22.8.linux-armv6l.tar.gz
279279
artifact: armv6-musl
280280
- arch: aarch64
281281
distro: alpine_latest
282-
go_distribution: https://go.dev/dl/go1.22.7.linux-arm64.tar.gz
282+
go_distribution: https://go.dev/dl/go1.22.8.linux-arm64.tar.gz
283283
artifact: arm64-musl
284284
steps:
285285
- uses: actions/[email protected]

Dockerfile

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ FROM golang:1.22-alpine3.20 AS build
22

33
ARG APIFIREWALL_NAMESPACE
44
ARG APIFIREWALL_VERSION
5+
ENV APIFIREWALL_NAMESPACE=${APIFIREWALL_NAMESPACE}
56
ENV APIFIREWALL_VERSION=${APIFIREWALL_VERSION}
67

78
RUN apk add --no-cache \
@@ -15,7 +16,7 @@ COPY . .
1516

1617
RUN go mod download -x && \
1718
go build \
18-
-ldflags="-X ${APIFIREWALL_NAMESPACE}/main.version=${APIFIREWALL_VERSION} -X main.build=${APIFIREWALL_VERSION} -s -w" \
19+
-ldflags="-X ${APIFIREWALL_NAMESPACE}/internal/version.Version=${APIFIREWALL_VERSION} -s -w" \
1920
-buildvcs=false \
2021
-o ./api-firewall \
2122
./cmd/api-firewall

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
VERSION := 0.8.2
1+
VERSION := 0.8.3
22
NAMESPACE := github.com/wallarm/api-firewall
33

44
.DEFAULT_GOAL := build

cmd/api-firewall/internal/handlers/api/health.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ import (
77
"github.com/valyala/fasthttp"
88
"github.com/wallarm/api-firewall/internal/platform/storage"
99
"github.com/wallarm/api-firewall/internal/platform/web"
10+
"github.com/wallarm/api-firewall/internal/version"
1011
)
1112

1213
type Health struct {
13-
Build string
1414
Logger *logrus.Logger
1515
OpenAPIDB storage.DBOpenAPILoader
1616
}
@@ -55,7 +55,7 @@ func (h *Health) Liveness(ctx *fasthttp.RequestCtx) error {
5555
Namespace string `json:"namespace,omitempty"`
5656
}{
5757
Status: "up",
58-
Build: h.Build,
58+
Build: version.Version,
5959
Host: host,
6060
Pod: os.Getenv("KUBERNETES_PODNAME"),
6161
PodIP: os.Getenv("KUBERNETES_NAMESPACE_POD_IP"),

cmd/api-firewall/internal/handlers/proxy/health.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,16 @@ import (
77
"github.com/valyala/fasthttp"
88
"github.com/wallarm/api-firewall/internal/platform/proxy"
99
"github.com/wallarm/api-firewall/internal/platform/web"
10+
"github.com/wallarm/api-firewall/internal/version"
1011
)
1112

1213
type Health struct {
13-
Build string
1414
Logger *logrus.Logger
1515
Pool proxy.Pool
1616
}
1717

1818
// Readiness checks if the Fasthttp connection pool is ready to handle new requests.
19-
func (h Health) Readiness(ctx *fasthttp.RequestCtx) error {
19+
func (h *Health) Readiness(ctx *fasthttp.RequestCtx) error {
2020

2121
status := "ok"
2222
statusCode := fasthttp.StatusOK
@@ -47,7 +47,7 @@ func (h Health) Readiness(ctx *fasthttp.RequestCtx) error {
4747
// app is deployed to a Kubernetes cluster, it will also return pod, node, and
4848
// namespace details via the Downward API. The Kubernetes environment variables
4949
// need to be set within your Pod/Deployment manifest.
50-
func (h Health) Liveness(ctx *fasthttp.RequestCtx) error {
50+
func (h *Health) Liveness(ctx *fasthttp.RequestCtx) error {
5151
host, err := os.Hostname()
5252
if err != nil {
5353
host = "unavailable"
@@ -63,7 +63,7 @@ func (h Health) Liveness(ctx *fasthttp.RequestCtx) error {
6363
Namespace string `json:"namespace,omitempty"`
6464
}{
6565
Status: "up",
66-
Build: h.Build,
66+
Build: version.Version,
6767
Host: host,
6868
Pod: os.Getenv("KUBERNETES_PODNAME"),
6969
PodIP: os.Getenv("KUBERNETES_NAMESPACE_POD_IP"),

cmd/api-firewall/main.go

+65-30
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package main
22

33
import (
44
"context"
5-
"expvar" // Register the expvar handlers
65
"fmt"
76
"mime"
87
"net"
@@ -17,6 +16,7 @@ import (
1716
"github.com/ardanlabs/conf"
1817
"github.com/go-playground/validator"
1918
"github.com/pkg/errors"
19+
"github.com/savsgio/gotils/strconv"
2020
"github.com/sirupsen/logrus"
2121
"github.com/valyala/fasthttp"
2222
"github.com/wundergraph/graphql-go-tools/pkg/graphql"
@@ -30,10 +30,9 @@ import (
3030
"github.com/wallarm/api-firewall/internal/platform/proxy"
3131
"github.com/wallarm/api-firewall/internal/platform/storage"
3232
"github.com/wallarm/api-firewall/internal/platform/web"
33+
"github.com/wallarm/api-firewall/internal/version"
3334
)
3435

35-
var build = "develop"
36-
3736
const (
3837
namespace = "apifw"
3938
logPrefix = "main"
@@ -95,7 +94,7 @@ func runAPIMode(logger *logrus.Logger) error {
9594
// Configuration
9695

9796
var cfg config.APIMode
98-
cfg.Version.SVN = build
97+
cfg.Version.SVN = version.Version
9998
cfg.Version.Desc = projectName
10099

101100
if err := conf.Parse(os.Args[1:], namespace, &cfg); err != nil {
@@ -140,10 +139,7 @@ func runAPIMode(logger *logrus.Logger) error {
140139
return errors.New("invalid log level")
141140
}
142141

143-
// print the build version for our logs. Also expose it under /debug/vars
144-
expvar.NewString("build").Set(build)
145-
146-
logger.Infof("%s : Started : Application initializing : version %q", logPrefix, build)
142+
logger.Infof("%s : Started : Application initializing : version %q", logPrefix, version.Version)
147143
defer logger.Infof("%s: Completed", logPrefix)
148144

149145
out, err := conf.String(&cfg)
@@ -211,7 +207,6 @@ func runAPIMode(logger *logrus.Logger) error {
211207
// Start Health API Service
212208

213209
healthData := handlersAPI.Health{
214-
Build: build,
215210
Logger: logger,
216211
OpenAPIDB: specStorage,
217212
}
@@ -266,9 +261,25 @@ func runAPIMode(logger *logrus.Logger) error {
266261
}
267262

268263
api := fasthttp.Server{
269-
Handler: requestHandlers,
270-
ReadTimeout: cfg.ReadTimeout,
271-
WriteTimeout: cfg.WriteTimeout,
264+
Handler: requestHandlers,
265+
ReadTimeout: cfg.ReadTimeout,
266+
WriteTimeout: cfg.WriteTimeout,
267+
ReadBufferSize: cfg.ReadBufferSize,
268+
WriteBufferSize: cfg.WriteBufferSize,
269+
MaxRequestBodySize: cfg.MaxRequestBodySize,
270+
DisableKeepalive: cfg.DisableKeepalive,
271+
MaxConnsPerIP: cfg.MaxConnsPerIP,
272+
MaxRequestsPerConn: cfg.MaxRequestsPerConn,
273+
ErrorHandler: func(ctx *fasthttp.RequestCtx, err error) {
274+
logger.WithFields(logrus.Fields{
275+
"error": err,
276+
"host": strconv.B2S(ctx.Request.Header.Host()),
277+
"path": strconv.B2S(ctx.Path()),
278+
"method": strconv.B2S(ctx.Request.Header.Method()),
279+
}).Error("request processing error")
280+
281+
ctx.Error("", fasthttp.StatusInternalServerError)
282+
},
272283
Logger: logger,
273284
NoDefaultServerHeader: true,
274285
}
@@ -337,7 +348,7 @@ func runGraphQLMode(logger *logrus.Logger) error {
337348
// Configuration
338349

339350
var cfg config.GraphQLMode
340-
cfg.Version.SVN = build
351+
cfg.Version.SVN = version.Version
341352
cfg.Version.Desc = projectName
342353

343354
if err := conf.Parse(os.Args[1:], namespace, &cfg); err != nil {
@@ -382,10 +393,7 @@ func runGraphQLMode(logger *logrus.Logger) error {
382393
return errors.New("invalid log level")
383394
}
384395

385-
// Print the build version for our logs. Also expose it under /debug/vars.
386-
expvar.NewString("build").Set(build)
387-
388-
logger.Infof("%s : Started : Application initializing : version %q", logPrefix, build)
396+
logger.Infof("%s : Started : Application initializing : version %q", logPrefix, version.Version)
389397
defer logger.Infof("%s: Completed", logPrefix)
390398

391399
out, err := conf.String(&cfg)
@@ -467,6 +475,9 @@ func runGraphQLMode(logger *logrus.Logger) error {
467475
MaxConnsPerHost: cfg.Server.MaxConnsPerHost,
468476
ReadTimeout: cfg.Server.ReadTimeout,
469477
WriteTimeout: cfg.Server.WriteTimeout,
478+
ReadBufferSize: cfg.Server.ReadBufferSize,
479+
WriteBufferSize: cfg.Server.WriteBufferSize,
480+
MaxResponseBodySize: cfg.Server.MaxResponseBodySize,
470481
DialTimeout: cfg.Server.DialTimeout,
471482
}
472483
pool, err := proxy.NewChanPool(host, &options, nil)
@@ -538,7 +549,6 @@ func runGraphQLMode(logger *logrus.Logger) error {
538549
// Start Health API Service
539550

540551
healthData := handlersProxy.Health{
541-
Build: build,
542552
Logger: logger,
543553
Pool: pool,
544554
}
@@ -593,9 +603,22 @@ func runGraphQLMode(logger *logrus.Logger) error {
593603
}
594604

595605
api := fasthttp.Server{
596-
Handler: requestHandlers,
597-
ReadTimeout: cfg.ReadTimeout,
598-
WriteTimeout: cfg.WriteTimeout,
606+
Handler: requestHandlers,
607+
ReadTimeout: cfg.ReadTimeout,
608+
WriteTimeout: cfg.WriteTimeout,
609+
ReadBufferSize: cfg.ReadBufferSize,
610+
WriteBufferSize: cfg.WriteBufferSize,
611+
MaxRequestBodySize: cfg.MaxRequestBodySize,
612+
DisableKeepalive: cfg.DisableKeepalive,
613+
MaxConnsPerIP: cfg.MaxConnsPerIP,
614+
MaxRequestsPerConn: cfg.MaxRequestsPerConn,
615+
ErrorHandler: func(ctx *fasthttp.RequestCtx, err error) {
616+
logger.WithFields(logrus.Fields{
617+
"error": err,
618+
}).Error("request processing error")
619+
620+
ctx.Error("", fasthttp.StatusForbidden)
621+
},
599622
Logger: logger,
600623
NoDefaultServerHeader: true,
601624
}
@@ -643,7 +666,7 @@ func runProxyMode(logger *logrus.Logger) error {
643666
// Configuration
644667

645668
var cfg config.ProxyMode
646-
cfg.Version.SVN = build
669+
cfg.Version.SVN = version.Version
647670
cfg.Version.Desc = projectName
648671

649672
if err := conf.Parse(os.Args[1:], namespace, &cfg); err != nil {
@@ -721,10 +744,7 @@ func runProxyMode(logger *logrus.Logger) error {
721744
// =========================================================================
722745
// App Starting
723746

724-
// print the build version for our logs. Also expose it under /debug/vars
725-
expvar.NewString("build").Set(build)
726-
727-
logger.Infof("%s : Started : Application initializing : version %q", logPrefix, build)
747+
logger.Infof("%s : Started : Application initializing : version %q", logPrefix, version.Version)
728748
defer logger.Infof("%s: Completed", logPrefix)
729749

730750
out, err := conf.String(&cfg)
@@ -820,6 +840,9 @@ func runProxyMode(logger *logrus.Logger) error {
820840
MaxConnsPerHost: cfg.Server.MaxConnsPerHost,
821841
ReadTimeout: cfg.Server.ReadTimeout,
822842
WriteTimeout: cfg.Server.WriteTimeout,
843+
ReadBufferSize: cfg.Server.ReadBufferSize,
844+
WriteBufferSize: cfg.Server.WriteBufferSize,
845+
MaxResponseBodySize: cfg.Server.MaxResponseBodySize,
823846
DialTimeout: cfg.Server.DialTimeout,
824847
DNSConfig: cfg.DNS,
825848
}
@@ -884,7 +907,6 @@ func runProxyMode(logger *logrus.Logger) error {
884907
// Start Health API Service
885908

886909
healthData := handlersProxy.Health{
887-
Build: build,
888910
Logger: logger,
889911
Pool: pool,
890912
}
@@ -939,9 +961,22 @@ func runProxyMode(logger *logrus.Logger) error {
939961
}
940962

941963
api := fasthttp.Server{
942-
Handler: requestHandlers,
943-
ReadTimeout: cfg.ReadTimeout,
944-
WriteTimeout: cfg.WriteTimeout,
964+
Handler: requestHandlers,
965+
ReadTimeout: cfg.ReadTimeout,
966+
WriteTimeout: cfg.WriteTimeout,
967+
ReadBufferSize: cfg.ReadBufferSize,
968+
WriteBufferSize: cfg.WriteBufferSize,
969+
MaxRequestBodySize: cfg.MaxRequestBodySize,
970+
DisableKeepalive: cfg.DisableKeepalive,
971+
MaxConnsPerIP: cfg.MaxConnsPerIP,
972+
MaxRequestsPerConn: cfg.MaxRequestsPerConn,
973+
ErrorHandler: func(ctx *fasthttp.RequestCtx, err error) {
974+
logger.WithFields(logrus.Fields{
975+
"error": err,
976+
}).Error("request processing error")
977+
978+
ctx.Error("", cfg.CustomBlockStatusCode)
979+
},
945980
Logger: logger,
946981
NoDefaultServerHeader: true,
947982
}

cmd/api-firewall/tests/main_graphql_bench_test.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -174,10 +174,12 @@ func BenchmarkGraphQL(b *testing.B) {
174174
}
175175
var cfg = config.GraphQLMode{
176176
Graphql: gqlCfg,
177-
Server: config.Backend{
177+
Server: config.ProtectedAPI{
178178
URL: benchBackendURL,
179179
},
180-
APIHost: benchHandlerURL,
180+
APIFWServer: config.APIFWServer{
181+
APIHost: benchHandlerURL,
182+
},
181183
}
182184

183185
handler := graphqlHandler.Handlers(&cfg, schema, serverURL, shutdown, logger, pool, wsPool, nil, nil)

0 commit comments

Comments
 (0)