Skip to content

Commit 4619eb7

Browse files
committed
chore: quick update feat/supervisor at 2025-10-20 12:48:51
2 parents cd3894a + 6c0cffc commit 4619eb7

34 files changed

Lines changed: 191 additions & 237 deletions

File tree

cmds/depcmd/cmd.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ import (
1515
"github.com/pubgo/funk/v2/running"
1616
cli "github.com/urfave/cli/v3"
1717

18-
"github.com/pubgo/lava/v2/pkg/cmdutil"
18+
"github.com/pubgo/lava/v2/pkg/cliutil"
1919
)
2020

2121
func New(di *dix.Dix) *cli.Command {
2222
return &cli.Command{
2323
Name: "dep",
2424
Usage: "Print the dependency package information",
25-
Description: cmdutil.ExampleFmt(
25+
Description: cliutil.ExampleDesc(
2626
"lava dep",
2727
"lava dep json",
2828
"lava dep t"),

cmds/grpcservercmd/cmd.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ import (
1010

1111
"github.com/pubgo/lava/v2/core/lifecycle"
1212
"github.com/pubgo/lava/v2/core/supervisor"
13-
"github.com/pubgo/lava/v2/pkg/cmdutil"
13+
"github.com/pubgo/lava/v2/pkg/cliutil"
1414
"github.com/pubgo/lava/v2/servers/grpcs"
1515
)
1616

1717
func New(di *dix.Dix) *cli.Command {
1818
return &cli.Command{
1919
Name: "grpc",
20-
Usage: cmdutil.UsageDesc("grpc service %s(%s)", version.Project(), version.Version()),
20+
Usage: cliutil.UsageDesc("grpc service %s(%s)", version.Project(), version.Version()),
2121
Action: func(ctx context.Context, command *cli.Command) error {
2222
di.Provide(grpcs.New)
2323
params := dix.Inject(di, new(struct {

cmds/healthcmd/cmd.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@ import (
1212
"github.com/pubgo/funk/v2/recovery"
1313
"github.com/urfave/cli/v3"
1414

15-
"github.com/pubgo/lava/v2/pkg/cmdutil"
15+
"github.com/pubgo/lava/v2/pkg/cliutil"
1616
"github.com/pubgo/lava/v2/pkg/netutil"
1717
)
1818

1919
func New() *cli.Command {
2020
return &cli.Command{
2121
Name: "health",
22-
Usage: cmdutil.UsageDesc("%s health check", version.Project()),
23-
Description: cmdutil.ExampleFmt(
22+
Usage: cliutil.UsageDesc("%s health check", version.Project()),
23+
Description: cliutil.ExampleDesc(
2424
"lava health",
2525
"lava health localhost:8080",
2626
),

cmds/httpservercmd/cmd.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ import (
1010

1111
"github.com/pubgo/lava/v2/core/lifecycle"
1212
"github.com/pubgo/lava/v2/core/supervisor"
13-
"github.com/pubgo/lava/v2/pkg/cmdutil"
13+
"github.com/pubgo/lava/v2/pkg/cliutil"
1414
"github.com/pubgo/lava/v2/servers/https"
1515
)
1616

1717
func New(di *dix.Dix) *cli.Command {
1818
return &cli.Command{
1919
Name: "http",
20-
Usage: cmdutil.UsageDesc("%s http service", version.Project()),
20+
Usage: cliutil.UsageDesc("%s http service", version.Project()),
2121
Action: func(ctx context.Context, command *cli.Command) error {
2222
di.Provide(https.New)
2323
params := dix.Inject(di, new(struct {

cmds/schedulercmd/cmd.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@ import (
1313
"github.com/pubgo/lava/v2/core/scheduler/schedulerbuilder"
1414
"github.com/pubgo/lava/v2/core/scheduler/schedulerdebug"
1515
"github.com/pubgo/lava/v2/core/supervisor"
16-
"github.com/pubgo/lava/v2/pkg/cmdutil"
16+
"github.com/pubgo/lava/v2/pkg/cliutil"
1717
"github.com/pubgo/lava/v2/servers/https"
1818
)
1919

2020
func New(di *dix.Dix) *cli.Command {
2121
return &cli.Command{
2222
Name: "scheduler",
23-
Usage: cmdutil.UsageDesc("crontab scheduler service %s(%s)", version.Project(), version.Version()),
23+
Usage: cliutil.UsageDesc("crontab scheduler service %s(%s)", version.Project(), version.Version()),
2424
Action: func(ctx context.Context, command *cli.Command) error {
2525
di.Provide(schedulerbuilder.NewService)
2626
di.Provide(https.New)

cmds/versioncmd/cmd.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ import (
77
"github.com/pubgo/funk/v2/buildinfo/version"
88
"github.com/pubgo/funk/v2/recovery"
99
"github.com/pubgo/funk/v2/running"
10-
"github.com/pubgo/lava/v2/pkg/cmdutil"
10+
"github.com/pubgo/lava/v2/pkg/cliutil"
1111
"github.com/urfave/cli/v3"
1212
)
1313

1414
func New() *cli.Command {
1515
return &cli.Command{
1616
Name: "version",
1717
Aliases: []string{"v"},
18-
Usage: cmdutil.UsageDesc("%s version info", version.Project()),
18+
Usage: cliutil.UsageDesc("%s version info", version.Project()),
1919
Action: func(ctx context.Context, command *cli.Command) error {
2020
defer recovery.Exit()
2121
fmt.Println("project:", version.Project())

core/lavabuilder/builder.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import (
2727
"github.com/pubgo/lava/v2/core/logging/logbuilder"
2828
"github.com/pubgo/lava/v2/core/metrics/metricbuilder"
2929
"github.com/pubgo/lava/v2/core/signals"
30-
"github.com/pubgo/lava/v2/pkg/cmdutil"
30+
"github.com/pubgo/lava/v2/pkg/cliutil"
3131

3232
_ "github.com/pubgo/lava/v2/core/debug/debug"
3333
//_ "github.com/pubgo/lava/v2/core/debug/gops"
@@ -91,7 +91,7 @@ func Run(di *dix.Dix) {
9191
Name: version.Project(),
9292
Suggest: true,
9393
UseShortOptionHandling: true,
94-
Usage: cmdutil.UsageDesc("%s service", version.Project()),
94+
Usage: cliutil.UsageDesc("%s service", version.Project()),
9595
Version: version.Version(),
9696
Flags: append(flags.GetFlags(), featureflags.GetFlags()...),
9797
Commands: cmd,

core/pidfile/pidfile.go

Lines changed: 24 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -5,67 +5,52 @@ import (
55
"os"
66
"path/filepath"
77
"strconv"
8-
"syscall"
8+
"sync"
99

1010
"github.com/pubgo/funk/v2/config"
11-
"github.com/pubgo/funk/v2/log"
1211
"github.com/pubgo/funk/v2/log/logfields"
13-
"github.com/pubgo/funk/v2/pathutil"
1412
"github.com/pubgo/funk/v2/result"
1513
"github.com/pubgo/funk/v2/running"
1614
"github.com/rs/zerolog"
1715
)
1816

19-
const Name = "pidfile"
20-
21-
var PidPath = filepath.Join(config.GetConfigDir(), Name)
17+
var getPidPath = sync.OnceValue(func() string {
18+
return filepath.Join(config.GetConfigDir(), "."+running.Project()+".pid")
19+
})
2220

2321
const pidPerm os.FileMode = 0o644
2422

2523
func Get() (r result.Result[int]) {
26-
pidPath := GetPath().Unwrap(&r)
24+
pidPath := GetPath()
25+
p := result.Wrap(os.ReadFile(pidPath)).
26+
Validate(func(val []byte) error {
27+
if len(val) == 0 {
28+
return fmt.Errorf("pid file is empty")
29+
}
30+
return nil
31+
}).
32+
Log(func(e *zerolog.Event) {
33+
e.Str("path", pidPath)
34+
e.Str(logfields.Msg, "read pid file failed")
35+
}).
36+
Unwrap(&r)
2737
if r.IsErr() {
2838
return
2939
}
3040

31-
p, err := os.ReadFile(pidPath)
32-
if err != nil {
33-
return r.WithErrorf("failed to read pid file: %s", pidPath)
34-
}
35-
36-
if len(p) == 0 {
37-
return r.WithErrorf("pid file is empty")
38-
}
39-
4041
return result.Wrap(strconv.Atoi(string(p))).
41-
InspectErr(func(err error) {
42-
log.Err(err).Str("path", pidPath).Str("pid", string(p)).Msg("read pid file failed")
42+
Log(func(e *zerolog.Event) {
43+
e.Str("path", pidPath)
44+
e.Str("pid", string(p))
45+
e.Str(logfields.Msg, "convert pid to int failed")
4346
})
4447
}
4548

46-
func GetPath() (r result.Result[string]) {
47-
filename := fmt.Sprintf("%s.pid", running.Project())
48-
pidPath := filepath.Join(PidPath, filename)
49-
50-
if pathutil.IsNotExist(PidPath) {
51-
createDirRes := result.ErrOf(os.MkdirAll(PidPath, os.ModePerm)).Log(func(e *zerolog.Event) {
52-
e.Str(logfields.Msg, fmt.Sprintf("create pid file dir(%s) failed", PidPath))
53-
})
54-
if createDirRes.Catch(&r) {
55-
return
56-
}
57-
}
58-
59-
return r.WithValue(pidPath)
60-
}
49+
func GetPath() string { return getPidPath() }
6150

6251
func Save() (r result.Error) {
63-
pidPath := GetPath().Unwrap(&r)
64-
if r.IsErr() {
65-
return
66-
}
67-
68-
pid := syscall.Getpid()
52+
pidPath := GetPath()
53+
pid := os.Getpid()
6954

7055
return result.ErrOf(os.WriteFile(pidPath, []byte(strconv.Itoa(pid)), pidPerm)).
7156
Log(func(e *zerolog.Event) {

core/pidfile/pidfilebuilder/builder.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,13 @@ package pidfilebuilder
22

33
import (
44
"context"
5-
"path/filepath"
6-
7-
"github.com/pubgo/funk/v2/config"
8-
"github.com/pubgo/funk/v2/pathutil"
95

106
"github.com/pubgo/lava/v2/core/lifecycle"
117
"github.com/pubgo/lava/v2/core/pidfile"
128
)
139

1410
func New() lifecycle.Handler {
1511
return func(lc lifecycle.Lifecycle) {
16-
pidfile.PidPath = filepath.Join(config.GetConfigDir(), pidfile.Name)
17-
18-
_ = pathutil.IsNotExistMkDir(pidfile.PidPath)
19-
2012
lc.AfterStart(func(ctx context.Context) error { return pidfile.Save().GetErr() })
2113
}
2214
}

core/supervisor/manager.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"github.com/pubgo/lava/v2/core/debug"
1919
"github.com/pubgo/lava/v2/core/lifecycle"
2020
"github.com/pubgo/lava/v2/internal/logutil"
21+
"github.com/pubgo/lava/v2/pkg/netutil"
2122
)
2223

2324
type serviceWrapper struct {
@@ -148,7 +149,7 @@ func (m *Manager) Services() []Service {
148149

149150
func (m *Manager) start(ctx context.Context) error {
150151
defer recovery.Exit()
151-
logutil.OkOrFailed(m.logger, "service before-start", func() error {
152+
logutil.OkOrFailed(m.logger, "start lifecycle before service", func() error {
152153
defer recovery.Exit()
153154
for _, run := range m.lc.GetBeforeStarts() {
154155
m.logger.Info().Msgf("running %s", stack.CallerWithFunc(run.Exec))
@@ -159,14 +160,14 @@ func (m *Manager) start(ctx context.Context) error {
159160

160161
async.GoDelay(func() error {
161162
err := m.supervisor.Serve(ctx)
162-
if errors.Is(err, context.Canceled) {
163+
if netutil.IsErrServerClosed(err) {
163164
return nil
164165
}
165166
assert.Exit(err)
166167
return nil
167168
})
168169

169-
logutil.OkOrFailed(m.logger, "service after-start", func() error {
170+
logutil.OkOrFailed(m.logger, "start lifecycle after service", func() error {
170171
defer recovery.Exit()
171172
for _, run := range m.lc.GetAfterStarts() {
172173
m.logger.Info().Msgf("running %s", stack.CallerWithFunc(run.Exec))
@@ -181,7 +182,7 @@ func (m *Manager) start(ctx context.Context) error {
181182
func (m *Manager) stop(ctx context.Context) error {
182183
defer recovery.DebugPrint()
183184

184-
logutil.OkOrFailed(m.logger, "service before-stop", func() error {
185+
logutil.OkOrFailed(m.logger, "stop lifecycle before service", func() error {
185186
for _, run := range m.lc.GetBeforeStops() {
186187
logutil.LogOrErr(m.logger, fmt.Sprintf("running %s", stack.CallerWithFunc(run.Exec)), func() error {
187188
return run.Exec(ctx)
@@ -198,7 +199,7 @@ func (m *Manager) stop(ctx context.Context) error {
198199
return errors.New("services are still running")
199200
}
200201

201-
logutil.OkOrFailed(m.logger, "service after-stop", func() error {
202+
logutil.OkOrFailed(m.logger, "stop lifecycle after service", func() error {
202203
for _, run := range m.lc.GetAfterStops() {
203204
logutil.LogOrErr(m.logger, fmt.Sprintf("running %s", stack.CallerWithFunc(run.Exec)), func() error {
204205
return run.Exec(ctx)
@@ -224,7 +225,7 @@ func (m *Manager) Run(ctx context.Context) error {
224225
func (m *Manager) Serve(ctx context.Context) error {
225226
err := m.supervisor.Serve(ctx)
226227

227-
if errors.Is(err, context.Canceled) {
228+
if netutil.IsErrServerClosed(err) {
228229
return nil
229230
}
230231

0 commit comments

Comments
 (0)