| // 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 | |
| } |