|
|
- const http = require('http');
- const querystring = require('querystring');
- const url = require('url');
- const fs = require('fs');
- const path=require('path');
- const {app, dialog} = require('electron');
- const XLSX = require('xlsx');
- const multer = require('multer');
- function travel(dir,callback){
- fs.readdirSync(dir).forEach((file)=>{
- const pathname=path.join(dir,file)
- if(fs.statSync(pathname).isDirectory()){
- travel(pathname,callback)
- }else{
- callback(pathname)
- }
- })
- }
- function compare(p){ //这是比较函数
- return function(m,n){
- var a = m[p];
- var b = n[p];
- return b - a; //降序
- }
- }
-
- function getDir(){
- if(__dirname.indexOf("app") >= 0 && __dirname.indexOf("sources") >= 0){
- if(process.platform == "darwin"){
- return app.getPath("userData");
- } else {
- return path.join(__dirname,"../../..");
- }
- } else {
- return __dirname;
- }
- }
- function getEasySpiderLocation(){
- if(__dirname.indexOf("app") >= 0 && __dirname.indexOf("sources") >= 0){
- if(process.platform == "darwin"){
- return path.join(__dirname,"../../../");
- } else {
- return path.join(__dirname,"../../../");
- }
- } else {
- return __dirname;
- }
- }
- if(!fs.existsSync(path.join(getDir(), "tasks"))){
- fs.mkdirSync(path.join(getDir(), "tasks"));
- }
- if(!fs.existsSync(path.join(getDir(), "execution_instances"))){
- fs.mkdirSync(path.join(getDir(), "execution_instances"));
- }
- if(!fs.existsSync(path.join(getDir(), "config.json"))){
- fs.writeFileSync(path.join(getDir(), "config.json"), JSON.stringify({"webserver_address":"http://localhost","webserver_port":8074,"user_data_folder":"./user_data","absolute_user_data_folder":""}));
- }
-
- exports.getDir = getDir;
- exports.getEasySpiderLocation = getEasySpiderLocation;
- FileMimes = JSON.parse(fs.readFileSync(path.join(__dirname,'mime.json')).toString());
- exports.start = function(port = 8074) {
- http.createServer(function(req, res) {
- let body = "";
- res.setHeader("Access-Control-Allow-Origin", "*"); // 设置可访问的源
- // 解析参数
- const pathName = url.parse(req.url).pathname;
- if(pathName.indexOf(".") < 0) { //如果没有后缀名, 则为后台请求
- res.writeHead(200, { 'Content-Type': 'application/json' });
- }
- // else if(pathName.indexOf("index.html") >= 0) {
- // fs.readFile(path.join(__dirname,"src", pathName), async (err, data) => {
- // if (err) {
- // res.writeHead(404, { 'Content-Type': 'text/html;charset="utf-8"' })
- // res.end(err.message)
- // return;
- // }
- // if (!err) {
- // // 3. 针对不同的文件返回不同的内容头
- // let extname = path.extname(pathName);
- // let mime = FileMimes[extname]
- // res.writeHead(200, { 'Content-Type': mime + ';charset="utf-8"' })
- // res.end(data);
- // return;
- // }
- // })
- // }
- else { //如果有后缀名, 则为前端请求
- // console.log(path.join(__dirname,"src/taskGrid", pathName));
- fs.readFile(path.join(__dirname,"src", pathName), async (err, data) => {
- if (err) {
- res.writeHead(404, { 'Content-Type': 'text/html;charset="utf-8"' })
- res.end(err.message)
- return;
- }
- if (!err) {
- // 3. 针对不同的文件返回不同的内容头
- let extname = path.extname(pathName);
- let mime = FileMimes[extname]
- res.writeHead(200, { 'Content-Type': mime + ';charset="utf-8"' })
- res.end(data);
- return;
- }
- })
- }
-
-
- req.on('data', function(chunk) {
- body += chunk;
- });
- req.on('end', function() {
- // 设置响应头部信息及编码
- if (pathName == "/queryTasks") { //查询所有服务信息,只包括id和服务名称
- output = [];
- travel(path.join(getDir(), "tasks"),function(pathname){
- const data = fs.readFileSync(pathname, 'utf8');
- let stat = fs.statSync(pathname, 'utf8');
- // parse JSON string to JSON object
- const task = JSON.parse(data);
- let item = {
- "id": task.id,
- "name": task.name,
- "url": task.url,
- "mtime": stat.mtime,
- }
- if(item.id!= -2) {
- output.push(item);
- }
- });
- output.sort(compare("mtime"));
- res.write(JSON.stringify(output));
- res.end();
- } else if(pathName == "/queryOSVersion") {
- res.write(JSON.stringify({"version":process.platform, "bit":process.arch}));
- res.end();
- }
- else if (pathName == "/queryExecutionInstances") { //查询所有服务信息,只包括id和服务名称
- output = [];
- travel(path.join(getDir(), "execution_instances"),function(pathname){
- const data = fs.readFileSync(pathname, 'utf8');
- // parse JSON string to JSON object
- const task = JSON.parse(data);
- let item = {
- "id": task.id,
- "name": task.name,
- "url": task.url,
- }
- if(item.id!= -2) {
- output.push(item);
- }
- });
- res.write(JSON.stringify(output));
- res.end();
- } else if (pathName == "/queryTask") {
- var params = url.parse(req.url, true).query;
- try {
- var tid = parseInt(params.id);
- const data = fs.readFileSync(path.join(getDir(), `tasks/${tid}.json`), 'utf8');
- // parse JSON string to JSON object
- res.write(data);
- res.end();
- } catch (error) {
- res.write(JSON.stringify({ "error": "Cannot find task based on specified task ID." }));
- res.end();
- }
- } else if (pathName == "/queryExecutionInstance") {
- var params = url.parse(req.url, true).query;
- try {
- var tid = parseInt(params.id);
- const data = fs.readFileSync(path.join(getDir(), `execution_instances/${tid}.json`), 'utf8');
- // parse JSON string to JSON object
- res.write(data);
- res.end();
- } catch (error) {
- res.write(JSON.stringify({ "error": "Cannot find execution instance based on specified execution ID." }));
- res.end();
- }
- } else if(pathName == "/"){
- res.write("Hello World!", 'utf8');
- res.end();
- } else if(pathName == "/deleteTask"){
- var params = url.parse(req.url, true).query;
- try {
- let tid = parseInt(params.id);
- let data = fs.readFileSync(path.join(getDir(), `tasks/${tid}.json`), 'utf8');
- data = JSON.parse(data);
- data.id = -2;
- data = JSON.stringify(data);
- // write JSON string to a file
- fs.writeFile(path.join(getDir(), `tasks/${tid}.json`), data, (err) => {
- if (err) {
- throw err;
- }
- });
- res.write(JSON.stringify({ "success": "Task has been deleted successfully." }));
- res.end();
- } catch (error) {
- res.write(JSON.stringify({ "error": "Cannot find task based on specified task ID." }));
- res.end();
- }
- } else if(pathName == "/manageTask"){
- body = querystring.parse(body);
- data = JSON.parse(body.paras);
- let id = data["id"];
- if (data["id"] == -1) {
- file_names = [];
- fs.readdirSync(path.join(getDir(), "tasks")).forEach((file)=>{
- try{
- if(file.split(".")[1] == "json"){
- file_names.push(parseInt(file.split(".")[0]));
- }
- } catch (error) {
-
- }
- })
- if(file_names.length == 0){
- id = 0;
- } else {
- id = Math.max(...file_names) + 1;
- }
- data["id"] = id;
- // write JSON string to a fil
- }
- data = JSON.stringify(data);
- // write JSON string to a file
- fs.writeFile(path.join(getDir(), `tasks/${id}.json`), data, (err) => {});
- res.write(id.toString(), 'utf8');
- res.end();
- } else if(pathName == "/invokeTask"){
- body = querystring.parse(body);
- let data = JSON.parse(body.paras);
- let id = body.id;
- let task = fs.readFileSync(path.join(getDir(), `tasks/${id}.json`), 'utf8');
- task = JSON.parse(task);
- try{
- task["links"] = data["urlList_0"];
- }catch(error){
- console.log(error);
- }
- for (const [key, value] of Object.entries(data)) {
- for (let i = 0; i < task["inputParameters"].length; i++) {
- if (key === task["inputParameters"][i]["name"]) { // 能调用
- const nodeId = parseInt(task["inputParameters"][i]["nodeId"]);
- const node = task["graph"][nodeId];
- if (node["option"] === 1) {
- node["parameters"]["links"] = value;
- } else if (node["option"] === 4) {
- node["parameters"]["value"] = value;
- } else if (node["option"] === 8 && node["parameters"]["loopType"] === 0) {
- node["parameters"]["exitCount"] = parseInt(value);
- } else if (node["option"] === 8) {
- node["parameters"]["textList"] = value;
- }
- break;
- }
- }
- }
- let file_names = [];
- fs.readdirSync(path.join(getDir(), "execution_instances")).forEach((file)=>{
- try{
- if(file.split(".")[1] == "json"){
- file_names.push(parseInt(file.split(".")[0]));
- }
- console.log(file);
- } catch (error) {
-
- }
- })
- let eid = 0;
- if (file_names.length != 0) {
- eid = Math.max(...file_names) + 1;
- }
- task["id"] = eid;
- task = JSON.stringify(task);
- fs.writeFile(path.join(getDir(), `execution_instances/${eid}.json`), task, (err) => {});
- res.write(eid.toString(), 'utf8');
- res.end();
- } else if(pathName == "/getConfig"){
- let config = fs.readFileSync(path.join(getDir(), `config.json`), 'utf8');
- config = JSON.parse(config);
- res.write(JSON.stringify(config));
- res.end();
- } else if(pathName == "/setUserDataFolder"){
- let config = fs.readFileSync(path.join(getDir(), `config.json`), 'utf8');
- config = JSON.parse(config);
- body = querystring.parse(body);
- config["user_data_folder"] = body["user_data_folder"];
- config = JSON.stringify(config);
- fs.writeFile(path.join(getDir(), `config.json`), config, (err) => {});
- res.write(JSON.stringify({ "success": "User data folder has been set successfully." }));
- res.end();
- }
- });
- }).listen(port);
- console.log("Server has started.");
- }
|