mstar-adsperformance
Version:
auto monitoring morningstar web pages ads performance
95 lines (81 loc) • 2.86 kB
JavaScript
;
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;