mirror of
				https://github.com/HabitRPG/habitica.git
				synced 2025-10-30 20:52:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			45 lines
		
	
	
		
			1022 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1022 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* eslint-disable import/no-commonjs */
 | |
| const logger = require('./logger');
 | |
| 
 | |
| class Timer {
 | |
|   constructor (options = {}) {
 | |
|     const warningThreshold = options.minutesWarningThreshold || 10;
 | |
| 
 | |
|     this.count = 0;
 | |
|     this._minutesWarningThreshold = warningThreshold * 60;
 | |
| 
 | |
|     if (!options.disableAutoStart) this.start();
 | |
|   }
 | |
| 
 | |
|   start () {
 | |
|     this._internalTimer = setInterval(() => {
 | |
|       this.count *= 1;
 | |
| 
 | |
|       const shouldWarn = this._minutesWarningThreshold < this.count;
 | |
|       const logStyle = shouldWarn ? 'error' : 'warn';
 | |
|       const dangerMessage = shouldWarn ? 'DANGER: ' : '';
 | |
| 
 | |
|       if (this.count % 30 === 0) {
 | |
|         logger[logStyle](`${dangerMessage}Process has been running for`, this.count / 60, 'minutes');
 | |
|       }
 | |
|     }, 1000);
 | |
|   }
 | |
| 
 | |
|   stop () {
 | |
|     if (!this._internalTimer) {
 | |
|       throw new Error('Timer has not started');
 | |
|     }
 | |
|     clearInterval(this._internalTimer);
 | |
|   }
 | |
| 
 | |
|   get seconds () {
 | |
|     return this.count;
 | |
|   }
 | |
| 
 | |
|   get minutes () {
 | |
|     return this.count / 60;
 | |
|   }
 | |
| }
 | |
| 
 | |
| module.exports = Timer;
 |