async startAnalysis()

in source/analysis-monitor/lib/index.js [104:167]


  async startAnalysis() {
    const input = await (new DB({
      Table: Environment.DynamoDB.Ingest.Table,
      PartitionKey: Environment.DynamoDB.Ingest.PartitionKey,
    })).fetch(this.stateData.uuid, undefined, [
      'proxies',
      'key',
      'type',
      'mediainfo',
    ]);

    /* check analysis options */
    const aiOptions = await this.parseAIOptions();

    const responses = await Promise.all([
      this.startVideoAnalysis(input, aiOptions),
      this.startAudioAnalysis(input, aiOptions),
      this.startImageAnalysis(input, aiOptions),
      this.startDocumentAnalysis(input, aiOptions),
    ]);

    this.stateData.setData('video', {
      arn: (responses[0] || {}).executionArn,
      status: responses[0] ? StateData.Statuses.Started : StateData.Statuses.NotStarted,
    });

    this.stateData.setData('audio', {
      arn: (responses[1] || {}).executionArn,
      status: responses[1] ? StateData.Statuses.Started : StateData.Statuses.NotStarted,
    });

    this.stateData.setData('image', {
      arn: (responses[2] || {}).executionArn,
      status: responses[2] ? StateData.Statuses.Started : StateData.Statuses.NotStarted,
    });

    this.stateData.setData('document', {
      arn: (responses[3] || {}).executionArn,
      status: responses[3] ? StateData.Statuses.Started : StateData.Statuses.NotStarted,
    });

    // backward compatible with older version of mediainfo
    let duration = (input.mediainfo)
      ? (input.mediainfo.media || input.mediainfo.file)
      : undefined;
    if (duration) {
      duration = (duration.track || []).find(x => x.$.type.toLowerCase() === 'general');
      duration = (duration || {}).duration || 0;
      // v20.08 duration is in seconds. Converted to milliseconds.
      if (input.mediainfo.media) {
        duration = Math.floor(duration * 1000);
      }
    }

    this.stateData.setData('metrics', {
      duration: duration || 1000,
      requestTime: this.timestamp,
      startTime: (new Date()).getTime(),
    });

    this.stateData.setCompleted();

    return this.stateData.toJSON();
  }