flexbiz-server
Version:
Flexible Server
11 lines (10 loc) • 4.57 kB
JavaScript
require("../global");const async=require("async"),model=global.getModel("app"),fs=require("fs"),path=require("path"),moment=require("moment"),zip=(new require("node-zip"))();require("../libs/prototypes.js");const Participant=global.getModel("participant"),{workerData}=require("worker_threads");let connect2Db=!1;
const _=require("lodash"),v8=require("v8"),{postToParent,onParentMessage}=require("./worker-utils"),backup=$msg$$=>{let $dir$$=$msg$$.dirPath;if($dir$$&&!fs.existsSync($dir$$))postToParent({error:"Th\u01b0 m\u1ee5c l\u01b0u tr\u1eef kh\u00f4ng t\u1ed3n t\u1ea1i",id_task:$msg$$.id_task});else{$dir$$=$dir$$||path.dirname(__dirname)+"/backup/";if($msg$$.configs&&_.isString($msg$$.configs))try{$msg$$.configs=JSON.parse($msg$$.configs)}catch($e$$){delete $msg$$.configs,console.info($e$$)}var $configs$$=
$msg$$.configs||require("../configs");connect2Db||(mongoose.connect($configs$$.database.url,{useNewUrlParser:!0}),connect2Db=!0);var $id_app$$=$msg$$.id,$dateFrom$$=$msg$$.dateFrom,$dateTo$$=$msg$$.dateTo,$back_app_info$$=$msg$$.back_app_info;$dateFrom$$?$dateFrom$$=moment(new Date($dateFrom$$)).startOf("date"):($dateFrom$$=moment(),$dateFrom$$.year(1900));$dateTo$$?$dateTo$$=moment(new Date($dateTo$$)).endOf("date"):($dateTo$$=moment(),$dateTo$$.year(2999));var $user$$=$msg$$.user;model.findOne({_id:$id_app$$}).lean().then(async $app$$=>
{if(!$app$$)return postToParent({error:"C\u00f4ng ty n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i",id_task:$msg$$.id_task});const $par$$=await Participant.findOne({email:$user$$,id_app:$id_app$$,admin:!0});if($app$$.user_created!==$user$$&&!$par$$)return postToParent({error:"B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n th\u1ef1c hi\u1ec7n t\u00e1c v\u1ee5 n\u00e0y",id_task:$msg$$.id_task});let $data$$={};$back_app_info$$&&($data$$["app.js"]=$app$$);async.parallel({data:$callback$$=>{mongoose.connection.db.listCollections().toArray(($err$$,
$collections$$)=>{if($err$$)return $callback$$($err$$);const $collection_need_backup$$=$collections$$.filter($c$$=>$c$$.name!=="users"&&$c$$.name!=="apps"&&$c$$.name!=="logs");console.info("Prepare backup",$collection_need_backup$$.length,"collections");const $backed$$=[];async.map($collection_need_backup$$,($collection$$,$callback$$)=>{setImmediate(()=>{let $query$$={id_app:$id_app$$};$query$$.$or=[{ngay_ct:null},{ngay_ct:{$gte:$dateFrom$$.toDate(),$lte:$dateTo$$.toDate()}}];Logger.info("backupping...",
$collection$$.name,$query$$);mongoose.connection.db.collection($collection$$.name,($err$$,$coll$$)=>{if($err$$)return $callback$$($err$$);$coll$$.find({...$query$$}).toArray(($e$$,$rs$$)=>{if($e$$)return $callback$$($e$$);console.info("Preparing data",$collection$$.name,$rs$$.length,"row(s)");$rs$$.forEach(($r$$,$index$$)=>{$r$$.id_backup=$r$$._id.toString();$collection$$.name.includes("sokho")&&($r$$.line=$index$$);$collection$$.name.includes("socai")&&($r$$.nh_dk=$index$$)});console.info("Backup success",
$collection$$.name,$rs$$.length,"row(s)");$backed$$.push($collection$$.name);console.info("Backed",$backed$$.length,"/",$collection_need_backup$$.length,"collection(s)");$data$$[$collection$$.name]=$rs$$;return $callback$$()})})})},$e$$=>{$e$$&&Logger.error($e$$);$callback$$($e$$)})})}},$e$$=>{if($e$$)return Logger.error("Error backup database",$e$$),postToParent({error:$e$$,id_task:$msg$$.id_task});fs.existsSync($dir$$)||fs.mkdirSync($dir$$);Logger.info("zip data...");try{zip.file("backup.json",
JSON.stringify($data$$));const $dataZipped$$=zip.generate({base64:!1,compression:"DEFLATE"});let $fileZip$$=$app$$._id+"-"+moment().format("YYYY-MM-DD-HH:mm:ss")+".zip";Logger.info("write datazipped to file ",$fileZip$$);$e$$=$dir$$+$fileZip$$;fs.writeFileSync($e$$,$dataZipped$$,"binary");Logger.info("backuped to file ",$fileZip$$);postToParent({file:$e$$,id_task:$msg$$.id_task})}catch($e$$){postToParent({error:$e$$,id_task:$msg$$.id_task})}})}).catch($e$$=>{postToParent({error:$e$$.message,id_task:$msg$$.id_task})})}};
onParentMessage($msg$$=>{if($msg$$&&_.isString($msg$$))try{$msg$$=JSON.parse($msg$$)}catch($e$$){Logger.error($e$$);postToParent({error:"msg is not valid"});return}backup($msg$$)});
workerData&&(()=>{let $msg$$=workerData;if(Buffer.isBuffer($msg$$)||$msg$$ instanceof Uint8Array)try{$msg$$=v8.deserialize($msg$$)}catch($e$$){return Logger.error("[Worker] L\u1ed7i deserialize workerData:",$e$$),postToParent({error:"Init workerData failed: "+$e$$.message})}if(_.isString($msg$$))try{$msg$$=JSON.parse($msg$$)}catch($e$$){Logger.error($e$$);postToParent({error:"msg is not valid"});return}$msg$$.id&&backup($msg$$)})();