aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/cli/internal/daemonclient
diff options
context:
space:
mode:
author简律纯 <hsiangnianian@outlook.com>2023-04-28 01:36:44 +0800
committer简律纯 <hsiangnianian@outlook.com>2023-04-28 01:36:44 +0800
commitdd84b9d64fb98746a230cd24233ff50a562c39c9 (patch)
treeb583261ef00b3afe72ec4d6dacb31e57779a6faf /cli/internal/daemonclient
parent0b46fcd72ac34382387b2bcf9095233efbcc52f4 (diff)
downloadHydroRoll-dd84b9d64fb98746a230cd24233ff50a562c39c9.tar.gz
HydroRoll-dd84b9d64fb98746a230cd24233ff50a562c39c9.zip
Diffstat (limited to 'cli/internal/daemonclient')
-rw-r--r--cli/internal/daemonclient/daemonclient.go70
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
+}