Re-use LN stats importer code to log daily LN stats
This commit is contained in:
parent
91ada9ce75
commit
2daf94f65a
@ -56,116 +56,21 @@ class LightningStatsUpdater {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async $runTasks(): Promise<void> {
|
private async $runTasks(): Promise<void> {
|
||||||
await this.$logLightningStatsDaily();
|
await this.$logStatsDaily();
|
||||||
await this.$logNodeStatsDaily();
|
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.$runTasks();
|
this.$runTasks();
|
||||||
}, this.timeUntilMidnight());
|
}, this.timeUntilMidnight());
|
||||||
}
|
}
|
||||||
|
|
||||||
private async $logLightningStatsDaily() {
|
private async $logStatsDaily(): Promise<void> {
|
||||||
try {
|
const date = new Date();
|
||||||
logger.info(`Running lightning daily stats log...`);
|
this.setDateMidnight(date);
|
||||||
|
date.setUTCHours(24);
|
||||||
|
|
||||||
const networkGraph = await lightningApi.$getNetworkGraph();
|
logger.info(`Running lightning daily stats log...`);
|
||||||
let total_capacity = 0;
|
const networkGraph = await lightningApi.$getNetworkGraph();
|
||||||
for (const channel of networkGraph.edges) {
|
LightningStatsImporter.computeNetworkStats(date.getTime(), networkGraph);
|
||||||
if (channel.capacity) {
|
|
||||||
total_capacity += parseInt(channel.capacity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let clearnetNodes = 0;
|
|
||||||
let torNodes = 0;
|
|
||||||
let unannouncedNodes = 0;
|
|
||||||
for (const node of networkGraph.nodes) {
|
|
||||||
for (const socket of node.addresses) {
|
|
||||||
const hasOnion = socket.addr.indexOf('.onion') !== -1;
|
|
||||||
if (hasOnion) {
|
|
||||||
torNodes++;
|
|
||||||
}
|
|
||||||
const hasClearnet = [4, 6].includes(isIP(socket.split(':')[0]));
|
|
||||||
if (hasClearnet) {
|
|
||||||
clearnetNodes++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (node.addresses.length === 0) {
|
|
||||||
unannouncedNodes++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const channelStats = await channelsApi.$getChannelsStats();
|
|
||||||
|
|
||||||
const query = `INSERT INTO lightning_stats(
|
|
||||||
added,
|
|
||||||
channel_count,
|
|
||||||
node_count,
|
|
||||||
total_capacity,
|
|
||||||
tor_nodes,
|
|
||||||
clearnet_nodes,
|
|
||||||
unannounced_nodes,
|
|
||||||
avg_capacity,
|
|
||||||
avg_fee_rate,
|
|
||||||
avg_base_fee_mtokens,
|
|
||||||
med_capacity,
|
|
||||||
med_fee_rate,
|
|
||||||
med_base_fee_mtokens
|
|
||||||
)
|
|
||||||
VALUES (NOW() - INTERVAL 1 DAY, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`;
|
|
||||||
|
|
||||||
await DB.query(query, [
|
|
||||||
networkGraph.edges.length,
|
|
||||||
networkGraph.nodes.length,
|
|
||||||
total_capacity,
|
|
||||||
torNodes,
|
|
||||||
clearnetNodes,
|
|
||||||
unannouncedNodes,
|
|
||||||
channelStats.avgCapacity,
|
|
||||||
channelStats.avgFeeRate,
|
|
||||||
channelStats.avgBaseFee,
|
|
||||||
channelStats.medianCapacity,
|
|
||||||
channelStats.medianFeeRate,
|
|
||||||
channelStats.medianBaseFee,
|
|
||||||
]);
|
|
||||||
logger.info(`Lightning daily stats done.`);
|
|
||||||
} catch (e) {
|
|
||||||
logger.err('$logLightningStatsDaily() error: ' + (e instanceof Error ? e.message : e));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private async $logNodeStatsDaily() {
|
|
||||||
try {
|
|
||||||
logger.info(`Running daily node stats update...`);
|
|
||||||
|
|
||||||
const query = `
|
|
||||||
SELECT nodes.public_key, c1.channels_count_left, c2.channels_count_right, c1.channels_capacity_left,
|
|
||||||
c2.channels_capacity_right
|
|
||||||
FROM nodes
|
|
||||||
LEFT JOIN (
|
|
||||||
SELECT node1_public_key, COUNT(id) AS channels_count_left, SUM(capacity) AS channels_capacity_left
|
|
||||||
FROM channels
|
|
||||||
WHERE channels.status = 1
|
|
||||||
GROUP BY node1_public_key
|
|
||||||
) c1 ON c1.node1_public_key = nodes.public_key
|
|
||||||
LEFT JOIN (
|
|
||||||
SELECT node2_public_key, COUNT(id) AS channels_count_right, SUM(capacity) AS channels_capacity_right
|
|
||||||
FROM channels WHERE channels.status = 1 GROUP BY node2_public_key
|
|
||||||
) c2 ON c2.node2_public_key = nodes.public_key
|
|
||||||
`;
|
|
||||||
|
|
||||||
const [nodes]: any = await DB.query(query);
|
|
||||||
|
|
||||||
for (const node of nodes) {
|
|
||||||
await DB.query(
|
|
||||||
`INSERT INTO node_stats(public_key, added, capacity, channels) VALUES (?, NOW() - INTERVAL 1 DAY, ?, ?)`,
|
|
||||||
[node.public_key, (parseInt(node.channels_capacity_left || 0, 10)) + (parseInt(node.channels_capacity_right || 0, 10)),
|
|
||||||
node.channels_count_left + node.channels_count_right]);
|
|
||||||
}
|
|
||||||
logger.info('Daily node stats has updated.');
|
|
||||||
} catch (e) {
|
|
||||||
logger.err('$logNodeStatsDaily() error: ' + (e instanceof Error ? e.message : e));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,6 +36,8 @@ class LightningStatsImporter {
|
|||||||
latestNodeCount = 1; // Ignore gap in the data
|
latestNodeCount = 1; // Ignore gap in the data
|
||||||
|
|
||||||
async $run(): Promise<void> {
|
async $run(): Promise<void> {
|
||||||
|
logger.info(`Importing historical lightning stats`);
|
||||||
|
|
||||||
// const [channels]: any[] = await DB.query('SELECT short_id from channels;');
|
// const [channels]: any[] = await DB.query('SELECT short_id from channels;');
|
||||||
// logger.info('Caching funding txs for currently existing channels');
|
// logger.info('Caching funding txs for currently existing channels');
|
||||||
// await fundingTxFetcher.$fetchChannelsFundingTxs(channels.map(channel => channel.short_id));
|
// await fundingTxFetcher.$fetchChannelsFundingTxs(channels.map(channel => channel.short_id));
|
||||||
@ -106,7 +108,7 @@ class LightningStatsImporter {
|
|||||||
/**
|
/**
|
||||||
* Generate LN network stats for one day
|
* Generate LN network stats for one day
|
||||||
*/
|
*/
|
||||||
async computeNetworkStats(timestamp: number, networkGraph): Promise<void> {
|
public async computeNetworkStats(timestamp: number, networkGraph): Promise<void> {
|
||||||
// Node counts and network shares
|
// Node counts and network shares
|
||||||
let clearnetNodes = 0;
|
let clearnetNodes = 0;
|
||||||
let torNodes = 0;
|
let torNodes = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user