From 26de4343343a586f4a31fe8055d1a18661ce1fed Mon Sep 17 00:00:00 2001 From: narcotics726 Date: Tue, 4 Jul 2023 17:05:09 +0800 Subject: [PATCH] group transactions by txName and testScriptID in trending report backward compatible in html show testScriptID+txName pair in latest run only --- .../lrc/core/entity/TrendingDataWrapper.java | 11 ++++++ .../microfocus/lrc/jenkins/TrendingReport.kt | 34 ++++++++++++------- .../resources/trending_report/run_report.twig | 30 ++++++++++++++++ 3 files changed, 63 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/microfocus/lrc/core/entity/TrendingDataWrapper.java b/src/main/java/com/microfocus/lrc/core/entity/TrendingDataWrapper.java index e56c1e3..5add1bd 100644 --- a/src/main/java/com/microfocus/lrc/core/entity/TrendingDataWrapper.java +++ b/src/main/java/com/microfocus/lrc/core/entity/TrendingDataWrapper.java @@ -109,6 +109,8 @@ public final class TransactionData implements Serializable { private int passed; private int failed; + private int testScriptID; + //#region accessors public String getName() { return name; @@ -189,6 +191,14 @@ public double getFailed() { public void setFailed(final int failed) { this.failed = failed; } + + public int getTestScriptID() { + return testScriptID; + } + + public void setTestScriptID(final int testScriptID) { + this.testScriptID = testScriptID; + } //#endregion public TransactionData(final JsonObject json) { @@ -208,6 +218,7 @@ public TransactionData(final JsonObject json) { public TransactionData(final TestRunTransactionsResponse tx) { this.name = tx.getName(); this.script = tx.getScriptName(); + this.testScriptID = tx.getLoadTestScriptId(); this.min = tx.getMinTRT(); this.max = tx.getMaxTRT(); this.avg = tx.getAvgTRT(); diff --git a/src/main/java/com/microfocus/lrc/jenkins/TrendingReport.kt b/src/main/java/com/microfocus/lrc/jenkins/TrendingReport.kt index 8309c3c..b21237b 100644 --- a/src/main/java/com/microfocus/lrc/jenkins/TrendingReport.kt +++ b/src/main/java/com/microfocus/lrc/jenkins/TrendingReport.kt @@ -19,6 +19,7 @@ import com.microfocus.lrc.core.Constants import com.microfocus.lrc.core.HTMLTemplate import com.microfocus.lrc.core.entity.TrendingConfiguration import com.microfocus.lrc.core.entity.TrendingDataWrapper +import com.microfocus.lrc.core.entity.TrendingDataWrapper.TransactionData import hudson.model.Job import hudson.model.Run import jenkins.model.Jenkins @@ -117,6 +118,7 @@ class TrendingReport { } ) + val latestTrans = latestBuildAction.trendingDataWrapper.trendingData.transactions var latestBenchmark: TrendingDataWrapper.TrendingData? = latestBuildAction.trendingDataWrapper.benchmark if (latestBenchmark == null) { LoggerProxy.sysLogger.log( @@ -154,7 +156,7 @@ class TrendingReport { } val trts = JsonArray() - val transactionsGroup: Map, List> = + val transactionsGroup: Map, List> = trendingDataWrapperList.stream().flatMap { t: JsonObject -> (Gson().fromJson( t.get("data").asString, @@ -168,8 +170,11 @@ class TrendingReport { tempTrans.addProperty("buildId", t.get("buildId").asInt) tempTrans.addProperty("runId", trendingDataWrapper.trendingData.runId) tempTrans.addProperty("percentile", trendingDataWrapper.trendingData.percentile) - tempTrans + return@map tempTrans } + }.filter{transJSON -> + val trans = Gson().fromJson(transJSON.get("data").asString, TrendingDataWrapper.TransactionData::class.java) + return@filter latestTrans.stream().anyMatch{ x -> x.testScriptID == trans.testScriptID } }.collect( Collectors.groupingBy { transJSON -> val trans: TrendingDataWrapper.TransactionData = @@ -177,21 +182,23 @@ class TrendingReport { transJSON.get("data").asString, TrendingDataWrapper.TransactionData::class.java ) - return@groupingBy Pair(trans.name, trans.script) + return@groupingBy Pair(trans.name, trans.testScriptID) } ) - transactionsGroup.forEach { (transScriptName: Pair, transJSONList: List) -> + transactionsGroup.forEach { (transScriptPair: Pair, transJSONList: List) -> generatorLogs.append( String.format( "processing transaction group: %1\$s - %2\$s%n", - transScriptName.first, - transScriptName.second + transScriptPair.first, + transScriptPair.second, ) ) val trtGroup = JsonObject() - trtGroup.addProperty("transactionName", transScriptName.first) - trtGroup.addProperty("scriptName", transScriptName.second) + trtGroup.addProperty("transactionName", transScriptPair.first) + trtGroup.addProperty("testScriptID", transScriptPair.second) + val trans = Gson().fromJson(transJSONList[0].get("data").asString, TransactionData::class.java) + trtGroup.addProperty("scriptName", trans.script) trtGroup.add("trtDataArr", JsonArray()) //transJSONList: {buildId, runId, percentile, data: TransactionData}[] transJSONList.stream() @@ -204,7 +211,10 @@ class TrendingReport { ) //here is the default benchmark transaction var benchmarkTrans: TrendingDataWrapper.TransactionData? = benchmark.transactions.stream() - .filter { t -> (transScriptName.first == t.name) && (transScriptName.second == t.script) } + .filter { t -> + (transScriptPair.first == t.name) + && (transScriptPair.second == t.testScriptID) + } .findAny().orElse(null) var benchmarkRunId: Int = benchmark.runId if (latestBuildAction.trendingDataWrapper.benchmarkId == null) { @@ -239,8 +249,8 @@ class TrendingReport { generatorLogs.append( String.format( "\t\t\t\tcannot find benchmark for %1\$s - %2\$s%n", - transScriptName.first, - transScriptName.second + transScriptPair.first, + transScriptPair.second ) ) } @@ -257,7 +267,7 @@ class TrendingReport { benchmarkTrans, trendingConfig ) - trt + return@map trt }.forEach { trtJSON -> trtGroup.getAsJsonArray("trtDataArr").add(trtJSON) } diff --git a/src/main/resources/trending_report/run_report.twig b/src/main/resources/trending_report/run_report.twig index 8a59bfd..1bf804b 100644 --- a/src/main/resources/trending_report/run_report.twig +++ b/src/main/resources/trending_report/run_report.twig @@ -372,6 +372,36 @@ }); } + // filter out those old tx data (testScriptID = 0), assign testScriptID according to others with same + // scriptName & txName + orderedTrt = _.chain(orderedTrt) + .forEach(function (x) { + if (x.testScriptID !== 0) { + return; + } + const sameScriptName = orderedTrt.find(function (y) { + return y.scriptName === x.scriptName + && y.transactionName === x.transactionName + && y.testScriptID !== 0; + }); + if (sameScriptName) { + sameScriptName.trtDataArr = sameScriptName.trtDataArr.concat(x.trtDataArr); + x.testScriptID = -1; + } + }).filter(function (x) { return x.testScriptID !== -1; }).value(); + + orderedTrt.forEach(function (x) { + var sameScriptNames = orderedTrt.filter(function (y) { + return y.scriptName === x.scriptName && y.transactionName === x.transactionName; + }); + + if (sameScriptNames.length > 1) { + sameScriptNames.forEach(function (item) { + item.scriptName = item.testScriptID + '_' + item.scriptName; + }); + } + }); + _.each(orderedTrt, function (item) { var rowDOM = document.createElement('tr'); var colNode = document.createElement('td');