Built motion from commit f25620e4.|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 _0x3a6f=['../../files/reports','%s.%s','basename','savename','extname','zip','existsSync','status','Sent','message','attachments','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','Empty','Report\x20empty\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20this\x20email.\x0a\x0a','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','Failed','error','SendMail','error\x20mail','email\x20sent','case\x20loading','currentAttempt','retryOptions','retries','job','data','operation','still\x20loading','stop','case\x20empty','case\x20failed','entity','attempt','Job\x20ID\x20','dataValues','sendMail','Smtp','isNil','subtractNumber','subtractNumber\x20null\x20or\x20undefined','subtractUnit','YYYY-MM-DD\x20HH:mm:ss','output','DefaultReportId','exec\x20defaul\x20report\x20id:%s','runReport','CustomReportId','no\x20report\x20id','Schedule','findAll','MailServerOut','CloudProvider','toString','difference','length','deleteJob','delete\x20cron','resolve','run\x20job','cron','active','startAt','endAt','start','exists','stop\x20cron','update','update\x20cron','util','moment','cron-job-manager','jayson/promise','bluebird','../logger','schedule','../../mysqldb','retry','../../api/analyticCustomReport/analyticCustomReport.controller','../../api/analyticDefaultReport/analyticDefaultReport.controller','client','number','AnalyticExtractedReport','findOne','then','catch','info','Try\x20to\x20send\x20a\x20mail\x20to','email','MailAccount','format','\x22%s\x22\x20<%s>','name','user','bcc','Report\x20%s\x20last\x20%s\x20%s','join'];(function(_0x2ce38b,_0x29cb69){var _0x7f9db=function(_0x33b613){while(--_0x33b613){_0x2ce38b['push'](_0x2ce38b['shift']());}};_0x7f9db(++_0x29cb69);}(_0x3a6f,0x180));var _0xf3a6=function(_0x3ef47d,_0x376369){_0x3ef47d=_0x3ef47d-0x0;var _0xef9333=_0x3a6f[_0x3ef47d];return _0xef9333;};'use strict';var fs=require('fs');var util=require(_0xf3a6('0x0'));var path=require('path');var _=require('lodash');var moment=require(_0xf3a6('0x1'));var CronJobManager=require(_0xf3a6('0x2'));var jayson=require(_0xf3a6('0x3'));var BPromise=require(_0xf3a6('0x4'));var logger=require(_0xf3a6('0x5'))(_0xf3a6('0x6'));var db=require(_0xf3a6('0x7'))['db'];const retry=require(_0xf3a6('0x8'));var analyticCustomReportController=require(_0xf3a6('0x9'));var analyticDefaultReportController=require(_0xf3a6('0xa'));var client=jayson[_0xf3a6('0xb')]['http']({'port':0x232b});var manager=new CronJobManager();function getReportData(_0x2859d1){const _0x1b6ff1={};if(typeof _0x2859d1===_0xf3a6('0xc')){_0x1b6ff1['id']=_0x2859d1;}return db[_0xf3a6('0xd')][_0xf3a6('0xe')]({'where':_0x1b6ff1})[_0xf3a6('0xf')](function(_0x4fd038){return _0x4fd038;})[_0xf3a6('0x10')](function(_0x5f25da){logger['error'](_0x5f25da);});}function handleSendEmail(_0x2d8d18,_0x42ce69){logger[_0xf3a6('0x11')](_0xf3a6('0x12'),_0x2d8d18[_0xf3a6('0x13')]);var _0x5e75d5=!![];var _0x4368b8=_0x2d8d18[_0xf3a6('0x14')]['getSmtpOptions']();var _0x5c664d={'account':_0x4368b8,'message':{'from':util[_0xf3a6('0x15')](_0xf3a6('0x16'),_0x2d8d18['MailAccount'][_0xf3a6('0x17')],_0x2d8d18[_0xf3a6('0x14')]['email']||_0x2d8d18[_0xf3a6('0x14')]['Smtp'][_0xf3a6('0x18')]),'to':_0x2d8d18[_0xf3a6('0x13')],'cc':_0x2d8d18['cc'],'bcc':_0x2d8d18[_0xf3a6('0x19')],'subject':util[_0xf3a6('0x15')](_0xf3a6('0x1a'),_0x42ce69[_0xf3a6('0x17')],_0x2d8d18['subtractNumber'],_0x2d8d18['subtractUnit'])}};var _0x56c2de=path[_0xf3a6('0x1b')](__dirname,_0xf3a6('0x1c'));var _0x1b295d=_0x42ce69['savename'];var _0x5ad5e1=util['format'](_0xf3a6('0x1d'),path[_0xf3a6('0x1e')](_0x42ce69[_0xf3a6('0x1f')],path[_0xf3a6('0x20')](_0x42ce69[_0xf3a6('0x1f')])),_0xf3a6('0x21'));var _0x156da4=path[_0xf3a6('0x1b')](_0x56c2de,_0x1b295d);var _0x33edc8=path[_0xf3a6('0x1b')](_0x56c2de,_0x5ad5e1);if(fs[_0xf3a6('0x22')](_0x156da4)){_0x42ce69[_0xf3a6('0x23')]=_0xf3a6('0x24');_0x5c664d[_0xf3a6('0x25')][_0xf3a6('0x26')]=[{'filename':_0x1b295d,'path':_0x156da4}];_0x5c664d['message'][_0xf3a6('0x27')]=util[_0xf3a6('0x15')](_0xf3a6('0x28'),JSON[_0xf3a6('0x29')](_0x42ce69,null,0x2));}else if(fs[_0xf3a6('0x22')](_0x33edc8)){_0x42ce69[_0xf3a6('0x23')]=_0xf3a6('0x24');_0x5c664d[_0xf3a6('0x25')][_0xf3a6('0x26')]=[{'filename':_0x5ad5e1,'path':_0x33edc8}];}else{if(_0x42ce69['status']===_0xf3a6('0x2a')){_0x5c664d[_0xf3a6('0x25')]['text']=_0xf3a6('0x2b');if(!_0x2d8d18[_0xf3a6('0x2c')]){_0x5e75d5=![];logger['info'](_0xf3a6('0x2d'));}}else if(_0x42ce69[_0xf3a6('0x23')]===_0xf3a6('0x2e')){_0x5c664d[_0xf3a6('0x25')][_0xf3a6('0x27')]=_0xf3a6('0x2f');}else if(_0x42ce69[_0xf3a6('0x23')]===_0xf3a6('0x30')){_0x5c664d[_0xf3a6('0x25')][_0xf3a6('0x27')]=_0xf3a6('0x31');}else if(_0x42ce69[_0xf3a6('0x23')]===_0xf3a6('0x32')){_0x5c664d[_0xf3a6('0x25')]['text']='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';}else{logger[_0xf3a6('0x33')]('[handleSendEmail]\x20Unrecognized\x20status:',_0x42ce69[_0xf3a6('0x23')]);}}if(_0x5e75d5){return client['request'](_0xf3a6('0x34'),_0x5c664d)[_0xf3a6('0xf')](function(_0x161c19){if(_0x161c19[_0xf3a6('0x33')]){return logger[_0xf3a6('0x33')](_0xf3a6('0x35'),JSON[_0xf3a6('0x29')](_0x161c19));}return logger[_0xf3a6('0x11')](_0xf3a6('0x36'));})['catch'](function(_0x377142){return logger['error'](_0xf3a6('0x35'),JSON['stringify'](_0x377142));});}}function handleError(){return function(_0x7468e9){return logger[_0xf3a6('0x33')](JSON[_0xf3a6('0x29')](_0x7468e9));};}function loading(_0x453afe){logger[_0xf3a6('0x11')](_0xf3a6('0x37'));if(_0x453afe[_0xf3a6('0x38')]===_0x453afe[_0xf3a6('0x39')][_0xf3a6('0x3a')]){handleSendEmail(_0x453afe[_0xf3a6('0x3b')],_0x453afe[_0xf3a6('0x3c')]);_0x453afe[_0xf3a6('0x3d')]['stop']();}else{_0x453afe[_0xf3a6('0x3d')][_0xf3a6('0x8')](_0xf3a6('0x3e'));}}function completed(_0x152b9d){logger['info']('case\x20completed');handleSendEmail(_0x152b9d['job'],_0x152b9d['data']);_0x152b9d[_0xf3a6('0x3d')][_0xf3a6('0x3f')]();}function empty(_0x36d67b){logger['info'](_0xf3a6('0x40'));handleSendEmail(_0x36d67b['job'],_0x36d67b[_0xf3a6('0x3c')]);_0x36d67b[_0xf3a6('0x3d')][_0xf3a6('0x3f')]();}function failed(_0x3872a3){logger['info'](_0xf3a6('0x41'));handleSendEmail(_0x3872a3[_0xf3a6('0x3b')],_0x3872a3['data']);_0x3872a3[_0xf3a6('0x3d')][_0xf3a6('0x3f')]();}function urecognized(_0x481913){logger['error']('Unrecognized\x20status:',_0x481913[_0xf3a6('0x42')]['dataValues'][_0xf3a6('0x23')]);_0x481913['operation'][_0xf3a6('0x3f')]();}const reportStatusStrategies={'Loading':loading,'Completed':completed,'Empty':empty,'Failed':failed,'Unrecognized':urecognized};function retryer(_0x1caa1b,_0x32e9f9){const _0x3a09e9={'retries':0x3,'factor':0x2,'minTimeout':0x5b*0x3e8,'maxTimeout':0xa*0x3c*0x3e8};const _0x28c962=retry[_0xf3a6('0x3d')](_0x3a09e9);_0x28c962[_0xf3a6('0x43')](_0x4f78e6=>{logger[_0xf3a6('0x11')](_0xf3a6('0x44')+_0x1caa1b['id']+'\x20Attempt\x20#:'+_0x4f78e6);try{getReportData(_0x32e9f9['id'])[_0xf3a6('0xf')](function(_0xfbd7dd){_0x32e9f9=_0xfbd7dd;logger[_0xf3a6('0x11')]('report\x20status:',_0xfbd7dd['dataValues']['status']);if(!reportStatusStrategies[_0xfbd7dd[_0xf3a6('0x45')][_0xf3a6('0x23')]]){logger[_0xf3a6('0x33')]('report\x20status:',_0xfbd7dd['dataValues']['status']);_0x28c962[_0xf3a6('0x8')]();}reportStatusStrategies[_0xfbd7dd['dataValues'][_0xf3a6('0x23')]]({'operation':_0x28c962,'currentAttempt':_0x4f78e6,'retryOptions':_0x3a09e9,'job':_0x1caa1b,'data':_0x32e9f9,'entity':_0xfbd7dd});});}catch(_0xea730a){_0x28c962[_0xf3a6('0x8')](_0xea730a);}});}function handleResult(_0x4ddaea){return function(_0x551dc4){if(_0x4ddaea[_0xf3a6('0x46')]&&_0x4ddaea[_0xf3a6('0x14')]&&_0x4ddaea['MailAccount'][_0xf3a6('0x47')]&&!_[_0xf3a6('0x48')](_0x4ddaea[_0xf3a6('0x13')])){retryer(_0x4ddaea,_0x551dc4);}};}function handleJob(_0x4862bf){return function(){try{if(_[_0xf3a6('0x48')](_0x4862bf[_0xf3a6('0x49')])){return logger[_0xf3a6('0x11')](_0xf3a6('0x4a'));}if(_[_0xf3a6('0x48')](_0x4862bf[_0xf3a6('0x4b')])){return logger[_0xf3a6('0x11')]('subtractUnit\x20null\x20or\x20undefined');}var _0x253bc8={'startDate':moment()['subtract'](_0x4862bf[_0xf3a6('0x49')],_0x4862bf[_0xf3a6('0x4b')])[_0xf3a6('0x15')]('YYYY-MM-DD\x20HH:mm:ss'),'endDate':moment()[_0xf3a6('0x15')](_0xf3a6('0x4c')),'type':'scheduled','output':_0x4862bf[_0xf3a6('0x4d')],'name':_0x4862bf[_0xf3a6('0x17')]};if(!_[_0xf3a6('0x48')](_0x4862bf[_0xf3a6('0x4e')])){logger[_0xf3a6('0x11')](_0xf3a6('0x4f'),_0x4862bf[_0xf3a6('0x4e')]);return analyticDefaultReportController['runReport']({'id':_0x4862bf[_0xf3a6('0x4e')]},_0x253bc8)['then'](handleResult(_0x4862bf))[_0xf3a6('0x10')](handleError());}if(!_['isNil'](_0x4862bf['CustomReportId'])){logger['info']('exec\x20custom\x20report\x20id:%s',_0x4862bf['CustomReportId']);return analyticCustomReportController[_0xf3a6('0x50')]({'id':_0x4862bf[_0xf3a6('0x51')]},_0x253bc8)['then'](handleResult(_0x4862bf))['catch'](handleError());}}catch(_0x3ba66b){logger[_0xf3a6('0x33')](JSON[_0xf3a6('0x29')](_0x3ba66b));}return logger[_0xf3a6('0x11')](_0xf3a6('0x52'));};}function getJobs(_0x424595){var _0x39fc9f={};if(_0x424595){_0x39fc9f['id']=_0x424595;}return db[_0xf3a6('0x53')][_0xf3a6('0x54')]({'where':_0x39fc9f,'include':[{'model':db[_0xf3a6('0x14')],'attributes':['id',_0xf3a6('0x17'),'email'],'include':[{'model':db[_0xf3a6('0x55')],'as':_0xf3a6('0x47'),'include':[{'model':db[_0xf3a6('0x56')],'as':_0xf3a6('0x56')}]}]}]})[_0xf3a6('0xf')](function(_0x201881){var _0x249a5c=_['keys'](manager['jobs']);var _0x5bb2ea=_['map'](_0x201881,function(_0x4ac37b){return _0x4ac37b['id'][_0xf3a6('0x57')]();});var _0x8e37e5=_['keyBy'](_0x201881,function(_0x4f0f68){return _0x4f0f68['id'][_0xf3a6('0x57')]();});var _0xff1804=_0x424595?_0x5bb2ea:_[_0xf3a6('0x58')](_0x5bb2ea,_0x249a5c);var _0x4adce3=_['intersection'](_0x5bb2ea,_0x249a5c);var _0x58c4c3=_[_0xf3a6('0x58')](_0x249a5c,_0x5bb2ea);var _0x36c439;var _0x307522;for(_0x36c439=0x0;_0x36c439<_0x58c4c3[_0xf3a6('0x59')]&&!_0x424595;_0x36c439+=0x1){_0x307522=_0x58c4c3[_0x36c439][_0xf3a6('0x57')]();if(manager['exists'](_0x307522)){manager['stop'](_0x307522);manager[_0xf3a6('0x5a')](_0x307522);logger[_0xf3a6('0x11')](_0xf3a6('0x5b'),_0x307522);}}logger[_0xf3a6('0x11')]('toRun',JSON[_0xf3a6('0x29')](_0xff1804));for(_0x36c439=0x0;_0x36c439<_0xff1804[_0xf3a6('0x59')];_0x36c439+=0x1){_0x307522=_0xff1804[_0x36c439][_0xf3a6('0x57')]();if(_0x424595){logger[_0xf3a6('0x11')](JSON[_0xf3a6('0x29')](_0x8e37e5[_0x307522]));BPromise[_0xf3a6('0x5c')]()[_0xf3a6('0xf')](handleJob(_0x8e37e5[_0x307522]));logger[_0xf3a6('0x11')](_0xf3a6('0x5d'),_0x8e37e5[_0x307522][_0xf3a6('0x17')],_0x8e37e5[_0x307522][_0xf3a6('0x5e')]);}else if(_0x8e37e5[_0x307522][_0xf3a6('0x5e')]&&_0x8e37e5[_0x307522][_0xf3a6('0x5f')]&&moment()['isBetween'](_0x8e37e5[_0x307522][_0xf3a6('0x60')],_0x8e37e5[_0x307522][_0xf3a6('0x61')])){manager['add'](_0x307522,_0x8e37e5[_0x307522][_0xf3a6('0x5e')],handleJob(_0x8e37e5[_0x307522]));manager[_0xf3a6('0x62')](_0x307522);logger['info']('add\x20cron',_0x8e37e5[_0x307522]['name'],_0x8e37e5[_0x307522][_0xf3a6('0x5e')]);}else if(manager[_0xf3a6('0x63')](_0x307522)){manager['stop'](_0x307522);manager[_0xf3a6('0x5a')](_0x307522);logger['info'](_0xf3a6('0x64'),_0x8e37e5[_0x307522]['name'],_0x8e37e5[_0x307522][_0xf3a6('0x5e')]);}}for(_0x36c439=0x0,_0x307522;_0x36c439<_0x4adce3[_0xf3a6('0x59')]&&!_0x424595;_0x36c439+=0x1){_0x307522=_0x4adce3[_0x36c439]['toString']();if(manager[_0xf3a6('0x63')](_0x307522)){if(_0x8e37e5[_0x307522][_0xf3a6('0x5e')]&&_0x8e37e5[_0x307522][_0xf3a6('0x5f')]&&moment()['isBetween'](_0x8e37e5[_0x307522][_0xf3a6('0x60')],_0x8e37e5[_0x307522][_0xf3a6('0x61')])){manager[_0xf3a6('0x65')](_0x307522,_0x8e37e5[_0x307522][_0xf3a6('0x5e')],handleJob(_0x8e37e5[_0x307522]));logger[_0xf3a6('0x11')](_0xf3a6('0x66'),_0x8e37e5[_0x307522][_0xf3a6('0x17')],_0x8e37e5[_0x307522][_0xf3a6('0x5e')]);}else{manager[_0xf3a6('0x3f')](_0x307522);manager[_0xf3a6('0x5a')](_0x307522);logger[_0xf3a6('0x11')](_0xf3a6('0x64'),_0x8e37e5[_0x307522]['name'],_0x8e37e5[_0x307522]['cron']);}}}})['catch'](function(_0x5bb219){logger[_0xf3a6('0x33')](JSON[_0xf3a6('0x29')](_0x5bb219));});}exports['run']=function(_0x31268e){return getJobs(_0x31268e);};exports[_0xf3a6('0x62')]=function(){setInterval(function(){return getJobs();},0x3c*0x3e8);return getJobs();};