split defining a processor from running it
This commit is contained in:
		
							parent
							
								
									53b6ca73c8
								
							
						
					
					
						commit
						2ca43d5995
					
				
					 1 changed files with 41 additions and 22 deletions
				
			
		
							
								
								
									
										59
									
								
								scripts/external/processor.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										59
									
								
								scripts/external/processor.js
									
										
									
									
										vendored
									
									
								
							|  | @ -12,50 +12,69 @@ export default class processor { | ||||||
| 	#filter;  | 	#filter;  | ||||||
| 	 | 	 | ||||||
| 	async scrape (fields) { | 	async scrape (fields) { | ||||||
| 		this.data = new scraper ((fields) ? fields : this.targets);  | 		this.product.details = new scraper ((fields) ? fields : this.targets);  | ||||||
|  | 
 | ||||||
|  | 		// Read product data and gather the SHA512 hash. 
 | ||||||
|  | 		await this.product.read(); | ||||||
|  | 		 | ||||||
|  | 		// Save the details already. 
 | ||||||
|  | 		return(await this.product.save()); | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	async analyze() { | 	async analyze(options = {}) { | ||||||
| 		// Do not reset the product data, just re-use it. 
 |  | ||||||
| 		this.product = (!this.product) ? new product(this.data) : this.product; |  | ||||||
| 		await this.product.attach(); |  | ||||||
| 
 |  | ||||||
| 		// Set up current data of the site, but forget about its previous errored state. 
 | 		// Set up current data of the site, but forget about its previous errored state. 
 | ||||||
| 		this.product.status[`done`] = false; |  | ||||||
| 		delete this.product.status[`error`]; | 		delete this.product.status[`error`]; | ||||||
| 
 | 
 | ||||||
| 		// First save the SHA512 summary of the scraped data. 
 | 		// Set the completion state to anything else but not 1. 
 | ||||||
|  | 		this.product.status[`done`] = (this.product.status[`done`] == 1) ? 0 : this.product.status[`done`]; | ||||||
|  | 
 | ||||||
|  | 		// Save this information. 
 | ||||||
| 		this.product.save(); | 		this.product.save(); | ||||||
| 
 | 
 | ||||||
| 		// Try analysis of the data.
 | 		// Try analysis of the data.
 | ||||||
| 		try { | 		try { | ||||||
| 			await this.product.analyze(); | 			await this.product.analyze(options); | ||||||
| 		} catch(err) { | 		} catch(err) { | ||||||
| 			logging.error(err.name, err.message, err.stack, false); | 			// Use the existing error if there exists any. 
 | ||||||
|  | 			this.product.status[`error`] = (this.product.status[`error`]) ? this.product.status[`error`] : {}; | ||||||
| 
 | 
 | ||||||
| 			// Convert the error to an object. 
 | 			(this.product.status[`error`]) ? false | ||||||
| 			this.product.status[`error`] = {}; | 			:  [`name`, `message`, `stack`].forEach((KEY) => { | ||||||
| 			[`name`, `message`, `stack`].forEach((KEY) => { |  | ||||||
| 				this.product.status.error[KEY] = String(err[KEY]); | 				this.product.status.error[KEY] = String(err[KEY]); | ||||||
| 			}) | 			}); | ||||||
|  | 			logging.error(err); | ||||||
|  | 			logging.error(this.product.status[`error`].name, this.product.status[`error`].message, this.product.status[`error`].stack); | ||||||
| 		}; | 		}; | ||||||
| 
 | 
 | ||||||
| 		// Indicate that the process is done. 
 | 		// Indicate that the process is done. 
 | ||||||
| 		this.product.status[`done`] = true; | 		this.product.status[`done`] = 1; | ||||||
| 
 | 
 | ||||||
| 		// Save the data. 
 | 		// Save the data. 
 | ||||||
| 		this.product.save(); | 		this.product.save(); | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
|  | 	/* | ||||||
|  | 	Run in the chronological order. Useful when needed to be redone manually.  | ||||||
|  | 	*/ | ||||||
|  | 	async run (options = {}) { | ||||||
|  | 		this.product.status[`done`] = (this.targets) ? .25 : 0; | ||||||
|  | 
 | ||||||
|  | 		// Scrape the data. 
 | ||||||
|  | 		await this.scrape(); | ||||||
|  | 		 | ||||||
|  | 		if ((this.product.details) ? Object.keys(this.product.details).length : false) { | ||||||
|  | 			this.product.status[`done`] = .5; | ||||||
|  | 			this.analyze((options && (typeof options).includes(`obj`)) ? options[`analysis`] : null); | ||||||
|  | 		}; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	constructor (filter, URL = window.location.href) { | 	constructor (filter, URL = window.location.href, options = {}) { | ||||||
| 		this.URL = URLs.clean(URL); | 		this.URL = URLs.clean(URL); | ||||||
| 		this.#filter = filter; | 		this.#filter = filter; | ||||||
| 
 | 
 | ||||||
|  | 		this.product = new product(); | ||||||
| 		this.targets = this.#filter[`data`]; | 		this.targets = this.#filter[`data`]; | ||||||
| 		this.scrape(); |  | ||||||
| 		 | 		 | ||||||
| 		if ((this.data) ? (((typeof (this.data)).includes(`obj`) && !Array.isArray(this.data)) ? Object.keys(this.data) : this.data) : false) { | 		((((typeof options).includes(`obj`)) ? Object.hasOwn(options, `automatic`) : false) ? options[`automatic`] : true) ? this.run() : false; | ||||||
| 			this.analyze(); |  | ||||||
| 		} |  | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue