Skip to content

Commit 658efa7

Browse files
authored
Switch to the official Go SDK (#54)
Closes #25 --------- Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com>
1 parent 5d04989 commit 658efa7

15 files changed

Lines changed: 208 additions & 1520 deletions

go/README.md

Lines changed: 0 additions & 3 deletions
This file was deleted.

go/delay.go

Lines changed: 37 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,72 @@
11
package main
22

33
import (
4-
"strconv"
54
"time"
65

7-
"github.com/envoyproxy/dynamic-modules-examples/go/gosdk"
6+
"github.com/envoyproxy/envoy/source/extensions/dynamic_modules/sdk/go/shared"
87
)
98

109
type (
11-
// delayFilterConfig implements [gosdk.HttpFilterConfig].
12-
delayFilterConfig struct{}
13-
// delayFilter implements [gosdk.HttpFilter].
10+
// delayFilterConfigFactory implements [shared.HttpFilterConfigFactory].
11+
delayFilterConfigFactory struct {
12+
shared.EmptyHttpFilterConfigFactory
13+
}
14+
// delayFilterFactory implements [shared.HttpFilterFactory].
15+
delayFilterFactory struct{}
16+
// delayFilter implements [shared.HttpFilter].
1417
//
15-
// This filter demostrates how to use the scheduler to delay the request processing,
18+
// This filter demonstrates how to use the scheduler to delay the request processing,
1619
// and how to use goroutines to perform the asynchronous operations.
1720
delayFilter struct {
21+
handle shared.HttpFilterHandle
1822
onRequestHeaders time.Time
1923
delayLapsed time.Duration
24+
shared.EmptyHttpFilter
2025
}
2126
)
2227

23-
// Destroy implements [gosdk.HttpFilterConfig].
24-
func (p delayFilterConfig) Destroy() {}
25-
26-
// NewFilter implements [gosdk.HttpFilterConfig].
27-
func (p delayFilterConfig) NewFilter() gosdk.HttpFilter { return &delayFilter{} }
28+
// Create implements [shared.HttpFilterConfigFactory].
29+
func (p *delayFilterConfigFactory) Create(handle shared.HttpFilterConfigHandle, unparsedConfig []byte) (shared.HttpFilterFactory, error) {
30+
return &delayFilterFactory{}, nil
31+
}
2832

29-
// Destroy implements [gosdk.HttpFilter].
30-
func (p *delayFilter) Destroy() {}
33+
// Create implements [shared.HttpFilterFactory].
34+
func (p *delayFilterFactory) Create(handle shared.HttpFilterHandle) shared.HttpFilter {
35+
return &delayFilter{handle: handle}
36+
}
3137

32-
// RequestHeaders implements [gosdk.HttpFilter].
33-
func (p *delayFilter) RequestHeaders(e gosdk.EnvoyHttpFilter, endOfStream bool) gosdk.RequestHeadersStatus {
38+
// OnRequestHeaders implements [shared.HttpFilter].
39+
func (p *delayFilter) OnRequestHeaders(headers shared.HeaderMap, endOfStream bool) shared.HeadersStatus {
3440
// Check if the headers contain the "do-delay" header to trigger the delay.
35-
if _, ok := e.GetRequestHeader("do-delay"); !ok {
41+
if len(headers.Get("do-delay")) == 0 {
3642
// If the header is not present, continue the request processing.
37-
return gosdk.RequestHeadersStatusContinue
43+
return shared.HeadersStatusContinue
3844
}
3945

40-
schduler := e.NewScheduler()
46+
scheduler := p.handle.GetScheduler()
4147
now := time.Now()
4248
p.onRequestHeaders = now
4349
go func() {
44-
// Scheduler must be closed to avoid memory leaks.
45-
defer schduler.Close()
4650
// Simulate some delay.
4751
time.Sleep(2 * time.Second)
4852
// Commit the event to continue the request processing.
49-
schduler.Commit(0)
53+
scheduler.Schedule(func() {
54+
p.delayLapsed = time.Since(p.onRequestHeaders)
55+
// We can insert some headers at this phase.
56+
headers := p.handle.RequestHeaders()
57+
headers.Set("delay-filter-on-scheduled", "yes")
58+
// Then continue the request processing.
59+
p.handle.ContinueRequest()
60+
})
5061
}()
51-
return gosdk.RequestHeadersStatusStopIteration
62+
return shared.HeadersStatusStop
5263
}
5364

54-
// Scheduled implements gosdk.HttpFilter.
55-
func (p *delayFilter) Scheduled(e gosdk.EnvoyHttpFilter, eventID uint64) {
56-
if eventID != 0 {
57-
panic("unexpected eventID in Scheduled: " + strconv.Itoa(int(eventID)))
58-
}
59-
p.delayLapsed = time.Since(p.onRequestHeaders)
60-
// We can insert some headers at this phase.
61-
e.SetRequestHeader("delay-filter-on-scheduled", []byte("yes"))
62-
// Then continue the request processing.
63-
e.ContinueRequest()
64-
}
65-
66-
// RequestBody implements [gosdk.HttpFilter].
67-
func (p *delayFilter) RequestBody(e gosdk.EnvoyHttpFilter, endOfStream bool) gosdk.RequestBodyStatus {
68-
return gosdk.RequestBodyStatusContinue
69-
}
70-
71-
// ResponseHeaders implements [gosdk.HttpFilter].
72-
func (p *delayFilter) ResponseHeaders(e gosdk.EnvoyHttpFilter, endOfStream bool) gosdk.ResponseHeadersStatus {
65+
// OnResponseHeaders implements [shared.HttpFilter].
66+
func (p *delayFilter) OnResponseHeaders(headers shared.HeaderMap, endOfStream bool) shared.HeadersStatus {
7367
// Add a response header to indicate the delay.
7468
if p.delayLapsed > 0 {
75-
e.SetResponseHeader("x-delay-filter-lapsed", []byte(p.delayLapsed.String()))
69+
headers.Set("x-delay-filter-lapsed", p.delayLapsed.String())
7670
}
77-
return gosdk.ResponseHeadersStatusContinue
78-
}
79-
80-
// ResponseBody implements [gosdk.HttpFilter].
81-
func (p *delayFilter) ResponseBody(e gosdk.EnvoyHttpFilter, endOfStream bool) gosdk.ResponseBodyStatus {
82-
return gosdk.ResponseBodyStatusContinue
71+
return shared.HeadersStatusContinue
8372
}

go/go.mod

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ tool (
1111

1212
require (
1313
github.com/dop251/goja v0.0.0-20250630131328-58d95d85e994
14-
github.com/stretchr/testify v1.11.1
14+
github.com/envoyproxy/envoy/source/extensions/dynamic_modules v0.0.0-20260129014508-e8c1dc7dcbcd
1515
)
1616

1717
require (
@@ -174,6 +174,7 @@ require (
174174
github.com/ssgreg/nlreturn/v2 v2.2.1 // indirect
175175
github.com/stbenjam/no-sprintf-host-port v0.2.0 // indirect
176176
github.com/stretchr/objx v0.5.2 // indirect
177+
github.com/stretchr/testify v1.11.1 // indirect
177178
github.com/subosito/gotenv v1.4.1 // indirect
178179
github.com/tdakkota/asciicheck v0.4.1 // indirect
179180
github.com/tetafro/godot v1.5.0 // indirect

go/go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@ github.com/dop251/goja v0.0.0-20250630131328-58d95d85e994 h1:aQYWswi+hRL2zJqGacd
140140
github.com/dop251/goja v0.0.0-20250630131328-58d95d85e994/go.mod h1:MxLav0peU43GgvwVgNbLAj1s/bSGboKkhuULvq/7hx4=
141141
github.com/ebitengine/purego v0.9.0 h1:mh0zpKBIXDceC63hpvPuGLiJ8ZAa3DfrFTudmfi8A4k=
142142
github.com/ebitengine/purego v0.9.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
143+
github.com/envoyproxy/envoy/source/extensions/dynamic_modules v0.0.0-20260129014508-e8c1dc7dcbcd h1:IQMTVU/I2HaXkUUYvHD3gtUrFAGLZm8DcH/4Z20vRQQ=
144+
github.com/envoyproxy/envoy/source/extensions/dynamic_modules v0.0.0-20260129014508-e8c1dc7dcbcd/go.mod h1:NpQosaDAX20s0ak0o/4b5dLOdvkbk15XqoakhSNX1Gg=
143145
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
144146
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
145147
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=

0 commit comments

Comments
 (0)