You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			131 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			131 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			TypeScript
		
	
import { isNumber } from 'lodash';
 | 
						|
import { v4 } from 'uuid';
 | 
						|
import { sleepFor } from '../../../../../session/utils/Promise';
 | 
						|
import {
 | 
						|
  AddJobCheckReturn,
 | 
						|
  FakeSleepForMultiJobData,
 | 
						|
  FakeSleepJobData,
 | 
						|
  PersistedJob,
 | 
						|
  RunJobResult,
 | 
						|
} from '../../../../../session/utils/job_runners/PersistedJob';
 | 
						|
 | 
						|
export class FakeSleepForMultiJob extends PersistedJob<FakeSleepForMultiJobData> {
 | 
						|
  constructor({
 | 
						|
    identifier,
 | 
						|
    nextAttemptTimestamp,
 | 
						|
    maxAttempts,
 | 
						|
    currentRetry,
 | 
						|
    returnResult,
 | 
						|
    sleepDuration,
 | 
						|
  }: Pick<FakeSleepForMultiJobData, 'currentRetry' | 'returnResult' | 'sleepDuration'> &
 | 
						|
    Partial<
 | 
						|
      Pick<FakeSleepForMultiJobData, 'nextAttemptTimestamp' | 'maxAttempts' | 'identifier'>
 | 
						|
    >) {
 | 
						|
    super({
 | 
						|
      jobType: 'FakeSleepForJobMultiType',
 | 
						|
      identifier: identifier || v4(),
 | 
						|
      delayBetweenRetries: 10000,
 | 
						|
      maxAttempts: isNumber(maxAttempts) ? maxAttempts : 3,
 | 
						|
      nextAttemptTimestamp: nextAttemptTimestamp || Date.now() + 3000,
 | 
						|
      currentRetry,
 | 
						|
      returnResult,
 | 
						|
      sleepDuration,
 | 
						|
    });
 | 
						|
    if (process.env.NODE_APP_INSTANCE !== undefined) {
 | 
						|
      throw new Error('FakeSleepForJobMultiType are only meant for testing purposes');
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  public async run(): Promise<RunJobResult> {
 | 
						|
    window.log.warn(
 | 
						|
      `running job ${this.persistedData.jobType} with id:"${this.persistedData.identifier}". sleeping for ${this.persistedData.sleepDuration} & returning ${this.persistedData.returnResult} `
 | 
						|
    );
 | 
						|
    await sleepFor(this.persistedData.sleepDuration);
 | 
						|
    window.log.warn(
 | 
						|
      `${this.persistedData.jobType} with id:"${this.persistedData.identifier}" done. returning success `
 | 
						|
    );
 | 
						|
    if (this.persistedData.returnResult) {
 | 
						|
      return RunJobResult.Success;
 | 
						|
    }
 | 
						|
    return RunJobResult.RetryJobIfPossible;
 | 
						|
  }
 | 
						|
 | 
						|
  public serializeJob(): FakeSleepForMultiJobData {
 | 
						|
    return super.serializeBase();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * For the fakesleep for multi, we want to allow as many job as we want, so this returns null
 | 
						|
   */
 | 
						|
  public addJobCheck(_jobs: Array<FakeSleepForMultiJobData>): AddJobCheckReturn {
 | 
						|
    return null;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * For the MultiFakeSleep job, there are no jobs to remove if we try to add a new one of the same type.
 | 
						|
   */
 | 
						|
  public nonRunningJobsToRemove(_jobs: Array<FakeSleepForMultiJobData>) {
 | 
						|
    return [];
 | 
						|
  }
 | 
						|
 | 
						|
  public getJobTimeoutMs(): number {
 | 
						|
    return 10000;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
export class FakeSleepForJob extends PersistedJob<FakeSleepJobData> {
 | 
						|
  constructor({
 | 
						|
    identifier,
 | 
						|
    nextAttemptTimestamp,
 | 
						|
    maxAttempts,
 | 
						|
    currentRetry,
 | 
						|
  }: Pick<FakeSleepJobData, 'currentRetry' | 'maxAttempts'> &
 | 
						|
    Partial<Pick<FakeSleepJobData, 'nextAttemptTimestamp' | 'identifier'>>) {
 | 
						|
    super({
 | 
						|
      jobType: 'FakeSleepForJobType',
 | 
						|
      identifier: identifier || v4(),
 | 
						|
      delayBetweenRetries: 10000,
 | 
						|
      maxAttempts,
 | 
						|
      nextAttemptTimestamp: nextAttemptTimestamp || Date.now() + 3000,
 | 
						|
      currentRetry,
 | 
						|
      returnResult: false,
 | 
						|
      sleepDuration: 5000,
 | 
						|
    });
 | 
						|
    if (process.env.NODE_APP_INSTANCE !== undefined) {
 | 
						|
      throw new Error('FakeSleepForJob are only meant for testing purposes');
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  public async run(): Promise<RunJobResult> {
 | 
						|
    window.log.warn(
 | 
						|
      `running job ${this.persistedData.jobType} with id:"${this.persistedData.identifier}" `
 | 
						|
    );
 | 
						|
    await sleepFor(this.persistedData.sleepDuration);
 | 
						|
    window.log.warn(
 | 
						|
      `${this.persistedData.jobType} with id:"${this.persistedData.identifier}" done. returning failed `
 | 
						|
    );
 | 
						|
    return RunJobResult.RetryJobIfPossible;
 | 
						|
  }
 | 
						|
 | 
						|
  public serializeJob(): FakeSleepJobData {
 | 
						|
    return super.serializeBase();
 | 
						|
  }
 | 
						|
 | 
						|
  public addJobCheck(jobs: Array<FakeSleepJobData>): AddJobCheckReturn {
 | 
						|
    return this.addJobCheckSameTypePresent(jobs);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * For the FakeSleep job, we do not care about the jobs already in the list.
 | 
						|
   * We just never want to add a new job of that type if there is already one in the queue.
 | 
						|
   * This is done by the `addJobCheck` method above
 | 
						|
   */
 | 
						|
  public nonRunningJobsToRemove(_jobs: Array<FakeSleepJobData>) {
 | 
						|
    return [];
 | 
						|
  }
 | 
						|
 | 
						|
  public getJobTimeoutMs(): number {
 | 
						|
    return 10000;
 | 
						|
  }
 | 
						|
}
 |