async function inspectDataToHybridJobTrigger()

in dlp/inspectDataToHybridJobTrigger.js [39:124]


  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.');
    }
  }