Built motion from commit 55091a5c.|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 _0x904b=['util','lodash','moment','jayson/promise','bluebird','../../mysqldb','retry','../../api/analyticCustomReport/analyticCustomReport.controller','../../api/analyticDefaultReport/analyticDefaultReport.controller','number','AnalyticExtractedReport','findOne','catch','error','Try\x20to\x20send\x20a\x20mail\x20to','email','MailAccount','format','\x22%s\x22\x20<%s>','name','Smtp','user','bcc','Report\x20%s\x20last\x20%s\x20%s','join','../../files/reports','savename','%s.%s','basename','zip','existsSync','status','Sent','Info\x20report:\x0a%s\x0aPlease\x20see\x20the\x20attachments\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20it.\x0a\x0a','message','attachments','Report\x20empty\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20this\x20email.\x0a\x0a','empty\x20file,\x20email\x20not\x20sent','Loading','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','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','[handleSendEmail]\x20Unrecognized\x20status:','request','SendMail','then','stringify','info','email\x20sent','error\x20mail','case\x20loading','currentAttempt','retryOptions','retries','data','operation','stop','case\x20completed','job','case\x20empty','case\x20failed','entity','\x20Attempt\x20#:','report\x20status:','dataValues','sendMail','isNil','subtractNumber','subtractNumber\x20null\x20or\x20undefined','subtractUnit','subtractUnit\x20null\x20or\x20undefined','YYYY-MM-DD\x20HH:mm:ss','scheduled','output','exec\x20defaul\x20report\x20id:%s','runReport','DefaultReportId','CustomReportId','exec\x20custom\x20report\x20id:%s','no\x20report\x20id','Schedule','findAll','MailServerOut','CloudProvider','jobs','map','toString','difference','length','delete\x20cron','run\x20job','cron','active','isBetween','startAt','endAt','add','start','deleteJob','exists','update\x20cron','stop\x20cron','run'];(function(_0x103faf,_0x1b2a3d){var _0x3ecd72=function(_0x110ab1){while(--_0x110ab1){_0x103faf['push'](_0x103faf['shift']());}};_0x3ecd72(++_0x1b2a3d);}(_0x904b,0x138));var _0xb904=function(_0xebad11,_0x1ad153){_0xebad11=_0xebad11-0x0;var _0x4dccda=_0x904b[_0xebad11];return _0x4dccda;};'use strict';var fs=require('fs');var util=require(_0xb904('0x0'));var path=require('path');var _=require(_0xb904('0x1'));var moment=require(_0xb904('0x2'));var CronJobManager=require('cron-job-manager');var jayson=require(_0xb904('0x3'));var BPromise=require(_0xb904('0x4'));var logger=require('../logger')('schedule');var db=require(_0xb904('0x5'))['db'];const retry=require(_0xb904('0x6'));var analyticCustomReportController=require(_0xb904('0x7'));var analyticDefaultReportController=require(_0xb904('0x8'));var client=jayson['client']['http']({'port':0x232b});var manager=new CronJobManager();function getReportData(_0x3954d7){const _0x581511={};if(typeof _0x3954d7===_0xb904('0x9')){_0x581511['id']=_0x3954d7;}return db[_0xb904('0xa')][_0xb904('0xb')]({'where':_0x581511})['then'](function(_0x185b75){return _0x185b75;})[_0xb904('0xc')](function(_0x56bfaf){logger[_0xb904('0xd')](_0x56bfaf);});}function handleSendEmail(_0x4cb72c,_0x15595d){logger['info'](_0xb904('0xe'),_0x4cb72c[_0xb904('0xf')]);var _0x24aef5=!![];var _0x4e593b=_0x4cb72c[_0xb904('0x10')]['getSmtpOptions']();var _0x256383={'account':_0x4e593b,'message':{'from':util[_0xb904('0x11')](_0xb904('0x12'),_0x4cb72c[_0xb904('0x10')][_0xb904('0x13')],_0x4cb72c[_0xb904('0x10')][_0xb904('0xf')]||_0x4cb72c[_0xb904('0x10')][_0xb904('0x14')][_0xb904('0x15')]),'to':_0x4cb72c['email'],'cc':_0x4cb72c['cc'],'bcc':_0x4cb72c[_0xb904('0x16')],'subject':util[_0xb904('0x11')](_0xb904('0x17'),_0x15595d[_0xb904('0x13')],_0x4cb72c['subtractNumber'],_0x4cb72c['subtractUnit'])}};var _0xdd2d69=path[_0xb904('0x18')](__dirname,_0xb904('0x19'));var _0xb2146a=_0x15595d[_0xb904('0x1a')];var _0x4950a2=util[_0xb904('0x11')](_0xb904('0x1b'),path[_0xb904('0x1c')](_0x15595d[_0xb904('0x1a')],path['extname'](_0x15595d[_0xb904('0x1a')])),_0xb904('0x1d'));var _0xc7e38c=path['join'](_0xdd2d69,_0xb2146a);var _0x40a9cf=path[_0xb904('0x18')](_0xdd2d69,_0x4950a2);if(fs[_0xb904('0x1e')](_0xc7e38c)){_0x15595d[_0xb904('0x1f')]=_0xb904('0x20');_0x256383['message']['attachments']=[{'filename':_0xb2146a,'path':_0xc7e38c}];_0x256383['message']['text']=util[_0xb904('0x11')](_0xb904('0x21'),JSON['stringify'](_0x15595d,null,0x2));}else if(fs['existsSync'](_0x40a9cf)){_0x15595d[_0xb904('0x1f')]='Sent';_0x256383[_0xb904('0x22')][_0xb904('0x23')]=[{'filename':_0x4950a2,'path':_0x40a9cf}];}else{if(_0x15595d[_0xb904('0x1f')]==='Empty'){_0x256383['message']['text']=_0xb904('0x24');if(!_0x4cb72c['sendIfEmpty']){_0x24aef5=![];logger['info'](_0xb904('0x25'));}}else if(_0x15595d[_0xb904('0x1f')]===_0xb904('0x26')){_0x256383[_0xb904('0x22')][_0xb904('0x27')]=_0xb904('0x28');}else if(_0x15595d[_0xb904('0x1f')]==='Completed'){_0x256383[_0xb904('0x22')][_0xb904('0x27')]=_0xb904('0x29');}else if(_0x15595d[_0xb904('0x1f')]==='Failed'){_0x256383[_0xb904('0x22')]['text']=_0xb904('0x2a');}else{logger[_0xb904('0xd')](_0xb904('0x2b'),_0x15595d['status']);}}if(_0x24aef5){return client[_0xb904('0x2c')](_0xb904('0x2d'),_0x256383)[_0xb904('0x2e')](function(_0x43309f){if(_0x43309f['error']){return logger[_0xb904('0xd')]('error\x20mail',JSON[_0xb904('0x2f')](_0x43309f));}return logger[_0xb904('0x30')](_0xb904('0x31'));})[_0xb904('0xc')](function(_0x32d501){return logger[_0xb904('0xd')](_0xb904('0x32'),JSON[_0xb904('0x2f')](_0x32d501));});}}function handleError(){return function(_0x4c7a93){return logger['error'](JSON[_0xb904('0x2f')](_0x4c7a93));};}function loading(_0x5370b2){logger[_0xb904('0x30')](_0xb904('0x33'));if(_0x5370b2[_0xb904('0x34')]===_0x5370b2[_0xb904('0x35')][_0xb904('0x36')]){handleSendEmail(_0x5370b2['job'],_0x5370b2[_0xb904('0x37')]);_0x5370b2[_0xb904('0x38')][_0xb904('0x39')]();}else{_0x5370b2[_0xb904('0x38')][_0xb904('0x6')]('still\x20loading');}}function completed(_0x25b7fe){logger[_0xb904('0x30')](_0xb904('0x3a'));handleSendEmail(_0x25b7fe[_0xb904('0x3b')],_0x25b7fe['data']);_0x25b7fe[_0xb904('0x38')][_0xb904('0x39')]();}function empty(_0x23ad01){logger['info'](_0xb904('0x3c'));handleSendEmail(_0x23ad01[_0xb904('0x3b')],_0x23ad01[_0xb904('0x37')]);_0x23ad01['operation']['stop']();}function failed(_0x3d80c1){logger[_0xb904('0x30')](_0xb904('0x3d'));handleSendEmail(_0x3d80c1[_0xb904('0x3b')],_0x3d80c1[_0xb904('0x37')]);_0x3d80c1['operation'][_0xb904('0x39')]();}function urecognized(_0x1eafd5){logger[_0xb904('0xd')]('Unrecognized\x20status:',_0x1eafd5[_0xb904('0x3e')]['dataValues']['status']);_0x1eafd5[_0xb904('0x38')][_0xb904('0x39')]();}const reportStatusStrategies={'Loading':loading,'Completed':completed,'Empty':empty,'Failed':failed,'Unrecognized':urecognized};function retryer(_0xe1eb4c,_0x4537b4){const _0x588991={'retries':0x3,'factor':0x2,'minTimeout':0x5b*0x3e8,'maxTimeout':0xa*0x3c*0x3e8};const _0x36a29f=retry['operation'](_0x588991);_0x36a29f['attempt'](_0xb9354=>{logger[_0xb904('0x30')]('Job\x20ID\x20'+_0xe1eb4c['id']+_0xb904('0x3f')+_0xb9354);try{getReportData(_0x4537b4['id'])[_0xb904('0x2e')](function(_0x27d379){_0x4537b4=_0x27d379;logger[_0xb904('0x30')](_0xb904('0x40'),_0x27d379[_0xb904('0x41')]['status']);if(!reportStatusStrategies[_0x27d379['dataValues'][_0xb904('0x1f')]]){logger[_0xb904('0xd')]('report\x20status:',_0x27d379[_0xb904('0x41')][_0xb904('0x1f')]);_0x36a29f[_0xb904('0x6')]();}reportStatusStrategies[_0x27d379[_0xb904('0x41')][_0xb904('0x1f')]]({'operation':_0x36a29f,'currentAttempt':_0xb9354,'retryOptions':_0x588991,'job':_0xe1eb4c,'data':_0x4537b4,'entity':_0x27d379});});}catch(_0xa95f54){_0x36a29f['retry'](_0xa95f54);}});}function handleResult(_0x44e594){return function(_0x1ab157){if(_0x44e594[_0xb904('0x42')]&&_0x44e594[_0xb904('0x10')]&&_0x44e594[_0xb904('0x10')][_0xb904('0x14')]&&!_[_0xb904('0x43')](_0x44e594[_0xb904('0xf')])){retryer(_0x44e594,_0x1ab157);}};}function handleJob(_0x438c55){return function(){try{if(_['isNil'](_0x438c55[_0xb904('0x44')])){return logger[_0xb904('0x30')](_0xb904('0x45'));}if(_[_0xb904('0x43')](_0x438c55[_0xb904('0x46')])){return logger[_0xb904('0x30')](_0xb904('0x47'));}var _0x11e868={'startDate':moment()['subtract'](_0x438c55[_0xb904('0x44')],_0x438c55[_0xb904('0x46')])['format'](_0xb904('0x48')),'endDate':moment()[_0xb904('0x11')](_0xb904('0x48')),'type':_0xb904('0x49'),'output':_0x438c55[_0xb904('0x4a')],'name':_0x438c55['name']};if(!_[_0xb904('0x43')](_0x438c55['DefaultReportId'])){logger[_0xb904('0x30')](_0xb904('0x4b'),_0x438c55['DefaultReportId']);return analyticDefaultReportController[_0xb904('0x4c')]({'id':_0x438c55[_0xb904('0x4d')]},_0x11e868)[_0xb904('0x2e')](handleResult(_0x438c55))['catch'](handleError());}if(!_[_0xb904('0x43')](_0x438c55[_0xb904('0x4e')])){logger[_0xb904('0x30')](_0xb904('0x4f'),_0x438c55['CustomReportId']);return analyticCustomReportController[_0xb904('0x4c')]({'id':_0x438c55[_0xb904('0x4e')]},_0x11e868)['then'](handleResult(_0x438c55))[_0xb904('0xc')](handleError());}}catch(_0x4c987e){logger['error'](JSON['stringify'](_0x4c987e));}return logger[_0xb904('0x30')](_0xb904('0x50'));};}function getJobs(_0x43cfb2){var _0x322548={};if(_0x43cfb2){_0x322548['id']=_0x43cfb2;}return db[_0xb904('0x51')][_0xb904('0x52')]({'where':_0x322548,'include':[{'model':db[_0xb904('0x10')],'attributes':['id','name',_0xb904('0xf')],'include':[{'model':db[_0xb904('0x53')],'as':'Smtp','include':[{'model':db[_0xb904('0x54')],'as':_0xb904('0x54')}]}]}]})[_0xb904('0x2e')](function(_0x1c078f){var _0x4d4cb2=_['keys'](manager[_0xb904('0x55')]);var _0x1c91dc=_[_0xb904('0x56')](_0x1c078f,function(_0x20cf83){return _0x20cf83['id']['toString']();});var _0x461b19=_['keyBy'](_0x1c078f,function(_0x3cdd1b){return _0x3cdd1b['id'][_0xb904('0x57')]();});var _0x1651b2=_0x43cfb2?_0x1c91dc:_[_0xb904('0x58')](_0x1c91dc,_0x4d4cb2);var _0x23bc9d=_['intersection'](_0x1c91dc,_0x4d4cb2);var _0x3764cb=_['difference'](_0x4d4cb2,_0x1c91dc);var _0x7aca85;var _0x236ffc;for(_0x7aca85=0x0;_0x7aca85<_0x3764cb[_0xb904('0x59')]&&!_0x43cfb2;_0x7aca85+=0x1){_0x236ffc=_0x3764cb[_0x7aca85][_0xb904('0x57')]();if(manager['exists'](_0x236ffc)){manager['stop'](_0x236ffc);manager['deleteJob'](_0x236ffc);logger[_0xb904('0x30')](_0xb904('0x5a'),_0x236ffc);}}logger[_0xb904('0x30')]('toRun',JSON[_0xb904('0x2f')](_0x1651b2));for(_0x7aca85=0x0;_0x7aca85<_0x1651b2[_0xb904('0x59')];_0x7aca85+=0x1){_0x236ffc=_0x1651b2[_0x7aca85][_0xb904('0x57')]();if(_0x43cfb2){logger[_0xb904('0x30')](JSON[_0xb904('0x2f')](_0x461b19[_0x236ffc]));BPromise['resolve']()[_0xb904('0x2e')](handleJob(_0x461b19[_0x236ffc]));logger[_0xb904('0x30')](_0xb904('0x5b'),_0x461b19[_0x236ffc][_0xb904('0x13')],_0x461b19[_0x236ffc]['cron']);}else if(_0x461b19[_0x236ffc][_0xb904('0x5c')]&&_0x461b19[_0x236ffc][_0xb904('0x5d')]&&moment()[_0xb904('0x5e')](_0x461b19[_0x236ffc][_0xb904('0x5f')],_0x461b19[_0x236ffc][_0xb904('0x60')])){manager[_0xb904('0x61')](_0x236ffc,_0x461b19[_0x236ffc][_0xb904('0x5c')],handleJob(_0x461b19[_0x236ffc]));manager[_0xb904('0x62')](_0x236ffc);logger['info']('add\x20cron',_0x461b19[_0x236ffc][_0xb904('0x13')],_0x461b19[_0x236ffc]['cron']);}else if(manager['exists'](_0x236ffc)){manager[_0xb904('0x39')](_0x236ffc);manager[_0xb904('0x63')](_0x236ffc);logger[_0xb904('0x30')]('stop\x20cron',_0x461b19[_0x236ffc]['name'],_0x461b19[_0x236ffc][_0xb904('0x5c')]);}}for(_0x7aca85=0x0,_0x236ffc;_0x7aca85<_0x23bc9d[_0xb904('0x59')]&&!_0x43cfb2;_0x7aca85+=0x1){_0x236ffc=_0x23bc9d[_0x7aca85]['toString']();if(manager[_0xb904('0x64')](_0x236ffc)){if(_0x461b19[_0x236ffc][_0xb904('0x5c')]&&_0x461b19[_0x236ffc][_0xb904('0x5d')]&&moment()[_0xb904('0x5e')](_0x461b19[_0x236ffc]['startAt'],_0x461b19[_0x236ffc][_0xb904('0x60')])){manager['update'](_0x236ffc,_0x461b19[_0x236ffc][_0xb904('0x5c')],handleJob(_0x461b19[_0x236ffc]));logger[_0xb904('0x30')](_0xb904('0x65'),_0x461b19[_0x236ffc]['name'],_0x461b19[_0x236ffc][_0xb904('0x5c')]);}else{manager[_0xb904('0x39')](_0x236ffc);manager[_0xb904('0x63')](_0x236ffc);logger['info'](_0xb904('0x66'),_0x461b19[_0x236ffc][_0xb904('0x13')],_0x461b19[_0x236ffc][_0xb904('0x5c')]);}}}})['catch'](function(_0x1bd2be){logger[_0xb904('0xd')](JSON[_0xb904('0x2f')](_0x1bd2be));});}exports[_0xb904('0x67')]=function(_0x5bc0cb){return getJobs(_0x5bc0cb);};exports[_0xb904('0x62')]=function(){setInterval(function(){return getJobs();},0x3c*0x3e8);return getJobs();};