From 6064cf26dd936067bbdc70dad11d35b2a17c4c2c Mon Sep 17 00:00:00 2001 From: hongwei Date: Fri, 10 Feb 2023 14:31:58 +0100 Subject: [PATCH] bugfix/fixed the filter params for metric endpoints --- .../scala/code/metrics/MappedMetrics.scala | 51 ++++++------------- 1 file changed, 16 insertions(+), 35 deletions(-) diff --git a/obp-api/src/main/scala/code/metrics/MappedMetrics.scala b/obp-api/src/main/scala/code/metrics/MappedMetrics.scala index a4b70c9fe..b1aa15b5f 100644 --- a/obp-api/src/main/scala/code/metrics/MappedMetrics.scala +++ b/obp-api/src/main/scala/code/metrics/MappedMetrics.scala @@ -204,16 +204,7 @@ object MappedMetrics extends APIMetrics with MdcLoggable{ } } } - - - private def extendCurrentQuery (params: List[String]) ={ - // --> "?,?," - val a = for(i <- 0 to (params.length-2) ) yield {s"${params(i)},"} - //"?,?,--> "?,?,?" - a.mkString("").concat(s"${params.last}") - } - - + private def extendLikeQuery(params: List[String], isLike: Boolean) = { val isLikeQuery = if (isLike) "" else "NOT" @@ -225,9 +216,7 @@ object MappedMetrics extends APIMetrics with MdcLoggable{ { s" and url ${isLikeQuery} LIKE ('${params(i)}')" } -// OR (url NOT LIKE ( '%management/metrics%' ) AND url NOT LIKE ( '%management/metrics%' ) '))) -// or (url NOT LIKE ($excludeUrlPatternsQueries))) - s"${params.head}')" + a.mkString("").concat(s" and url ${isLikeQuery} LIKE ('${params.last} ") + s"${params.head}')" + a.mkString("").concat(s" and url ${isLikeQuery} LIKE ('${params.last}") } } @@ -293,20 +282,16 @@ object MappedMetrics extends APIMetrics with MdcLoggable{ val includeImplementedByPartialFunctions = queryParams.collect { case OBPIncludeImplementedByPartialFunctions(value) => value }.headOption val excludeUrlPatternsList= excludeUrlPatterns.getOrElse(List("")) - val excludeAppNamesNumberList = excludeAppNames.getOrElse(List("")) - val excludeImplementedByPartialFunctionsNumberList = excludeImplementedByPartialFunctions.getOrElse(List("")) + val excludeAppNamesList = excludeAppNames.getOrElse(List("")) + val excludeImplementedByPartialFunctionsList = excludeImplementedByPartialFunctions.getOrElse(List("")) val excludeUrlPatternsQueries = extendLikeQuery(excludeUrlPatternsList, false) - val extendedExcludeAppNameQueries = extendCurrentQuery(excludeAppNamesNumberList) - val extendedExcludeImplementedByPartialFunctionsQueries = extendCurrentQuery(excludeImplementedByPartialFunctionsNumberList) val includeUrlPatternsList= includeUrlPatterns.getOrElse(List("")) - val includeAppNamesNumberList = includeAppNames.getOrElse(List("")) - val includeImplementedByPartialFunctionsNumberList = includeImplementedByPartialFunctions.getOrElse(List("")) + val includeAppNamesList = includeAppNames.getOrElse(List("")) + val includeImplementedByPartialFunctionsList = includeImplementedByPartialFunctions.getOrElse(List("")) val includeUrlPatternsQueries = extendLikeQuery(includeUrlPatternsList, true) - val extendedIncludeAppNameQueries = extendCurrentQuery(includeAppNamesNumberList) - val extendedIncludeImplementedByPartialFunctionsQueries = extendCurrentQuery(includeImplementedByPartialFunctionsNumberList) val result = scalikeDB readOnly { implicit session => val sqlQuery = if(isNewVersion) // in the version, we use includeXxx instead of excludeXxx, the performance should be better. @@ -324,8 +309,8 @@ object MappedMetrics extends APIMetrics with MdcLoggable{ AND (${falseOrTrue(anon.isDefined && anon.equals(Some(true)))} or userid = 'null') AND (${falseOrTrue(anon.isDefined && anon.equals(Some(false)))} or userid != 'null') AND (${trueOrFalse(includeUrlPatterns.isEmpty) } or (url LIKE ($includeUrlPatternsQueries))) - AND (${trueOrFalse(includeAppNames.isEmpty) } or appname in ($extendedIncludeAppNameQueries)) - AND (${trueOrFalse(includeImplementedByPartialFunctions.isEmpty) } or implementedbypartialfunction in ($extendedIncludeImplementedByPartialFunctionsQueries)) + AND (${trueOrFalse(includeAppNames.isEmpty) } or (appname in ($includeAppNamesList))) + AND (${trueOrFalse(includeImplementedByPartialFunctions.isEmpty) } or implementedbypartialfunction in ($includeImplementedByPartialFunctionsList)) """.stripMargin else sql"""SELECT count(*), avg(duration), min(duration), max(duration) @@ -342,8 +327,8 @@ object MappedMetrics extends APIMetrics with MdcLoggable{ AND (${falseOrTrue(anon.isDefined && anon.equals(Some(true)))} or userid = 'null') AND (${falseOrTrue(anon.isDefined && anon.equals(Some(false)))} or userid != 'null') AND (${trueOrFalse(excludeUrlPatterns.isEmpty) } or (url NOT LIKE ($excludeUrlPatternsQueries))) - AND (${trueOrFalse(excludeAppNames.isEmpty) } or appname not in ($extendedExcludeAppNameQueries)) - AND (${trueOrFalse(excludeImplementedByPartialFunctions.isEmpty) } or implementedbypartialfunction not in ($extendedExcludeImplementedByPartialFunctionsQueries)) + AND (${trueOrFalse(excludeAppNames.isEmpty) } or appname not in ($excludeAppNamesList)) + AND (${trueOrFalse(excludeImplementedByPartialFunctions.isEmpty) } or implementedbypartialfunction not in ($excludeImplementedByPartialFunctionsList)) """.stripMargin logger.debug("code.metrics.MappedMetrics.getAllAggregateMetricsBox.sqlQuery --: " +sqlQuery.statement) val sqlResult = sqlQuery.map( @@ -403,8 +388,6 @@ object MappedMetrics extends APIMetrics with MdcLoggable{ val excludeImplementedByPartialFunctionsNumberList = excludeImplementedByPartialFunctions.getOrElse(List("")) val excludeUrlPatternsQueries = extendLikeQuery(excludeUrlPatternsList, false) - val extendedExclueAppNameQueries = extendCurrentQuery(excludeAppNamesNumberList) - val extendedExcludeImplementedByPartialFunctionsQueries = extendCurrentQuery(excludeImplementedByPartialFunctionsNumberList) val (dbUrl, _, _) = getDbConnectionParameters @@ -429,8 +412,8 @@ object MappedMetrics extends APIMetrics with MdcLoggable{ AND (${falseOrTrue(anon.isDefined && anon.equals(Some(true)))} or userid = 'null') AND (${falseOrTrue(anon.isDefined && anon.equals(Some(false)))} or userid != 'null') AND (${trueOrFalse(excludeUrlPatterns.isEmpty) } or (url NOT LIKE ($excludeUrlPatternsQueries))) - AND (${trueOrFalse(excludeAppNames.isEmpty) } or appname not in ($extendedExclueAppNameQueries)) - AND (${trueOrFalse(excludeImplementedByPartialFunctions.isEmpty) } or implementedbypartialfunction not in ($extendedExcludeImplementedByPartialFunctionsQueries)) + AND (${trueOrFalse(excludeAppNames.isEmpty) } or appname not in ($excludeAppNamesNumberList)) + AND (${trueOrFalse(excludeImplementedByPartialFunctions.isEmpty) } or implementedbypartialfunction not in ($excludeImplementedByPartialFunctionsNumberList)) GROUP BY metric.implementedbypartialfunction, metric.implementedinversion ORDER BY count(*) DESC ${otherDbLimit} @@ -477,12 +460,10 @@ object MappedMetrics extends APIMetrics with MdcLoggable{ val limit = queryParams.collect { case OBPLimit(value) => value }.headOption val excludeUrlPatternsList = excludeUrlPatterns.getOrElse(List("")) - val excludeAppNamesNumberList = excludeAppNames.getOrElse(List("")) - val excludeImplementedByPartialFunctionsNumberList = excludeImplementedByPartialFunctions.getOrElse(List("")) + val excludeAppNamesList = excludeAppNames.getOrElse(List("")) + val excludeImplementedByPartialFunctionsList = excludeImplementedByPartialFunctions.getOrElse(List("")) val excludeUrlPatternsQueries = extendLikeQuery(excludeUrlPatternsList, false) - val extendedExclueAppNameQueries = extendCurrentQuery(excludeAppNamesNumberList) - val extendedExcludeImplementedByPartialFunctionsQueries = extendCurrentQuery(excludeImplementedByPartialFunctionsNumberList) val (dbUrl, _, _) = getDbConnectionParameters @@ -509,8 +490,8 @@ object MappedMetrics extends APIMetrics with MdcLoggable{ AND (${falseOrTrue(anon.isDefined && anon.equals(Some(true)))} or userid = 'null') AND (${falseOrTrue(anon.isDefined && anon.equals(Some(false)))} or userid != 'null') AND (${trueOrFalse(excludeUrlPatterns.isEmpty) } or (url NOT LIKE ($excludeUrlPatternsQueries))) - AND (${trueOrFalse(excludeAppNames.isEmpty) } or appname not in ($extendedExclueAppNameQueries)) - AND (${trueOrFalse(excludeImplementedByPartialFunctions.isEmpty) } or implementedbypartialfunction not in ($extendedExcludeImplementedByPartialFunctionsQueries)) + AND (${trueOrFalse(excludeAppNames.isEmpty) } or appname not in ($excludeAppNamesList)) + AND (${trueOrFalse(excludeImplementedByPartialFunctions.isEmpty) } or implementedbypartialfunction not in ($excludeImplementedByPartialFunctionsList)) GROUP BY appname, consumer.developeremail, consumer.id, consumer.consumerid ORDER BY count DESC ${otherDbLimit}