experimental stratum job visualization
This commit is contained in:
@@ -64,8 +64,8 @@ export class MiningService {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
/**
|
||||
* Get names and slugs of all pools
|
||||
*/
|
||||
public getPools(): Observable<any[]> {
|
||||
@@ -75,7 +75,6 @@ export class MiningService {
|
||||
return this.poolsData;
|
||||
})
|
||||
);
|
||||
|
||||
}
|
||||
/**
|
||||
* Set the hashrate power of ten we want to display
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Inject, Injectable, PLATFORM_ID, LOCALE_ID } from '@angular/core';
|
||||
import { ReplaySubject, BehaviorSubject, Subject, fromEvent, Observable } from 'rxjs';
|
||||
import { AddressTxSummary, Transaction } from '@interfaces/electrs.interface';
|
||||
import { AccelerationDelta, HealthCheckHost, IBackendInfo, MempoolBlock, MempoolBlockUpdate, MempoolInfo, Recommendedfees, ReplacedTransaction, ReplacementInfo, isMempoolState } from '@interfaces/websocket.interface';
|
||||
import { Transaction } from '@interfaces/electrs.interface';
|
||||
import { AccelerationDelta, HealthCheckHost, IBackendInfo, MempoolBlock, MempoolBlockUpdate, MempoolInfo, Recommendedfees, ReplacedTransaction, ReplacementInfo, StratumJob, isMempoolState } from '@interfaces/websocket.interface';
|
||||
import { Acceleration, AccelerationPosition, BlockExtended, CpfpInfo, DifficultyAdjustment, MempoolPosition, OptimizedMempoolStats, RbfTree, TransactionStripped } from '@interfaces/node-api.interface';
|
||||
import { Router, NavigationStart } from '@angular/router';
|
||||
import { isPlatformBrowser } from '@angular/common';
|
||||
@@ -159,6 +159,8 @@ export class StateService {
|
||||
liveMempoolBlockTransactions$: Observable<{ block: number, transactions: { [txid: string]: TransactionStripped} }>;
|
||||
accelerations$ = new Subject<AccelerationDelta>();
|
||||
liveAccelerations$: Observable<Acceleration[]>;
|
||||
stratumJobUpdate$ = new Subject<{ state: Record<string, StratumJob> } | { job: StratumJob }>();
|
||||
stratumJobs$ = new BehaviorSubject<Record<string, StratumJob>>({});
|
||||
txConfirmed$ = new Subject<[string, BlockExtended]>();
|
||||
txReplaced$ = new Subject<ReplacedTransaction>();
|
||||
txRbfInfo$ = new Subject<RbfTree>();
|
||||
@@ -303,6 +305,24 @@ export class StateService {
|
||||
map((accMap) => Object.values(accMap).sort((a,b) => b.added - a.added))
|
||||
);
|
||||
|
||||
this.stratumJobUpdate$.pipe(
|
||||
scan((acc: Record<string, StratumJob>, update: { state: Record<string, StratumJob> } | { job: StratumJob }) => {
|
||||
if ('state' in update) {
|
||||
// Replace the entire state
|
||||
return update.state;
|
||||
} else {
|
||||
// Update or create a single job entry
|
||||
return {
|
||||
...acc,
|
||||
[update.job.pool]: update.job
|
||||
};
|
||||
}
|
||||
}, {}),
|
||||
shareReplay(1)
|
||||
).subscribe(val => {
|
||||
this.stratumJobs$.next(val);
|
||||
});
|
||||
|
||||
this.networkChanged$.subscribe((network) => {
|
||||
this.transactions$ = new BehaviorSubject<TransactionStripped[]>(null);
|
||||
this.blocksSubject$.next([]);
|
||||
|
||||
@@ -36,6 +36,7 @@ export class WebsocketService {
|
||||
private isTrackingAccelerations: boolean = false;
|
||||
private isTrackingWallet: boolean = false;
|
||||
private trackingWalletName: string;
|
||||
private isTrackingStratum: string | number | false = false;
|
||||
private trackingMempoolBlock: number;
|
||||
private trackingMempoolBlockNetwork: string;
|
||||
private stoppingTrackMempoolBlock: any | null = null;
|
||||
@@ -143,6 +144,9 @@ export class WebsocketService {
|
||||
if (this.isTrackingWallet) {
|
||||
this.startTrackingWallet(this.trackingWalletName);
|
||||
}
|
||||
if (this.isTrackingStratum !== false) {
|
||||
this.startTrackStratum(this.isTrackingStratum);
|
||||
}
|
||||
this.stateService.connectionState$.next(2);
|
||||
}
|
||||
|
||||
@@ -289,6 +293,18 @@ export class WebsocketService {
|
||||
}
|
||||
}
|
||||
|
||||
startTrackStratum(pool: number | string) {
|
||||
this.websocketSubject.next({ 'track-stratum': pool });
|
||||
this.isTrackingStratum = pool;
|
||||
}
|
||||
|
||||
stopTrackStratum() {
|
||||
if (this.isTrackingStratum) {
|
||||
this.websocketSubject.next({ 'track-stratum': null });
|
||||
this.isTrackingStratum = false;
|
||||
}
|
||||
}
|
||||
|
||||
fetchStatistics(historicalDate: string) {
|
||||
this.websocketSubject.next({ historicalDate });
|
||||
}
|
||||
@@ -512,6 +528,14 @@ export class WebsocketService {
|
||||
this.stateService.previousRetarget$.next(response.previousRetarget);
|
||||
}
|
||||
|
||||
if (response.stratumJobs) {
|
||||
this.stateService.stratumJobUpdate$.next({ state: response.stratumJobs });
|
||||
}
|
||||
|
||||
if (response.stratumJob) {
|
||||
this.stateService.stratumJobUpdate$.next({ job: response.stratumJob });
|
||||
}
|
||||
|
||||
if (response['tomahawk']) {
|
||||
this.stateService.serverHealth$.next(response['tomahawk']);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user