-
Notifications
You must be signed in to change notification settings - Fork 1.9k
/
inspectDataToHybridJobTrigger.js
137 lines (122 loc) · 4.33 KB
/
inspectDataToHybridJobTrigger.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// Copyright 2023 Google LLC
//
// 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';
// sample-metadata:
// title: Send data to the hybrid job trigger.
// description: Demonstrate an example of a hybridInspect request sent to Cloud DLP for processing by a hybrid job trigger.
// usage: node inspectDataToHybridJobTrigger.js my-project string jobTriggerId
async function main(projectId, string, jobTriggerId) {
// [START dlp_inspect_send_data_to_hybrid_job_trigger]
// Imports the Google Cloud Data Loss Prevention library
const DLP = require('@google-cloud/dlp');
// Instantiates a client
const dlpClient = new DLP.DlpServiceClient();
// The project ID to run the API call under.
// const projectId = "your-project-id";
// The string to de-identify
// const string = 'My email is test@example.org';
// Job Trigger ID
// const jobTriggerId = 'your-job-trigger-id';
async function inspectDataToHybridJobTrigger() {
// Contains metadata to associate with the content.
const container = {
full_path: '10.0.0.2:logs1:app1',
relative_path: 'app1',
root_path: '10.0.0.2:logs1',
type: 'logging_sys',
version: '1.2',
};
const labels = {env: 'prod', 'appointment-bookings-comments': ''};
// Build the hybrid content item.
const hybridContentItem = {
item: {value: string},
findingDetails: {
containerDetails: container,
labels,
},
};
let jobName;
const fullTriggerName = `projects/${projectId}/jobTriggers/${jobTriggerId}`;
// Activate the job trigger.
try {
const response = await dlpClient.activateJobTrigger({
name: fullTriggerName,
});
jobName = response[0].name;
} catch (err) {
console.log(err);
if (err.code === 3) {
const response = await dlpClient.listDlpJobs({
parent: fullTriggerName,
filter: `trigger_name=${fullTriggerName}`,
});
jobName = response[0][0].name;
}
// Ignore error related to job trigger already active
if (err.code !== 3) {
console.log(err.message);
return;
}
}
// Build the hybrid inspect request.
const request = {
name: `projects/${projectId}/jobTriggers/${jobTriggerId}`,
hybridItem: hybridContentItem,
};
// Send the hybrid inspect request.
await dlpClient.hybridInspectJobTrigger(request);
// Waiting for a maximum of 15 minutes for the job to get complete.
let job;
let numOfAttempts = 30;
while (numOfAttempts > 0) {
// Fetch DLP Job status
[job] = await dlpClient.getDlpJob({name: jobName});
if (job.state === 'FAILED') {
console.log('Job Failed, Please check the configuration.');
return;
}
// Check if the job has completed.
if (job.inspectDetails.result.processedBytes > 0) {
break;
}
// Sleep for a short duration before checking the job status again.
await new Promise(resolve => {
setTimeout(() => resolve(), 30000);
});
numOfAttempts -= 1;
}
// Finish the job once the inspection is complete.
await dlpClient.finishDlpJob({name: jobName});
// Print out the results.
const infoTypeStats = job.inspectDetails.result.infoTypeStats;
if (infoTypeStats.length > 0) {
infoTypeStats.forEach(infoTypeStat => {
console.log(
` Found ${infoTypeStat.count} instance(s) of infoType ${infoTypeStat.infoType.name}.`
);
});
} else {
console.log('No findings.');
}
}
await inspectDataToHybridJobTrigger();
// [END dlp_inspect_send_data_to_hybrid_job_trigger]
}
process.on('unhandledRejection', err => {
console.error(err.message);
process.exitCode = 1;
});
// TODO(developer): Please uncomment below line before running sample
// main(...process.argv.slice(2));
module.exports = main;