e45caacb4e2cafa796a7849caf1f6b02f79f901a
[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 _0x561a=['toString','keyBy','intersection','length','exists','delete\x20cron','toRun','run\x20job','cron','isBetween','startAt','endAt','start','add\x20cron','deleteJob','stop\x20cron','active','update','update\x20cron','run','moment','bluebird','schedule','../../mysqldb','retry','../../api/analyticCustomReport/analyticCustomReport.controller','client','number','AnalyticExtractedReport','findOne','then','catch','error','info','Try\x20to\x20send\x20a\x20mail\x20to','email','MailAccount','getSmtpOptions','format','\x22%s\x22\x20<%s>','name','Smtp','user','bcc','Report\x20%s\x20last\x20%s\x20%s','subtractNumber','join','../../files/reports','savename','%s.%s','basename','extname','zip','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','stringify','existsSync','message','attachments','Empty','text','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','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:','SendMail','error\x20mail','currentAttempt','retryOptions','retries','job','data','operation','stop','still\x20loading','Unrecognized\x20status:','entity','dataValues','\x20Attempt\x20#:','report\x20status:','isNil','subtractNumber\x20null\x20or\x20undefined','subtractUnit\x20null\x20or\x20undefined','subtractUnit','YYYY-MM-DD\x20HH:mm:ss','scheduled','output','DefaultReportId','exec\x20defaul\x20report\x20id:%s','runReport','CustomReportId','exec\x20custom\x20report\x20id:%s','no\x20report\x20id','Schedule','findAll','MailServerOut','CloudProvider','keys','jobs','map'];(function(_0x25e7cb,_0x3579b7){var _0x375d92=function(_0xe8cf3b){while(--_0xe8cf3b){_0x25e7cb['push'](_0x25e7cb['shift']());}};_0x375d92(++_0x3579b7);}(_0x561a,0x1c0));var _0xa561=function(_0xf466fc,_0xe6b550){_0xf466fc=_0xf466fc-0x0;var _0x1e6330=_0x561a[_0xf466fc];return _0x1e6330;};'use strict';var fs=require('fs');var util=require('util');var path=require('path');var _=require('lodash');var moment=require(_0xa561('0x0'));var CronJobManager=require('cron-job-manager');var jayson=require('jayson/promise');var BPromise=require(_0xa561('0x1'));var logger=require('../logger')(_0xa561('0x2'));var db=require(_0xa561('0x3'))['db'];const retry=require(_0xa561('0x4'));var analyticCustomReportController=require(_0xa561('0x5'));var analyticDefaultReportController=require('../../api/analyticDefaultReport/analyticDefaultReport.controller');var client=jayson[_0xa561('0x6')]['http']({'port':0x232b});var manager=new CronJobManager();function getReportData(_0x53f21c){const _0x30b565={};if(typeof _0x53f21c===_0xa561('0x7')){_0x30b565['id']=_0x53f21c;}return db[_0xa561('0x8')][_0xa561('0x9')]({'where':_0x30b565})[_0xa561('0xa')](function(_0x39698e){return _0x39698e;})[_0xa561('0xb')](function(_0x1e46ef){logger[_0xa561('0xc')](_0x1e46ef);});}function handleSendEmail(_0x3cdc46,_0x4de0d9){logger[_0xa561('0xd')](_0xa561('0xe'),_0x3cdc46[_0xa561('0xf')]);var _0x515fab=!![];var _0x56b93b=_0x3cdc46[_0xa561('0x10')][_0xa561('0x11')]();var _0x5a653={'account':_0x56b93b,'message':{'from':util[_0xa561('0x12')](_0xa561('0x13'),_0x3cdc46[_0xa561('0x10')][_0xa561('0x14')],_0x3cdc46[_0xa561('0x10')][_0xa561('0xf')]||_0x3cdc46[_0xa561('0x10')][_0xa561('0x15')][_0xa561('0x16')]),'to':_0x3cdc46['email'],'cc':_0x3cdc46['cc'],'bcc':_0x3cdc46[_0xa561('0x17')],'subject':util[_0xa561('0x12')](_0xa561('0x18'),_0x4de0d9[_0xa561('0x14')],_0x3cdc46[_0xa561('0x19')],_0x3cdc46['subtractUnit'])}};var _0x40e52c=path[_0xa561('0x1a')](__dirname,_0xa561('0x1b'));var _0xfe5796=_0x4de0d9[_0xa561('0x1c')];var _0x3708bc=util[_0xa561('0x12')](_0xa561('0x1d'),path[_0xa561('0x1e')](_0x4de0d9[_0xa561('0x1c')],path[_0xa561('0x1f')](_0x4de0d9[_0xa561('0x1c')])),_0xa561('0x20'));var _0x428cdd=path['join'](_0x40e52c,_0xfe5796);var _0x2c9cea=path[_0xa561('0x1a')](_0x40e52c,_0x3708bc);if(fs['existsSync'](_0x428cdd)){_0x4de0d9[_0xa561('0x21')]=_0xa561('0x22');_0x5a653['message']['attachments']=[{'filename':_0xfe5796,'path':_0x428cdd}];_0x5a653['message']['text']=util[_0xa561('0x12')](_0xa561('0x23'),JSON[_0xa561('0x24')](_0x4de0d9,null,0x2));}else if(fs[_0xa561('0x25')](_0x2c9cea)){_0x4de0d9[_0xa561('0x21')]=_0xa561('0x22');_0x5a653[_0xa561('0x26')][_0xa561('0x27')]=[{'filename':_0x3708bc,'path':_0x2c9cea}];}else{if(_0x4de0d9[_0xa561('0x21')]===_0xa561('0x28')){_0x5a653[_0xa561('0x26')][_0xa561('0x29')]=_0xa561('0x2a');if(!_0x3cdc46[_0xa561('0x2b')]){_0x515fab=![];logger['info'](_0xa561('0x2c'));}}else if(_0x4de0d9[_0xa561('0x21')]===_0xa561('0x2d')){_0x5a653['message'][_0xa561('0x29')]=_0xa561('0x2e');}else if(_0x4de0d9['status']===_0xa561('0x2f')){_0x5a653['message'][_0xa561('0x29')]=_0xa561('0x30');}else if(_0x4de0d9[_0xa561('0x21')]===_0xa561('0x31')){_0x5a653[_0xa561('0x26')][_0xa561('0x29')]=_0xa561('0x32');}else{logger[_0xa561('0xc')](_0xa561('0x33'),_0x4de0d9[_0xa561('0x21')]);}}if(_0x515fab){return client['request'](_0xa561('0x34'),_0x5a653)['then'](function(_0x5cac14){if(_0x5cac14['error']){return logger[_0xa561('0xc')](_0xa561('0x35'),JSON['stringify'](_0x5cac14));}return logger['info']('email\x20sent');})[_0xa561('0xb')](function(_0x1ab799){return logger['error'](_0xa561('0x35'),JSON['stringify'](_0x1ab799));});}}function handleError(){return function(_0x4c7e7a){return logger[_0xa561('0xc')](JSON[_0xa561('0x24')](_0x4c7e7a));};}function loading(_0x2ca504){logger[_0xa561('0xd')]('case\x20loading');if(_0x2ca504[_0xa561('0x36')]===_0x2ca504[_0xa561('0x37')][_0xa561('0x38')]){handleSendEmail(_0x2ca504[_0xa561('0x39')],_0x2ca504[_0xa561('0x3a')]);_0x2ca504[_0xa561('0x3b')][_0xa561('0x3c')]();}else{_0x2ca504['operation'][_0xa561('0x4')](_0xa561('0x3d'));}}function completed(_0x35cee7){logger[_0xa561('0xd')]('case\x20completed');handleSendEmail(_0x35cee7[_0xa561('0x39')],_0x35cee7[_0xa561('0x3a')]);_0x35cee7[_0xa561('0x3b')][_0xa561('0x3c')]();}function empty(_0x464003){logger[_0xa561('0xd')]('case\x20empty');handleSendEmail(_0x464003[_0xa561('0x39')],_0x464003['data']);_0x464003[_0xa561('0x3b')]['stop']();}function failed(_0x2833bc){logger['info']('case\x20failed');handleSendEmail(_0x2833bc['job'],_0x2833bc['data']);_0x2833bc[_0xa561('0x3b')][_0xa561('0x3c')]();}function urecognized(_0x4283a7){logger['error'](_0xa561('0x3e'),_0x4283a7[_0xa561('0x3f')][_0xa561('0x40')][_0xa561('0x21')]);_0x4283a7['operation'][_0xa561('0x3c')]();}const reportStatusStrategies={'Loading':loading,'Completed':completed,'Empty':empty,'Failed':failed,'Unrecognized':urecognized};function retryer(_0x41da2c,_0x32b309){const _0xe9fe8c={'retries':0x3,'factor':0x2,'minTimeout':0x5b*0x3e8,'maxTimeout':0xa*0x3c*0x3e8};const _0x5887af=retry['operation'](_0xe9fe8c);_0x5887af['attempt'](_0xa3590d=>{logger['info']('Job\x20ID\x20'+_0x41da2c['id']+_0xa561('0x41')+_0xa3590d);try{getReportData(_0x32b309['id'])['then'](function(_0x21ee13){_0x32b309=_0x21ee13;logger[_0xa561('0xd')](_0xa561('0x42'),_0x21ee13[_0xa561('0x40')]['status']);if(!reportStatusStrategies[_0x21ee13[_0xa561('0x40')][_0xa561('0x21')]]){logger[_0xa561('0xc')](_0xa561('0x42'),_0x21ee13[_0xa561('0x40')][_0xa561('0x21')]);_0x5887af[_0xa561('0x4')]();}reportStatusStrategies[_0x21ee13[_0xa561('0x40')][_0xa561('0x21')]]({'operation':_0x5887af,'currentAttempt':_0xa3590d,'retryOptions':_0xe9fe8c,'job':_0x41da2c,'data':_0x32b309,'entity':_0x21ee13});});}catch(_0x43d57f){_0x5887af[_0xa561('0x4')](_0x43d57f);}});}function handleResult(_0x456834){return function(_0x23c692){if(_0x456834['sendMail']&&_0x456834[_0xa561('0x10')]&&_0x456834[_0xa561('0x10')][_0xa561('0x15')]&&!_[_0xa561('0x43')](_0x456834[_0xa561('0xf')])){retryer(_0x456834,_0x23c692);}};}function handleJob(_0x6a46d8){return function(){try{if(_[_0xa561('0x43')](_0x6a46d8['subtractNumber'])){return logger[_0xa561('0xd')](_0xa561('0x44'));}if(_['isNil'](_0x6a46d8['subtractUnit'])){return logger['info'](_0xa561('0x45'));}var _0x28930a={'startDate':moment()['subtract'](_0x6a46d8[_0xa561('0x19')],_0x6a46d8[_0xa561('0x46')])[_0xa561('0x12')]('YYYY-MM-DD\x20HH:mm:ss'),'endDate':moment()[_0xa561('0x12')](_0xa561('0x47')),'type':_0xa561('0x48'),'output':_0x6a46d8[_0xa561('0x49')],'name':_0x6a46d8[_0xa561('0x14')]};if(!_[_0xa561('0x43')](_0x6a46d8[_0xa561('0x4a')])){logger[_0xa561('0xd')](_0xa561('0x4b'),_0x6a46d8['DefaultReportId']);return analyticDefaultReportController[_0xa561('0x4c')]({'id':_0x6a46d8[_0xa561('0x4a')]},_0x28930a)['then'](handleResult(_0x6a46d8))['catch'](handleError());}if(!_[_0xa561('0x43')](_0x6a46d8[_0xa561('0x4d')])){logger['info'](_0xa561('0x4e'),_0x6a46d8[_0xa561('0x4d')]);return analyticCustomReportController[_0xa561('0x4c')]({'id':_0x6a46d8[_0xa561('0x4d')]},_0x28930a)['then'](handleResult(_0x6a46d8))[_0xa561('0xb')](handleError());}}catch(_0x2f2bdb){logger[_0xa561('0xc')](JSON['stringify'](_0x2f2bdb));}return logger[_0xa561('0xd')](_0xa561('0x4f'));};}function getJobs(_0x37ca27){var _0x3e75b8={};if(_0x37ca27){_0x3e75b8['id']=_0x37ca27;}return db[_0xa561('0x50')][_0xa561('0x51')]({'where':_0x3e75b8,'include':[{'model':db['MailAccount'],'attributes':['id',_0xa561('0x14'),_0xa561('0xf')],'include':[{'model':db[_0xa561('0x52')],'as':_0xa561('0x15'),'include':[{'model':db[_0xa561('0x53')],'as':_0xa561('0x53')}]}]}]})[_0xa561('0xa')](function(_0x2f4833){var _0x3fedf6=_[_0xa561('0x54')](manager[_0xa561('0x55')]);var _0x20282a=_[_0xa561('0x56')](_0x2f4833,function(_0x289579){return _0x289579['id'][_0xa561('0x57')]();});var _0x10166d=_[_0xa561('0x58')](_0x2f4833,function(_0x26ea6c){return _0x26ea6c['id']['toString']();});var _0x17a37a=_0x37ca27?_0x20282a:_['difference'](_0x20282a,_0x3fedf6);var _0x388a61=_[_0xa561('0x59')](_0x20282a,_0x3fedf6);var _0xd61055=_['difference'](_0x3fedf6,_0x20282a);var _0x28475e;var _0x10ff5a;for(_0x28475e=0x0;_0x28475e<_0xd61055[_0xa561('0x5a')]&&!_0x37ca27;_0x28475e+=0x1){_0x10ff5a=_0xd61055[_0x28475e]['toString']();if(manager[_0xa561('0x5b')](_0x10ff5a)){manager[_0xa561('0x3c')](_0x10ff5a);manager['deleteJob'](_0x10ff5a);logger[_0xa561('0xd')](_0xa561('0x5c'),_0x10ff5a);}}logger[_0xa561('0xd')](_0xa561('0x5d'),JSON[_0xa561('0x24')](_0x17a37a));for(_0x28475e=0x0;_0x28475e<_0x17a37a['length'];_0x28475e+=0x1){_0x10ff5a=_0x17a37a[_0x28475e]['toString']();if(_0x37ca27){logger['info'](JSON['stringify'](_0x10166d[_0x10ff5a]));BPromise['resolve']()[_0xa561('0xa')](handleJob(_0x10166d[_0x10ff5a]));logger[_0xa561('0xd')](_0xa561('0x5e'),_0x10166d[_0x10ff5a][_0xa561('0x14')],_0x10166d[_0x10ff5a][_0xa561('0x5f')]);}else if(_0x10166d[_0x10ff5a]['cron']&&_0x10166d[_0x10ff5a]['active']&&moment()[_0xa561('0x60')](_0x10166d[_0x10ff5a][_0xa561('0x61')],_0x10166d[_0x10ff5a][_0xa561('0x62')])){manager['add'](_0x10ff5a,_0x10166d[_0x10ff5a]['cron'],handleJob(_0x10166d[_0x10ff5a]));manager[_0xa561('0x63')](_0x10ff5a);logger['info'](_0xa561('0x64'),_0x10166d[_0x10ff5a][_0xa561('0x14')],_0x10166d[_0x10ff5a]['cron']);}else if(manager['exists'](_0x10ff5a)){manager[_0xa561('0x3c')](_0x10ff5a);manager[_0xa561('0x65')](_0x10ff5a);logger[_0xa561('0xd')](_0xa561('0x66'),_0x10166d[_0x10ff5a][_0xa561('0x14')],_0x10166d[_0x10ff5a][_0xa561('0x5f')]);}}for(_0x28475e=0x0,_0x10ff5a;_0x28475e<_0x388a61[_0xa561('0x5a')]&&!_0x37ca27;_0x28475e+=0x1){_0x10ff5a=_0x388a61[_0x28475e][_0xa561('0x57')]();if(manager[_0xa561('0x5b')](_0x10ff5a)){if(_0x10166d[_0x10ff5a][_0xa561('0x5f')]&&_0x10166d[_0x10ff5a][_0xa561('0x67')]&&moment()['isBetween'](_0x10166d[_0x10ff5a][_0xa561('0x61')],_0x10166d[_0x10ff5a][_0xa561('0x62')])){manager[_0xa561('0x68')](_0x10ff5a,_0x10166d[_0x10ff5a][_0xa561('0x5f')],handleJob(_0x10166d[_0x10ff5a]));logger['info'](_0xa561('0x69'),_0x10166d[_0x10ff5a][_0xa561('0x14')],_0x10166d[_0x10ff5a][_0xa561('0x5f')]);}else{manager[_0xa561('0x3c')](_0x10ff5a);manager[_0xa561('0x65')](_0x10ff5a);logger['info'](_0xa561('0x66'),_0x10166d[_0x10ff5a]['name'],_0x10166d[_0x10ff5a]['cron']);}}}})[_0xa561('0xb')](function(_0x15940b){logger[_0xa561('0xc')](JSON[_0xa561('0x24')](_0x15940b));});}exports[_0xa561('0x6a')]=function(_0x3f2ced){return getJobs(_0x3f2ced);};exports['start']=function(){setInterval(function(){return getJobs();},0x3c*0x3e8);return getJobs();};