1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
// Package daemonclient is a wrapper around a grpc client
// to talk to turbod
package daemonclient
import (
"context"
"github.com/vercel/turbo/cli/internal/daemon/connector"
"github.com/vercel/turbo/cli/internal/fs"
"github.com/vercel/turbo/cli/internal/turbodprotocol"
"github.com/vercel/turbo/cli/internal/turbopath"
)
// DaemonClient provides access to higher-level functionality from the daemon to a turbo run.
type DaemonClient struct {
client *connector.Client
}
// Status provides details about the daemon's status
type Status struct {
UptimeMs uint64 `json:"uptimeMs"`
LogFile turbopath.AbsoluteSystemPath `json:"logFile"`
PidFile turbopath.AbsoluteSystemPath `json:"pidFile"`
SockFile turbopath.AbsoluteSystemPath `json:"sockFile"`
}
// New creates a new instance of a DaemonClient.
func New(client *connector.Client) *DaemonClient {
return &DaemonClient{
client: client,
}
}
// GetChangedOutputs implements runcache.OutputWatcher.GetChangedOutputs
func (d *DaemonClient) GetChangedOutputs(ctx context.Context, hash string, repoRelativeOutputGlobs []string) ([]string, error) {
resp, err := d.client.GetChangedOutputs(ctx, &turbodprotocol.GetChangedOutputsRequest{
Hash: hash,
OutputGlobs: repoRelativeOutputGlobs,
})
if err != nil {
return nil, err
}
return resp.ChangedOutputGlobs, nil
}
// NotifyOutputsWritten implements runcache.OutputWatcher.NotifyOutputsWritten
func (d *DaemonClient) NotifyOutputsWritten(ctx context.Context, hash string, repoRelativeOutputGlobs fs.TaskOutputs) error {
_, err := d.client.NotifyOutputsWritten(ctx, &turbodprotocol.NotifyOutputsWrittenRequest{
Hash: hash,
OutputGlobs: repoRelativeOutputGlobs.Inclusions,
OutputExclusionGlobs: repoRelativeOutputGlobs.Exclusions,
})
return err
}
// Status returns the DaemonStatus from the daemon
func (d *DaemonClient) Status(ctx context.Context) (*Status, error) {
resp, err := d.client.Status(ctx, &turbodprotocol.StatusRequest{})
if err != nil {
return nil, err
}
daemonStatus := resp.DaemonStatus
return &Status{
UptimeMs: daemonStatus.UptimeMsec,
LogFile: d.client.LogPath,
PidFile: d.client.PidPath,
SockFile: d.client.SockPath,
}, nil
}
|