blob: 9e043016ed25c04e816c4bf6135561948b25f9e7 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
/*
This is a golang script to download the example catalog and the sdk catalog
to the Cloud Datastore for local deployment and testing.
Please be aware that this is fictitious data.
*/
package test_data
import (
"context"
"fmt"
"os"
"time"
"cloud.google.com/go/datastore"
pb "beam.apache.org/playground/backend/internal/api/v1"
"beam.apache.org/playground/backend/internal/constants"
"beam.apache.org/playground/backend/internal/db/entity"
"beam.apache.org/playground/backend/internal/utils"
)
func DownloadCatalogsWithMockData(ctx context.Context) {
client, closeClientFunc := createDatastoreClient(ctx)
defer closeClientFunc()
datasetKeys, datasets := createDatasetEntities(ctx)
saveEntities(ctx, client, datasetKeys, datasets)
sdkKeys, sdks := createSDKEntities(ctx)
saveEntities(ctx, client, sdkKeys, sdks)
exampleKeys, examples := createExampleEntities(ctx)
saveEntities(ctx, client, exampleKeys, examples)
snippetKeys, snippets := createSnippetEntities(ctx, examples, datasetKeys)
saveEntities(ctx, client, snippetKeys, snippets)
fileKeys, files := createFileEntities(ctx, examples)
saveEntities(ctx, client, fileKeys, files)
objKeys, objs := createPCObjEntities(ctx, examples)
saveEntities(ctx, client, objKeys, objs)
}
func RemoveCatalogsWithMockData(ctx context.Context) {
client, closeClientFunc := createDatastoreClient(ctx)
defer closeClientFunc()
datasetKeys, _ := createDatasetEntities(ctx)
exampleKeys, examples := createExampleEntities(ctx)
snippetKeys, _ := createSnippetEntities(ctx, examples, datasetKeys)
fileKeys, _ := createFileEntities(ctx, examples)
objKeys, _ := createPCObjEntities(ctx, examples)
deleteEntities(ctx, client, exampleKeys)
deleteEntities(ctx, client, snippetKeys)
deleteEntities(ctx, client, fileKeys)
deleteEntities(ctx, client, objKeys)
deleteEntities(ctx, client, datasetKeys)
}
func createDatasetEntities(ctx context.Context) ([]*datastore.Key, []*entity.DatasetEntity) {
dataset := &entity.DatasetEntity{
Path: "MOCK_LINK",
}
key := utils.GetDatasetKey(ctx, "MOCK_DATASET")
return []*datastore.Key{key}, []*entity.DatasetEntity{dataset}
}
func createSDKEntities(ctx context.Context) ([]*datastore.Key, []*entity.SDKEntity) {
sdks := make([]*entity.SDKEntity, 0)
for _, sdk := range pb.Sdk_name {
if sdk == pb.Sdk_SDK_UNSPECIFIED.String() {
continue
}
sdks = append(sdks, &entity.SDKEntity{
Name: sdk,
DefaultExample: "MOCK_DEFAULT_EXAMPLE",
})
}
keys := make([]*datastore.Key, 0, len(sdks))
for _, sdk := range sdks {
keys = append(keys, utils.GetSdkKey(ctx, sdk.Name))
}
return keys, sdks
}
func createExampleEntities(ctx context.Context) ([]*datastore.Key, []*entity.ExampleEntity) {
names := []string{"MOCK_DEFAULT_EXAMPLE", "MOCK_NAME_1", "MOCK_NAME_2", "MOCK_NAME_3",
"MOCK_NAME_DATASET", "MOCK_MULTIFILE"}
keys := make([]*datastore.Key, 0)
examples := make([]*entity.ExampleEntity, 0)
for _, sdk := range pb.Sdk_name {
if sdk == pb.Sdk_SDK_UNSPECIFIED.String() {
continue
}
for _, name := range names {
key := utils.GetExampleKey(ctx, sdk, name)
keys = append(keys, key)
example := createExampleEntity(ctx, name, sdk)
examples = append(examples, example)
}
}
return keys, examples
}
func createExampleEntity(ctx context.Context, name, sdk string) *entity.ExampleEntity {
return &entity.ExampleEntity{
Name: name,
Sdk: utils.GetSdkKey(ctx, sdk),
Descr: "MOCK_DESCR",
Tags: []string{"MOCK_TAG_1", "MOCK_TAG_2", "MOCK_TAG_3"},
Cats: []string{"MOCK_CAT_1", "MOCK_CAT_2", "MOCK_CAT_3"},
Path: "MOCK_PATH",
UrlVCS: "MOCK_URL_VCS",
UrlNotebook: "MOCK_URL_NOTEBOOK",
Type: pb.PrecompiledObjectType_PRECOMPILED_OBJECT_TYPE_EXAMPLE.String(),
Origin: constants.ExampleOrigin,
SchVer: utils.GetSchemaVerKey(ctx, "MOCK_VERSION"),
}
}
func createSnippetEntities(ctx context.Context, examples []*entity.ExampleEntity, datasetKeys []*datastore.Key) ([]*datastore.Key, []*entity.SnippetEntity) {
keys := make([]*datastore.Key, 0)
snippets := make([]*entity.SnippetEntity, 0)
now := time.Now()
for _, example := range examples {
key := utils.GetSnippetKey(ctx, example.Sdk.Name, example.Name)
numberOfFiles := 1
if example.Name == "MOCK_MULTIFILE" {
numberOfFiles = 2
}
snippet := &entity.SnippetEntity{
Sdk: example.Sdk,
PipeOpts: "MOCK_P_OPTS",
Created: now,
Origin: constants.ExampleOrigin,
SchVer: utils.GetSchemaVerKey(ctx, "MOCK_VERSION"),
NumberOfFiles: numberOfFiles,
Complexity: pb.Complexity_COMPLEXITY_MEDIUM.String(),
}
if example.Name == "MOCK_NAME_DATASET" {
snippet.Datasets = append(snippet.Datasets, &entity.DatasetNestedEntity{
Config: "{\"topic\": \"topic_name_1\"}",
Dataset: datasetKeys[0],
Emulator: "kafka",
})
}
keys = append(keys, key)
snippets = append(snippets, snippet)
}
return keys, snippets
}
func createFileEntities(ctx context.Context, examples []*entity.ExampleEntity) ([]*datastore.Key, []*entity.FileEntity) {
keys := make([]*datastore.Key, 0)
files := make([]*entity.FileEntity, 0)
for _, example := range examples {
numberOfFiles := 1
if example.Name == "MOCK_MULTIFILE" {
numberOfFiles = 2
}
for idx := 0; idx < numberOfFiles; idx++ {
key := utils.GetFileKey(ctx, example.Sdk.Name, example.Name, idx)
file := &entity.FileEntity{
Name: fmt.Sprintf("MOCK_NAME_%d", idx),
Content: fmt.Sprintf("MOCK_CONTENT_%d", idx),
CntxLine: 10 + int32(idx),
IsMain: idx < 1,
}
keys = append(keys, key)
files = append(files, file)
}
}
return keys, files
}
func createPCObjEntities(ctx context.Context, examples []*entity.ExampleEntity) ([]*datastore.Key, []*entity.PrecompiledObjectEntity) {
keys := make([]*datastore.Key, 0)
objs := make([]*entity.PrecompiledObjectEntity, 0)
for _, example := range examples {
types := []string{constants.PCLogType, constants.PCGraphType, constants.PCOutputType}
for _, typeVal := range types {
key := utils.GetPCObjectKey(ctx, example.Sdk.Name, example.Name, typeVal)
obj := &entity.PrecompiledObjectEntity{Content: "MOCK_CONTENT_" + typeVal}
keys = append(keys, key)
objs = append(objs, obj)
}
}
return keys, objs
}
func deleteEntities(ctx context.Context, client *datastore.Client, keys []*datastore.Key) {
err := client.DeleteMulti(ctx, keys)
if err != nil {
fmt.Println(err.Error())
}
}
func saveEntities(ctx context.Context, client *datastore.Client, keys []*datastore.Key, entities interface{}) {
_, err := client.PutMulti(ctx, keys, entities)
if err != nil {
fmt.Println(err.Error())
}
}
func createDatastoreClient(ctx context.Context) (*datastore.Client, func()) {
projectId := getEnv("GOOGLE_CLOUD_PROJECT", constants.EmulatorProjectId)
client, err := datastore.NewClient(ctx, projectId)
if err != nil {
fmt.Println(err.Error())
}
closeClientFunc := func() {
err := client.Close()
if err != nil {
fmt.Println(err.Error())
}
}
return client, closeClientFunc
}
func getEnv(key, defaultValue string) string {
if value, ok := os.LookupEnv(key); ok {
return value
}
return defaultValue
}