m2pool_backend_app/src/clear.js

92 lines
2.8 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 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