2023-03-19 21:39:10 +08:00

187 lines
8.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const http = require('http');
const querystring = require('querystring');
const url = require('url');
const fs = require('fs');
const path=require('path');
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)
}
})
}
exports.start = function(port = 8074) {
http.createServer(function(req, res) {
let body = "";
res.setHeader("Access-Control-Allow-Origin", "*"); // 设置可访问的源
res.writeHead(200, { 'Content-Type': 'application/json' });
req.on('data', function(chunk) {
body += chunk;
});
req.on('end', function() {
// 解析参数
const pathName = url.parse(req.url).pathname;
// 设置响应头部信息及编码
if (pathName == "/queryTasks") { //查询所有服务信息只包括id和服务名称
output = [];
travel(path.join(__dirname, "tasks"),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 == "/queryExecutionInstances") { //查询所有服务信息只包括id和服务名称
output = [];
travel(path.join(__dirname, "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(__dirname, `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(__dirname, `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(__dirname, `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(__dirname, `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(__dirname, "tasks")).forEach((file)=>{
try{
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(__dirname, `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(__dirname, `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(__dirname, "execution_instances")).forEach((file)=>{
try{
file_names.push(parseInt(file.split(".")[0]));
} 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(__dirname, `execution_instances/${eid}.json`), task, (err) => {});
res.write(eid.toString(), 'utf8');
res.end();
}
});
}).listen(port);
console.log("Server has started.");
}