a539e644f8832d2dba21c5420665d5ab0f2a8de6
[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 _0xd75a=['error\x20mail','email\x20sent','case\x20loading','currentAttempt','retries','job','data','operation','still\x20loading','case\x20completed','stop','case\x20empty','dataValues','attempt','Job\x20ID\x20','report\x20status:','sendMail','isNil','subtractNumber','subtractNumber\x20null\x20or\x20undefined','subtractUnit\x20null\x20or\x20undefined','subtract','scheduled','DefaultReportId','CustomReportId','runReport','no\x20report\x20id','Schedule','findAll','MailServerOut','Smtp','CloudProvider','keys','jobs','map','toString','difference','intersection','length','exists','deleteJob','toRun','cron','active','isBetween','startAt','endAt','start','add\x20cron','update','stop\x20cron','path','lodash','moment','cron-job-manager','../logger','../../mysqldb','retry','../../api/analyticCustomReport/analyticCustomReport.controller','client','http','number','AnalyticExtractedReport','findOne','then','catch','error','info','Try\x20to\x20send\x20a\x20mail\x20to','email','getSmtpOptions','format','\x22%s\x22\x20<%s>','MailAccount','user','bcc','Report\x20%s\x20last\x20%s\x20%s','name','subtractUnit','../../files/reports','savename','%s.%s','basename','extname','zip','join','status','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','existsSync','Sent','Empty','sendIfEmpty','empty\x20file,\x20email\x20not\x20sent','Loading','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','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','[handleSendEmail]\x20Unrecognized\x20status:','request'];(function(_0x48dd58,_0xd1edc4){var _0x448f46=function(_0x2ed975){while(--_0x2ed975){_0x48dd58['push'](_0x48dd58['shift']());}};_0x448f46(++_0xd1edc4);}(_0xd75a,0x1d3));var _0xad75=function(_0x178e48,_0x3c9509){_0x178e48=_0x178e48-0x0;var _0x440d7e=_0xd75a[_0x178e48];return _0x440d7e;};'use strict';var fs=require('fs');var util=require('util');var path=require(_0xad75('0x0'));var _=require(_0xad75('0x1'));var moment=require(_0xad75('0x2'));var CronJobManager=require(_0xad75('0x3'));var jayson=require('jayson/promise');var BPromise=require('bluebird');var logger=require(_0xad75('0x4'))('schedule');var db=require(_0xad75('0x5'))['db'];const retry=require(_0xad75('0x6'));var analyticCustomReportController=require(_0xad75('0x7'));var analyticDefaultReportController=require('../../api/analyticDefaultReport/analyticDefaultReport.controller');var client=jayson[_0xad75('0x8')][_0xad75('0x9')]({'port':0x232b});var manager=new CronJobManager();function getReportData(_0x4c2358){const _0x3c160a={};if(typeof _0x4c2358===_0xad75('0xa')){_0x3c160a['id']=_0x4c2358;}return db[_0xad75('0xb')][_0xad75('0xc')]({'where':_0x3c160a})[_0xad75('0xd')](function(_0x6de392){return _0x6de392;})[_0xad75('0xe')](function(_0x310ce3){logger[_0xad75('0xf')](_0x310ce3);});}function handleSendEmail(_0x5c5bcb,_0x2d793a){logger[_0xad75('0x10')](_0xad75('0x11'),_0x5c5bcb[_0xad75('0x12')]);var _0x3e2cb6=!![];var _0x3947c3=_0x5c5bcb['MailAccount'][_0xad75('0x13')]();var _0x4b0431={'account':_0x3947c3,'message':{'from':util[_0xad75('0x14')](_0xad75('0x15'),_0x5c5bcb['MailAccount']['name'],_0x5c5bcb[_0xad75('0x16')][_0xad75('0x12')]||_0x5c5bcb['MailAccount']['Smtp'][_0xad75('0x17')]),'to':_0x5c5bcb[_0xad75('0x12')],'cc':_0x5c5bcb['cc'],'bcc':_0x5c5bcb[_0xad75('0x18')],'subject':util['format'](_0xad75('0x19'),_0x2d793a[_0xad75('0x1a')],_0x5c5bcb['subtractNumber'],_0x5c5bcb[_0xad75('0x1b')])}};var _0x5bbf6e=path['join'](__dirname,_0xad75('0x1c'));var _0x354f62=_0x2d793a[_0xad75('0x1d')];var _0xf4825d=util[_0xad75('0x14')](_0xad75('0x1e'),path[_0xad75('0x1f')](_0x2d793a['savename'],path[_0xad75('0x20')](_0x2d793a[_0xad75('0x1d')])),_0xad75('0x21'));var _0x53937d=path['join'](_0x5bbf6e,_0x354f62);var _0x6fab8b=path[_0xad75('0x22')](_0x5bbf6e,_0xf4825d);if(fs['existsSync'](_0x53937d)){_0x2d793a[_0xad75('0x23')]='Sent';_0x4b0431[_0xad75('0x24')][_0xad75('0x25')]=[{'filename':_0x354f62,'path':_0x53937d}];_0x4b0431['message'][_0xad75('0x26')]=util['format'](_0xad75('0x27'),JSON[_0xad75('0x28')](_0x2d793a,null,0x2));}else if(fs[_0xad75('0x29')](_0x6fab8b)){_0x2d793a['status']=_0xad75('0x2a');_0x4b0431['message']['attachments']=[{'filename':_0xf4825d,'path':_0x6fab8b}];}else{if(_0x2d793a['status']===_0xad75('0x2b')){_0x4b0431[_0xad75('0x24')][_0xad75('0x26')]='Report\x20empty\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20this\x20email.\x0a\x0a';if(!_0x5c5bcb[_0xad75('0x2c')]){_0x3e2cb6=![];logger['info'](_0xad75('0x2d'));}}else if(_0x2d793a[_0xad75('0x23')]===_0xad75('0x2e')){_0x4b0431[_0xad75('0x24')]['text']='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(_0x2d793a['status']===_0xad75('0x2f')){_0x4b0431[_0xad75('0x24')]['text']=_0xad75('0x30');}else if(_0x2d793a[_0xad75('0x23')]===_0xad75('0x31')){_0x4b0431[_0xad75('0x24')][_0xad75('0x26')]=_0xad75('0x32');}else{logger[_0xad75('0xf')](_0xad75('0x33'),_0x2d793a['status']);}}if(_0x3e2cb6){return client[_0xad75('0x34')]('SendMail',_0x4b0431)[_0xad75('0xd')](function(_0x3d5404){if(_0x3d5404[_0xad75('0xf')]){return logger[_0xad75('0xf')](_0xad75('0x35'),JSON[_0xad75('0x28')](_0x3d5404));}return logger[_0xad75('0x10')](_0xad75('0x36'));})[_0xad75('0xe')](function(_0xd47a95){return logger[_0xad75('0xf')](_0xad75('0x35'),JSON[_0xad75('0x28')](_0xd47a95));});}}function handleError(){return function(_0x496143){return logger[_0xad75('0xf')](JSON[_0xad75('0x28')](_0x496143));};}function loading(_0xca04ee){logger[_0xad75('0x10')](_0xad75('0x37'));if(_0xca04ee[_0xad75('0x38')]===_0xca04ee['retryOptions'][_0xad75('0x39')]){handleSendEmail(_0xca04ee[_0xad75('0x3a')],_0xca04ee[_0xad75('0x3b')]);_0xca04ee[_0xad75('0x3c')]['stop']();}else{_0xca04ee[_0xad75('0x3c')][_0xad75('0x6')](_0xad75('0x3d'));}}function completed(_0x24ad57){logger[_0xad75('0x10')](_0xad75('0x3e'));handleSendEmail(_0x24ad57[_0xad75('0x3a')],_0x24ad57[_0xad75('0x3b')]);_0x24ad57[_0xad75('0x3c')][_0xad75('0x3f')]();}function empty(_0x1e8ce8){logger['info'](_0xad75('0x40'));handleSendEmail(_0x1e8ce8[_0xad75('0x3a')],_0x1e8ce8[_0xad75('0x3b')]);_0x1e8ce8[_0xad75('0x3c')]['stop']();}function failed(_0x2f0fb0){logger[_0xad75('0x10')]('case\x20failed');handleSendEmail(_0x2f0fb0[_0xad75('0x3a')],_0x2f0fb0[_0xad75('0x3b')]);_0x2f0fb0[_0xad75('0x3c')][_0xad75('0x3f')]();}function urecognized(_0x3cb96c){logger[_0xad75('0xf')]('Unrecognized\x20status:',_0x3cb96c['entity'][_0xad75('0x41')][_0xad75('0x23')]);_0x3cb96c[_0xad75('0x3c')][_0xad75('0x3f')]();}const reportStatusStrategies={'Loading':loading,'Completed':completed,'Empty':empty,'Failed':failed,'Unrecognized':urecognized};function retryer(_0x30ddf6,_0x48ade0){const _0x20a007={'retries':0xf,'factor':0x2,'minTimeout':0x5b*0x3e8,'maxTimeout':0x3c*0x3c*0x3e8};const _0x12c0e8=retry['operation'](_0x20a007);_0x12c0e8[_0xad75('0x42')](_0x40127a=>{logger[_0xad75('0x10')](_0xad75('0x43')+_0x30ddf6['id']+'\x20Attempt\x20#:'+_0x40127a);try{getReportData(_0x48ade0['id'])[_0xad75('0xd')](function(_0x4179d0){_0x48ade0=_0x4179d0;logger[_0xad75('0x10')](_0xad75('0x44'),_0x4179d0[_0xad75('0x41')][_0xad75('0x23')]);if(!reportStatusStrategies[_0x4179d0[_0xad75('0x41')][_0xad75('0x23')]]){logger[_0xad75('0xf')](_0xad75('0x44'),_0x4179d0[_0xad75('0x41')]['status']);_0x12c0e8['retry']();}reportStatusStrategies[_0x4179d0[_0xad75('0x41')][_0xad75('0x23')]]({'operation':_0x12c0e8,'currentAttempt':_0x40127a,'retryOptions':_0x20a007,'job':_0x30ddf6,'data':_0x48ade0,'entity':_0x4179d0});});}catch(_0x208ef6){_0x12c0e8['retry'](_0x208ef6);}});}function handleResult(_0x1e3c50){return function(_0x22c0c8){if(_0x1e3c50[_0xad75('0x45')]&&_0x1e3c50[_0xad75('0x16')]&&_0x1e3c50[_0xad75('0x16')]['Smtp']&&!_['isNil'](_0x1e3c50['email'])){retryer(_0x1e3c50,_0x22c0c8);}};}function handleJob(_0x4e2b17){return function(){try{if(_[_0xad75('0x46')](_0x4e2b17[_0xad75('0x47')])){return logger['info'](_0xad75('0x48'));}if(_[_0xad75('0x46')](_0x4e2b17[_0xad75('0x1b')])){return logger[_0xad75('0x10')](_0xad75('0x49'));}var _0x4cb57f={'startDate':moment()[_0xad75('0x4a')](_0x4e2b17['subtractNumber'],_0x4e2b17[_0xad75('0x1b')])[_0xad75('0x14')]('YYYY-MM-DD\x20HH:mm:ss'),'endDate':moment()[_0xad75('0x14')]('YYYY-MM-DD\x20HH:mm:ss'),'type':_0xad75('0x4b'),'output':_0x4e2b17['output'],'name':_0x4e2b17[_0xad75('0x1a')]};if(!_[_0xad75('0x46')](_0x4e2b17[_0xad75('0x4c')])){logger['info']('exec\x20defaul\x20report\x20id:%s',_0x4e2b17['DefaultReportId']);return analyticDefaultReportController['runReport']({'id':_0x4e2b17[_0xad75('0x4c')]},_0x4cb57f)[_0xad75('0xd')](handleResult(_0x4e2b17))[_0xad75('0xe')](handleError());}if(!_[_0xad75('0x46')](_0x4e2b17['CustomReportId'])){logger['info']('exec\x20custom\x20report\x20id:%s',_0x4e2b17[_0xad75('0x4d')]);return analyticCustomReportController[_0xad75('0x4e')]({'id':_0x4e2b17[_0xad75('0x4d')]},_0x4cb57f)[_0xad75('0xd')](handleResult(_0x4e2b17))[_0xad75('0xe')](handleError());}}catch(_0x58d0c0){logger[_0xad75('0xf')](JSON[_0xad75('0x28')](_0x58d0c0));}return logger[_0xad75('0x10')](_0xad75('0x4f'));};}function getJobs(_0x51654a){var _0x448725={};if(_0x51654a){_0x448725['id']=_0x51654a;}return db[_0xad75('0x50')][_0xad75('0x51')]({'where':_0x448725,'include':[{'model':db[_0xad75('0x16')],'attributes':['id','name',_0xad75('0x12')],'include':[{'model':db[_0xad75('0x52')],'as':_0xad75('0x53'),'include':[{'model':db[_0xad75('0x54')],'as':'CloudProvider'}]}]}]})[_0xad75('0xd')](function(_0x2bdf87){var _0x2a25ab=_[_0xad75('0x55')](manager[_0xad75('0x56')]);var _0x8b2226=_[_0xad75('0x57')](_0x2bdf87,function(_0x459a02){return _0x459a02['id'][_0xad75('0x58')]();});var _0x246959=_['keyBy'](_0x2bdf87,function(_0x1bb2cc){return _0x1bb2cc['id'][_0xad75('0x58')]();});var _0x4a4c08=_0x51654a?_0x8b2226:_[_0xad75('0x59')](_0x8b2226,_0x2a25ab);var _0x40ed10=_[_0xad75('0x5a')](_0x8b2226,_0x2a25ab);var _0xc42e7f=_[_0xad75('0x59')](_0x2a25ab,_0x8b2226);var _0x321809;var _0x1b2330;for(_0x321809=0x0;_0x321809<_0xc42e7f[_0xad75('0x5b')]&&!_0x51654a;_0x321809+=0x1){_0x1b2330=_0xc42e7f[_0x321809]['toString']();if(manager[_0xad75('0x5c')](_0x1b2330)){manager[_0xad75('0x3f')](_0x1b2330);manager[_0xad75('0x5d')](_0x1b2330);logger[_0xad75('0x10')]('delete\x20cron',_0x1b2330);}}logger[_0xad75('0x10')](_0xad75('0x5e'),JSON[_0xad75('0x28')](_0x4a4c08));for(_0x321809=0x0;_0x321809<_0x4a4c08[_0xad75('0x5b')];_0x321809+=0x1){_0x1b2330=_0x4a4c08[_0x321809]['toString']();if(_0x51654a){logger[_0xad75('0x10')](JSON[_0xad75('0x28')](_0x246959[_0x1b2330]));BPromise['resolve']()[_0xad75('0xd')](handleJob(_0x246959[_0x1b2330]));logger[_0xad75('0x10')]('run\x20job',_0x246959[_0x1b2330][_0xad75('0x1a')],_0x246959[_0x1b2330][_0xad75('0x5f')]);}else if(_0x246959[_0x1b2330][_0xad75('0x5f')]&&_0x246959[_0x1b2330][_0xad75('0x60')]&&moment()[_0xad75('0x61')](_0x246959[_0x1b2330][_0xad75('0x62')],_0x246959[_0x1b2330][_0xad75('0x63')])){manager['add'](_0x1b2330,_0x246959[_0x1b2330]['cron'],handleJob(_0x246959[_0x1b2330]));manager[_0xad75('0x64')](_0x1b2330);logger['info'](_0xad75('0x65'),_0x246959[_0x1b2330][_0xad75('0x1a')],_0x246959[_0x1b2330][_0xad75('0x5f')]);}else if(manager[_0xad75('0x5c')](_0x1b2330)){manager[_0xad75('0x3f')](_0x1b2330);manager[_0xad75('0x5d')](_0x1b2330);logger[_0xad75('0x10')]('stop\x20cron',_0x246959[_0x1b2330]['name'],_0x246959[_0x1b2330][_0xad75('0x5f')]);}}for(_0x321809=0x0,_0x1b2330;_0x321809<_0x40ed10[_0xad75('0x5b')]&&!_0x51654a;_0x321809+=0x1){_0x1b2330=_0x40ed10[_0x321809]['toString']();if(manager['exists'](_0x1b2330)){if(_0x246959[_0x1b2330][_0xad75('0x5f')]&&_0x246959[_0x1b2330]['active']&&moment()[_0xad75('0x61')](_0x246959[_0x1b2330]['startAt'],_0x246959[_0x1b2330][_0xad75('0x63')])){manager[_0xad75('0x66')](_0x1b2330,_0x246959[_0x1b2330][_0xad75('0x5f')],handleJob(_0x246959[_0x1b2330]));logger[_0xad75('0x10')]('update\x20cron',_0x246959[_0x1b2330][_0xad75('0x1a')],_0x246959[_0x1b2330]['cron']);}else{manager[_0xad75('0x3f')](_0x1b2330);manager[_0xad75('0x5d')](_0x1b2330);logger['info'](_0xad75('0x67'),_0x246959[_0x1b2330][_0xad75('0x1a')],_0x246959[_0x1b2330][_0xad75('0x5f')]);}}}})['catch'](function(_0x2e02d4){logger[_0xad75('0xf')](JSON[_0xad75('0x28')](_0x2e02d4));});}exports['run']=function(_0x320525){return getJobs(_0x320525);};exports['start']=function(){setInterval(function(){return getJobs();},0x3c*0x3e8);return getJobs();};