@@ -6,31 +6,57 @@ import (
6
6
"github.com/formancehq/go-libs/v2/otlp/otlpmetrics"
7
7
"github.com/formancehq/go-libs/v2/otlp/otlptraces"
8
8
"github.com/formancehq/go-libs/v2/service"
9
+ replication "github.com/formancehq/ledger/internal/replication"
10
+ "github.com/formancehq/ledger/internal/replication/drivers"
11
+ "github.com/formancehq/ledger/internal/replication/drivers/all"
9
12
"github.com/formancehq/ledger/internal/storage"
10
13
"github.com/formancehq/ledger/internal/worker"
14
+ "github.com/robfig/cron/v3"
11
15
"github.com/spf13/cobra"
12
16
"go.uber.org/fx"
17
+ "time"
13
18
)
14
19
15
20
const (
21
+ WorkerPipelinesSyncPeriodFlag = "worker-pipelines-sync-period"
22
+ WorkerPipelinesPullIntervalFlag = "worker-pipelines-pull-interval"
23
+ WorkerPipelinesPushRetryPeriodFlag = "worker-pipelines-push-retry-period"
24
+
16
25
WorkerAsyncBlockHasherMaxBlockSizeFlag = "worker-async-block-hasher-max-block-size"
17
26
WorkerAsyncBlockHasherScheduleFlag = "worker-async-block-hasher-schedule"
18
27
)
19
28
20
29
type workerConfiguration struct {
21
- hashLogsBlockMaxSize int
22
- hashLogsBlockCRONSpec string
30
+ AsyncBlockRunnerConfig storage. AsyncBlockRunnerConfig
31
+ ReplicationConfig replication. ModuleConfig
23
32
}
24
33
25
- func discoverWorkerConfiguration (cmd * cobra.Command ) workerConfiguration {
26
- ret := workerConfiguration {}
27
- ret .hashLogsBlockCRONSpec , _ = cmd .Flags ().GetString (WorkerAsyncBlockHasherScheduleFlag )
28
- ret .hashLogsBlockMaxSize , _ = cmd .Flags ().GetInt (WorkerAsyncBlockHasherMaxBlockSizeFlag )
34
+ func discoverWorkerConfiguration (cmd * cobra.Command ) (* workerConfiguration , error ) {
35
+ ret := & workerConfiguration {}
36
+ hashLogsBlockCRONSpec , _ := cmd .Flags ().GetString (WorkerAsyncBlockHasherScheduleFlag )
37
+ if hashLogsBlockCRONSpec == "" {
38
+ hashLogsBlockCRONSpec = "0 * * * * *"
39
+ }
40
+ parser := cron .NewParser (cron .Second | cron .Minute | cron .Hour | cron .Dom | cron .Month | cron .Dow )
41
+
42
+ var err error
43
+ ret .AsyncBlockRunnerConfig .Schedule , err = parser .Parse (hashLogsBlockCRONSpec )
44
+ if err != nil {
45
+ return nil , err
46
+ }
47
+
48
+ ret .AsyncBlockRunnerConfig .MaxBlockSize , _ = cmd .Flags ().GetInt (WorkerAsyncBlockHasherMaxBlockSizeFlag )
49
+ ret .ReplicationConfig .SyncPeriod , _ = cmd .Flags ().GetDuration (WorkerPipelinesSyncPeriodFlag )
50
+ ret .ReplicationConfig .PullInterval , _ = cmd .Flags ().GetDuration (WorkerPipelinesPullIntervalFlag )
51
+ ret .ReplicationConfig .PushRetryPeriod , _ = cmd .Flags ().GetDuration (WorkerPipelinesPushRetryPeriodFlag )
29
52
30
- return ret
53
+ return ret , nil
31
54
}
32
55
33
56
func addWorkerFlags (cmd * cobra.Command ) {
57
+ cmd .Flags ().Duration (WorkerPipelinesSyncPeriodFlag , 5 * time .Second , "Pipelines sync period" )
58
+ cmd .Flags ().Duration (WorkerPipelinesPullIntervalFlag , replication .DefaultPullInterval , "Pipelines pull interval" )
59
+ cmd .Flags ().Duration (WorkerPipelinesPushRetryPeriodFlag , replication .DefaultPushRetryPeriod , "Pipelines push retry period" )
34
60
cmd .Flags ().Int (WorkerAsyncBlockHasherMaxBlockSizeFlag , 1000 , "Max block size" )
35
61
cmd .Flags ().String (WorkerAsyncBlockHasherScheduleFlag , "0 * * * * *" , "Schedule" )
36
62
}
@@ -45,7 +71,10 @@ func NewWorkerCommand() *cobra.Command {
45
71
return err
46
72
}
47
73
48
- workerConfiguration := discoverWorkerConfiguration (cmd )
74
+ workerConfiguration , err := discoverWorkerConfiguration (cmd )
75
+ if err != nil {
76
+ return err
77
+ }
49
78
50
79
return service .New (cmd .OutOrStdout (),
51
80
fx .NopLogger ,
@@ -54,10 +83,9 @@ func NewWorkerCommand() *cobra.Command {
54
83
otlpmetrics .FXModuleFromFlags (cmd ),
55
84
bunconnect .Module (* connectionOptions , service .IsDebug (cmd )),
56
85
storage .NewFXModule (storage.ModuleConfig {}),
57
- worker .NewFXModule (worker.ModuleConfig {
58
- MaxBlockSize : workerConfiguration .hashLogsBlockMaxSize ,
59
- Schedule : workerConfiguration .hashLogsBlockCRONSpec ,
60
- }),
86
+ drivers .NewFXModule (),
87
+ fx .Invoke (all .Register ),
88
+ newWorkerModule (* workerConfiguration ),
61
89
).Run (cmd )
62
90
},
63
91
}
@@ -71,6 +99,9 @@ func NewWorkerCommand() *cobra.Command {
71
99
return cmd
72
100
}
73
101
74
- func newWorkerModule () fx.Option {
75
- return fx .Options ()
76
- }
102
+ func newWorkerModule (configuration workerConfiguration ) fx.Option {
103
+ return worker .NewFXModule (worker.ModuleConfig {
104
+ AsyncBlockRunnerConfig : configuration .AsyncBlockRunnerConfig ,
105
+ ReplicationConfig : configuration .ReplicationConfig ,
106
+ })
107
+ }
0 commit comments