mirror of
https://github.com/benjamin-wilson/public-pool.git
synced 2026-09-29 09:05:06 -07:00
cleanup
This commit is contained in:
@@ -8,7 +8,9 @@ import { ClientStatisticsEntity } from './client-statistics.entity';
|
|||||||
@Injectable()
|
@Injectable()
|
||||||
export class ClientStatisticsService {
|
export class ClientStatisticsService {
|
||||||
|
|
||||||
private bulkAsyncUpdates: Partial<ClientStatisticsEntity>[] = [];
|
private bulkAsyncUpdates: {
|
||||||
|
[key: string]: Partial<ClientStatisticsEntity>
|
||||||
|
} = {};
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
|
|
||||||
@@ -30,26 +32,21 @@ export class ClientStatisticsService {
|
|||||||
// });
|
// });
|
||||||
// }
|
// }
|
||||||
|
|
||||||
public updateBulkAsync(clientStatistic: Partial<ClientStatisticsEntity>, lastSeenIndex: number) {
|
public updateBulkAsync(clientStatistic: Partial<ClientStatisticsEntity>) {
|
||||||
|
this.bulkAsyncUpdates[clientStatistic.client + clientStatistic.time.toString()] = clientStatistic;
|
||||||
if(this.bulkAsyncUpdates.length > lastSeenIndex && this.bulkAsyncUpdates[lastSeenIndex].clientId == clientStatistic.clientId && this.bulkAsyncUpdates[lastSeenIndex].time == clientStatistic.time){
|
|
||||||
this.bulkAsyncUpdates[lastSeenIndex].shares = clientStatistic.shares;
|
|
||||||
this.bulkAsyncUpdates[lastSeenIndex].acceptedCount = clientStatistic.acceptedCount;
|
|
||||||
return lastSeenIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.bulkAsyncUpdates.push(clientStatistic) - 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async doBulkAsyncUpdate(){
|
public async doBulkAsyncUpdate(){
|
||||||
if(this.bulkAsyncUpdates.length < 1){
|
if(Object.keys(this.bulkAsyncUpdates).length < 1){
|
||||||
console.log('No client stats to update.')
|
console.log('No client stats to update.')
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 1: Prepare data for bulk update
|
// Step 1: Prepare data for bulk update
|
||||||
const values = this.bulkAsyncUpdates.map(stat =>
|
const values = Object.entries(this.bulkAsyncUpdates).map(([key, value]) => {
|
||||||
`('${stat.clientId}', ${stat.time}, ${stat.shares ?? 0}, ${stat.acceptedCount ?? 0}, NOW())`
|
return `('${value.clientId}', ${value.time}, ${value.shares}, ${value.acceptedCount}, NOW())`
|
||||||
).join(',');
|
}).join(',');
|
||||||
|
|
||||||
|
|
||||||
const query = `
|
const query = `
|
||||||
DO $$
|
DO $$
|
||||||
@@ -83,7 +80,7 @@ export class ClientStatisticsService {
|
|||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.bulkAsyncUpdates = [];
|
this.bulkAsyncUpdates = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
public async insert(clientStatistic: Partial<ClientStatisticsEntity>) {
|
public async insert(clientStatistic: Partial<ClientStatisticsEntity>) {
|
||||||
|
|||||||
@@ -14,9 +14,6 @@ export class StratumV1ClientStatistics {
|
|||||||
private submissionCache: { time: Date, difficulty: number }[] = [];
|
private submissionCache: { time: Date, difficulty: number }[] = [];
|
||||||
|
|
||||||
private currentTimeSlot: number = null;
|
private currentTimeSlot: number = null;
|
||||||
private lastSave: number = null;
|
|
||||||
|
|
||||||
private bulkUpdateIndex = 0;
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private readonly clientStatisticsService: ClientStatisticsService,
|
private readonly clientStatisticsService: ClientStatisticsService,
|
||||||
@@ -43,7 +40,6 @@ export class StratumV1ClientStatistics {
|
|||||||
difficulty: targetDifficulty,
|
difficulty: targetDifficulty,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
if (this.currentTimeSlot == null) {
|
if (this.currentTimeSlot == null) {
|
||||||
// First record, insert it
|
// First record, insert it
|
||||||
this.currentTimeSlot = timeSlot;
|
this.currentTimeSlot = timeSlot;
|
||||||
@@ -58,16 +54,15 @@ export class StratumV1ClientStatistics {
|
|||||||
clientName: client.clientName,
|
clientName: client.clientName,
|
||||||
sessionId: client.sessionId
|
sessionId: client.sessionId
|
||||||
});
|
});
|
||||||
this.lastSave = new Date().getTime();
|
|
||||||
} else if (this.currentTimeSlot != timeSlot) {
|
} else if (this.currentTimeSlot != timeSlot) {
|
||||||
// Transitioning to a new time slot,
|
// Transitioning to a new time slot,
|
||||||
// First update the old time slot with the latest data
|
// First update the old time slot with the latest data
|
||||||
this.bulkUpdateIndex = this.clientStatisticsService.updateBulkAsync({
|
this.clientStatisticsService.updateBulkAsync({
|
||||||
time: this.currentTimeSlot,
|
time: this.currentTimeSlot,
|
||||||
clientId: client.id,
|
clientId: client.id,
|
||||||
shares: this.shares,
|
shares: this.shares,
|
||||||
acceptedCount: this.acceptedCount,
|
acceptedCount: this.acceptedCount,
|
||||||
}, this.bulkUpdateIndex);
|
});
|
||||||
// Set the new time slot and add incoming shares then insert it
|
// Set the new time slot and add incoming shares then insert it
|
||||||
this.currentTimeSlot = timeSlot;
|
this.currentTimeSlot = timeSlot;
|
||||||
this.shares = targetDifficulty;
|
this.shares = targetDifficulty;
|
||||||
@@ -81,18 +76,17 @@ export class StratumV1ClientStatistics {
|
|||||||
clientName: client.clientName,
|
clientName: client.clientName,
|
||||||
sessionId: client.sessionId
|
sessionId: client.sessionId
|
||||||
});
|
});
|
||||||
this.lastSave = new Date().getTime();
|
|
||||||
} else {
|
} else {
|
||||||
// Accept the shares if none of the prior conditions are met,
|
// Accept the shares if none of the prior conditions are met,
|
||||||
// saving to memory for storing later
|
// saving to memory for storing later
|
||||||
this.shares += targetDifficulty;
|
this.shares += targetDifficulty;
|
||||||
this.acceptedCount++;
|
this.acceptedCount++;
|
||||||
this.bulkUpdateIndex = this.clientStatisticsService.updateBulkAsync({
|
this.clientStatisticsService.updateBulkAsync({
|
||||||
time: this.currentTimeSlot,
|
time: this.currentTimeSlot,
|
||||||
clientId: client.id,
|
clientId: client.id,
|
||||||
shares: this.shares,
|
shares: this.shares,
|
||||||
acceptedCount: this.acceptedCount,
|
acceptedCount: this.acceptedCount,
|
||||||
}, this.bulkUpdateIndex);
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user