458 lines
12 KiB
JavaScript
458 lines
12 KiB
JavaScript
const frpserveraxios=require('axios');
|
|
const herader = {
|
|
'Content-Type': 'application/json',
|
|
'Authorization':"Basic YWRtaW46bGljYWhr"
|
|
}
|
|
const db=require("../comman/db")
|
|
const mywebsocket=require("./tstws")
|
|
exports.getfrpserver=getfrpserver
|
|
|
|
|
|
function createdfrpdb( )
|
|
{
|
|
const createTableQuery = `
|
|
CREATE TABLE IF NOT EXISTS frpinfo (
|
|
autoid BIGINT NOT NULL AUTO_INCREMENT,
|
|
id VARCHAR(255) NOT NULL,
|
|
remote_port INT NOT NULL,
|
|
serial VARCHAR(255) NOT NULL,
|
|
last_online DATETIME NOT NULL,
|
|
name VARCHAR(255) NOT NULL,
|
|
PRIMARY KEY (autoid)
|
|
) ENGINE = InnoDB;
|
|
`;
|
|
|
|
db.query(createTableQuery, function (error, results, fields) {
|
|
// if (error) throw error;
|
|
// console.log('Table created or already exists.');
|
|
});
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async function insertfrpinfo(data)
|
|
{
|
|
|
|
var insertdata={id:data.nameup,serial:data.serial,name:data.name}
|
|
|
|
if(data.status=="online")
|
|
{
|
|
insertdata.remote_port=data.conf.remote_port
|
|
insertdata.last_online=data.nowtime
|
|
|
|
}else
|
|
{
|
|
insertdata.remote_port=0
|
|
}
|
|
//查看看id是否存在
|
|
let sql="SELECT * FROM `frpinfo` WHERE `id`=?"
|
|
let result=await db.queryacy(sql,data.nameup)
|
|
if(result.length==0)
|
|
{
|
|
sql="INSERT INTO `frpinfo` SET ?"
|
|
if(insertdata.remote_port==0)
|
|
{
|
|
insertdata.last_online=new Date("2000-01-01").toLocaleString()
|
|
}
|
|
|
|
await db.queryacy(sql,insertdata)
|
|
//console.log("inserted")
|
|
}else
|
|
{
|
|
//如果remote_port为0 删除emote_port
|
|
if(insertdata.remote_port==0)
|
|
{
|
|
delete insertdata.remote_port
|
|
}
|
|
sql="UPDATE `frpinfo` SET ? WHERE `id`='"+data.nameup+"'"
|
|
await db.queryacy(sql,[insertdata])
|
|
// console.log("updated")
|
|
}
|
|
|
|
}
|
|
|
|
async function createdFileInfodb( )
|
|
{
|
|
const createTableQuery = 'CREATE TABLE IF NOT EXISTS filebrowerinfo (\
|
|
`autoid` INT NOT NULL AUTO_INCREMENT,\
|
|
`name` VARCHAR(255) NOT NULL,\
|
|
remote_port VARCHAR(255) NOT NULL,\
|
|
`lasttime` DATETIME NOT NULL,\
|
|
`sppercent` INT NOT NULL,\
|
|
`sptotal` FLOAT NOT NULL,\
|
|
mountedon VARCHAR(255) NOT NULL,\
|
|
PRIMARY KEY (`autoid`)\
|
|
) ENGINE = InnoDB;\
|
|
';
|
|
|
|
db.query(createTableQuery, function (error, results, fields) {
|
|
if (error) throw error;
|
|
console.log('Table created or already exists.');
|
|
});
|
|
}
|
|
// createdFileInfodb();
|
|
// createdfrpdb();
|
|
// getfrpserver();
|
|
let devlistname=[]
|
|
async function getfrpserver()
|
|
{
|
|
devlistname=[];
|
|
createdFileInfodb();
|
|
createdfrpdb();
|
|
|
|
sql='SELECT * FROM `filebrowerinfo` WHERE 1'
|
|
let result=await db.queryacy(sql)
|
|
// console.log(result)
|
|
for (var i=0;i<result.length;i++)
|
|
{
|
|
devlistname.push(result[i].name)
|
|
}
|
|
|
|
|
|
var aaa=await frpserveraxios.get('http://106.75.72.40:7500/api/proxy/tcp',{headers:herader})
|
|
nowtime=new Date()
|
|
nowtime=nowtime.toLocaleString()
|
|
aaa=aaa.data.proxies;
|
|
for (var i=0;i<aaa.length;i++)
|
|
{
|
|
|
|
if(aaa[i].name.endsWith('_data'))
|
|
{
|
|
var data=aaa[i]
|
|
//console.log(aaa[i].name)
|
|
//去除后缀
|
|
var name=aaa[i].name.replace('_data','')
|
|
//console.log(name)
|
|
name=name.toUpperCase()
|
|
var list=name.split('_')
|
|
var serial=list[list.length-1]
|
|
data.serial=serial
|
|
data.nowtime=nowtime
|
|
|
|
data.nameup=name
|
|
if (data.name=="TowerIS2_2006_data")
|
|
{
|
|
//将data.nameup 从devlistname中删除
|
|
console.log("delete TowerIS2_2006_data")
|
|
|
|
}
|
|
|
|
|
|
if (data.conf!=null && devlistname.includes(data.nameup))
|
|
{
|
|
//将data.nameup 从devlistname中删除
|
|
let index=devlistname.indexOf(data.nameup)
|
|
devlistname.splice(index,1)
|
|
console.log("delete "+data.nameup)
|
|
console.log(devlistname);
|
|
|
|
|
|
}
|
|
|
|
if(data.nameup=="NOCONFIG")
|
|
{
|
|
continue;
|
|
}
|
|
// console.log(data.name)
|
|
//年月日时分秒
|
|
insertfrpinfo(data);
|
|
//插入数据库 构建object
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(name.startsWith('TowerIS2'.toUpperCase()))
|
|
{
|
|
//将name转换为大写
|
|
|
|
await dealwithIS2(data)
|
|
}
|
|
if(name.startsWith('TOWER_ISIF')||name.startsWith('TOWER_OSIF'))
|
|
{
|
|
//将name转换为大写
|
|
|
|
await dealwithISIF(data)
|
|
}
|
|
if(name.startsWith('ASD_S'))
|
|
{
|
|
//将name转换为大写
|
|
|
|
await dealwithASD(data)
|
|
}
|
|
// // console.log("name:"+name+"\tserial:"+i+" "+name.startsWith('TOWER_OSIF'))
|
|
|
|
// if(name.startsWith('TOWER_OSIF'))
|
|
// {
|
|
// await dealwithISIF(data)
|
|
// }
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|
|
console.log(devlistname)
|
|
console.log("done")
|
|
}
|
|
|
|
async function dealwithIS2(data)
|
|
{
|
|
// console.log(data)
|
|
|
|
// console.log("im IS2 my serial is:"+data.serial+"\tmy name is:"+data.nameup)
|
|
await panduanshebei(data)
|
|
|
|
}
|
|
|
|
async function dealwithISIF(data)
|
|
{
|
|
// console.log("im ISIF my serial is:"+data.serial+"\tmy name is:"+data.nameup)
|
|
|
|
await panduanshebei(data)
|
|
|
|
}
|
|
async function dealwithASD(data)
|
|
{
|
|
// console.log("im OSIF my serial is:"+data.serial+"\tmy name is:"+data.nameup)
|
|
await panduanshebei(data)
|
|
}
|
|
|
|
async function insettofilebrowerinfo(data)
|
|
{
|
|
let sql="SELECT * FROM `filebrowerinfo` WHERE `name`='"+data.name+"'"
|
|
let result=await db.queryacy(sql)
|
|
if(result.length==0)
|
|
{
|
|
sql="INSERT INTO `filebrowerinfo` SET ?"
|
|
await db.queryacy(sql,data)
|
|
}else
|
|
{
|
|
sql="UPDATE `filebrowerinfo` SET ? WHERE `name`='"+data.name+"'"
|
|
await db.queryacy(sql,data)
|
|
}
|
|
}
|
|
async function panduanshebei(data)
|
|
{
|
|
if(data.conf!=null)
|
|
{
|
|
let frpret=await getdevicelastdatatime(data.conf)
|
|
let timelast= frpret.timelast
|
|
|
|
let dataforinsert=
|
|
|
|
{
|
|
name:data.nameup,
|
|
lasttime:frpret.lasttimedata,
|
|
sppercent:frpret.space.percent,
|
|
sptotal:frpret.space.total/1024/1024+"GB",
|
|
remote_port:"http://106.75.72.40:"+data.conf.remote_port,
|
|
mountedon:frpret.space.mountedon
|
|
|
|
}
|
|
|
|
if (timelast<24.5)
|
|
{
|
|
console.log(data.name+"\t数据正常 "+timelast+"小时内新的日期文件创建");
|
|
await insettofilebrowerinfo(dataforinsert)
|
|
|
|
|
|
|
|
}else if(timelast==100000)
|
|
{
|
|
console.log("\x1b[33m"+data.name+"\t数据管理页面无法打开 请检查设备是否正常连接 \x1b[0m");
|
|
}
|
|
else
|
|
{
|
|
console.log("\x1b[31m"+data.name+"\t严重错误 数据异常"+timelast+"小时内没有新的日期文件创建 \x1b[0m");
|
|
await insettofilebrowerinfo(dataforinsert)
|
|
}
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
|
console.log("\x1b[33m"+ data.name+"\t设备未连接 \x1b[0m")
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
async function getdevicelastdatatime(device)
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
var ret={
|
|
timelast:100000,
|
|
space:{
|
|
percent:0,
|
|
total:0,
|
|
mountedon:" "
|
|
}
|
|
}
|
|
|
|
// console.log(device)
|
|
let port=device.remote_port;
|
|
let logaddress="http://106.75.72.40:"+port+"/api/login"
|
|
let passbody={
|
|
"username":"admin",
|
|
"password":"licahk"
|
|
}
|
|
|
|
|
|
let loginkey="";
|
|
try {
|
|
loginkey = await frpserveraxios.post(logaddress, passbody);
|
|
// 请求成功的处理逻辑
|
|
} catch (error) {
|
|
loginkey= 'ECONNRESET';
|
|
// 请求失败的处理逻辑
|
|
if (error.code === 'ECONNRESET') {
|
|
// 处理 socket hang up 错误
|
|
|
|
} else {
|
|
// 其他类型的错误处理
|
|
|
|
}
|
|
}
|
|
if(loginkey=='ECONNRESET')
|
|
{
|
|
ret.timelast=100000
|
|
return ret
|
|
}
|
|
|
|
//let loginkey=await frpserveraxios.post(logaddress,passbody).catch((err)=>{console.log(err)})
|
|
loginkey=loginkey.data;
|
|
let dataaddress="http://106.75.72.40:"+port+"/api/resources";
|
|
let datainfo=await frpserveraxios.get(dataaddress,{headers:{'X-Auth':loginkey}});
|
|
datainfo=datainfo.data;
|
|
//console.log(datainfo);
|
|
filelist=datainfo.items;
|
|
let diff=100000;
|
|
filelist.forEach(file => {
|
|
|
|
if(file.path.toUpperCase()=="DATA")
|
|
{
|
|
|
|
let filemodtime=file.modified
|
|
//计算与当前时间的差值 modified 举例2024-07-12T05:00:40.664988617+08:00
|
|
let now=new Date()
|
|
let nowtime=now.getTime()
|
|
|
|
let filetime=new Date(filemodtime)
|
|
ret.lasttimedata=filetime.toLocaleString();
|
|
let filetime1=filetime.getTime()
|
|
|
|
diff=nowtime-filetime1
|
|
diff=diff/1000/3600
|
|
|
|
|
|
|
|
}
|
|
|
|
});
|
|
ret.timelast=diff
|
|
|
|
if(port==13012)
|
|
{
|
|
ret.space.percent=0
|
|
ret.space.total=0
|
|
}
|
|
|
|
|
|
var wsaddres="ws://106.75.72.40:"+port+"/api/command/?auth="+loginkey;
|
|
var message="df /dev/mmcblk1p1"
|
|
var aa=await mywebsocket.runinws(message,wsaddres)
|
|
let commandret=aa[0].toString()
|
|
if(commandret=="error")
|
|
{
|
|
ret.space.percent=0
|
|
ret.space.total=0
|
|
}
|
|
else if(commandret=="Command not allowed.")
|
|
{
|
|
console.log("Command not allowed")
|
|
console.log("\x1b[31m"+device.proxy_name +" need allow df in filebrowser\x1b[0m")
|
|
}
|
|
else
|
|
{
|
|
if(aa.length==1)
|
|
{
|
|
let cc=aa[0].toString()
|
|
let bb=cc.split(":")
|
|
if(bb.length==3)
|
|
{
|
|
if (bb[2].trim()==" No such file or directory".trim())
|
|
{
|
|
console.log("No such file or directory")
|
|
ret.space.percent=0
|
|
ret.space.total=0
|
|
ret.space.mountedon="No SD card"
|
|
//return ret
|
|
}
|
|
}
|
|
console.log("error")
|
|
aa.push(Buffer.from("udev aa bb"))
|
|
}
|
|
let data=aa[1].toString()
|
|
let space=data.split(" ")
|
|
//移除space中的空格
|
|
space=space.filter(function(s) {
|
|
return s && s.trim();
|
|
});
|
|
|
|
|
|
|
|
if(space[0]=="udev")
|
|
{
|
|
message="df /home"
|
|
aa=await mywebsocket.runinws(message,wsaddres)
|
|
data=aa[1].toString()
|
|
space=data.split(" ")
|
|
space=space.filter(function(s) {
|
|
return s && s.trim();
|
|
});
|
|
}
|
|
|
|
|
|
ret.space.percent=space[4]
|
|
ret.space.total=space[1]
|
|
if(ret.space.mountedon!="No SD card")
|
|
ret.space.mountedon=space[5]
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// runinws("df /dev/mmcblk1p1","ws://106.75.72.40:30012/api/command/?auth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7ImlkIjoxLCJsb2NhbGUiOiJ6aC1jbiIsInZpZXdNb2RlIjoibGlzdCIsInNpbmdsZUNsaWNrIjpmYWxzZSwicGVybSI6eyJhZG1pbiI6dHJ1ZSwiZXhlY3V0ZSI6dHJ1ZSwiY3JlYXRlIjp0cnVlLCJyZW5hbWUiOnRydWUsIm1vZGlmeSI6dHJ1ZSwiZGVsZXRlIjp0cnVlLCJzaGFyZSI6dHJ1ZSwiZG93bmxvYWQiOnRydWV9LCJjb21tYW5kcyI6WyJkZiJdLCJsb2NrUGFzc3dvcmQiOmZhbHNlLCJoaWRlRG90ZmlsZXMiOmZhbHNlfSwiZXhwIjoxNzIxMDM3MjE0LCJpYXQiOjE3MjEwMzAwMTQsImlzcyI6IkZpbGUgQnJvd3NlciJ9.YNDbRregnpkZw6UFS0EJjX0DcCFQQoFmnCCusyFzstQ" )
|