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 const moment = require('moment'); 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=moment().format('YYYY-MM-DD HH:mm:ss') } 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{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=moment(filetime).format('YYYY-MM-DD HH:mm:ss'); 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].replace(/\D/g, ''); ret.space.total=space[1].replace(/\D/g, ''); 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" )