UNPKG

mstar-adsperformance

Version:

auto monitoring morningstar web pages ads performance

95 lines (81 loc) 2.86 kB
'use strict'; import AdTypes from './AdType' class DataCenter { constructor () { this.pageUrls = {}; this.resultUrls = {}; } addUrls (url) { if (typeof this.pageUrls[url] === 'undefined') { this.pageUrls[url] = {} let adTypes = AdTypes.getInstance().getAdTypes(); for (var type of adTypes) { this.pageUrls[url][type] = []; } } } pushData (url, type, dataObject) { if (typeof this.pageUrls[url] === 'undefined') { return; } if (Array.isArray(this.pageUrls[url][type]) === false ) { return; } this.pageUrls[url][type].push(dataObject); } calculateData () { Object.keys(this.pageUrls).forEach((key) => { let obj = this.pageUrls[key]; let adTypes = AdTypes.getInstance().getAdTypes(); this.resultUrls[key] = {}; for (let type of adTypes) { let urlResultByAdType = this.calculateDataForSpecificUrl(obj, type); this.resultUrls[key][type] = urlResultByAdType; } }); return this.resultUrls; } calculateDataForSpecificUrl (page, type) { if (page[type] === null || typeof page[type] === 'undefined') { return; } let adArray = page[type]; let resultArray = []; let len = adArray.length; if (len === 0) { return; } resultArray = adArray[0]; const adInstanceLength = resultArray.length; for (var i = 1; i < len; i++) { if (adInstanceLength !== adArray[i].length) { console.log('Data loading incorrect, need check result, item number is: ', i); } for (var j = 0; j < adInstanceLength; j++) { resultArray[j] = this.assignObjectValue (resultArray[j], adArray[i][j]); } } resultArray.map((itemAd)=>{ itemAd.generatetime = (Number(itemAd.generatetime)/len).toFixed(3); itemAd.setuptime = (Number(itemAd.setuptime)/len).toFixed(3); itemAd.rendertime = (Number(itemAd.rendertime)/len).toFixed(3); itemAd.renderadcontentstart = (Number(itemAd.renderadcontentstart)/len).toFixed(3); itemAd.renderadcontentend = (Number(itemAd.renderadcontentend)/len).toFixed(3); }) return resultArray; } assignObjectValue(targetObj, newObj) { // TODO make sure the instance will be order if(targetObj.dest === newObj.dest) { targetObj.generatetime = Number(targetObj.generatetime) + Number(newObj.generatetime); targetObj.setuptime = Number(targetObj.setuptime) + Number(newObj.setuptime); targetObj.rendertime = Number(targetObj.rendertime) + Number(newObj.rendertime); targetObj.renderadcontentstart = Number(targetObj.renderadcontentstart) + Number(newObj.renderadcontentstart); targetObj.renderadcontentend = Number(targetObj.renderadcontentend) + Number(newObj.renderadcontentend); } else { console.log("Ad object value is not match, check page source with Shone"); } return targetObj; } } export default DataCenter;