mirror of
https://github.com/arnaucube/hermez-node.git
synced 2026-02-07 03:16:45 +01:00
Merge pull request #581 from hermeznetwork/feature/api-L1-forge-time
Add API metric for time to forge L1 tx
This commit is contained in:
@@ -1329,13 +1329,6 @@ components:
|
|||||||
type: string
|
type: string
|
||||||
description: Moment in which the transaction was added to the pool.
|
description: Moment in which the transaction was added to the pool.
|
||||||
format: date-time
|
format: date-time
|
||||||
batchNum:
|
|
||||||
type: integer
|
|
||||||
description: Identifier of a batch. Every new forged batch increases by one the batchNum, starting at 0.
|
|
||||||
minimum: 0
|
|
||||||
maximum: 4294967295
|
|
||||||
nullable: true
|
|
||||||
example: null
|
|
||||||
requestFromAccountIndex:
|
requestFromAccountIndex:
|
||||||
type: string
|
type: string
|
||||||
description: >-
|
description: >-
|
||||||
@@ -1390,7 +1383,6 @@ components:
|
|||||||
$ref: '#/components/schemas/Token'
|
$ref: '#/components/schemas/Token'
|
||||||
example:
|
example:
|
||||||
amount: '100000000000000'
|
amount: '100000000000000'
|
||||||
batchNum:
|
|
||||||
fee: 0
|
fee: 0
|
||||||
fromAccountIndex: hez:SCC:256
|
fromAccountIndex: hez:SCC:256
|
||||||
fromBJJ: hez:r_trOasVEk0zNaalOoS9aLedu6mO7jI5XTIPu_zGXoyn
|
fromBJJ: hez:r_trOasVEk0zNaalOoS9aLedu6mO7jI5XTIPu_zGXoyn
|
||||||
@@ -1438,7 +1430,6 @@ components:
|
|||||||
- info
|
- info
|
||||||
- signature
|
- signature
|
||||||
- timestamp
|
- timestamp
|
||||||
- batchNum
|
|
||||||
- requestFromAccountIndex
|
- requestFromAccountIndex
|
||||||
- requestToAccountIndex
|
- requestToAccountIndex
|
||||||
- requestToHezEthereumAddress
|
- requestToHezEthereumAddress
|
||||||
@@ -2812,6 +2803,10 @@ components:
|
|||||||
type: number
|
type: number
|
||||||
description: Average fee percentage paid for L2 transactions in the last 24 hours.
|
description: Average fee percentage paid for L2 transactions in the last 24 hours.
|
||||||
example: 1.54
|
example: 1.54
|
||||||
|
estimatedTimeToForgeL1:
|
||||||
|
type: number
|
||||||
|
description: Estimated time needed to forge a L1 transaction, from the time it's added on the smart contract, until it's actualy forged. In seconds.
|
||||||
|
example: 193.4
|
||||||
additionalProperties: false
|
additionalProperties: false
|
||||||
required:
|
required:
|
||||||
- transactionsPerBatch
|
- transactionsPerBatch
|
||||||
@@ -2820,6 +2815,7 @@ components:
|
|||||||
- totalAccounts
|
- totalAccounts
|
||||||
- totalBJJs
|
- totalBJJs
|
||||||
- avgTransactionFee
|
- avgTransactionFee
|
||||||
|
- estimatedTimeToForgeL1
|
||||||
PendingItems:
|
PendingItems:
|
||||||
type: integer
|
type: integer
|
||||||
description: Amount of items that will be returned in subsequent calls to the endpoint, as long as they are done with same filters. When the value is 0 it means that all items have been sent.
|
description: Amount of items that will be returned in subsequent calls to the endpoint, as long as they are done with same filters. When the value is 0 it means that all items have been sent.
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ func NewPoolL2Tx(tx *PoolL2Tx) (*PoolL2Tx, error) {
|
|||||||
// If original Type doesn't match the correct one, return error
|
// If original Type doesn't match the correct one, return error
|
||||||
if txTypeOld != "" && txTypeOld != tx.Type {
|
if txTypeOld != "" && txTypeOld != tx.Type {
|
||||||
return nil, tracerr.Wrap(fmt.Errorf("L2Tx.Type: %s, should be: %s",
|
return nil, tracerr.Wrap(fmt.Errorf("L2Tx.Type: %s, should be: %s",
|
||||||
tx.Type, txTypeOld))
|
txTypeOld, tx.Type))
|
||||||
}
|
}
|
||||||
|
|
||||||
txIDOld := tx.TxID
|
txIDOld := tx.TxID
|
||||||
@@ -83,7 +83,7 @@ func NewPoolL2Tx(tx *PoolL2Tx) (*PoolL2Tx, error) {
|
|||||||
// If original TxID doesn't match the correct one, return error
|
// If original TxID doesn't match the correct one, return error
|
||||||
if txIDOld != (TxID{}) && txIDOld != tx.TxID {
|
if txIDOld != (TxID{}) && txIDOld != tx.TxID {
|
||||||
return tx, tracerr.Wrap(fmt.Errorf("PoolL2Tx.TxID: %s, should be: %s",
|
return tx, tracerr.Wrap(fmt.Errorf("PoolL2Tx.TxID: %s, should be: %s",
|
||||||
tx.TxID.String(), txIDOld.String()))
|
txIDOld.String(), tx.TxID.String()))
|
||||||
}
|
}
|
||||||
|
|
||||||
return tx, nil
|
return tx, nil
|
||||||
|
|||||||
@@ -1008,6 +1008,18 @@ func (hdb *HistoryDB) GetMetricsAPI(lastBatchNum common.BatchNum) (*Metrics, err
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, tracerr.Wrap(err)
|
return nil, tracerr.Wrap(err)
|
||||||
}
|
}
|
||||||
|
err = meddler.QueryRow(
|
||||||
|
hdb.dbRead, metrics,
|
||||||
|
`SELECT COALESCE (AVG(EXTRACT(EPOCH FROM (forged.timestamp - added.timestamp))), 0) AS estimatedTimeToForgeL1 FROM tx
|
||||||
|
INNER JOIN block AS added ON tx.eth_block_num = added.eth_block_num
|
||||||
|
INNER JOIN batch AS forged_batch ON tx.batch_num = forged_batch.batch_num
|
||||||
|
INNER JOIN block AS forged ON forged_batch.eth_block_num = forged.eth_block_num
|
||||||
|
WHERE tx.batch_num between $1 and $2 AND tx.is_l1 AND tx.user_origin;`,
|
||||||
|
metricsTotals.FirstBatchNum, lastBatchNum,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, tracerr.Wrap(err)
|
||||||
|
}
|
||||||
|
|
||||||
return metrics, nil
|
return metrics, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -304,12 +304,13 @@ type BatchAPI struct {
|
|||||||
|
|
||||||
// Metrics define metrics of the network
|
// Metrics define metrics of the network
|
||||||
type Metrics struct {
|
type Metrics struct {
|
||||||
TransactionsPerBatch float64 `json:"transactionsPerBatch"`
|
TransactionsPerBatch float64 `json:"transactionsPerBatch"`
|
||||||
BatchFrequency float64 `json:"batchFrequency"`
|
BatchFrequency float64 `json:"batchFrequency"`
|
||||||
TransactionsPerSecond float64 `json:"transactionsPerSecond"`
|
TransactionsPerSecond float64 `json:"transactionsPerSecond"`
|
||||||
TotalAccounts int64 `json:"totalAccounts" meddler:"total_accounts"`
|
TotalAccounts int64 `json:"totalAccounts" meddler:"total_accounts"`
|
||||||
TotalBJJs int64 `json:"totalBJJs" meddler:"total_bjjs"`
|
TotalBJJs int64 `json:"totalBJJs" meddler:"total_bjjs"`
|
||||||
AvgTransactionFee float64 `json:"avgTransactionFee"`
|
AvgTransactionFee float64 `json:"avgTransactionFee"`
|
||||||
|
EstimatedTimeToForgeL1 float64 `json:"estimatedTimeToForgeL1" meddler:"estimatedTimeToForgeL1"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// MetricsTotals is used to get temporal information from HistoryDB
|
// MetricsTotals is used to get temporal information from HistoryDB
|
||||||
|
|||||||
@@ -95,7 +95,6 @@ func (tx PoolTxAPI) MarshalJSON() ([]byte, error) {
|
|||||||
"info": tx.Info,
|
"info": tx.Info,
|
||||||
"signature": tx.Signature,
|
"signature": tx.Signature,
|
||||||
"timestamp": tx.Timestamp,
|
"timestamp": tx.Timestamp,
|
||||||
"batchNum": tx.BatchNum,
|
|
||||||
"requestFromAccountIndex": tx.RqFromIdx,
|
"requestFromAccountIndex": tx.RqFromIdx,
|
||||||
"requestToAccountIndex": tx.RqToIdx,
|
"requestToAccountIndex": tx.RqToIdx,
|
||||||
"requestToHezEthereumAddress": tx.RqToEthAddr,
|
"requestToHezEthereumAddress": tx.RqToEthAddr,
|
||||||
|
|||||||
Reference in New Issue
Block a user