From 9dbf3e689d841a48573902380b60e5671beff8eb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 29 May 2026 10:52:40 +0000 Subject: [PATCH 1/5] Initial plan From ddb78117a84e3b1578a66ffeb31a6b3021a149d4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 29 May 2026 10:57:38 +0000 Subject: [PATCH 2/5] Fix decimal parsing for requests_per_sec pass/fail criteria --- src/Utils/CommonUtils.ts | 2 +- src/Utils/PassFailCriteriaUtil.ts | 2 +- test/PassFailCriteriaUtil.test.ts | 15 +++++++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 test/PassFailCriteriaUtil.test.ts diff --git a/src/Utils/CommonUtils.ts b/src/Utils/CommonUtils.ts index 68f2d5eb..c7e31454 100644 --- a/src/Utils/CommonUtils.ts +++ b/src/Utils/CommonUtils.ts @@ -147,7 +147,7 @@ export function indexOfFirstDigit(input: string) { export function removeUnits(input:string) { let i = 0; - for (; input[i] >= '0' && input[i] <= '9'; i++); + for (; (input[i] >= '0' && input[i] <= '9') || input[i] == '.'; i++); return i == input.length ? input : input.substring(0,i); } diff --git a/src/Utils/PassFailCriteriaUtil.ts b/src/Utils/PassFailCriteriaUtil.ts index 9af2a90f..f271d893 100644 --- a/src/Utils/PassFailCriteriaUtil.ts +++ b/src/Utils/PassFailCriteriaUtil.ts @@ -85,7 +85,7 @@ function validateCriteriaAndConvertToWorkingStringModel(data: any, failureCriter if(data.requestName != ""){ key = key + ' ' + data.requestName; } - let val: number = parseInt(data.value); + let val: number = Number(data.value); let currVal = val; if(failureCriteriaValue.hasOwnProperty(key)) diff --git a/test/PassFailCriteriaUtil.test.ts b/test/PassFailCriteriaUtil.test.ts new file mode 100644 index 00000000..c97e0c32 --- /dev/null +++ b/test/PassFailCriteriaUtil.test.ts @@ -0,0 +1,15 @@ +import { getPassFailCriteriaFromString } from "../src/Utils/PassFailCriteriaUtil"; + +describe("PassFailCriteriaUtil tests", () => { + it("retains decimal value for requests_per_sec", () => { + expect(getPassFailCriteriaFromString(["avg(requests_per_sec) > 1.75"])).toStrictEqual({ + "requests_per_sec avg > continue": 1.75 + }); + }); + + it("uses decimal values when evaluating duplicate requests_per_sec criteria", () => { + expect(getPassFailCriteriaFromString(["avg(requests_per_sec) > 1.9", "avg(requests_per_sec) > 1.2"])).toStrictEqual({ + "requests_per_sec avg > continue": 1.2 + }); + }); +}); From c262fcdb89403763330f104abc21909cac978940 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 29 May 2026 10:58:55 +0000 Subject: [PATCH 3/5] Harden decimal unit stripping for pass/fail criteria parsing --- src/Utils/CommonUtils.ts | 12 +++++++++++- test/PassFailCriteriaUtil.test.ts | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/Utils/CommonUtils.ts b/src/Utils/CommonUtils.ts index c7e31454..545046a6 100644 --- a/src/Utils/CommonUtils.ts +++ b/src/Utils/CommonUtils.ts @@ -147,7 +147,17 @@ export function indexOfFirstDigit(input: string) { export function removeUnits(input:string) { let i = 0; - for (; (input[i] >= '0' && input[i] <= '9') || input[i] == '.'; i++); + let decimalSeen = false; + for (; i < input.length; i++) { + if(input[i] >= '0' && input[i] <= '9'){ + continue; + } + if(input[i] == '.' && !decimalSeen){ + decimalSeen = true; + continue; + } + break; + } return i == input.length ? input : input.substring(0,i); } diff --git a/test/PassFailCriteriaUtil.test.ts b/test/PassFailCriteriaUtil.test.ts index c97e0c32..f07bdcf1 100644 --- a/test/PassFailCriteriaUtil.test.ts +++ b/test/PassFailCriteriaUtil.test.ts @@ -7,7 +7,7 @@ describe("PassFailCriteriaUtil tests", () => { }); }); - it("uses decimal values when evaluating duplicate requests_per_sec criteria", () => { + it("keeps minimum threshold when duplicate requests_per_sec criteria are provided", () => { expect(getPassFailCriteriaFromString(["avg(requests_per_sec) > 1.9", "avg(requests_per_sec) > 1.2"])).toStrictEqual({ "requests_per_sec avg > continue": 1.2 }); From ac14d6fd48967fe19f5a3b36d04a175edcd2ccb8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 29 May 2026 10:59:51 +0000 Subject: [PATCH 4/5] Polish decimal parsing loop style --- src/Utils/CommonUtils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Utils/CommonUtils.ts b/src/Utils/CommonUtils.ts index 545046a6..72a54916 100644 --- a/src/Utils/CommonUtils.ts +++ b/src/Utils/CommonUtils.ts @@ -149,10 +149,10 @@ export function removeUnits(input:string) let i = 0; let decimalSeen = false; for (; i < input.length; i++) { - if(input[i] >= '0' && input[i] <= '9'){ + if (input[i] >= '0' && input[i] <= '9') { continue; } - if(input[i] == '.' && !decimalSeen){ + if (input[i] === '.' && !decimalSeen) { decimalSeen = true; continue; } From 6238cf0aadbee3d3e4b4e642a817c9e75e73a1df Mon Sep 17 00:00:00 2001 From: nishtha4894 Date: Fri, 5 Jun 2026 01:03:32 -0700 Subject: [PATCH 5/5] push (#146) Co-authored-by: Nishtha . --- src/Utils/CommonUtils.ts | 12 +----------- src/Utils/PassFailCriteriaUtil.ts | 20 ++++++++++++++++++-- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/Utils/CommonUtils.ts b/src/Utils/CommonUtils.ts index 72a54916..68f2d5eb 100644 --- a/src/Utils/CommonUtils.ts +++ b/src/Utils/CommonUtils.ts @@ -147,17 +147,7 @@ export function indexOfFirstDigit(input: string) { export function removeUnits(input:string) { let i = 0; - let decimalSeen = false; - for (; i < input.length; i++) { - if (input[i] >= '0' && input[i] <= '9') { - continue; - } - if (input[i] === '.' && !decimalSeen) { - decimalSeen = true; - continue; - } - break; - } + for (; input[i] >= '0' && input[i] <= '9'; i++); return i == input.length ? input : input.substring(0,i); } diff --git a/src/Utils/PassFailCriteriaUtil.ts b/src/Utils/PassFailCriteriaUtil.ts index f271d893..e9efd0a5 100644 --- a/src/Utils/PassFailCriteriaUtil.ts +++ b/src/Utils/PassFailCriteriaUtil.ts @@ -2,6 +2,22 @@ import { PassFailServerMetric } from "../models/PayloadModels"; import { ValidAggregateList, ValidConditionList } from "../models/UtilModels"; import { indexOfFirstDigit, removeUnits } from "./CommonUtils"; +function removeUnitsAllowDecimal(input: string) { + let i = 0; + let decimalSeen = false; + for (; i < input.length; i++) { + if (input[i] >= '0' && input[i] <= '9') { + continue; + } + if (input[i] === '.' && !decimalSeen) { + decimalSeen = true; + continue; + } + break; + } + return i == input.length ? input : input.substring(0, i); +} + /* ado takes the full pf criteria as a string after parsing the string into proper data model, */ @@ -78,14 +94,14 @@ function validateCriteriaAndConvertToWorkingStringModel(data: any, failureCriter if(data.action == "") data.action = "continue" - data.value = removeUnits(data.value); + data.value = data.clientMetric === "requests_per_sec" ? removeUnitsAllowDecimal(data.value) : removeUnits(data.value); if(!validCriteria(data)) throw new Error("Invalid Failure Criteria"); let key: string = data.clientMetric+' '+data.aggregate+' '+data.condition+' '+data.action; if(data.requestName != ""){ key = key + ' ' + data.requestName; } - let val: number = Number(data.value); + let val: number = data.clientMetric === "requests_per_sec" ? Number(data.value) : parseInt(data.value); let currVal = val; if(failureCriteriaValue.hasOwnProperty(key))