blob: cb62f529aec505fb75402bf4848391ca5c54e057 [file] [log] [blame]
/*
============LICENSE_START==========================================
===================================================================
Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
===================================================================
Unless otherwise specified, all software contained herein is licensed
under the Apache License, Version 2.0 (the License);
you may not use this software except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
============LICENSE_END============================================ */
//.. processing on server side
'use strict';
const fs = require('fs');
//var spawn = require("child_process").spawn;
var Chproc = require("child_process");
var logger = require('./srvlogger');
var clName= "ServerDataSvc";
//const DIST_FLDR = join(process.cwd(), 'dist');
//var DIST_FLDR = "dist";
var cdt_home = ".";
var LOG_DIR = "/tmp";
var LogF = "ndserver.log";
var SubProcScript= "/app/subnproc.js";
//var HTML_ROOT_FLDR= DIST_FLDR;
//var DelScript= DIST_FLDR +"/app/deleteOldData.js";
//var inputFilePfx = DIST_FLDR +"/posted_data_";
var fsAvSpaceKB= -1;
var rsfname= "";
var remAddr= ""; //.. remote client address
var taskId= "";
var fdI;
var fdRsf;
var fDelim= "&";
//.. to be called by server at initialization
exports.setHomeDir = function( homeDir, logDir ) {
this.cdt_home= homeDir;
this.LOG_DIR= logDir;
// this.DIST_FLDR= this.cdt_home+"/dist";
this.LogF= this.LOG_DIR+"/ndserver.log";
console.log( clName+": setHomeDir: cdt_home:["+this.cdt_home+"]");
console.log( clName+": setHomeDir: LogF:["+this.LogF+"]");
};
//.. to be called by server on receiving GET /getUserRole request
// (simulation only)
exports.getUserRoles = function( requrl ) {
var methName= "getUserRoles";
logger.addLog( clName+": "+methName+
": start: url:["+ requrl+"]\n cdt_home:["+this.cdt_home+"]\n",this.LogF);
let timeStamp = new Date().toISOString();
logger.addLog( clName+": "+methName+": timeStamp:["+timeStamp+"]\n",this.LogF);
var resp= '{\"respStr\":\"notfoundResp\"}';
this.urolfname= this.cdt_home+"/userRoles.json";
resp= this.readResultFile( this.urolfname );
logger.addLog( clName+": "+methName+
": result length="+resp.length+"\n",this.LogF);
return resp;
};
//.. to be called by server on receiving GET /api/* request
exports.getData = function( requrl ) {
var methName= "getData";
//console.log(clName+": getData: start: url:["+ requrl+"]\n cdt_home:["+
// this.cdt_home+"]");
logger.addLog( clName+": "+methName+
": start: url:["+ requrl+"]\n cdt_home:["+this.cdt_home+"]\n",this.LogF);
let timeStamp = new Date().toISOString();
logger.addLog( clName+": "+methName+": timeStamp:["+timeStamp+"]\n",this.LogF);
var resp= '{\"respStr\":\"notfoundResp\"}';
var taskStr= "taskId=";
//... Regular Expressions for different requests ...
//.. to get processing result
var rexpGRESUL= new RegExp(/\/api\/get_result/);
//.. to get progress percentage of the processing
var rexpGPROGR= new RegExp(/\/api\/get_progress/);
//.. to get parameters calculated via the processing
var rexpGPRMS= new RegExp(/\/api\/get_params/);
//.. to get parameters format-error file
var rexpPFMTERR= new RegExp(/\/api\/get_pfmterr/);
//.. to get Available space in server-side file-system
var rexpGFSAVSP= new RegExp(/\/api\/get_fsAvSpace/);
//.. to check for ACE-editor resource files
var rexpACERES= new RegExp(/\/node_modules\/ace-builds\/src-min/);
//
//... checking which url is matching ...
if( requrl == '/' ) {
// console.log(clName+": getData: this is a ROOT request ...");
logger.addLog( clName+": getData: this is a ROOT request ...\n",this.LogF);
return this.getRoot();
};
//.. non-root, api url
var match1= null;
if( (match1= rexpGRESUL.exec(requrl)) != null ) {
logger.addLog( clName+": "+methName+": URL match /api/get_result\n",this.LogF);
//.. assuming: /api/get_result?taskId=f7be82e43e34cb4e960b45d35e8d9596
var indT= requrl.indexOf( taskStr, 0);
if( indT < 0 ) {
var errMsg=
clName+": "+methName+": Error: No taskId found in the URL !\n";
logger.addLog( errMsg,this.LogF);
resp= '{\"Error\":\"'+errMsg+'\"}';
}
else { //.. indT > -1 - have taskId in URL
this.taskId= requrl.substr( indT+ taskStr.length );
logger.addLog( clName+": "+methName+
": extracted from URL: taskId:["+this.taskId+"]\n",this.LogF);
this.rsfname= this.cdt_home+"/sync_template_res_"+this.taskId+".txt";
resp= this.readResultFile( this.rsfname );
logger.addLog( clName+": "+methName+
": result length="+resp.length+"\n",this.LogF);
logger.addLog( clName+": "+methName+
": got result -Start data cleanup...\n",this.LogF);
this.deleteOldFiles( this.taskId );
};
}
else
if( (match1= rexpGPROGR.exec(requrl)) != null ) {
logger.addLog( clName+": "+methName+
": URL match /api/get_progress\n",this.LogF);
//.. assuming: /api/get_progress?taskId=f7be82e43e34cb4e960b45d35e8d9596
var indT= requrl.indexOf( taskStr, 0);
if( indT < 0 ) {
var errMsg=
clName+": "+methName+": Error: No taskId found in the URL !\n";
logger.addLog( errMsg,this.LogF);
resp= '{\"Error\":\"'+errMsg+'\"}';
}
else { //.. indT > -1 - have taskId in URL
this.taskId= requrl.substr( indT+ taskStr.length );
logger.addLog( clName+": "+methName+
": extracted from URL: taskId:["+this.taskId+"]\n",this.LogF);
this.pgfname= this.cdt_home+"/proc_status_"+this.taskId+".json";
// resp= '{\"percentage\":\"3\"}';
resp= this.readResultFile( this.pgfname );
}
logger.addLog( clName+": "+methName+
": result length="+resp.length+"\n",this.LogF);
logger.addLog( clName+": "+methName+": progress:["+resp+"]\n",this.LogF);
}
else
if( (match1= rexpGPRMS.exec(requrl)) != null ) {
logger.addLog( clName+": "+methName+
": URL match /api/get_params\n",this.LogF);
//.. assuming: /api/get_params?taskId=f7be82e43e34cb4e960b45d35e8d9596
var indT= requrl.indexOf( taskStr, 0);
if( indT < 0 ) {
var errMsg=
clName+": "+methName+": Error: No taskId found in the URL !\n";
logger.addLog( errMsg,this.LogF);
resp= '{\"Error\":\"'+errMsg+'\"}';
}
else { //.. indT > -1 - have taskId in URL
this.taskId= requrl.substr( indT+ taskStr.length );
logger.addLog( clName+": "+methName+
": extracted from URL: taskId:["+this.taskId+"]\n",this.LogF);
var prmfname= this.cdt_home+"/template_params_"+this.taskId+".txt";
resp= this.readResultFile( prmfname );
}
logger.addLog( clName+": "+methName+
": params length="+resp.length+"\n",this.LogF);
}
else
if( (match1= rexpPFMTERR.exec(requrl)) != null ) {
//.. parameter format error file
logger.addLog( clName+": "+methName+
": URL match /api/get_pfmterr\n",this.LogF);
//.. assuming: /api/get_pfmterr?taskId=f7be82e43e34cb4e960b45d35e8d9596
var indT= requrl.indexOf( taskStr, 0);
if( indT < 0 ) {
var errMsg=
clName+": "+methName+": Error: No taskId found in the URL !\n";
logger.addLog( errMsg,this.LogF);
resp= '{\"Error\":\"'+errMsg+'\"}';
}
else { //.. indT > -1 - have taskId in URL
this.taskId= requrl.substr( indT+ taskStr.length );
logger.addLog( clName+": "+methName+
": extracted from URL: taskId:["+this.taskId+"]\n",this.LogF);
var errfname= this.cdt_home+"/sync_template_err_"+this.taskId+".txt";
resp= this.readResultFile( errfname );
}
logger.addLog( clName+": "+methName+
": params length="+resp.length+"\n",this.LogF);
}
else
if( (match1= rexpGFSAVSP.exec(requrl)) != null ) {
//.. Available Space in Server-side file-system
logger.addLog( clName+": "+methName+
": URL match /api/get_fsAvSpace \n",this.LogF);
var errMsg= this.getFsAvailSpace( this.cdt_home );
if( errMsg.length > 0 ) {
//.. return non-empty Error message
resp= '{\"Error\":\"'+errMsg+'\"}';
}else{
resp= fsAvSpaceKB; //.. empty return means no error
};
}
else
if( (match1= rexpACERES.exec(requrl)) != null ) {
//.. (simulated env.) ACE-editor resource files
logger.addLog( clName+": "+methName+
": URL match /node_modules/ace-builds...\n",this.LogF);
var acebldStr= "src-min\/";
var indAB= requrl.indexOf( acebldStr, 0);
if( indAB < 0 ) {
logger.addLog( clName+": "+methName+
": Warn: No URL match("+acebldStr+").\n",this.LogF);
}
else { //.. indAB > -1 -got acebldStr
var acefname= requrl.substr( indAB +acebldStr.length );
logger.addLog( clName+": "+methName+
": req.file name:["+acefname+"]\n",this.LogF);
// if( acefname == "mode-velocity.js" || acefname == "theme-chrome.js" )
if( acefname == "mode-velocity.js" )
{
var aresfname= this.cdt_home+"/app/"+acefname;
resp= this.readResultFile( aresfname );
}
else {
logger.addLog( clName+": "+methName+
": Warn: No ace URL match("+acebldStr+"...js).\n",this.LogF);
}
}
}
else { //..
logger.addLog( clName+": "+methName+
": Warn: No URL match - nothing to do !\n",this.LogF);
};
logger.addLog( clName+": "+methName+
": resp.length="+resp.length+"\n finish.\n",this.LogF);
return resp;
};
exports.deleteOldFiles = function( ctaskId ) {
var methName= "deleteOldFiles";
logger.addLog( clName+": "+methName+
": start. the complete task Id:["+ctaskId+"]\n",this.LogF);
var cp_args= new Array( 0 );
cp_args.push( ctaskId ); //.. give it taskId in args
cp_args.push( cdt_home );
cp_args.push( LOG_DIR );
var DelScript= this.cdt_home +"/app/deleteOldData.js";
var chprocI= Chproc.fork( DelScript, cp_args );
logger.addLog( clName+": "+methName+
": DelScript started ...\n",this.LogF);
let timeStamp = new Date().toISOString();
logger.addLog( clName+": "+methName+": timeStamp:["+timeStamp+"]\n",this.LogF);
};
exports.getRoot = function() {
var methName= "getRoot";
logger.addLog( clName+": "+methName+": start. ROOT URL match \n",this.LogF);
logger.addLog( clName+": "+methName+
": cdt_home:["+this.cdt_home+"]\n",this.LogF);
var HTML_ROOT_FLDR= this.cdt_home;
this.rsfname= HTML_ROOT_FLDR+"/index.html";
var resp= this.readResultFile( this.rsfname );
logger.addLog( clName+": "+methName+
": result length="+resp.length+"\n",this.LogF);
logger.addLog( clName+": "+methName+": resp:["+resp+"]\n",this.LogF);
return resp;
};
exports.readResultFile = function( rfname ) {
var methName= "readResultFile";
//.. read processing result from file and send back to the client
logger.addLog( clName+": "+methName+
": start. rfname:["+rfname+"]\n",this.LogF);
var rdata= "";
try {
rdata= fs.readFileSync( rfname, 'utf8');
}
catch( err ) {
logger.addLog( clName+": "+methName+
": result-file read: Error: code="+err.code+"\n",this.LogF);
throw err;
}
logger.addLog( clName+": "+methName+
": result-file content length="+rdata.length+"\n",this.LogF);
return rdata;
};
exports.postSrvLogRec = function ( requrl, inpdata, remaddr ) {
//.. to be called by server on receiving POST /api/post_logrec request
var methName= "postSrvLogRec";
logger.addLog( clName+": "+methName+
": start: url:["+ requrl+"]\n",this.LogF);
let timeStamp = new Date().toISOString();
logger.addLog( clName+": "+methName+": timeStamp:["+timeStamp+"]\n",this.LogF);
logger.addLog( clName+": "+methName+
": cdt_home:\n["+cdt_home+"]\n",this.LogF);
logger.addLog( clName+": "+methName+
": client: remaddr:["+ remaddr+"]\n",this.LogF);
if( remaddr != null && remaddr != undefined ) {
this.remAddr= remaddr;
};
logger.addLog( clName+": "+methName+
": Log Record:\n-["+inpdata+"]-\n",this.LogF);
var resp= '{\"respStr\":\"OK\"}';
logger.addLog( clName+": "+methName+": done: resp:["+resp+"]\n",this.LogF);
return( resp );
};
exports.procReq = function ( requrl, inpdata, remaddr ) {
//.. to be called by server on receiving POST /api/* request
// receive input data, save into a file and start server-side processing task
var methName= "procReq";
logger.addLog( clName+": "+methName+
": start: url:["+ requrl+"]\n",this.LogF);
let timeStamp = new Date().toISOString();
logger.addLog( clName+": "+methName+": timeStamp:["+timeStamp+"]\n",this.LogF);
logger.addLog( clName+": "+methName+
": cdt_home:\n["+cdt_home+"]\n",this.LogF);
logger.addLog( clName+": "+methName+
": client: remaddr:["+ remaddr+"]\n",this.LogF);
if( remaddr != null && remaddr != undefined ) {
this.remAddr= remaddr;
};
logger.addLog( clName+": "+methName+
": remAddr:["+ this.remAddr+"]\n",this.LogF);
var inpdLen= inpdata.length;
logger.addLog( clName+": "+methName+": inpdata length="+inpdLen+"\n",this.LogF);
if( inpdLen > 300 ) {
logger.addLog( clName+": "+methName+
": inpdata:\n["+inpdata.substr(0,299)+"...]\n",this.LogF);
}else{
logger.addLog( clName+": "+methName+
": inpdata:\n["+inpdata+"]\n",this.LogF);
};
var resp= '{\"respStr\":\"postNotFoundResp\"}';
var taskStr= "taskId=";
var rexp2= new RegExp(/\/api\/proc_cont/);
var match2= rexp2.exec( requrl );
if( match2 ) {
logger.addLog( clName+": "+methName+
": URL match: proc_cont - processing content...\n",this.LogF);
//.. check available space before server-side processiong
var emsg= this.getFsAvailSpace( this.cdt_home );
var doAdd= ''; //.. false
var doProc= ''; //.. false
//.. assuming format:
// url: /api/proc_cont?taskId=1fcf9ebb05cec21caeb71ebac7e34b2c&part=2of2
var indT= requrl.indexOf( taskStr, 0);
if( indT < 0 ) {
logger.addLog( clName+": "+methName+
": Warn: No taskId found in the URL - New Task !\n",this.LogF);
this.calcTaskId();
logger.addLog( clName+": "+methName+
": calculated New taskId:["+this.taskId+"]\n", this.LogF);
resp= '{\"respStr\":\"proc_start\",\"taskId\":\"'+this.taskId+'\"}';
}
else { //.. indT > -1 - have taskId in URL
var indTV= indT+ taskStr.length;
var indDL= requrl.indexOf( fDelim, indTV );
if( indDL < 0 ) {
logger.addLog( clName+": "+methName+
": no more fields after taskId.\n",this.LogF);
this.taskId= requrl.substr( indTV );
}else{ //.. found delimiter
this.taskId= requrl.substring( indTV, indDL );
};
logger.addLog( clName+": "+methName+
": extracted from URL: taskId:["+this.taskId+"]\n", this.LogF);
doAdd= "true"; //.. will add to old content
resp= '{\"respStr\":\"proc_upload\"}'; //.. no return of old taskId
}
var inputFilePfx = this.cdt_home +"/posted_data_";
var infname= inputFilePfx +this.taskId +".txt";
logger.addLog( clName+": "+methName+
": got input file name:["+infname+"]\n",this.LogF);
//.. extracting parts info, e.g.: "...&part=2of2"
var rexp2p= new RegExp(/part=(\d+)of(\d+)/);
var match2p= rexp2p.exec( requrl );
if( match2p == null ) {
logger.addLog( clName+": "+methName+
": Warn: No part number found in the URL "+
"-cant determine the last part !\n",this.LogF);
}
else { //.. match2p != null
logger.addLog( clName+": "+methName+
": match2p: length="+match2p.length+"\n",this.LogF);
for( var i1=0; i1 < match2p.length; i1++ ) {
logger.addLog( clName+": "+methName+
": match2p:["+match2p[i1]+"]\n",this.LogF);
};
var partNum= match2p[ 1];
var partCnt= match2p[ 2];
logger.addLog( clName+": "+methName+
": partNum:["+partNum+"] partCnt:["+partCnt+"]\n",this.LogF);
if( partNum == partCnt ) {
logger.addLog( clName+": "+methName+
": this is the last part -need doProc\n",this.LogF);
doProc= "true";
};
};
//.. write data into the file and start processing right after the close
var errW= this.writeInp2File( infname, inpdata, doAdd, doProc );
if( errW.length > 0 ) {
resp= errW;
};
}
else { //.. no match2
logger.addLog( clName+": "+methName+": Warn: No URL match.\n",this.LogF);
}
logger.addLog( clName+": "+methName+": done: resp:["+resp+"]\n",this.LogF);
return( resp );
};
exports.getFsAvailSpace = function ( fspath ) {
var methName= "getFsAvailSpace";
//.. get available space (kB) in filesystem where the fspath is mounted
logger.addLog( clName+": "+methName+
": start: fspath:\n["+fspath+"]\n",this.LogF);
var timeStampI = Date.now();
logger.addLog( clName+": "+methName+": timeStampI="+timeStampI+"\n",this.LogF);
var timeStamp = new Date( timeStampI ).toISOString();
logger.addLog( clName+": "+methName+": timeStamp:["+timeStamp+"]\n",this.LogF);
if( fspath.length < 1 ) {
var errMsg= methName+": Error: the filesystem directory path is empty !";
logger.addLog( clName+ errMsg+"\n", this.LogF);
return errMsg;
};
// var carg= "-k "+fspath;
// var mopts= { input: carg, timeout: 4000 };
//var moutObj= Chproc.spawnSync('df',[],mopts);
var c_args= new Array( 0 );
c_args.push( '-k' );
c_args.push( fspath );
var mopts= { timeout: 4000 };
logger.addLog( clName+": "+methName+
": mopts:["+JSON.stringify(mopts)+"]\n",this.LogF);
//.. start
var moutObj= Chproc.spawnSync('df', c_args, mopts);
logger.addLog( clName+": "+methName+
": df done: moutObj: status:["+moutObj.status+"](0 means Ok)\n",this.LogF);
var timeStampI = Date.now();
logger.addLog( clName+": "+methName+": timeStampI="+timeStampI+"\n",this.LogF);
if( moutObj.error != null ) {
var errMsg= clName+": "+methName+
": spawn df: Error:["+JSON.stringify(moutObj.error)+"]";
logger.addLog( errMsg+"\n", this.LogF);
return errMsg;
};
logger.addLog( clName+": "+methName+
": df moutObj.output: length="+moutObj.output.length+"\n",this.LogF);
if( moutObj.output.length > 0 ) {
for( var i0=0; i0 < moutObj.output.length; i0++ ) {
logger.addLog( clName+": "+methName+
": moutObj.output["+i0+"]:["+moutObj.output[i0]+"]\n",this.LogF);
}; //.. loop
//.. output[1]: should contain 2 lines:
// [Filesystem 1K-blocks Used Available Use% Mounted on\n
// /dev/dm-0 37383720 8933604 26528068 26% /\n]
var out1= moutObj.output[1];
logger.addLog( clName+": "+methName+": to parse out1:["+out1+"]\n",this.LogF);
var rexp1= new RegExp(/\s+(\d+)\s+(\d+)\s+(\d+)\s+/);
logger.addLog( clName+": "+methName+": rexp1:["+rexp1+"]\n",this.LogF);
var matchArr= rexp1.exec( out1 );
if( matchArr == null ) {
var errMsg= clName+": "+methName+
": spawn: Error: No digitals (bytes counts) found in the output !";
logger.addLog( errMsg+"\n", this.LogF);
return errMsg;
};
if( matchArr[3] == null || matchArr[3] == undefined ) {
var errMsg= clName+": "+methName+
": parsed: Error: The 3-rd byte count is empty (no Available Kbytes) !";
logger.addLog( errMsg+"\n", this.LogF);
return errMsg;
};
fsAvSpaceKB= matchArr[3];
logger.addLog( clName+": "+methName+
": extracted fsAvSpaceKB="+fsAvSpaceKB+"\n",this.LogF);
}else{
var errMsg= clName+": "+methName+
": spawn: Error: Empty df-command output array !";
logger.addLog( errMsg+"\n", this.LogF);
return errMsg;
}
logger.addLog( clName+": "+methName+": finished.\n",this.LogF);
return '';
};
exports.calcTaskId = function () {
var methName= "calcTaskId";
//.. calculate taskId
logger.addLog( clName+": "+methName+": start:\n",this.LogF);
var timeStampI = Date.now();
logger.addLog( clName+": "+methName+": timeStampI="+timeStampI+"\n",this.LogF);
var timeStamp = new Date( timeStampI ).toISOString();
logger.addLog( clName+": "+methName+": timeStamp:["+timeStamp+"]\n",this.LogF);
var rawId = String( this.remAddr+'-'+timeStampI );
logger.addLog( clName+": "+methName+": rawId:["+rawId+"]\n",this.LogF);
var mopts= { input: rawId, timeout: 4000 };
logger.addLog( clName+": "+methName+
": mopts:["+JSON.stringify(mopts)+"]\n",this.LogF);
var moutObj= Chproc.spawnSync('md5sum',[],mopts);
logger.addLog( clName+": "+methName+
": moutObj: status:["+moutObj.status+"]\n",this.LogF);
if( moutObj.error != null ) {
logger.addLog( clName+": "+methName+
": moutObj calc.: Error:["+JSON.stringify(moutObj.error)+"]\n",this.LogF);
throw moutObj.error;
}
else { //.. no errors
logger.addLog( clName+": "+methName+
": moutObj: output: length="+moutObj.output.length+"\n",this.LogF);
if( moutObj.output.length > 0 ) {
for( var i0=0; i0 < moutObj.output.length; i0++ ) {
logger.addLog( clName+": "+methName+
": moutObj: output:["+moutObj.output[i0]+"]\n",this.LogF);
}
}
var out1= moutObj.output[ 1 ];
logger.addLog( clName+": "+methName+": out1:["+out1+"]\n",this.LogF);
var rexp1= new RegExp(/\w+/); //.. alphanumeric
logger.addLog( clName+": "+methName+": rexp1:["+rexp1+"]\n",this.LogF);
var match1= rexp1.exec( out1 );
if( match1 == null ) {
logger.addLog( clName+": "+methName+
": Warn.: No Match of rexp1 in the cmd output (No taskId) !\n",this.LogF);
}
else {
logger.addLog( clName+": "+methName+
": match1:["+match1[0]+"] length="+match1.length+"\n",this.LogF);
this.taskId= match1[0];
};
};
logger.addLog( clName+": "+methName+
": done: calculated taskId:["+this.taskId+"]\n",this.LogF);
};
exports.writeInp2File = function ( fname, inpd, doAdd, doProc ) {
var methName= "writeInp2File";
//.. write input data to the file
logger.addLog( clName+": "+methName+
": Start: file:["+fname+"]\n",this.LogF);
let timeStamp = new Date().toISOString();
logger.addLog( clName+": "+methName+": timeStamp:["+timeStamp+"]\n",this.LogF);
var inpdLen= inpd.length;
logger.addLog( clName+": "+methName+": inpd length="+ inpdLen+"\n",this.LogF);
if( inpdLen < 1 ) {
logger.addLog( clName+": "+methName+
": Warn.: Empty input - nothing to do !\n",this.LogF);
return ''; //.. not an error
};
if( inpdLen > 300 ) {
logger.addLog( clName+": "+methName+
": inpd(begin):["+ inpd.substr(0,299)+"...]\n",this.LogF);
}
else {
logger.addLog( clName+": "+methName+": inpd:["+ inpd+"]\n",this.LogF);
};
logger.addLog( clName+": "+methName+
": doAdd:["+doAdd+"] doProc:["+doProc+"]\n",this.LogF);
if( ! doAdd ) {
logger.addLog( clName+": "+methName+
": Dont doAdd - need new content.\n",this.LogF);
//.. removing old file if is there with the same name (async is Not OK !)
var fname_o= fname+".save";
try {
fs.renameSync( fname, fname_o );
}
catch( err ) {
var errMsg= clName+": "+methName+
": Warn.: Failed to rename old file:["+fname+"]"+
" err.code="+err.code+"\n";
logger.addLog( errMsg, this.LogF );
};
};
logger.addLog( clName+": "+methName+": opening file:["+fname+"]\n",this.LogF);
try {
this.fdI= fs.openSync( fname, 'a' );
}
catch( err ) {
var errMsg= clName+": "+methName+
": Error: Failed to open file:["+fname+"]"+
" err.code="+err.code+"\n";
logger.addLog( errMsg, this.LogF );
return( errMsg );
};
logger.addLog( clName+": "+methName+
": writing data into the file: fdI="+ this.fdI+"\n",this.LogF);
try {
fs.appendFileSync( this.fdI, inpd, 'utf8' );
}
catch( err ) {
var errMsg= clName+": "+methName+
": Error: Failed to append input data to file: err.code="+err.code+"\n";
logger.addLog( errMsg, this.LogF );
return( errMsg );
};
logger.addLog( clName+": "+methName+
": closing input data file...\n",this.LogF);
try {
fs.closeSync( this.fdI );
}
catch( err ) {
var errMsg= clName+": "+methName+
": Error: Failed to close input data file: err.code="+err.code+"\n";
logger.addLog( errMsg, this.LogF );
return( errMsg );
};
logger.addLog( clName+": "+methName+
": input file was written and closed successfully.\n",this.LogF);
timeStamp = new Date().toISOString();
logger.addLog( clName+": "+methName+": timeStamp:["+timeStamp+"]\n",this.LogF);
if( doProc ) {
logger.addLog( clName+": "+methName+
": starting processing...\n",this.LogF);
this.startProcFile();
};
return ''; //.. no error
};
exports.startProcFile = function () {
var methName= "startProcFile";
//.. start processing of the input file in external sub-process
logger.addLog( clName+": "+methName+
": Start: taskId:["+this.taskId+"]\n",this.LogF);
let timeStamp = new Date().toISOString();
logger.addLog( clName+": "+methName+
": timeStamp:["+timeStamp+"]\n",this.LogF);
console.log(methName+": cdt_home:["+this.cdt_home+"]");
var SubProcScriptP= this.cdt_home + SubProcScript;
logger.addLog( clName+": "+methName+
": run SubProcScript:\n["+SubProcScriptP+"]\n",this.LogF);
var cp_args= new Array( 0 );
cp_args.push( this.taskId ); //.. give it taskId in args
cp_args.push( this.cdt_home );
cp_args.push( this.LOG_DIR );
var chprocI= Chproc.fork( SubProcScriptP, cp_args );
// chprocI.on('message', (msg) => {
// console.log(methName+": chprocI got msgJ:["+JSON.stringify(msg)+"]");
// });
// console.log("startProcFile: sending a message to child.");
// chprocI.send({ hello: 'world' });
logger.addLog( clName+": "+methName+" done submit.\n",this.LogF);
};