test: prepare
This commit is contained in:
46
init/cron.go
46
init/cron.go
@@ -1,6 +1,7 @@
|
||||
package init
|
||||
|
||||
import (
|
||||
"io"
|
||||
"os/exec"
|
||||
"sync"
|
||||
"time"
|
||||
@@ -8,19 +9,60 @@ import (
|
||||
"gitea.suyono.dev/suyono/wingmate"
|
||||
)
|
||||
|
||||
const (
|
||||
cronTag = "cron"
|
||||
)
|
||||
|
||||
func (i *Init) cron(wg *sync.WaitGroup, cron Cron, exitFlag <-chan any) {
|
||||
defer wg.Done()
|
||||
|
||||
var (
|
||||
iwg *sync.WaitGroup
|
||||
err error
|
||||
stdout io.ReadCloser
|
||||
stderr io.ReadCloser
|
||||
)
|
||||
|
||||
ticker := time.NewTicker(time.Second * 20)
|
||||
cron:
|
||||
for {
|
||||
if cron.TimeToRun(time.Now()) {
|
||||
cmd := exec.Command(cron.Command().Path())
|
||||
if err := cmd.Run(); err != nil {
|
||||
wingmate.Log().Error().Msgf("running cron %s error %#v", cron.Command().Path(), err)
|
||||
iwg = &sync.WaitGroup{}
|
||||
|
||||
if stdout, err = cmd.StdoutPipe(); err != nil {
|
||||
wingmate.Log().Error().Str(cronTag, cron.Command().Path()).Msgf("stdout pipe: %+v", err)
|
||||
goto fail
|
||||
}
|
||||
|
||||
if stderr, err = cmd.StderrPipe(); err != nil {
|
||||
wingmate.Log().Error().Str(cronTag, cron.Command().Path()).Msgf("stderr pipe: %+v", err)
|
||||
_ = stdout.Close()
|
||||
goto fail
|
||||
}
|
||||
|
||||
iwg.Add(1)
|
||||
go i.pipeReader(iwg, stdout, cronTag, cron.Command().Path())
|
||||
|
||||
iwg.Add(1)
|
||||
go i.pipeReader(iwg, stderr, cronTag, cron.Command().Path())
|
||||
|
||||
if err := cmd.Start(); err != nil {
|
||||
wingmate.Log().Error().Msgf("starting cron %s error %+v", cron.Command().Path(), err)
|
||||
_ = stdout.Close()
|
||||
_ = stderr.Close()
|
||||
iwg.Wait()
|
||||
goto fail
|
||||
}
|
||||
|
||||
iwg.Wait()
|
||||
|
||||
if err = cmd.Wait(); err != nil {
|
||||
wingmate.Log().Error().Str(cronTag, cron.Command().Path()).Msgf("got error when waiting: %+v", err)
|
||||
}
|
||||
}
|
||||
|
||||
fail:
|
||||
select {
|
||||
case <-exitFlag:
|
||||
ticker.Stop()
|
||||
|
||||
@@ -29,9 +29,9 @@ func (i *Init) service(wg *sync.WaitGroup, path Path, exitFlag <-chan any) {
|
||||
wingmate.Log().Info().Str(serviceTag, path.Path()).Msg("stopped")
|
||||
}()
|
||||
|
||||
failStatus = false
|
||||
service:
|
||||
for {
|
||||
failStatus = false
|
||||
cmd := exec.Command(path.Path())
|
||||
iwg = &sync.WaitGroup{}
|
||||
|
||||
@@ -41,7 +41,7 @@ service:
|
||||
goto fail
|
||||
}
|
||||
iwg.Add(1)
|
||||
go i.pipeReader(iwg, stdout, path.Path())
|
||||
go i.pipeReader(iwg, stdout, serviceTag, path.Path())
|
||||
|
||||
if stderr, err = cmd.StderrPipe(); err != nil {
|
||||
wingmate.Log().Error().Str(serviceTag, path.Path()).Msgf("stderr pipe: %#v", err)
|
||||
@@ -50,11 +50,14 @@ service:
|
||||
goto fail
|
||||
}
|
||||
iwg.Add(1)
|
||||
go i.pipeReader(iwg, stderr, path.Path())
|
||||
go i.pipeReader(iwg, stderr, serviceTag, path.Path())
|
||||
|
||||
if err = cmd.Start(); err != nil {
|
||||
wingmate.Log().Error().Msgf("starting service %s error %#v", path.Path(), err)
|
||||
failStatus = true
|
||||
_ = stdout.Close()
|
||||
_ = stderr.Close()
|
||||
iwg.Wait()
|
||||
goto fail
|
||||
}
|
||||
|
||||
@@ -77,17 +80,17 @@ service:
|
||||
|
||||
}
|
||||
|
||||
func (i *Init) pipeReader(wg *sync.WaitGroup, pipe io.ReadCloser, serviceName string) {
|
||||
func (i *Init) pipeReader(wg *sync.WaitGroup, pipe io.ReadCloser, tag, serviceName string) {
|
||||
defer wg.Done()
|
||||
|
||||
scanner := bufio.NewScanner(pipe)
|
||||
for scanner.Scan() {
|
||||
wingmate.Log().Info().Str(serviceTag, serviceName).Msg(scanner.Text())
|
||||
wingmate.Log().Info().Str(tag, serviceName).Msg(scanner.Text())
|
||||
}
|
||||
|
||||
if err := scanner.Err(); err != nil {
|
||||
wingmate.Log().Error().Str(serviceTag, serviceName).Msgf("got error when reading pipe: %#v", err)
|
||||
wingmate.Log().Error().Str(tag, serviceName).Msgf("got error when reading pipe: %#v", err)
|
||||
}
|
||||
|
||||
wingmate.Log().Info().Str(serviceTag, serviceName).Msg("closing pipe")
|
||||
wingmate.Log().Info().Str(tag, serviceName).Msg("closing pipe")
|
||||
}
|
||||
|
||||
@@ -27,11 +27,13 @@ func (i *Init) waiter(wg *sync.WaitGroup, runningFlag <-chan any, sigHandlerFlag
|
||||
flagged = true
|
||||
wait:
|
||||
for {
|
||||
select {
|
||||
case <-runningFlag:
|
||||
wingmate.Log().Info().Msg("waiter received shutdown signal...")
|
||||
running = false
|
||||
default:
|
||||
if running {
|
||||
select {
|
||||
case <-runningFlag:
|
||||
wingmate.Log().Info().Msg("waiter received shutdown signal...")
|
||||
running = false
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
if _, err = unix.Wait4(-1, &ws, 0, nil); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user