optimize block audit scores db query
This commit is contained in:
		
							parent
							
								
									5fc3b8b70c
								
							
						
					
					
						commit
						de04914851
					
				@ -133,45 +133,6 @@ class Audit {
 | 
			
		||||
      score
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public async $getBlockAuditScores(fromHeight?: number, limit: number = 15): Promise<AuditScore[]> {
 | 
			
		||||
    let currentHeight = fromHeight !== undefined ? fromHeight : await blocksRepository.$mostRecentBlockHeight();
 | 
			
		||||
    const returnScores: AuditScore[] = [];
 | 
			
		||||
 | 
			
		||||
    if (currentHeight < 0) {
 | 
			
		||||
      return returnScores;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for (let i = 0; i < limit && currentHeight >= 0; i++) {
 | 
			
		||||
      const block = blocks.getBlocks().find((b) => b.height === currentHeight);
 | 
			
		||||
      if (block?.extras?.matchRate != null) {
 | 
			
		||||
        returnScores.push({
 | 
			
		||||
          hash: block.id,
 | 
			
		||||
          matchRate: block.extras.matchRate
 | 
			
		||||
        });
 | 
			
		||||
      } else {
 | 
			
		||||
        let currentHash;
 | 
			
		||||
        if (!currentHash && Common.indexingEnabled()) {
 | 
			
		||||
          const dbBlock = await blocksRepository.$getBlockByHeight(currentHeight);
 | 
			
		||||
          if (dbBlock && dbBlock['id']) {
 | 
			
		||||
            currentHash = dbBlock['id'];
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        if (!currentHash) {
 | 
			
		||||
          currentHash = await bitcoinApi.$getBlockHash(currentHeight);
 | 
			
		||||
        }
 | 
			
		||||
        if (currentHash) {
 | 
			
		||||
          const auditScore = await blocksAuditsRepository.$getBlockAuditScore(currentHash);
 | 
			
		||||
          returnScores.push({
 | 
			
		||||
            hash: currentHash,
 | 
			
		||||
            matchRate: auditScore?.matchRate
 | 
			
		||||
          });
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      currentHeight--;
 | 
			
		||||
    }
 | 
			
		||||
    return returnScores;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default new Audit();
 | 
			
		||||
@ -283,9 +283,12 @@ class MiningRoutes {
 | 
			
		||||
 | 
			
		||||
  private async $getBlockAuditScores(req: Request, res: Response) {
 | 
			
		||||
    try {
 | 
			
		||||
      const height = req.params.height === undefined ? undefined : parseInt(req.params.height, 10);
 | 
			
		||||
      let height = req.params.height === undefined ? undefined : parseInt(req.params.height, 10);
 | 
			
		||||
      if (height == null) {
 | 
			
		||||
        height = await BlocksRepository.$mostRecentBlockHeight();
 | 
			
		||||
      }
 | 
			
		||||
      res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString());
 | 
			
		||||
      res.json(await audits.$getBlockAuditScores(height, 15));
 | 
			
		||||
      res.json(await BlocksAuditsRepository.$getBlockAuditScores(height, height - 15));
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
      res.status(500).send(e instanceof Error ? e.message : e);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -93,6 +93,20 @@ class BlocksAuditRepositories {
 | 
			
		||||
      throw e;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public async $getBlockAuditScores(maxHeight: number, minHeight: number): Promise<AuditScore[]> {
 | 
			
		||||
    try {
 | 
			
		||||
      const [rows]: any[] = await DB.query(
 | 
			
		||||
        `SELECT hash, match_rate as matchRate
 | 
			
		||||
        FROM blocks_audits
 | 
			
		||||
        WHERE blocks_audits.height BETWEEN ? AND ?
 | 
			
		||||
      `, [minHeight, maxHeight]);
 | 
			
		||||
      return rows;
 | 
			
		||||
    } catch (e: any) {
 | 
			
		||||
      logger.err(`Cannot fetch block audit from db. Reason: ` + (e instanceof Error ? e.message : e));
 | 
			
		||||
      throw e;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default new BlocksAuditRepositories();
 | 
			
		||||
 | 
			
		||||
@ -52,8 +52,7 @@
 | 
			
		||||
                  [ngStyle]="{'width': (100 - (auditScores[block.id] || 0)) + '%' }"></div>
 | 
			
		||||
                <div class="progress-text">
 | 
			
		||||
                  <span *ngIf="auditScores[block.id] != null;">{{ auditScores[block.id] }}%</span>
 | 
			
		||||
                  <span *ngIf="auditScores[block.id] === undefined" class="skeleton-loader"></span>
 | 
			
		||||
                  <span *ngIf="auditScores[block.id] === null">~</span>
 | 
			
		||||
                  <span *ngIf="auditScores[block.id] == null">~</span>
 | 
			
		||||
                </div>
 | 
			
		||||
              </div>
 | 
			
		||||
            </a>
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user