export default AuthenticatedRoute.extend({ model: function(params){ var self = this, startDate, endDate; if(params && params.startDate && params.endDate){ startDate = params.startDate.unix(); endDate = params.endDate.unix(); }else{ startDate = moment().subtract('hours', 1).unix(); endDate = moment().unix(); }return Em.RSVP.hash({ startDate: startDate, endDate: endDate, summary: self.store.find('summary').then(function(result){ return result.objectAt(0); }), poolstats: self.store.find('poolstat'), miners: this.store.find('miner'), summaryTrend: self.store.find('trend', {type: 'SUMMARY', startDate: startDate, endDate: endDate}), minerTrend: self.store.find('trend', {type: 'MINER', startDate: startDate, endDate: endDate}) }); }, setupController: function(controller, model){ var self = this; controller.set('model', model); this.store.find('setting', {type: 'PERFORMANCE_ALERT'}).then(function(result){ if(result){ self.evaluatePerformance(model, result.objectAt(0)); } }); }, evaluatePerformance: function(model, perfExp){ if(perfExp && perfExp.get('value.enabled')){ var actualNumDevices = model.miners.length, expectedDevices = perfExp.get('value.numDevices'), actualAvgSpeed = model.summary.get('MHS av'), expectedSpeed = perfExp.get('value.numMhs'); var messages = []; if(expectedSpeed > actualAvgSpeed){ messages.push('The average speed of your miners is currently less than your expected speed setting.'); } if(expectedDevices > actualNumDevices){ messages.push('The number of devices currently running on your machine is less than your expected number of devices.'); } this.send('showHero', { type: 'warning', title: 'Performance Warning', message: messages.join('<br/>') }); } }, actions: { updateModel: function(params){ var self = this; if(params && params.startDate && params.endDate){ self.model({startDate: params.startDate, endDate: params.endDate}).then(function(data){ self.controllerFor('dashboard').set('model', data); }); }else{ self.model().then(function(data){ self.controllerFor('dashboard').set('model', data); }); } } } });
export default AuthenticatedRoute.extend({ model: function(){ var self = this, user = this.controllerFor('application').get('user'), userid = user.user.id; return Em.RSVP.hash({ info: self.store.find('setting', {type: 'DEVICE_INFO'}) .then(function(result){ return result.objectAt(0); }), strategy: self.store.find('setting', {type: 'POOL_STRATEGY'}) .then(function(result){ return result.objectAt(0); }), pools: self.store.find('pool'), perfExp: self.store.find('setting', {type: 'PERFORMANCE_ALERT'}) .then(function(result){ return result.objectAt(0); }), user: self.store.find('user', userid), notification: self.store.find('setting', {type: 'EMAIL_NOTIFICATION'}) .then(function(result){ return result.objectAt(0); }), analytics: self.store.find('setting', {type: 'ANALYTICS_CONFIG'}) .then(function(result){ return result.objectAt(0); }) }); }, afterModel: function(model){ var info = JSON.stringify(model.info.get('value')), perfExp = JSON.stringify(model.perfExp.get('value')), notification = JSON.stringify(model.notification.get('value')), analytics = JSON.stringify(model.analytics.get('value')), strategy = JSON.stringify(model.strategy.get('value')); this.set('initialSettings', { info: info, perfExp: perfExp, notification: notification, analytics: analytics, strategy: strategy }); }, convertObjectToStr: function(obj){ if(typeof obj === 'object'){ return JSON.stringify(obj); }else{ return obj; } }, objectsAreEqual: function(obj1, obj2){ var str1 = this.convertObjectToStr(obj1), str2 = this.convertObjectToStr(obj2); return str1 !== str2; }, setupController: function(controller, model){ this.controllerFor('settings.info').set('model', model.info); this.controllerFor('pools.strategy').set('model', model.strategy); this.controllerFor('pools.pools').set('model', model.pools); this.controllerFor('alerts.alerts').set('perfExpSetting', model.perfExp); this.controllerFor('settings.notification').set('model', model.notification); this.controllerFor('settings.user').set('model', model.user); this.controllerFor('settings.analytics').set('model', model.analytics); this.controllerFor('pools.strategy').set('model', model.strategy); }, actions: { saveSettings: function(){ this.controllerFor('settings').set('saveInProgress', true); this.send('showGlobalLoading'); var self = this; var dirtyModels = {}, errors = []; this.controllerFor('pools.pools').validatePools(); if(this.controllerFor('pools.pools').get('hasDirtyPools')){ if(this.controllerFor('pools.pools').get('poolsAreValid')){ dirtyModels.pools = this.controllerFor('pools.pools').save(); }else{ errors = errors.concat(this.controllerFor('pools.pools').get('validationErrors')); } } if(this.controllerFor('settings.user').get('model.isDirty')){ var usr = this.controllerFor('settings.user').get('model'); if(usr.get("isValid")){ usr.set('passwordConfirmation', null); dirtyModels.user = this.controllerFor('settings.user').save(); }else{ usr.validate().catch(function(err){ errors = errors.concat(err.username); errors = errors.concat(err.password); errors = errors.concat(err.passwordConfirmation); }); usr.set('passwordConfirmation', null); } } if(this.objectsAreEqual(this.controllerFor('settings.info').get('model.value'), this.get('initialSettings.info'))){ dirtyModels.info = this.controllerFor('settings.info').save(); this.controllerFor('application').updateDeviceName( this.controllerFor('settings.info').get('model.value.name') ); } if(this.objectsAreEqual(this.controllerFor('settings.notification').get('model.value'), this.get('initialSettings.notification'))){ dirtyModels.notification = this.controllerFor('settings.notification').save(); } if(this.objectsAreEqual(this.controllerFor('settings.analytics').get('model.value'), this.get('initialSettings.analytics'))){ dirtyModels.analytics = this.controllerFor('settings.analytics').save(); } if(this.objectsAreEqual(this.controllerFor('alerts.alerts').get('perfExpSetting.value'), this.get('initialSettings.perfExp'))){ dirtyModels.perfExp = this.controllerFor('alerts.alerts').save(); } if(this.objectsAreEqual(this.controllerFor('pools.strategy').get('model.value'), this.get('initialSettings.strategy'))){ dirtyModels.strategy = this.controllerFor('pools.strategy').get('model').save(); } if(errors.length <= 0){ Em.RSVP.hash(dirtyModels).then(function(responses){ self.controllerFor('settings').set('saveInProgress', false); self.send('hideGlobalLoading'); var valid = true, errSections = ""; for(var e in responses){ if(e in dirtyModels && dirtyModels[e]){ if(!responses[e]){ valid = false; var str = '<li>'+e.charAt(0).toUpperCase() + e.substring(1)+'</li>'; errSections += str; } } } if(!valid){ self.send('showHero', { type: 'danger', message: 'An error occurred while saving your settings... Please check the following sections ' + 'and try again<br/><ul>'+errSections+'</ul>', title: 'Error while saving settings!' }); }else{ if(Object.keys(dirtyModels).length > 0){ self.send('showHero', { type: 'success', message: 'Your settings have been saved successfully.', title: 'Settings Saved!' }); }else{ self.send('showAlert', { type: 'info', message: 'It looks like none of your settings have changed since you last saved...', title: 'No Changes? ' }); } } }).catch(function(error){ self.controllerFor('settings').set('saveInProgress', false); self.send('hideGlobalLoading'); Em.Logger.error("<ERROR>: While saving settings to server...", error); }); }else{ self.send('hideGlobalLoading'); var errList = '<ul><li>'+errors.join('</li><li>')+'</li></ul>'; self.send('showHero', { type: 'danger', message: 'Some validation errors occurred. Please review the errors and try again.<br/>'+errList, title: 'Error while saving settings!' }); } } } });