diff options
| author | 2023-04-28 01:36:44 +0800 | |
|---|---|---|
| committer | 2023-04-28 01:36:44 +0800 | |
| commit | dd84b9d64fb98746a230cd24233ff50a562c39c9 (patch) | |
| tree | b583261ef00b3afe72ec4d6dacb31e57779a6faf /cli/internal/daemonclient | |
| parent | 0b46fcd72ac34382387b2bcf9095233efbcc52f4 (diff) | |
| download | HydroRoll-dd84b9d64fb98746a230cd24233ff50a562c39c9.tar.gz HydroRoll-dd84b9d64fb98746a230cd24233ff50a562c39c9.zip | |
Diffstat (limited to 'cli/internal/daemonclient')
| -rw-r--r-- | cli/internal/daemonclient/daemonclient.go | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/cli/internal/daemonclient/daemonclient.go b/cli/internal/daemonclient/daemonclient.go new file mode 100644 index 0000000..c415cd3 --- /dev/null +++ b/cli/internal/daemonclient/daemonclient.go @@ -0,0 +1,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 +} |
