INTO-CPS-Association/DTaaS

View on GitHub
client/src/util/gitlabDigitalTwin.ts

Summary

Maintainability
A
1 hr
Test Coverage
import GitlabInstance from './gitlab';

class DigitalTwin {
  public DTName: string;

  public gitlabInstance: GitlabInstance;

  public lastExecutionStatus: string | null = null;

  constructor(DTName: string, gitlabInstance: GitlabInstance) {
    this.DTName = DTName;
    this.gitlabInstance = gitlabInstance;
  }

  async execute(runnerTag: string): Promise<boolean> {
    const projectId = await this.gitlabInstance.getProjectId();
    const triggerToken =
      projectId && (await this.gitlabInstance.getTriggerToken(projectId));

    if (!projectId || !triggerToken) {
      this.lastExecutionStatus = 'error';
      return false;
    }

    const variables = { DTName: this.DTName, RunnerTag: runnerTag };

    try {
      await this.gitlabInstance.api.PipelineTriggerTokens.trigger(
        projectId,
        'main',
        triggerToken,
        { variables },
      );
      this.gitlabInstance.logs.push({
        status: 'success',
        DTName: this.DTName,
        runnerTag,
      });
      this.lastExecutionStatus = 'success';
      return true;
    } catch (error) {
      this.gitlabInstance.logs.push({
        status: 'error',
        error: new Error(String(error)),
        DTName: this.DTName,
        runnerTag,
      });
      this.lastExecutionStatus = 'error';
      return false;
    }
  }

  executionStatus(): string | null {
    return this.lastExecutionStatus;
  }
}

export default DigitalTwin;