(ctx context.Context, bootstrap config.Store, base string)
| 610 | } |
| 611 | |
| 612 | func (m *manager) initProcesses(ctx context.Context, bootstrap config.Store, base string) error { |
| 613 | cmds := make(map[string]*fork.Process) |
| 614 | |
| 615 | var baseWatch []string |
| 616 | if base != "#" { |
| 617 | baseWatch = append(baseWatch, strings.Split(strings.TrimLeft(base, "#/"), "/")...) |
| 618 | } |
| 619 | |
| 620 | w, err := bootstrap.Watch(watch.WithPath(append(baseWatch, "processes", "*")...), watch.WithChangesOnly()) |
| 621 | if err != nil { |
| 622 | return err |
| 623 | } |
| 624 | |
| 625 | for { |
| 626 | diff, err := w.Next() |
| 627 | if err != nil { |
| 628 | return err |
| 629 | } |
| 630 | baseRead := append(baseWatch, "processes") |
| 631 | create := diff.(kv.Values).Val(append([]string{"create"}, baseRead...)...) |
| 632 | update := diff.(kv.Values).Val(append([]string{"update"}, baseRead...)...) |
| 633 | deletes := diff.(kv.Values).Val(append([]string{"delete"}, baseRead...)...) |
| 634 | |
| 635 | var processesToStart, processesToStop []string |
| 636 | |
| 637 | for name := range create.Map() { |
| 638 | processesToStart = append(processesToStart, name) |
| 639 | } |
| 640 | for name := range update.Map() { |
| 641 | processesToStop = append(processesToStop, name) |
| 642 | processesToStart = append(processesToStart, name) |
| 643 | } |
| 644 | for name := range deletes.Map() { |
| 645 | processesToStop = append(processesToStop, name) |
| 646 | } |
| 647 | |
| 648 | for _, name := range processesToStop { |
| 649 | if cmd, ok := cmds[name]; ok { |
| 650 | cmd.Stop() |
| 651 | } |
| 652 | } |
| 653 | |
| 654 | processes := bootstrap.Val(base + "/processes") |
| 655 | |
| 656 | for _, name := range processesToStart { |
| 657 | process := processes.Val(name) |
| 658 | |
| 659 | childBinary := os.Args[0] |
| 660 | var childArgs []string |
| 661 | var childEnv []string |
| 662 | |
| 663 | connections := process.Val("connections") |
| 664 | // TODO |
| 665 | //binary := process.Val("binary") |
| 666 | //args := process.Val("args") |
| 667 | env := process.Val("env") |
| 668 | servers := process.Val("servers") |
| 669 | tags := process.Val("tags") |
no test coverage detected