mirror of
https://github.com/XRPLF/clio.git
synced 2025-11-04 20:05:51 +00:00
184 lines
6.7 KiB
Python
184 lines
6.7 KiB
Python
#!/usr/bin/python3
|
|
import argparse
|
|
|
|
from datetime import datetime
|
|
|
|
def getTime(line):
|
|
bracketOpen = line.find("[")
|
|
bracketClose = line.find("]")
|
|
timestampSub = line[bracketOpen+1:bracketClose]
|
|
timestamp = datetime.strptime(timestampSub, '%Y-%m-%d %H:%M:%S.%f')
|
|
return timestamp.timestamp()
|
|
|
|
def parseAccountTx(filename):
|
|
|
|
|
|
with open(filename) as f:
|
|
totalProcTime = 0.0
|
|
totalTxnTime = 0.0
|
|
numCalls = 0
|
|
for line in f:
|
|
if "executed stored_procedure" in line:
|
|
idx = line.find("in ")
|
|
idx = idx + 3
|
|
idx2 = line.find("num")
|
|
procTime = float(line[idx:idx2])
|
|
totalProcTime += procTime
|
|
if "fetchTransactions fetched" in line:
|
|
idx = line.find("took ")
|
|
idx = idx + 5
|
|
txnTime = float(line[idx:])
|
|
totalTxnTime += txnTime
|
|
numCalls = numCalls + 1
|
|
print(totalProcTime)
|
|
print(totalProcTime/numCalls)
|
|
print(totalTxnTime)
|
|
print(totalTxnTime/numCalls)
|
|
|
|
|
|
|
|
|
|
|
|
def parseLogs(filename, interval, minTxnCount = 0):
|
|
|
|
with open(filename) as f:
|
|
|
|
totalTime = 0
|
|
totalTxns = 0
|
|
totalObjs = 0
|
|
totalLoadTime = 0
|
|
|
|
|
|
start = 0
|
|
end = 0
|
|
totalLedgers = 0
|
|
|
|
intervalTime = 0
|
|
intervalTxns = 0
|
|
intervalObjs = 0
|
|
intervalLoadTime = 0
|
|
|
|
intervalStart = 0
|
|
intervalEnd = 0
|
|
intervalLedgers = 0
|
|
ledgersPerSecond = 0
|
|
|
|
print("ledgers, transactions, objects, loadTime, loadTime/ledger, ledgers/sec, txns/sec, objs/sec")
|
|
for line in f:
|
|
if "Load phase" in line:
|
|
sequenceIdx = line.find("Sequence : ")
|
|
hashIdx = line.find(" Hash :")
|
|
sequence = line[sequenceIdx + len("Sequence : "):hashIdx]
|
|
txnCountSubstr = "txn count = "
|
|
objCountSubstr = ". object count = "
|
|
loadTimeSubstr = ". load time = "
|
|
txnsSubstr = ". load txns per second = "
|
|
objsSubstr = ". load objs per second = "
|
|
txnCountIdx = line.find(txnCountSubstr)
|
|
objCountIdx = line.find(objCountSubstr)
|
|
loadTimeIdx = line.find(loadTimeSubstr)
|
|
txnsIdx = line.find(txnsSubstr)
|
|
objsIdx = line.find(objsSubstr)
|
|
txnCount = line[txnCountIdx + len(txnCountSubstr):objCountIdx]
|
|
objCount = line[objCountIdx + len(objCountSubstr):loadTimeIdx]
|
|
loadTime = line[loadTimeIdx + len(loadTimeSubstr):txnsIdx]
|
|
txnsPerSecond = line[txnsIdx + len(txnsSubstr):objsIdx]
|
|
objsPerSecond = line[objsIdx + len(objsSubstr):-1]
|
|
if int(txnCount) >= minTxnCount:
|
|
totalTime += float(loadTime);
|
|
totalTxns += float(txnCount)
|
|
totalObjs += float(objCount)
|
|
intervalTime += float(loadTime)
|
|
intervalTxns += float(txnCount)
|
|
intervalObjs += float(objCount)
|
|
|
|
totalLoadTime += float(loadTime)
|
|
intervalLoadTime += float(loadTime)
|
|
|
|
|
|
if start == 0:
|
|
start = getTime(line)
|
|
|
|
|
|
prevEnd = end
|
|
end = getTime(line)
|
|
|
|
if intervalStart == 0:
|
|
intervalStart = getTime(line)
|
|
|
|
intervalEnd = getTime(line)
|
|
|
|
totalLedgers+=1
|
|
intervalLedgers+=1
|
|
ledgersPerSecond = 0
|
|
if end != start:
|
|
ledgersPerSecond = float(totalLedgers) / float((end - start))
|
|
intervalLedgersPerSecond = 0
|
|
if intervalEnd != intervalStart:
|
|
intervalLedgersPerSecond = float(intervalLedgers) / float((intervalEnd - intervalStart))
|
|
|
|
|
|
|
|
if int(sequence) % interval == 0:
|
|
|
|
# print("Sequence = " + sequence + " : [time, txCount, objCount, txPerSec, objsPerSec]")
|
|
# print(loadTime + " , "
|
|
# + txnCount + " , "
|
|
# + objCount + " , "
|
|
# + txnsPerSecond + " , "
|
|
# + objsPerSecond)
|
|
# print("Interval Aggregate ( " + str(interval) + " ) [ledgers, txns, objects, elapsedTime, ledgersPerSec, avgLoadTime, txPerSec, objsPerSec]: ")
|
|
print(str(intervalLedgers) + " , "
|
|
+ str(intervalTxns) + " , "
|
|
+ str(intervalObjs) + " , "
|
|
+ str(intervalLoadTime) + " , "
|
|
+ str(intervalLoadTime/intervalLedgers) + " , "
|
|
+ str(intervalLedgers/intervalLoadTime) + " , "
|
|
+ str(intervalTxns/intervalLoadTime) + " , "
|
|
+ str(intervalObjs/intervalLoadTime))
|
|
# print("Total Aggregate: [ledgers, txns, objects, elapsedTime, ledgersPerSec, avgLoadTime, txPerSec, objsPerSec]")
|
|
# print(str(totalLedgers) + " , "
|
|
# + str(totalTxns) + " , "
|
|
# + str(totalObjs) + " , "
|
|
# + str(end-start) + " , "
|
|
# + str(ledgersPerSecond) + " , "
|
|
# + str(totalLoadTime/totalLedgers) + " , "
|
|
# + str(totalTxns/totalTime) + " , "
|
|
# + str(totalObjs/totalTime))
|
|
if int(sequence) % interval == 0:
|
|
intervalTime = 0
|
|
intervalTxns = 0
|
|
intervalObjs = 0
|
|
intervalStart = 0
|
|
intervalEnd = 0
|
|
intervalLedgers = 0
|
|
intervalLoadTime = 0
|
|
print("Total Aggregate: [ledgers, elapsedTime, ledgersPerSec, avgLoadTime, txPerSec, objsPerSec]")
|
|
print(totalLedgers)
|
|
print(totalLoadTime)
|
|
print(str(totalLedgers) + " : "
|
|
+ str(end-start) + " : "
|
|
+ str(ledgersPerSecond) + " : "
|
|
+ str(totalLoadTime/totalLedgers) + " : "
|
|
+ str(totalTxns/totalTime) + " : "
|
|
+ str(totalObjs/totalTime))
|
|
|
|
|
|
|
|
|
|
parser = argparse.ArgumentParser(description='parses logs')
|
|
parser.add_argument("--filename")
|
|
parser.add_argument("--interval",default=100000)
|
|
parser.add_argument("--minTxnCount",default=0)
|
|
parser.add_argument("--account_tx",default=False)
|
|
|
|
args = parser.parse_args()
|
|
|
|
def run(args):
|
|
if args.account_tx:
|
|
parseAccountTx(args.filename)
|
|
else:
|
|
parseLogs(args.filename, int(args.interval))
|
|
|
|
run(args)
|