mirror of
https://github.com/prometheus/alertmanager
synced 2025-02-17 19:17:07 +00:00
parent
06f9a4ad1d
commit
50394569f5
@ -48,21 +48,25 @@ term =
|
|||||||
|. Parser.ignore Parser.zeroOrMore ((==) ' ')
|
|. Parser.ignore Parser.zeroOrMore ((==) ' ')
|
||||||
|
|
||||||
|
|
||||||
durationFormat : Time.Time -> String
|
durationFormat : Time.Time -> Maybe String
|
||||||
durationFormat time =
|
durationFormat time =
|
||||||
List.foldl
|
if time >= 0 then
|
||||||
(\( unit, ms ) ( result, curr ) ->
|
List.foldl
|
||||||
( if curr // ms == 0 then
|
(\( unit, ms ) ( result, curr ) ->
|
||||||
result
|
( if curr // ms == 0 then
|
||||||
else
|
result
|
||||||
result ++ toString (curr // ms) ++ unit ++ " "
|
else
|
||||||
, curr % ms
|
result ++ toString (curr // ms) ++ unit ++ " "
|
||||||
|
, curr % ms
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
( "", round time )
|
||||||
( "", round time )
|
units
|
||||||
units
|
|> Tuple.first
|
||||||
|> Tuple.first
|
|> String.trim
|
||||||
|> String.trim
|
|> Just
|
||||||
|
else
|
||||||
|
Nothing
|
||||||
|
|
||||||
|
|
||||||
dateFormat : Time.Time -> String
|
dateFormat : Time.Time -> String
|
||||||
@ -86,10 +90,13 @@ encode =
|
|||||||
|
|
||||||
|
|
||||||
timeFromString : String -> Result String Time.Time
|
timeFromString : String -> Result String Time.Time
|
||||||
timeFromString =
|
timeFromString string =
|
||||||
ISO8601.fromString
|
if string == "" then
|
||||||
>> Result.map (ISO8601.toTime >> toFloat)
|
Err "Should not be empty"
|
||||||
>> Result.mapError (always "Wrong ISO8601 format")
|
else
|
||||||
|
ISO8601.fromString string
|
||||||
|
|> Result.map (ISO8601.toTime >> toFloat)
|
||||||
|
|> Result.mapError (always "Wrong ISO8601 format")
|
||||||
|
|
||||||
|
|
||||||
fromTime : Time.Time -> Types.Time
|
fromTime : Time.Time -> Types.Time
|
||||||
|
@ -11,6 +11,7 @@ module Views.SilenceForm.Types
|
|||||||
, initSilenceForm
|
, initSilenceForm
|
||||||
, emptyMatcher
|
, emptyMatcher
|
||||||
, validateForm
|
, validateForm
|
||||||
|
, parseEndsAt
|
||||||
)
|
)
|
||||||
|
|
||||||
import Silences.Types exposing (Silence, SilenceId, nullSilence)
|
import Silences.Types exposing (Silence, SilenceId, nullSilence)
|
||||||
@ -70,11 +71,9 @@ type SilenceFormFieldMsg
|
|||||||
= AddMatcher
|
= AddMatcher
|
||||||
| DeleteMatcher Int
|
| DeleteMatcher Int
|
||||||
| UpdateStartsAt String
|
| UpdateStartsAt String
|
||||||
| ValidateStartsAt
|
|
||||||
| UpdateEndsAt String
|
| UpdateEndsAt String
|
||||||
| ValidateEndsAt
|
|
||||||
| UpdateDuration String
|
| UpdateDuration String
|
||||||
| ValidateDuration
|
| ValidateTime
|
||||||
| UpdateCreatedBy String
|
| UpdateCreatedBy String
|
||||||
| ValidateCreatedBy
|
| ValidateCreatedBy
|
||||||
| UpdateComment String
|
| UpdateComment String
|
||||||
@ -111,7 +110,7 @@ toSilence { id, comment, matchers, createdBy, startsAt, endsAt } =
|
|||||||
(List.foldr appendMatcher (Ok []) matchers)
|
(List.foldr appendMatcher (Ok []) matchers)
|
||||||
(stringNotEmpty createdBy.value)
|
(stringNotEmpty createdBy.value)
|
||||||
(timeFromString startsAt.value)
|
(timeFromString startsAt.value)
|
||||||
(timeFromString endsAt.value)
|
(parseEndsAt startsAt.value endsAt.value)
|
||||||
|> Result.toMaybe
|
|> Result.toMaybe
|
||||||
|
|
||||||
|
|
||||||
@ -122,7 +121,7 @@ fromSilence { id, createdBy, comment, startsAt, endsAt, matchers } =
|
|||||||
, comment = initialField comment
|
, comment = initialField comment
|
||||||
, startsAt = initialField (timeToString startsAt)
|
, startsAt = initialField (timeToString startsAt)
|
||||||
, endsAt = initialField (timeToString endsAt)
|
, endsAt = initialField (timeToString endsAt)
|
||||||
, duration = initialField (durationFormat (endsAt - startsAt))
|
, duration = initialField (durationFormat (endsAt - startsAt) |> Maybe.withDefault "")
|
||||||
, matchers = List.map fromMatcher matchers
|
, matchers = List.map fromMatcher matchers
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,12 +132,25 @@ validateForm { id, createdBy, comment, startsAt, endsAt, duration, matchers } =
|
|||||||
, createdBy = validate stringNotEmpty createdBy
|
, createdBy = validate stringNotEmpty createdBy
|
||||||
, comment = validate stringNotEmpty comment
|
, comment = validate stringNotEmpty comment
|
||||||
, startsAt = validate timeFromString startsAt
|
, startsAt = validate timeFromString startsAt
|
||||||
, endsAt = validate timeFromString endsAt
|
, endsAt = validate (parseEndsAt startsAt.value) endsAt
|
||||||
, duration = validate parseDuration duration
|
, duration = validate parseDuration duration
|
||||||
, matchers = List.map validateMatcherForm matchers
|
, matchers = List.map validateMatcherForm matchers
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
parseEndsAt : String -> String -> Result String Time.Time
|
||||||
|
parseEndsAt startsAt endsAt =
|
||||||
|
case ( timeFromString startsAt, timeFromString endsAt ) of
|
||||||
|
( Ok starts, Ok ends ) ->
|
||||||
|
if starts > ends then
|
||||||
|
Err "Can't be in the past"
|
||||||
|
else
|
||||||
|
Ok ends
|
||||||
|
|
||||||
|
( _, endsResult ) ->
|
||||||
|
endsResult
|
||||||
|
|
||||||
|
|
||||||
validateMatcherForm : MatcherForm -> MatcherForm
|
validateMatcherForm : MatcherForm -> MatcherForm
|
||||||
validateMatcherForm { name, value, isRegex } =
|
validateMatcherForm { name, value, isRegex } =
|
||||||
{ name = validate stringNotEmpty name
|
{ name = validate stringNotEmpty name
|
||||||
@ -177,7 +189,7 @@ fromMatchersAndTime defaultCreator matchers now =
|
|||||||
{ empty
|
{ empty
|
||||||
| startsAt = initialField (timeToString now)
|
| startsAt = initialField (timeToString now)
|
||||||
, endsAt = initialField (timeToString (now + defaultDuration))
|
, endsAt = initialField (timeToString (now + defaultDuration))
|
||||||
, duration = initialField (durationFormat defaultDuration)
|
, duration = initialField (durationFormat defaultDuration |> Maybe.withDefault "")
|
||||||
, createdBy = initialField defaultCreator
|
, createdBy = initialField defaultCreator
|
||||||
, matchers =
|
, matchers =
|
||||||
-- If no matchers were specified, add an empty row
|
-- If no matchers were specified, add an empty row
|
||||||
|
@ -19,6 +19,7 @@ import Views.SilenceForm.Types
|
|||||||
, SilenceFormFieldMsg(..)
|
, SilenceFormFieldMsg(..)
|
||||||
, fromMatchersAndTime
|
, fromMatchersAndTime
|
||||||
, fromSilence
|
, fromSilence
|
||||||
|
, parseEndsAt
|
||||||
, validateForm
|
, validateForm
|
||||||
, toSilence
|
, toSilence
|
||||||
, emptyMatcher
|
, emptyMatcher
|
||||||
@ -42,7 +43,12 @@ updateForm msg form =
|
|||||||
durationValue =
|
durationValue =
|
||||||
case Result.map2 (-) endsAt startsAt of
|
case Result.map2 (-) endsAt startsAt of
|
||||||
Ok duration ->
|
Ok duration ->
|
||||||
Utils.Date.durationFormat duration
|
case Utils.Date.durationFormat duration of
|
||||||
|
Just value ->
|
||||||
|
value
|
||||||
|
|
||||||
|
Nothing ->
|
||||||
|
form.duration.value
|
||||||
|
|
||||||
Err _ ->
|
Err _ ->
|
||||||
form.duration.value
|
form.duration.value
|
||||||
@ -52,11 +58,6 @@ updateForm msg form =
|
|||||||
, duration = updateValue durationValue form.duration
|
, duration = updateValue durationValue form.duration
|
||||||
}
|
}
|
||||||
|
|
||||||
ValidateStartsAt ->
|
|
||||||
{ form
|
|
||||||
| startsAt = validate Utils.Date.timeFromString form.startsAt
|
|
||||||
}
|
|
||||||
|
|
||||||
UpdateEndsAt time ->
|
UpdateEndsAt time ->
|
||||||
let
|
let
|
||||||
endsAt =
|
endsAt =
|
||||||
@ -68,7 +69,12 @@ updateForm msg form =
|
|||||||
durationValue =
|
durationValue =
|
||||||
case Result.map2 (-) endsAt startsAt of
|
case Result.map2 (-) endsAt startsAt of
|
||||||
Ok duration ->
|
Ok duration ->
|
||||||
Utils.Date.durationFormat duration
|
case Utils.Date.durationFormat duration of
|
||||||
|
Just value ->
|
||||||
|
value
|
||||||
|
|
||||||
|
Nothing ->
|
||||||
|
form.duration.value
|
||||||
|
|
||||||
Err _ ->
|
Err _ ->
|
||||||
form.duration.value
|
form.duration.value
|
||||||
@ -78,11 +84,6 @@ updateForm msg form =
|
|||||||
, duration = updateValue durationValue form.duration
|
, duration = updateValue durationValue form.duration
|
||||||
}
|
}
|
||||||
|
|
||||||
ValidateEndsAt ->
|
|
||||||
{ form
|
|
||||||
| endsAt = validate Utils.Date.timeFromString form.endsAt
|
|
||||||
}
|
|
||||||
|
|
||||||
UpdateDuration time ->
|
UpdateDuration time ->
|
||||||
let
|
let
|
||||||
duration =
|
duration =
|
||||||
@ -104,9 +105,11 @@ updateForm msg form =
|
|||||||
, duration = updateValue time form.duration
|
, duration = updateValue time form.duration
|
||||||
}
|
}
|
||||||
|
|
||||||
ValidateDuration ->
|
ValidateTime ->
|
||||||
{ form
|
{ form
|
||||||
| duration = validate Utils.Date.parseDuration form.duration
|
| startsAt = validate Utils.Date.timeFromString form.startsAt
|
||||||
|
, endsAt = validate (parseEndsAt form.startsAt.value) form.endsAt
|
||||||
|
, duration = validate Utils.Date.parseDuration form.duration
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateCreatedBy createdBy ->
|
UpdateCreatedBy createdBy ->
|
||||||
|
@ -59,19 +59,19 @@ timeInput startsAt endsAt duration =
|
|||||||
"Start"
|
"Start"
|
||||||
"col-5"
|
"col-5"
|
||||||
(UpdateStartsAt >> UpdateField)
|
(UpdateStartsAt >> UpdateField)
|
||||||
(ValidateStartsAt |> UpdateField)
|
(ValidateTime |> UpdateField)
|
||||||
startsAt
|
startsAt
|
||||||
, validatedField input
|
, validatedField input
|
||||||
"Duration"
|
"Duration"
|
||||||
"col-2"
|
"col-2"
|
||||||
(UpdateDuration >> UpdateField)
|
(UpdateDuration >> UpdateField)
|
||||||
(ValidateDuration |> UpdateField)
|
(ValidateTime |> UpdateField)
|
||||||
duration
|
duration
|
||||||
, validatedField input
|
, validatedField input
|
||||||
"End"
|
"End"
|
||||||
"col-5"
|
"col-5"
|
||||||
(UpdateEndsAt >> UpdateField)
|
(UpdateEndsAt >> UpdateField)
|
||||||
(ValidateEndsAt |> UpdateField)
|
(ValidateTime |> UpdateField)
|
||||||
endsAt
|
endsAt
|
||||||
]
|
]
|
||||||
|
|
||||||
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user