m2pool_backend_app/src/clear.js

92 lines
2.8 KiB
JavaScript
Raw Normal View History

2025-04-10 10:53:16 +00:00
const Times = require("../public/times");
const Init = require("./init");
class ClearDBData extends Init {
constructor(coin) {
const method = "clear"
super(coin, method);
}
/**
* 删除X小时前的sharesdb数据hours必须大于24小时
* @param {Number} hours
* @returns
*/
async clearSharesDB(hours) {
if(hours < 24){
console.log(`sharesdb最多只能删除24小时之前的数据`);
return
}
try {
// 修正查询语句,去掉 'from' 和 'to' 字段的单引号
const query_sharesdb_table_sql = `
SELECT \`from\`, \`to\`
FROM ${this.coin}_blk_height_detail
WHERE date <= NOW() - INTERVAL ? HOUR;
`;
// 获取需要删除的高度范围
const need_del_height = await this.sharesdb.exec(query_sharesdb_table_sql, [hours]);
if (need_del_height.length === 0) {
console.log(`${Date.now()}${this.coin}暂无需要清理的shares detail`);
return;
}
// 生成删除表的 SQL 语句
let delete_sql = `DROP TABLE IF EXISTS `;
need_del_height.forEach((item) => {
const { from, to } = item;
const table = `${this.coin}_block_detail_${from}_${Number((to - 1).toFixed(0))}`;
delete_sql += `${table}, `;
});
delete_sql = delete_sql.slice(0, -2) + ";"; // 去掉最后的逗号并加上分号
// 执行删除表的 SQL 语句
await this.sharesdb.exec(delete_sql);
} catch (err) {
throw err;
}
}
/**
* 删除pooldb只支持0时刻
* @param {*} start_time 开始时间 yyyy-MM-dd hh-mm-ss格式 例如"2024-11-11 00:00:00"
* @param {*} end_time 同上
* @returns
*/
async clearPoolDB(start_time, end_time){
try{
const interval = 86400000 // 1天的毫秒数
const start_ts = new Date(start_time).valueOf()
const end_ts = new Date(end_time).valueOf()
const count = Number((end_ts - start_ts).toFixed(0)) / interval
if (!Number.isInteger(count)){
console.log(`给定的${start_time}${end_time}有误!`);
return
}
let sql = `DROP TABLE IF EXISTS `
for(let i=0; i<count; i++){
const table_time = Times.utcTime(start_ts + i * interval).split(" ")[0].replace(/\-/g, "")
sql += `${this.coin}_miners_${table_time}, ${this.coin}_miners_stats_${table_time}, ${this.coin}_pool_blkstats_${table_time}, `
}
sql = sql.slice(0, -2) + ";"
console.log(sql);
return
} catch(err){
throw err
}
}
/**
* 删除hashrate db的xx_miners表
*/
async clearHashrateDB(){
try{
const sql = `DELETE FROM ${this.coin}_minersv2 WHERE date <= NOW() - INTERVAL 25 HOUR;`
await this.hashratedb.exec_transaction(sql)
} catch(err){
throw err
}
}
}
module.exports = ClearDBData