Built motion from commit b0a9a629.|2.6.33
[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 _0x8bca=['deleteJob','toRun','length','run\x20job','cron','active','isBetween','startAt','endAt','add','start','add\x20cron','exists','stop\x20cron','update\x20cron','run','path','lodash','moment','jayson/promise','bluebird','../logger','schedule','../../mysqldb','retry','client','http','number','AnalyticExtractedReport','findOne','catch','Try\x20to\x20send\x20a\x20mail\x20to','email','MailAccount','getSmtpOptions','format','\x22%s\x22\x20<%s>','user','bcc','name','subtractNumber','savename','%s.%s','basename','extname','zip','join','status','message','text','stringify','existsSync','Sent','attachments','Empty','Report\x20empty\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20this\x20email.\x0a\x0a','sendIfEmpty','info','empty\x20file,\x20email\x20not\x20sent','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','error','request','SendMail','email\x20sent','case\x20loading','currentAttempt','retries','job','data','operation','stop','case\x20completed','case\x20failed','dataValues','attempt','Job\x20ID\x20','\x20Attempt\x20#:','then','report\x20status:','sendMail','Smtp','isNil','subtractUnit','subtractUnit\x20null\x20or\x20undefined','YYYY-MM-DD\x20HH:mm:ss','scheduled','output','exec\x20defaul\x20report\x20id:%s','DefaultReportId','CustomReportId','exec\x20custom\x20report\x20id:%s','no\x20report\x20id','Schedule','findAll','MailServerOut','CloudProvider','jobs','map','keyBy','toString','intersection','difference'];(function(_0x208d35,_0x310b06){var _0xc95619=function(_0x3dce4b){while(--_0x3dce4b){_0x208d35['push'](_0x208d35['shift']());}};_0xc95619(++_0x310b06);}(_0x8bca,0x145));var _0xa8bc=function(_0x3e5086,_0x48f4a2){_0x3e5086=_0x3e5086-0x0;var _0xfeb102=_0x8bca[_0x3e5086];return _0xfeb102;};'use strict';var fs=require('fs');var util=require('util');var path=require(_0xa8bc('0x0'));var _=require(_0xa8bc('0x1'));var moment=require(_0xa8bc('0x2'));var CronJobManager=require('cron-job-manager');var jayson=require(_0xa8bc('0x3'));var BPromise=require(_0xa8bc('0x4'));var logger=require(_0xa8bc('0x5'))(_0xa8bc('0x6'));var db=require(_0xa8bc('0x7'))['db'];const retry=require(_0xa8bc('0x8'));var analyticCustomReportController=require('../../api/analyticCustomReport/analyticCustomReport.controller');var analyticDefaultReportController=require('../../api/analyticDefaultReport/analyticDefaultReport.controller');var client=jayson[_0xa8bc('0x9')][_0xa8bc('0xa')]({'port':0x232b});var manager=new CronJobManager();function getReportData(_0x19195f){const _0x2f0692={};if(typeof _0x19195f===_0xa8bc('0xb')){_0x2f0692['id']=_0x19195f;}return db[_0xa8bc('0xc')][_0xa8bc('0xd')]({'where':_0x2f0692})['then'](function(_0x26e510){return _0x26e510;})[_0xa8bc('0xe')](function(_0x3c0dc7){logger['error'](_0x3c0dc7);});}function handleSendEmail(_0x5cbf9e,_0x9ad15){logger['info'](_0xa8bc('0xf'),_0x5cbf9e[_0xa8bc('0x10')]);var _0x105050=!![];var _0x31077c=_0x5cbf9e[_0xa8bc('0x11')][_0xa8bc('0x12')]();var _0x482597={'account':_0x31077c,'message':{'from':util[_0xa8bc('0x13')](_0xa8bc('0x14'),_0x5cbf9e['MailAccount']['name'],_0x5cbf9e['MailAccount'][_0xa8bc('0x10')]||_0x5cbf9e[_0xa8bc('0x11')]['Smtp'][_0xa8bc('0x15')]),'to':_0x5cbf9e[_0xa8bc('0x10')],'cc':_0x5cbf9e['cc'],'bcc':_0x5cbf9e[_0xa8bc('0x16')],'subject':util['format']('Report\x20%s\x20last\x20%s\x20%s',_0x9ad15[_0xa8bc('0x17')],_0x5cbf9e[_0xa8bc('0x18')],_0x5cbf9e['subtractUnit'])}};var _0x215e49=path['join'](__dirname,'../../files/reports');var _0x17bc00=_0x9ad15[_0xa8bc('0x19')];var _0x12362d=util['format'](_0xa8bc('0x1a'),path[_0xa8bc('0x1b')](_0x9ad15['savename'],path[_0xa8bc('0x1c')](_0x9ad15[_0xa8bc('0x19')])),_0xa8bc('0x1d'));var _0x36c788=path[_0xa8bc('0x1e')](_0x215e49,_0x17bc00);var _0x21cc68=path[_0xa8bc('0x1e')](_0x215e49,_0x12362d);if(fs['existsSync'](_0x36c788)){_0x9ad15[_0xa8bc('0x1f')]='Sent';_0x482597[_0xa8bc('0x20')]['attachments']=[{'filename':_0x17bc00,'path':_0x36c788}];_0x482597[_0xa8bc('0x20')][_0xa8bc('0x21')]=util[_0xa8bc('0x13')]('Info\x20report:\x0a%s\x0aPlease\x20see\x20the\x20attachments\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20it.\x0a\x0a',JSON[_0xa8bc('0x22')](_0x9ad15,null,0x2));}else if(fs[_0xa8bc('0x23')](_0x21cc68)){_0x9ad15[_0xa8bc('0x1f')]=_0xa8bc('0x24');_0x482597[_0xa8bc('0x20')][_0xa8bc('0x25')]=[{'filename':_0x12362d,'path':_0x21cc68}];}else{if(_0x9ad15['status']===_0xa8bc('0x26')){_0x482597[_0xa8bc('0x20')][_0xa8bc('0x21')]=_0xa8bc('0x27');if(!_0x5cbf9e[_0xa8bc('0x28')]){_0x105050=![];logger[_0xa8bc('0x29')](_0xa8bc('0x2a'));}}else if(_0x9ad15['status']==='Loading'){_0x482597[_0xa8bc('0x20')][_0xa8bc('0x21')]='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';}else if(_0x9ad15['status']===_0xa8bc('0x2b')){_0x482597[_0xa8bc('0x20')][_0xa8bc('0x21')]=_0xa8bc('0x2c');}else if(_0x9ad15[_0xa8bc('0x1f')]==='Failed'){_0x482597[_0xa8bc('0x20')][_0xa8bc('0x21')]='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[_0xa8bc('0x2d')]('[handleSendEmail]\x20Unrecognized\x20status:',_0x9ad15[_0xa8bc('0x1f')]);}}if(_0x105050){return client[_0xa8bc('0x2e')](_0xa8bc('0x2f'),_0x482597)['then'](function(_0x1116e4){if(_0x1116e4[_0xa8bc('0x2d')]){return logger['error']('error\x20mail',JSON['stringify'](_0x1116e4));}return logger[_0xa8bc('0x29')](_0xa8bc('0x30'));})[_0xa8bc('0xe')](function(_0x3000d9){return logger[_0xa8bc('0x2d')]('error\x20mail',JSON[_0xa8bc('0x22')](_0x3000d9));});}}function handleError(){return function(_0x8e2d1f){return logger['error'](JSON[_0xa8bc('0x22')](_0x8e2d1f));};}function loading(_0x13ad65){logger[_0xa8bc('0x29')](_0xa8bc('0x31'));if(_0x13ad65[_0xa8bc('0x32')]===_0x13ad65['retryOptions'][_0xa8bc('0x33')]){handleSendEmail(_0x13ad65[_0xa8bc('0x34')],_0x13ad65[_0xa8bc('0x35')]);_0x13ad65[_0xa8bc('0x36')][_0xa8bc('0x37')]();}else{_0x13ad65[_0xa8bc('0x36')][_0xa8bc('0x8')]('still\x20loading');}}function completed(_0x51d96e){logger[_0xa8bc('0x29')](_0xa8bc('0x38'));handleSendEmail(_0x51d96e[_0xa8bc('0x34')],_0x51d96e[_0xa8bc('0x35')]);_0x51d96e[_0xa8bc('0x36')][_0xa8bc('0x37')]();}function empty(_0x3b3900){logger['info']('case\x20empty');handleSendEmail(_0x3b3900[_0xa8bc('0x34')],_0x3b3900[_0xa8bc('0x35')]);_0x3b3900[_0xa8bc('0x36')][_0xa8bc('0x37')]();}function failed(_0x525e91){logger['info'](_0xa8bc('0x39'));handleSendEmail(_0x525e91['job'],_0x525e91[_0xa8bc('0x35')]);_0x525e91[_0xa8bc('0x36')][_0xa8bc('0x37')]();}function urecognized(_0x99e27b){logger[_0xa8bc('0x2d')]('Unrecognized\x20status:',_0x99e27b['entity'][_0xa8bc('0x3a')][_0xa8bc('0x1f')]);_0x99e27b[_0xa8bc('0x36')][_0xa8bc('0x37')]();}const reportStatusStrategies={'Loading':loading,'Completed':completed,'Empty':empty,'Failed':failed,'Unrecognized':urecognized};function retryer(_0x1b8811,_0x3f90b0){const _0x2a94aa={'retries':0x3,'factor':0x2,'minTimeout':0x5b*0x3e8,'maxTimeout':0xa*0x3c*0x3e8};const _0x3811b1=retry[_0xa8bc('0x36')](_0x2a94aa);_0x3811b1[_0xa8bc('0x3b')](_0x371e06=>{logger['info'](_0xa8bc('0x3c')+_0x1b8811['id']+_0xa8bc('0x3d')+_0x371e06);try{getReportData(_0x3f90b0['id'])[_0xa8bc('0x3e')](function(_0x4af98e){_0x3f90b0=_0x4af98e;logger['info'](_0xa8bc('0x3f'),_0x4af98e[_0xa8bc('0x3a')][_0xa8bc('0x1f')]);if(!reportStatusStrategies[_0x4af98e[_0xa8bc('0x3a')][_0xa8bc('0x1f')]]){logger[_0xa8bc('0x2d')](_0xa8bc('0x3f'),_0x4af98e[_0xa8bc('0x3a')][_0xa8bc('0x1f')]);_0x3811b1[_0xa8bc('0x8')]();}reportStatusStrategies[_0x4af98e[_0xa8bc('0x3a')][_0xa8bc('0x1f')]]({'operation':_0x3811b1,'currentAttempt':_0x371e06,'retryOptions':_0x2a94aa,'job':_0x1b8811,'data':_0x3f90b0,'entity':_0x4af98e});});}catch(_0xad11ac){_0x3811b1['retry'](_0xad11ac);}});}function handleResult(_0x240fcd){return function(_0x25aea7){if(_0x240fcd[_0xa8bc('0x40')]&&_0x240fcd[_0xa8bc('0x11')]&&_0x240fcd[_0xa8bc('0x11')][_0xa8bc('0x41')]&&!_['isNil'](_0x240fcd[_0xa8bc('0x10')])){retryer(_0x240fcd,_0x25aea7);}};}function handleJob(_0x1888e6){return function(){try{if(_[_0xa8bc('0x42')](_0x1888e6[_0xa8bc('0x18')])){return logger[_0xa8bc('0x29')]('subtractNumber\x20null\x20or\x20undefined');}if(_[_0xa8bc('0x42')](_0x1888e6[_0xa8bc('0x43')])){return logger[_0xa8bc('0x29')](_0xa8bc('0x44'));}var _0x8074f3={'startDate':moment()['subtract'](_0x1888e6['subtractNumber'],_0x1888e6['subtractUnit'])[_0xa8bc('0x13')]('YYYY-MM-DD\x20HH:mm:ss'),'endDate':moment()[_0xa8bc('0x13')](_0xa8bc('0x45')),'type':_0xa8bc('0x46'),'output':_0x1888e6[_0xa8bc('0x47')],'name':_0x1888e6['name']};if(!_[_0xa8bc('0x42')](_0x1888e6['DefaultReportId'])){logger[_0xa8bc('0x29')](_0xa8bc('0x48'),_0x1888e6['DefaultReportId']);return analyticDefaultReportController['runReport']({'id':_0x1888e6[_0xa8bc('0x49')]},_0x8074f3)[_0xa8bc('0x3e')](handleResult(_0x1888e6))['catch'](handleError());}if(!_['isNil'](_0x1888e6[_0xa8bc('0x4a')])){logger[_0xa8bc('0x29')](_0xa8bc('0x4b'),_0x1888e6[_0xa8bc('0x4a')]);return analyticCustomReportController['runReport']({'id':_0x1888e6[_0xa8bc('0x4a')]},_0x8074f3)[_0xa8bc('0x3e')](handleResult(_0x1888e6))['catch'](handleError());}}catch(_0x1adda0){logger[_0xa8bc('0x2d')](JSON[_0xa8bc('0x22')](_0x1adda0));}return logger[_0xa8bc('0x29')](_0xa8bc('0x4c'));};}function getJobs(_0x4e7728){var _0x1f471e={};if(_0x4e7728){_0x1f471e['id']=_0x4e7728;}return db[_0xa8bc('0x4d')][_0xa8bc('0x4e')]({'where':_0x1f471e,'include':[{'model':db[_0xa8bc('0x11')],'attributes':['id',_0xa8bc('0x17'),_0xa8bc('0x10')],'include':[{'model':db[_0xa8bc('0x4f')],'as':_0xa8bc('0x41'),'include':[{'model':db[_0xa8bc('0x50')],'as':_0xa8bc('0x50')}]}]}]})[_0xa8bc('0x3e')](function(_0x3d75bf){var _0x29afb4=_['keys'](manager[_0xa8bc('0x51')]);var _0x510970=_[_0xa8bc('0x52')](_0x3d75bf,function(_0x5ce951){return _0x5ce951['id']['toString']();});var _0x72d48=_[_0xa8bc('0x53')](_0x3d75bf,function(_0x2ab3f7){return _0x2ab3f7['id'][_0xa8bc('0x54')]();});var _0x4c5f18=_0x4e7728?_0x510970:_['difference'](_0x510970,_0x29afb4);var _0x38354d=_[_0xa8bc('0x55')](_0x510970,_0x29afb4);var _0x2bc6c3=_[_0xa8bc('0x56')](_0x29afb4,_0x510970);var _0xf0da1f;var _0x4e7add;for(_0xf0da1f=0x0;_0xf0da1f<_0x2bc6c3['length']&&!_0x4e7728;_0xf0da1f+=0x1){_0x4e7add=_0x2bc6c3[_0xf0da1f]['toString']();if(manager['exists'](_0x4e7add)){manager[_0xa8bc('0x37')](_0x4e7add);manager[_0xa8bc('0x57')](_0x4e7add);logger[_0xa8bc('0x29')]('delete\x20cron',_0x4e7add);}}logger[_0xa8bc('0x29')](_0xa8bc('0x58'),JSON['stringify'](_0x4c5f18));for(_0xf0da1f=0x0;_0xf0da1f<_0x4c5f18[_0xa8bc('0x59')];_0xf0da1f+=0x1){_0x4e7add=_0x4c5f18[_0xf0da1f][_0xa8bc('0x54')]();if(_0x4e7728){logger['info'](JSON[_0xa8bc('0x22')](_0x72d48[_0x4e7add]));BPromise['resolve']()[_0xa8bc('0x3e')](handleJob(_0x72d48[_0x4e7add]));logger[_0xa8bc('0x29')](_0xa8bc('0x5a'),_0x72d48[_0x4e7add][_0xa8bc('0x17')],_0x72d48[_0x4e7add][_0xa8bc('0x5b')]);}else if(_0x72d48[_0x4e7add][_0xa8bc('0x5b')]&&_0x72d48[_0x4e7add][_0xa8bc('0x5c')]&&moment()[_0xa8bc('0x5d')](_0x72d48[_0x4e7add][_0xa8bc('0x5e')],_0x72d48[_0x4e7add][_0xa8bc('0x5f')])){manager[_0xa8bc('0x60')](_0x4e7add,_0x72d48[_0x4e7add][_0xa8bc('0x5b')],handleJob(_0x72d48[_0x4e7add]));manager[_0xa8bc('0x61')](_0x4e7add);logger[_0xa8bc('0x29')](_0xa8bc('0x62'),_0x72d48[_0x4e7add]['name'],_0x72d48[_0x4e7add][_0xa8bc('0x5b')]);}else if(manager[_0xa8bc('0x63')](_0x4e7add)){manager[_0xa8bc('0x37')](_0x4e7add);manager['deleteJob'](_0x4e7add);logger[_0xa8bc('0x29')](_0xa8bc('0x64'),_0x72d48[_0x4e7add][_0xa8bc('0x17')],_0x72d48[_0x4e7add][_0xa8bc('0x5b')]);}}for(_0xf0da1f=0x0,_0x4e7add;_0xf0da1f<_0x38354d['length']&&!_0x4e7728;_0xf0da1f+=0x1){_0x4e7add=_0x38354d[_0xf0da1f][_0xa8bc('0x54')]();if(manager[_0xa8bc('0x63')](_0x4e7add)){if(_0x72d48[_0x4e7add][_0xa8bc('0x5b')]&&_0x72d48[_0x4e7add][_0xa8bc('0x5c')]&&moment()['isBetween'](_0x72d48[_0x4e7add][_0xa8bc('0x5e')],_0x72d48[_0x4e7add][_0xa8bc('0x5f')])){manager['update'](_0x4e7add,_0x72d48[_0x4e7add][_0xa8bc('0x5b')],handleJob(_0x72d48[_0x4e7add]));logger[_0xa8bc('0x29')](_0xa8bc('0x65'),_0x72d48[_0x4e7add][_0xa8bc('0x17')],_0x72d48[_0x4e7add][_0xa8bc('0x5b')]);}else{manager[_0xa8bc('0x37')](_0x4e7add);manager['deleteJob'](_0x4e7add);logger['info']('stop\x20cron',_0x72d48[_0x4e7add][_0xa8bc('0x17')],_0x72d48[_0x4e7add][_0xa8bc('0x5b')]);}}}})[_0xa8bc('0xe')](function(_0x3fb011){logger[_0xa8bc('0x2d')](JSON[_0xa8bc('0x22')](_0x3fb011));});}exports[_0xa8bc('0x66')]=function(_0x219004){return getJobs(_0x219004);};exports['start']=function(){setInterval(function(){return getJobs();},0x3c*0x3e8);return getJobs();};