flexbiz-server
Version:
Flexible Server
10 lines (9 loc) • 4.38 kB
JavaScript
'use strict';const _global=require("../global"),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"),{parentPort,workerData}=require("worker_threads");let connect2Db=!1;
const _=require("lodash"),backup=$msg$$=>{if($msg$$.configs&&_.isString($msg$$.configs))try{$msg$$.configs=JSON.parse($msg$$.configs)}catch($e$$){delete $msg$$.configs,console.info($e$$)}const $configs$$=$msg$$.configs||require("../configs");connect2Db||(mongoose.connect($configs$$.database.url,{useNewUrlParser:!0}),connect2Db=!0);let $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));let $user$$=$msg$$.user;model.findOne({_id:$id_app$$}).lean().exec(async($e$jscomp$1$$,$app$$)=>{if($e$jscomp$1$$||!$app$$)return parentPort.postMessage({error:$e$jscomp$1$$||"C\u00f4ng ty n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i",id_task:$msg$$.id_task});$e$jscomp$1$$=await Participant.findOne({email:$user$$,id_app:$id_app$$,admin:!0});if($app$$.user_created!==
$user$$&&!$e$jscomp$1$$)return parentPort.postMessage({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$jscomp$0$$=>{mongoose.connection.db.listCollections().toArray(($err$$,$collections$$)=>{if($err$$)return $callback$jscomp$0$$($err$$);const $collection_need_backup$$=$collections$$.filter($c$$=>"users"!==$c$$.name&&"apps"!==$c$$.name&&"logs"!==
$c$$.name&&"rights"!==$c$$.name&&"participants"!==$c$$.name);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()}}];console.log("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$$&&console.error($e$$);$callback$jscomp$0$$($e$$)})})}},$e$jscomp$0$$=>{if($e$jscomp$0$$)return console.error("Error backup database",$e$jscomp$0$$),parentPort.postMessage({error:$e$jscomp$0$$,id_task:$msg$$.id_task});$e$jscomp$0$$=new Date;fs.existsSync(path.dirname(__dirname)+"/backup")||fs.mkdirSync(path.dirname(__dirname)+"/backup");console.log("zip data...");try{zip.file("backup.json",JSON.stringify($data$$));
const $dataZipped$$=zip.generate({base64:!1,compression:"DEFLATE"});let $fileZip$$=$app$$._id+"-"+$e$jscomp$0$$.getTime()+".zip";console.log("write datazipped to file ",$fileZip$$);fs.writeFileSync(path.dirname(__dirname)+"/backup/"+$fileZip$$,$dataZipped$$,"binary");console.log("backuped to file ",$fileZip$$);parentPort.postMessage({file:$fileZip$$,id_task:$msg$$.id_task})}catch($e$$){parentPort.postMessage({error:$e$$,id_task:$msg$$.id_task})}})})};
parentPort.on("message",$msg$$=>{if($msg$$&&_.isString($msg$$))try{$msg$$=JSON.parse($msg$$)}catch($e$$){console.error($e$$);parentPort.postMessage({error:"msg is not valid"});return}backup($msg$$)});workerData&&(()=>{let $msg$$=workerData;if(_.isString($msg$$))try{$msg$$=JSON.parse($msg$$)}catch($e$$){console.error($e$$);parentPort.postMessage({error:"msg is not valid"});return}$msg$$.id&&backup($msg$$)})();setInterval(()=>{parentPort.postMessage("pong")},5E3);