Skip to content
This repository has been archived by the owner on Jul 20, 2023. It is now read-only.

Commit

Permalink
chore(samples): interactive tutorials code samples for import user ev…
Browse files Browse the repository at this point in the history
…ents (#152)

* chore: import user events interactive samples
  • Loading branch information
nmykhailets authored Mar 14, 2022
1 parent fd95679 commit 27f7cc4
Show file tree
Hide file tree
Showing 16 changed files with 709 additions and 347 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
// Copyright 2022 Google Inc. All Rights Reserved.
//
// Licensed 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.

'use strict';

async function main(datasetId) {
// [START retail_import_user_events_big_query]

// Imports the Google Cloud client library.
const {UserEventServiceClient} = require('@google-cloud/retail').v2;

// Instantiates a client.
const retailClient = new UserEventServiceClient();

const projectId = await retailClient.getProjectId();
const dataSchema = 'user_event';
const tableId = 'events'; // TO CHECK ERROR HANDLING USE THE TABLE OF INVALID USER EVENTS

// Placement
const parent = `projects/${projectId}/locations/global/catalogs/default_catalog`; // TO CHECK ERROR HANDLING PASTE THE INVALID CATALOG NAME HERE

// The desired input location of the data.
const inputConfig = {
bigQuerySource: {
projectId,
datasetId,
tableId,
dataSchema,
},
};

const IResponseParams = {
IImportUserEventsResponse: 0,
IImportMetadata: 1,
IOperation: 2,
};

const callImportUserEvents = async () => {
// Construct request
const request = {
parent,
inputConfig,
};

console.log('Import request: ', request);

// Run request
const [operation] = await retailClient.importUserEvents(request);
const response = await operation.promise();
const result = response[IResponseParams.IImportMetadata];
console.log(
`Number of successfully imported events: ${result.successCount | 0}`
);
console.log(
`Number of failures during the importing: ${result.failureCount | 0}`
);
console.log(`Operation result: ${JSON.stringify(response)}`);
};

console.log('Start events import');
await callImportUserEvents();
console.log('Events import finished');
// [END retail_import_user_events_big_query]
}

process.on('unhandledRejection', err => {
console.error(err.message);
process.exitCode = 1;
});

main(
...(() => {
const argv = process.argv.slice(2);
return argv.length ? argv : ['user_events'];
})()
);
94 changes: 94 additions & 0 deletions samples/interactive-tutorials/events/import-user-events-gcs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
// Copyright 2022 Google Inc. All Rights Reserved.
//
// Licensed 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.

'use strict';

async function main(bucketName) {
// [START retail_import_user_events_gcs]

// Imports the Google Cloud client library.
const {UserEventServiceClient} = require('@google-cloud/retail').v2;

// Instantiates a client.
const retailClient = new UserEventServiceClient();

const projectId = await retailClient.getProjectId();

//TODO(developer) set the environment variable value which will be used as the bucket name
const gcsBucket = `gs://${bucketName}`;
const gcsErrorsBucket = `gs://${bucketName}/error`;
const gcsEventsObject = 'user_events.json'; // TO CHECK ERROR HANDLING USE THE JSON WITH INVALID USER EVENTS

// Placement
const parent = `projects/${projectId}/locations/global/catalogs/default_catalog`; // TO CHECK ERROR HANDLING PASTE THE INVALID CATALOG NAME HERE

// The desired input location of the data.
const inputConfig = {
gcsSource: {
inputUris: [gcsBucket + '/' + gcsEventsObject],
dataSchema: 'user_event',
},
};

// The desired location of errors incurred during the Import.
const errorsConfig = {
gcsPrefix: gcsErrorsBucket,
};

const IResponseParams = {
IImportUserEventsResponse: 0,
IImportMetadata: 1,
IOperation: 2,
};

const callImportUserEvents = async () => {
// Construct request
const request = {
parent,
inputConfig,
errorsConfig,
};

console.log('Import request: ', request);

// Run request
const [operation] = await retailClient.importUserEvents(request);
const response = await operation.promise();
const result = response[IResponseParams.IImportMetadata];
console.log(
`Number of successfully imported events: ${result.successCount | 0}`
);
console.log(
`Number of failures during the importing: ${result.failureCount | 0}`
);
console.log(`Operation result: ${JSON.stringify(response)}`);
};

console.log('Start events import');
await callImportUserEvents();
console.log('Events import finished');
// [END retail_import_user_events_gcs]
}

process.on('unhandledRejection', err => {
console.error(err.message);
process.exitCode = 1;
});

main(
...(() => {
const argv = process.argv.slice(2);
return argv.length ? argv : [process.env['EVENTS_BUCKET_NAME']];
})()
);
92 changes: 92 additions & 0 deletions samples/interactive-tutorials/events/import-user-events-inline.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
// Copyright 2022 Google Inc. All Rights Reserved.
//
// Licensed 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.

'use strict';

async function main() {
// [START retail_import_user_events_inline]

// Imports the Google Cloud client library.
const {UserEventServiceClient} = require('@google-cloud/retail').v2;

// Instantiates a client.
const retailClient = new UserEventServiceClient();

const projectId = await retailClient.getProjectId();

// Placement
const parent = `projects/${projectId}/locations/global/catalogs/default_catalog`;

// Create events
const generateEvent = eventType => {
return {
eventType,
visitorId: 'visitor_' + Math.random().toString(36).slice(2),
eventTime: {
seconds: Math.round(Date.now() / 1000),
},
};
};

// The desired input location of the data.
const inputConfig = {
userEventInlineSource: {
userEvents: [
generateEvent('home-page-view'),
generateEvent('home-page-view'),
generateEvent('home-page-view'),
],
},
};

const IResponseParams = {
IImportUserEventsResponse: 0,
IImportMetadata: 1,
IOperation: 2,
};

const callImportUserEvents = async () => {
// Construct request
const request = {
parent,
inputConfig,
};

console.log('Import request: ', request);

// Run request
const [operation] = await retailClient.importUserEvents(request);
const response = await operation.promise();
const result = response[IResponseParams.IImportMetadata];
console.log(
`Number of successfully imported events: ${result.successCount | 0}`
);
console.log(
`Number of failures during the importing: ${result.failureCount | 0}`
);
console.log(`Operation result: ${JSON.stringify(response)}`);
};

console.log('Start events import');
await callImportUserEvents();
console.log('Events import finished');
// [END retail_import_user_events_inline]
}

process.on('unhandledRejection', err => {
console.error(err.message);
process.exitCode = 1;
});

main();
4 changes: 2 additions & 2 deletions samples/interactive-tutorials/product/set-inventory.js
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ async function main(generatedProductId) {
// Set inventory with current time
console.log('Start set inventory');
await callSetInventory();
await utils.delay(180000);
await utils.delay(200000);

// Get product
let changedProduct = await utils.getProduct(createdProduct.name);
Expand All @@ -94,7 +94,7 @@ async function main(generatedProductId) {
product.priceInfo.price = 20.0;
setTime = {seconds: Math.round(Date.now() / 1000) - 86400};
await callSetInventory();
await utils.delay(180000);
await utils.delay(200000);

// Get product
changedProduct = await utils.getProduct(createdProduct.name);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// Copyright 2022 Google Inc. All Rights Reserved.
//
// Licensed 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.

'use strict';

async function main() {
const utils = require('./setup-cleanup');

const dataset = 'user_events';

//Delete created bigquery dataset
await utils.deleteBqDataset(dataset);
}

process.on('unhandledRejection', err => {
console.error(err.message);
process.exitCode = 1;
});

main();
32 changes: 32 additions & 0 deletions samples/interactive-tutorials/setup/delete-events-gcs-bucket.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// Copyright 2022 Google Inc. All Rights Reserved.
//
// Licensed 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.

'use strict';

async function main() {
const utils = require('./setup-cleanup');

// The ID of your GCS bucket
const bucketName = process.env['EVENTS_BUCKET_NAME'];

//Delete created bucket
await utils.deleteBucket(bucketName);
}

process.on('unhandledRejection', err => {
console.error(err.message);
process.exitCode = 1;
});

main();
Loading

0 comments on commit 27f7cc4

Please sign in to comment.