Built motion from commit fd055180.|2.6.30
[motion2.git] / server / config / schedule / index.js
1 // *************************************************************************
2 // *                                                                       *
3 // * xCALLY Motion -  The Omnichannel Contact Center                       *
4 // * Copyright (c) Xenialab s.r.l. All Rights Reserved                     *
5 // *                                                                       *
6 // *************************************************************************
7 // *                                                                       *
8 // * Email: info@xcally.com                                                *
9 // * Website: https://www.xcally.com                                       *
10 // *                                                                       *
11 // *************************************************************************
12 // *                                                                       *
13 // * The SOFTWARE PRODUCT is protected by copyright laws and international *
14 // * copyright treaties, as well as other intellectual property laws and   *
15 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                         *
16 // *                                                                       *
17 // *************************************************************************
18 var _0x7a92=['message','text','Info\x20report:\x0a%s\x0aPlease\x20see\x20the\x20attachments\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20it.\x0a\x0a','stringify','attachments','Empty','sendIfEmpty','empty\x20file,\x20email\x20not\x20sent','Loading','Report\x20still\x20running\x20after\x20timeout.\x0aYou\x20can\x20find\x20the\x20report\x20when\x20it\x20will\x20be\x20completed\x20in\x20Analytics\x20->\x20Extracted\x20Reports.\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20this\x20email.\x0a\x0a','Completed','Report\x20file\x20creation\x20still\x20running\x20after\x20timeout.\x0aYou\x20can\x20find\x20the\x20report\x20when\x20it\x20will\x20be\x20completed\x20in\x20Analytics\x20->\x20Extracted\x20Reports.\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20this\x20email.\x0a\x0a','Report\x20extraction\x20procedure\x20has\x20run\x20into\x20an\x20unexpected\x20error.\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20this\x20email.\x0a\x0a','request','SendMail','error\x20mail','email\x20sent','case\x20loading','currentAttempt','retryOptions','job','operation','case\x20completed','data','case\x20empty','stop','case\x20failed','entity','dataValues','attempt','Job\x20ID\x20','report\x20status:','sendMail','Smtp','isNil','subtractNumber\x20null\x20or\x20undefined','YYYY-MM-DD\x20HH:mm:ss','scheduled','output','DefaultReportId','exec\x20defaul\x20report\x20id:%s','runReport','CustomReportId','exec\x20custom\x20report\x20id:%s','findAll','MailServerOut','CloudProvider','jobs','keyBy','toString','difference','intersection','length','exists','deleteJob','delete\x20cron','toRun','cron','active','startAt','endAt','start','add\x20cron','stop\x20cron','update','update\x20cron','util','path','moment','cron-job-manager','jayson/promise','bluebird','../logger','../../mysqldb','retry','../../api/analyticDefaultReport/analyticDefaultReport.controller','client','http','findOne','then','catch','error','info','Try\x20to\x20send\x20a\x20mail\x20to','email','getSmtpOptions','format','\x22%s\x22\x20<%s>','MailAccount','user','Report\x20%s\x20last\x20%s\x20%s','name','subtractNumber','subtractUnit','join','../../files/reports','savename','%s.%s','basename','existsSync','status','Sent'];(function(_0x397e5f,_0x454c8f){var _0x5302b8=function(_0x1a29ef){while(--_0x1a29ef){_0x397e5f['push'](_0x397e5f['shift']());}};_0x5302b8(++_0x454c8f);}(_0x7a92,0xa8));var _0x27a9=function(_0x36d768,_0x4ac92e){_0x36d768=_0x36d768-0x0;var _0x255ea5=_0x7a92[_0x36d768];return _0x255ea5;};'use strict';var fs=require('fs');var util=require(_0x27a9('0x0'));var path=require(_0x27a9('0x1'));var _=require('lodash');var moment=require(_0x27a9('0x2'));var CronJobManager=require(_0x27a9('0x3'));var jayson=require(_0x27a9('0x4'));var BPromise=require(_0x27a9('0x5'));var logger=require(_0x27a9('0x6'))('schedule');var db=require(_0x27a9('0x7'))['db'];const retry=require(_0x27a9('0x8'));var analyticCustomReportController=require('../../api/analyticCustomReport/analyticCustomReport.controller');var analyticDefaultReportController=require(_0x27a9('0x9'));var client=jayson[_0x27a9('0xa')][_0x27a9('0xb')]({'port':0x232b});var manager=new CronJobManager();function getReportData(_0x305339){const _0x38c122={};if(typeof _0x305339==='number'){_0x38c122['id']=_0x305339;}return db['AnalyticExtractedReport'][_0x27a9('0xc')]({'where':_0x38c122})[_0x27a9('0xd')](function(_0x2ba2f8){return _0x2ba2f8;})[_0x27a9('0xe')](function(_0x2f9bcd){logger[_0x27a9('0xf')](_0x2f9bcd);});}function handleSendEmail(_0x243138,_0x617061){logger[_0x27a9('0x10')](_0x27a9('0x11'),_0x243138[_0x27a9('0x12')]);var _0x87414b=!![];var _0x362089=_0x243138['MailAccount'][_0x27a9('0x13')]();var _0x2724a5={'account':_0x362089,'message':{'from':util[_0x27a9('0x14')](_0x27a9('0x15'),_0x243138[_0x27a9('0x16')]['name'],_0x243138[_0x27a9('0x16')][_0x27a9('0x12')]||_0x243138[_0x27a9('0x16')]['Smtp'][_0x27a9('0x17')]),'to':_0x243138[_0x27a9('0x12')],'cc':_0x243138['cc'],'bcc':_0x243138['bcc'],'subject':util['format'](_0x27a9('0x18'),_0x617061[_0x27a9('0x19')],_0x243138[_0x27a9('0x1a')],_0x243138[_0x27a9('0x1b')])}};var _0x193acf=path[_0x27a9('0x1c')](__dirname,_0x27a9('0x1d'));var _0x2e09c4=_0x617061[_0x27a9('0x1e')];var _0x98b3fa=util[_0x27a9('0x14')](_0x27a9('0x1f'),path[_0x27a9('0x20')](_0x617061[_0x27a9('0x1e')],path['extname'](_0x617061[_0x27a9('0x1e')])),'zip');var _0x5475d0=path[_0x27a9('0x1c')](_0x193acf,_0x2e09c4);var _0x1b82f3=path[_0x27a9('0x1c')](_0x193acf,_0x98b3fa);if(fs[_0x27a9('0x21')](_0x5475d0)){_0x617061[_0x27a9('0x22')]=_0x27a9('0x23');_0x2724a5[_0x27a9('0x24')]['attachments']=[{'filename':_0x2e09c4,'path':_0x5475d0}];_0x2724a5[_0x27a9('0x24')][_0x27a9('0x25')]=util['format'](_0x27a9('0x26'),JSON[_0x27a9('0x27')](_0x617061,null,0x2));}else if(fs['existsSync'](_0x1b82f3)){_0x617061[_0x27a9('0x22')]='Sent';_0x2724a5[_0x27a9('0x24')][_0x27a9('0x28')]=[{'filename':_0x98b3fa,'path':_0x1b82f3}];}else{if(_0x617061[_0x27a9('0x22')]===_0x27a9('0x29')){_0x2724a5[_0x27a9('0x24')][_0x27a9('0x25')]='Report\x20empty\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20this\x20email.\x0a\x0a';if(!_0x243138[_0x27a9('0x2a')]){_0x87414b=![];logger[_0x27a9('0x10')](_0x27a9('0x2b'));}}else if(_0x617061['status']===_0x27a9('0x2c')){_0x2724a5['message']['text']=_0x27a9('0x2d');}else if(_0x617061['status']===_0x27a9('0x2e')){_0x2724a5['message'][_0x27a9('0x25')]=_0x27a9('0x2f');}else if(_0x617061[_0x27a9('0x22')]==='Failed'){_0x2724a5[_0x27a9('0x24')][_0x27a9('0x25')]=_0x27a9('0x30');}else{logger['error']('[handleSendEmail]\x20Unrecognized\x20status:',_0x617061[_0x27a9('0x22')]);}}if(_0x87414b){return client[_0x27a9('0x31')](_0x27a9('0x32'),_0x2724a5)['then'](function(_0x11451a){if(_0x11451a[_0x27a9('0xf')]){return logger[_0x27a9('0xf')](_0x27a9('0x33'),JSON['stringify'](_0x11451a));}return logger[_0x27a9('0x10')](_0x27a9('0x34'));})['catch'](function(_0x2b4217){return logger[_0x27a9('0xf')](_0x27a9('0x33'),JSON[_0x27a9('0x27')](_0x2b4217));});}}function handleError(){return function(_0x5113ed){return logger[_0x27a9('0xf')](JSON[_0x27a9('0x27')](_0x5113ed));};}function loading(_0x48b6f8){logger[_0x27a9('0x10')](_0x27a9('0x35'));if(_0x48b6f8[_0x27a9('0x36')]===_0x48b6f8[_0x27a9('0x37')]['retries']){handleSendEmail(_0x48b6f8[_0x27a9('0x38')],_0x48b6f8['data']);_0x48b6f8[_0x27a9('0x39')]['stop']();}else{_0x48b6f8['operation'][_0x27a9('0x8')]('still\x20loading');}}function completed(_0x2893d5){logger[_0x27a9('0x10')](_0x27a9('0x3a'));handleSendEmail(_0x2893d5['job'],_0x2893d5[_0x27a9('0x3b')]);_0x2893d5[_0x27a9('0x39')]['stop']();}function empty(_0x2a1d60){logger[_0x27a9('0x10')](_0x27a9('0x3c'));handleSendEmail(_0x2a1d60[_0x27a9('0x38')],_0x2a1d60[_0x27a9('0x3b')]);_0x2a1d60['operation'][_0x27a9('0x3d')]();}function failed(_0x2d2d29){logger[_0x27a9('0x10')](_0x27a9('0x3e'));handleSendEmail(_0x2d2d29[_0x27a9('0x38')],_0x2d2d29[_0x27a9('0x3b')]);_0x2d2d29[_0x27a9('0x39')][_0x27a9('0x3d')]();}function urecognized(_0xe31df0){logger[_0x27a9('0xf')]('Unrecognized\x20status:',_0xe31df0[_0x27a9('0x3f')][_0x27a9('0x40')][_0x27a9('0x22')]);_0xe31df0[_0x27a9('0x39')][_0x27a9('0x3d')]();}const reportStatusStrategies={'Loading':loading,'Completed':completed,'Empty':empty,'Failed':failed,'Unrecognized':urecognized};function retryer(_0x27fd44,_0x29de9c){const _0x49ae0f={'retries':0x3,'factor':0x2,'minTimeout':0x5b*0x3e8,'maxTimeout':0xa*0x3c*0x3e8};const _0x597d10=retry['operation'](_0x49ae0f);_0x597d10[_0x27a9('0x41')](_0x11744b=>{logger[_0x27a9('0x10')](_0x27a9('0x42')+_0x27fd44['id']+'\x20Attempt\x20#:'+_0x11744b);try{getReportData(_0x29de9c['id'])[_0x27a9('0xd')](function(_0x37e501){_0x29de9c=_0x37e501;logger[_0x27a9('0x10')](_0x27a9('0x43'),_0x37e501[_0x27a9('0x40')]['status']);if(!reportStatusStrategies[_0x37e501['dataValues']['status']]){logger[_0x27a9('0xf')](_0x27a9('0x43'),_0x37e501[_0x27a9('0x40')][_0x27a9('0x22')]);_0x597d10[_0x27a9('0x8')]();}reportStatusStrategies[_0x37e501['dataValues']['status']]({'operation':_0x597d10,'currentAttempt':_0x11744b,'retryOptions':_0x49ae0f,'job':_0x27fd44,'data':_0x29de9c,'entity':_0x37e501});});}catch(_0x5e0364){_0x597d10[_0x27a9('0x8')](_0x5e0364);}});}function handleResult(_0xc2460e){return function(_0x282da4){if(_0xc2460e[_0x27a9('0x44')]&&_0xc2460e[_0x27a9('0x16')]&&_0xc2460e[_0x27a9('0x16')][_0x27a9('0x45')]&&!_['isNil'](_0xc2460e[_0x27a9('0x12')])){retryer(_0xc2460e,_0x282da4);}};}function handleJob(_0x31d779){return function(){try{if(_[_0x27a9('0x46')](_0x31d779['subtractNumber'])){return logger[_0x27a9('0x10')](_0x27a9('0x47'));}if(_[_0x27a9('0x46')](_0x31d779[_0x27a9('0x1b')])){return logger[_0x27a9('0x10')]('subtractUnit\x20null\x20or\x20undefined');}var _0x260d54={'startDate':moment()['subtract'](_0x31d779['subtractNumber'],_0x31d779[_0x27a9('0x1b')])[_0x27a9('0x14')](_0x27a9('0x48')),'endDate':moment()['format'](_0x27a9('0x48')),'type':_0x27a9('0x49'),'output':_0x31d779[_0x27a9('0x4a')],'name':_0x31d779[_0x27a9('0x19')]};if(!_[_0x27a9('0x46')](_0x31d779[_0x27a9('0x4b')])){logger[_0x27a9('0x10')](_0x27a9('0x4c'),_0x31d779[_0x27a9('0x4b')]);return analyticDefaultReportController[_0x27a9('0x4d')]({'id':_0x31d779[_0x27a9('0x4b')]},_0x260d54)[_0x27a9('0xd')](handleResult(_0x31d779))[_0x27a9('0xe')](handleError());}if(!_[_0x27a9('0x46')](_0x31d779[_0x27a9('0x4e')])){logger[_0x27a9('0x10')](_0x27a9('0x4f'),_0x31d779['CustomReportId']);return analyticCustomReportController[_0x27a9('0x4d')]({'id':_0x31d779[_0x27a9('0x4e')]},_0x260d54)['then'](handleResult(_0x31d779))[_0x27a9('0xe')](handleError());}}catch(_0x3c9ef9){logger[_0x27a9('0xf')](JSON[_0x27a9('0x27')](_0x3c9ef9));}return logger[_0x27a9('0x10')]('no\x20report\x20id');};}function getJobs(_0x596a9d){var _0x5d92ed={};if(_0x596a9d){_0x5d92ed['id']=_0x596a9d;}return db['Schedule'][_0x27a9('0x50')]({'where':_0x5d92ed,'include':[{'model':db['MailAccount'],'attributes':['id',_0x27a9('0x19'),_0x27a9('0x12')],'include':[{'model':db[_0x27a9('0x51')],'as':_0x27a9('0x45'),'include':[{'model':db['CloudProvider'],'as':_0x27a9('0x52')}]}]}]})[_0x27a9('0xd')](function(_0x9a70b2){var _0x42719a=_['keys'](manager[_0x27a9('0x53')]);var _0xef71ca=_['map'](_0x9a70b2,function(_0x592f0f){return _0x592f0f['id']['toString']();});var _0x3000d=_[_0x27a9('0x54')](_0x9a70b2,function(_0x1504c2){return _0x1504c2['id'][_0x27a9('0x55')]();});var _0x39447f=_0x596a9d?_0xef71ca:_[_0x27a9('0x56')](_0xef71ca,_0x42719a);var _0x374cf9=_[_0x27a9('0x57')](_0xef71ca,_0x42719a);var _0x394ded=_['difference'](_0x42719a,_0xef71ca);var _0x481570;var _0x259b29;for(_0x481570=0x0;_0x481570<_0x394ded[_0x27a9('0x58')]&&!_0x596a9d;_0x481570+=0x1){_0x259b29=_0x394ded[_0x481570][_0x27a9('0x55')]();if(manager[_0x27a9('0x59')](_0x259b29)){manager[_0x27a9('0x3d')](_0x259b29);manager[_0x27a9('0x5a')](_0x259b29);logger['info'](_0x27a9('0x5b'),_0x259b29);}}logger[_0x27a9('0x10')](_0x27a9('0x5c'),JSON['stringify'](_0x39447f));for(_0x481570=0x0;_0x481570<_0x39447f['length'];_0x481570+=0x1){_0x259b29=_0x39447f[_0x481570][_0x27a9('0x55')]();if(_0x596a9d){logger[_0x27a9('0x10')](JSON[_0x27a9('0x27')](_0x3000d[_0x259b29]));BPromise['resolve']()['then'](handleJob(_0x3000d[_0x259b29]));logger[_0x27a9('0x10')]('run\x20job',_0x3000d[_0x259b29][_0x27a9('0x19')],_0x3000d[_0x259b29][_0x27a9('0x5d')]);}else if(_0x3000d[_0x259b29][_0x27a9('0x5d')]&&_0x3000d[_0x259b29][_0x27a9('0x5e')]&&moment()['isBetween'](_0x3000d[_0x259b29][_0x27a9('0x5f')],_0x3000d[_0x259b29][_0x27a9('0x60')])){manager['add'](_0x259b29,_0x3000d[_0x259b29][_0x27a9('0x5d')],handleJob(_0x3000d[_0x259b29]));manager[_0x27a9('0x61')](_0x259b29);logger['info'](_0x27a9('0x62'),_0x3000d[_0x259b29][_0x27a9('0x19')],_0x3000d[_0x259b29][_0x27a9('0x5d')]);}else if(manager[_0x27a9('0x59')](_0x259b29)){manager['stop'](_0x259b29);manager[_0x27a9('0x5a')](_0x259b29);logger[_0x27a9('0x10')](_0x27a9('0x63'),_0x3000d[_0x259b29][_0x27a9('0x19')],_0x3000d[_0x259b29]['cron']);}}for(_0x481570=0x0,_0x259b29;_0x481570<_0x374cf9[_0x27a9('0x58')]&&!_0x596a9d;_0x481570+=0x1){_0x259b29=_0x374cf9[_0x481570][_0x27a9('0x55')]();if(manager[_0x27a9('0x59')](_0x259b29)){if(_0x3000d[_0x259b29][_0x27a9('0x5d')]&&_0x3000d[_0x259b29][_0x27a9('0x5e')]&&moment()['isBetween'](_0x3000d[_0x259b29]['startAt'],_0x3000d[_0x259b29]['endAt'])){manager[_0x27a9('0x64')](_0x259b29,_0x3000d[_0x259b29][_0x27a9('0x5d')],handleJob(_0x3000d[_0x259b29]));logger[_0x27a9('0x10')](_0x27a9('0x65'),_0x3000d[_0x259b29][_0x27a9('0x19')],_0x3000d[_0x259b29][_0x27a9('0x5d')]);}else{manager[_0x27a9('0x3d')](_0x259b29);manager[_0x27a9('0x5a')](_0x259b29);logger[_0x27a9('0x10')](_0x27a9('0x63'),_0x3000d[_0x259b29][_0x27a9('0x19')],_0x3000d[_0x259b29][_0x27a9('0x5d')]);}}}})['catch'](function(_0x1f73f3){logger[_0x27a9('0xf')](JSON[_0x27a9('0x27')](_0x1f73f3));});}exports['run']=function(_0x43a1be){return getJobs(_0x43a1be);};exports['start']=function(){setInterval(function(){return getJobs();},0x3c*0x3e8);return getJobs();};