From fb44388dccdea44803caa2313b2098140fe9327b Mon Sep 17 00:00:00 2001 From: Jim Hawkridge Date: Wed, 23 Nov 2022 12:06:36 +0000 Subject: [PATCH 1/3] DS-12892: Add Workers Analytics Engine binding --- workers.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/workers.go b/workers.go index dd4df618c..7bc6e9a42 100644 --- a/workers.go +++ b/workers.go @@ -111,6 +111,8 @@ const ( WorkerServiceBindingType WorkerBindingType = "service" // WorkerR2BucketBindingType is the type for R2 bucket bindings. WorkerR2BucketBindingType WorkerBindingType = "r2_bucket" + // WorkerAnalyticsEngineBindingType is the type for Analytics Engine dataset bindings. + WorkerAnalyticsEngineBindingType WorkerBindingType = "analytics_engine" ) // WorkerBindingListItem a struct representing an individual binding in a list of bindings. @@ -355,6 +357,28 @@ func (b WorkerR2BucketBinding) serialize(bindingName string) (workerBindingMeta, }, nil, nil } +// WorkerAnalyticsEngineBinding is a binding to an Analytics Engine dataset. +type WorkerAnalyticsEngineBinding struct { + Dataset string +} + +// Type returns the type of the binding. +func (b WorkerAnalyticsEngineBinding) Type() WorkerBindingType { + return WorkerAnalyticsEngineBindingType +} + +func (b WorkerAnalyticsEngineBinding) serialize(bindingName string) (workerBindingMeta, workerBindingBodyWriter, error) { + if b.Dataset == "" { + return nil, nil, fmt.Errorf(`Dataset for binding "%s" cannot be empty`, bindingName) + } + + return workerBindingMeta{ + "name": bindingName, + "type": b.Type(), + "dataset": b.Dataset, + }, nil, nil +} + // Each binding that adds a part to the multipart form body will need // a unique part name so we just generate a random 128bit hex string. func getRandomPartName() string { @@ -545,6 +569,11 @@ func (api *API) ListWorkerBindings(ctx context.Context, requestParams *WorkerReq bindingListItem.Binding = WorkerR2BucketBinding{ BucketName: bucketName, } + case WorkerAnalyticsEngineBindingType: + dataset := jsonBinding["dataset"].(string) + bindingListItem.Binding = WorkerAnalyticsEngineBinding{ + Dataset: dataset, + } default: bindingListItem.Binding = WorkerInheritBinding{} } From 077a64d4c5f0a7c33c9646d1fe456d720f9da5b2 Mon Sep 17 00:00:00 2001 From: Jim Hawkridge Date: Wed, 23 Nov 2022 13:02:03 +0000 Subject: [PATCH 2/3] Test --- workers_test.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/workers_test.go b/workers_test.go index 434bb065d..1f5dbfbc0 100644 --- a/workers_test.go +++ b/workers_test.go @@ -154,6 +154,11 @@ const ( "name": "MY_BUCKET", "type": "r2_bucket", "bucket_name": "bucket" + }, + { + "name": "MY_DATASET", + "type": "analytics_engine", + "dataset": "my_dataset" } ], "success": true, @@ -1216,7 +1221,7 @@ func TestWorkers_ListWorkerBindingsMultiScript(t *testing.T) { assert.NoError(t, err) assert.Equal(t, successResponse, res.Response) - assert.Equal(t, 7, len(res.BindingList)) + assert.Equal(t, 8, len(res.BindingList)) assert.Equal(t, res.BindingList[0], WorkerBindingListItem{ Name: "MY_KV", @@ -1270,6 +1275,14 @@ func TestWorkers_ListWorkerBindingsMultiScript(t *testing.T) { }, }) assert.Equal(t, WorkerR2BucketBindingType, res.BindingList[6].Binding.Type()) + + assert.Equal(t, res.BindingList[7], WorkerBindingListItem{ + Name: "MY_DATASET", + Binding: WorkerAnalyticsEngineBinding{ + Dataset: "my_dataset", + }, + }) + assert.Equal(t, WorkerAnalyticsEngineBindingType, res.BindingList[7].Binding.Type()) } func TestWorkers_UpdateWorkerRouteErrorsWhenMixingSingleAndMultiScriptProperties(t *testing.T) { From d086ba18f57e5ff2264442bf618ee003cc3f1746 Mon Sep 17 00:00:00 2001 From: Jim Hawkridge Date: Thu, 24 Nov 2022 09:19:03 +0000 Subject: [PATCH 3/3] Changelog --- .changelog/1133.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/1133.txt diff --git a/.changelog/1133.txt b/.changelog/1133.txt new file mode 100644 index 000000000..9ebbd785e --- /dev/null +++ b/.changelog/1133.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +workers: Support for Workers Analytics Engine bindings +```