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;
 | |
|   }
 | |
| }
 |