Skip to content

Commit c034c55

Browse files
authored
feat: add traffic rules to bundled functions config (#536)
1 parent f5596d7 commit c034c55

File tree

2 files changed

+39
-2
lines changed

2 files changed

+39
-2
lines changed

go/porcelain/deploy.go

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -822,15 +822,34 @@ func bundleFromManifest(ctx context.Context, manifestFile *os.File, observer Dep
822822
}
823823
}
824824

825-
hasConfig := function.DisplayName != "" || function.Generator != "" || len(routes) > 0 || len(function.BuildData) > 0 || function.Priority != 0
825+
hasConfig := function.DisplayName != "" || function.Generator != "" || len(routes) > 0 || len(function.BuildData) > 0 || function.Priority != 0 || function.TrafficRules != nil
826826
if hasConfig {
827-
functionsConfig[file.Name] = models.FunctionConfig{
827+
cfg := models.FunctionConfig{
828828
DisplayName: function.DisplayName,
829829
Generator: function.Generator,
830830
Routes: routes,
831831
BuildData: function.BuildData,
832832
Priority: int64(function.Priority),
833833
}
834+
835+
if function.TrafficRules != nil {
836+
cfg.TrafficRules = &models.TrafficRulesConfig{
837+
Action: &models.TrafficRulesConfigAction{
838+
Type: function.TrafficRules.Action.Type,
839+
Config: &models.TrafficRulesConfigActionConfig{
840+
Aggregate: function.TrafficRules.Action.Config.Aggregate,
841+
RateLimitConfig: &models.TrafficRulesRateLimitConfig{
842+
Algorithm: function.TrafficRules.Action.Config.RateLimitConfig.Algorithm,
843+
WindowSize: int64(function.TrafficRules.Action.Config.RateLimitConfig.WindowSize),
844+
WindowLimit: int64(function.TrafficRules.Action.Config.RateLimitConfig.WindowLimit),
845+
},
846+
To: function.TrafficRules.Action.Config.To,
847+
},
848+
},
849+
}
850+
}
851+
852+
functionsConfig[file.Name] = cfg
834853
}
835854

836855
functions.Add(file.Name, file)

go/porcelain/functions_manifest.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package porcelain
22

3+
import "github.com/netlify/open-api/v2/go/models"
4+
35
// https://github.com/netlify/zip-it-and-ship-it/blob/main/src/manifest.ts
46
type functionsManifest struct {
57
Functions []functionsManifestEntry `json:"functions"`
@@ -19,6 +21,7 @@ type functionsManifestEntry struct {
1921
InvocationMode string `json:"invocationMode"`
2022
Routes []functionRoute `json:"routes"`
2123
Priority int `json:"priority"`
24+
TrafficRules *functionTrafficRules `json:"trafficRules"`
2225
}
2326

2427
type functionRoute struct {
@@ -28,3 +31,18 @@ type functionRoute struct {
2831
Methods []string `json:"methods"`
2932
PreferStatic bool `json:"prefer_static"`
3033
}
34+
35+
type functionTrafficRules struct {
36+
Action struct {
37+
Type string `json:"type"`
38+
Config struct {
39+
RateLimitConfig struct {
40+
Algorithm string `json:"algorithm"`
41+
WindowSize int `json:"windowSize"`
42+
WindowLimit int `json:"windowLimit"`
43+
}
44+
Aggregate *models.TrafficRulesAggregateConfig
45+
To string `json:"to"`
46+
}
47+
}
48+
}

0 commit comments

Comments
 (0)