feature: Adding in the stopping state (#2677)

* feature: Adding in the stopping state

* chore: Deal with timeout in the sigterm for main

* chore: Update the timeout

* Update web/projects/ui/src/app/pages/apps-routes/app-list/app-list-pkg/app-list-pkg.component.ts

Co-authored-by: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com>

* Update web/projects/ui/src/app/pages/apps-routes/app-show/components/app-show-status/app-show-status.component.ts

Co-authored-by: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com>

---------

Co-authored-by: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com>
This commit is contained in:
Jade
2024-07-22 11:40:12 -06:00
committed by GitHub
parent 196561fed2
commit 3eb0093d2a
18 changed files with 282 additions and 156 deletions

34
sdk/lib/util/inMs.test.ts Normal file
View File

@@ -0,0 +1,34 @@
import { inMs } from "./inMs"
describe("inMs", () => {
test("28.001s", () => {
expect(inMs("28.001s")).toBe(28001)
})
test("28.123s", () => {
expect(inMs("28.123s")).toBe(28123)
})
test(".123s", () => {
expect(inMs(".123s")).toBe(123)
})
test("123ms", () => {
expect(inMs("123ms")).toBe(123)
})
test("1h", () => {
expect(inMs("1h")).toBe(3600000)
})
test("1m", () => {
expect(inMs("1m")).toBe(60000)
})
test("1m", () => {
expect(inMs("1d")).toBe(1000 * 60 * 60 * 24)
})
test("123", () => {
expect(() => inMs("123")).toThrowError("Invalid time format: 123")
})
test("123 as number", () => {
expect(inMs(123)).toBe(123)
})
test.only("undefined", () => {
expect(inMs(undefined)).toBe(undefined)
})
})

31
sdk/lib/util/inMs.ts Normal file
View File

@@ -0,0 +1,31 @@
import { DEFAULT_SIGTERM_TIMEOUT } from "../mainFn"
const matchTimeRegex = /^\s*(\d+)?(\.\d+)?\s*(ms|s|m|h|d)/
const unitMultiplier = (unit?: string) => {
if (!unit) return 1
if (unit === "ms") return 1
if (unit === "s") return 1000
if (unit === "m") return 1000 * 60
if (unit === "h") return 1000 * 60 * 60
if (unit === "d") return 1000 * 60 * 60 * 24
throw new Error(`Invalid unit: ${unit}`)
}
const digitsMs = (digits: string | null, multiplier: number) => {
if (!digits) return 0
const value = parseInt(digits.slice(1))
const divideBy = multiplier / Math.pow(10, digits.length - 1)
return Math.round(value * divideBy)
}
export const inMs = (time?: string | number) => {
if (typeof time === "number") return time
if (!time) return undefined
const matches = time.match(matchTimeRegex)
if (!matches) throw new Error(`Invalid time format: ${time}`)
const [_, leftHandSide, digits, unit] = matches
const multiplier = unitMultiplier(unit)
const firstValue = parseInt(leftHandSide || "0") * multiplier
const secondValue = digitsMs(digits, multiplier)
return firstValue + secondValue
}

View File

@@ -12,3 +12,4 @@ export { addressHostToUrl } from "./getServiceInterface"
export { hostnameInfoToAddress } from "./Hostname"
export * from "./typeHelpers"
export { getDefaultString } from "./getDefaultString"
export { inMs } from "./inMs"