Skip to content

Commit 358dbfd

Browse files
committed
pkg/settings/cresettings: add CRONTrigger.FastestScheduleInterval
1 parent 58a5081 commit 358dbfd

File tree

5 files changed

+63
-4
lines changed

5 files changed

+63
-4
lines changed

pkg/settings/cresettings/defaults.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
"LogLineLimit": "1kb",
4343
"LogEventLimit": "1000",
4444
"CRONTrigger": {
45+
"FastestScheduleInterval": "30s",
4546
"RateLimit": "every30s:1"
4647
},
4748
"HTTPTrigger": {

pkg/settings/cresettings/defaults.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ LogLineLimit = '1kb'
4343
LogEventLimit = '1000'
4444

4545
[PerWorkflow.CRONTrigger]
46+
FastestScheduleInterval = '30s'
4647
RateLimit = 'every30s:1'
4748

4849
[PerWorkflow.HTTPTrigger]

pkg/settings/cresettings/settings.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,14 @@ import (
1616
. "github.com/smartcontractkit/chainlink-common/pkg/settings"
1717
)
1818

19-
func init() {
20-
if v, ok := os.LookupEnv("CL_CRE_SETTINGS_DEFAULT"); ok {
19+
const (
20+
envNameSettings = "CL_CRE_SETTINGS"
21+
envNameSettingsDefault = "CL_CRE_SETTINGS_DEFAULT"
22+
)
23+
24+
func init() { reinit() }
25+
func reinit() {
26+
if v, ok := os.LookupEnv(envNameSettingsDefault); ok {
2127
err := json.Unmarshal([]byte(v), &Default)
2228
if err != nil {
2329
log.Fatalf("failed to initialize defaults: %v", err)
@@ -29,7 +35,7 @@ func init() {
2935
}
3036
Config = Default
3137

32-
if v, ok := os.LookupEnv("CL_CRE_SETTINGS"); ok {
38+
if v, ok := os.LookupEnv(envNameSettings); ok {
3339
DefaultGetter, err = NewJSONGetter([]byte(v))
3440
if err != nil {
3541
log.Fatalf("failed to initialize settings: %v", err)
@@ -99,7 +105,8 @@ var Default = Schema{
99105
LogEventLimit: Int(1_000),
100106

101107
CRONTrigger: cronTrigger{
102-
RateLimit: Rate(rate.Every(30*time.Second), 1),
108+
FastestScheduleInterval: Duration(30 * time.Second),
109+
RateLimit: Rate(rate.Every(30*time.Second), 1),
103110
},
104111
HTTPTrigger: httpTrigger{
105112
RateLimit: Rate(rate.Every(30*time.Second), 3),
@@ -214,6 +221,7 @@ type Workflows struct {
214221
}
215222

216223
type cronTrigger struct {
224+
FastestScheduleInterval Setting[time.Duration]
217225
// Deprecated: to be removed
218226
RateLimit Setting[config.Rate]
219227
}

pkg/settings/cresettings/settings_test.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"golang.org/x/time/rate"
1616

1717
"github.com/smartcontractkit/chainlink-common/pkg/config"
18+
"github.com/smartcontractkit/chainlink-common/pkg/contexts"
1819
)
1920

2021
var update = flag.Bool("update", false, "update the golden files of this test")
@@ -110,3 +111,50 @@ func TestSchema_Unmarshal(t *testing.T) {
110111
assert.Equal(t, uint64(500000), cfg.PerWorkflow.ChainWrite.EVM.TransactionGasLimit.DefaultValue)
111112
assert.Equal(t, 3, cfg.PerWorkflow.ChainRead.CallLimit.DefaultValue)
112113
}
114+
115+
func TestDefaultGetter(t *testing.T) {
116+
limit := Default.PerWorkflow.HTTPAction.CallLimit
117+
118+
ctx := contexts.WithCRE(t.Context(), contexts.CRE{Owner: "owner-id", Workflow: "foo"})
119+
overrideCtx := contexts.WithCRE(t.Context(), contexts.CRE{Owner: "owner-id", Workflow: "test-wf-id"})
120+
121+
// Default 5
122+
got, err := limit.GetOrDefault(ctx, DefaultGetter)
123+
require.NoError(t, err)
124+
require.Equal(t, 5, got)
125+
126+
// No override
127+
got, err = limit.GetOrDefault(overrideCtx, DefaultGetter)
128+
require.NoError(t, err)
129+
require.Equal(t, 5, got)
130+
131+
t.Cleanup(reinit) // restore default vars
132+
t.Setenv(envNameSettings, `{
133+
"workflow": {
134+
"test-wf-id": {
135+
"PerWorkflow": {
136+
"HTTPAction": {
137+
"CallLimit": "20"
138+
}
139+
}
140+
}
141+
}
142+
}`)
143+
reinit() // set default vars
144+
145+
_ = `
146+
[workflow.test-wf-id]
147+
PerWorkflow.HTTPAction.CallLimit = 20
148+
`
149+
150+
// Default unchanged
151+
got, err = limit.GetOrDefault(ctx, DefaultGetter)
152+
require.NoError(t, err)
153+
require.Equal(t, 5, got)
154+
155+
// Override applied
156+
got, err = limit.GetOrDefault(overrideCtx, DefaultGetter)
157+
require.NoError(t, err)
158+
require.Equal(t, 20, got)
159+
160+
}

pkg/settings/toml.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ func CombineTOMLFiles(files fs.FS) ([]byte, error) {
4444
tree.Set("workflow", workflows)
4545
var b bytes.Buffer
4646
e := toml.NewEncoder(&b).Indentation("")
47+
e.Order(toml.OrderAlphabetical)
4748
err = e.Encode(tree)
4849
return b.Bytes(), err
4950
}

0 commit comments

Comments
 (0)