Bel LaPointe 2023-11-06 06:28:39 -07:00
parent 11f1c9cefd
commit d16056bcc2
3 changed files with 66 additions and 5 deletions

53
main.go
View File

@ -2,16 +2,67 @@ package main
import (
"context"
"flag"
"net/url"
"os"
"os/signal"
"replicator/replicator"
"syscall"
"time"
"gopkg.in/yaml.v3"
)
func main() {
ctx, can := signal.NotifyContext(context.Background(), syscall.SIGINT)
defer can()
if err := replicator.Main(ctx); err != nil && ctx.Err() == nil {
config, err := getConfig()
if err != nil {
panic(err)
}
if err := replicator.Main(ctx, config); err != nil && ctx.Err() == nil {
panic(err)
}
}
func getConfig() (replicator.Config, error) {
var config replicator.Config
if p := os.Getenv("CONFIG"); p != "" {
f, err := os.Open(p)
if err != nil {
return config, err
}
defer f.Close()
if err := yaml.NewDecoder(f).Decode(&config); err != nil {
return config, err
}
}
var srcDriver, destDriver, interval string
flag.StringVar(&srcDriver, "src", "map://", "source db")
flag.StringVar(&destDriver, "dest", "map://", "dest db")
flag.StringVar(&interval, "interval", "1s", "interval")
flag.Parse()
if srcDriver, err := url.Parse(srcDriver); err != nil {
return config, err
} else {
config.Src.Driver = *srcDriver
}
if destDriver, err := url.Parse(destDriver); err != nil {
return config, err
} else {
config.Dest.Driver = *destDriver
}
if interval, err := time.ParseDuration(interval); err != nil {
return config, err
} else {
config.Interval = replicator.Duration(interval)
}
return config, nil
}

View File

@ -2,9 +2,19 @@ package replicator
import (
"context"
"errors"
)
func Main(ctx context.Context) error {
return errors.New("not impl")
func Main(ctx context.Context, config Config) error {
src, err := NewDriver(ctx, config.Src.Driver)
if err != nil {
return err
}
dest, err := NewDriver(ctx, config.Dest.Driver)
if err != nil {
return err
}
replicator := NewReplicator(dest, src)
return replicator.Stream(ctx)
}

View File

@ -11,7 +11,7 @@ type Replicator struct {
Interval time.Duration
}
func NewReplicator(src, dest Driver) Replicator {
func NewReplicator(dest, src Driver) Replicator {
return Replicator{
Src: src,
Dest: dest,