package supervisor import ( "encoding/json" "fmt" "os" "sort" ) type Supervisor struct { Processes []*Process `json:"processes"` } func ReadTemplate(path string) (supervisor Supervisor, err error) { content, err := os.ReadFile(path) if err != nil { return } err = json.Unmarshal(content, &supervisor) return } func (s *Supervisor) StartProcesses() error { sort.Slice(s.Processes, func(i, j int) bool { return s.Processes[i].Priority < s.Processes[j].Priority }) for _, p := range s.Processes { p.Start() } return nil } func (s *Supervisor) GetProcesses() (processes []Process) { for _, p := range s.Processes { processes = append(processes, *p) } return } func (s *Supervisor) StartProcessByName(name string) error { for _, p := range s.Processes { if p.Name == name { return p.Start() } } return fmt.Errorf("process %s not found", name) } func (s *Supervisor) StopProcessByName(name string) error { for _, p := range s.Processes { if p.Name == name { return p.Stop() } } return fmt.Errorf("process %s not found", name) }