mirror of
https://github.com/prometheus/alertmanager
synced 2025-04-30 06:48:39 +00:00
Let the browser remember the creator of a silence (#1112)
* wire default creator through Elm * wire defaultCreator into localStorage * add ui/bindata.go * fix indentation * change defaultCreator type from (Maybe String) to String use an empty string as default value * update ui/bindata.go
This commit is contained in:
parent
266baa089c
commit
af63c85161
@ -15,6 +15,11 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="script.js"></script>
|
<script src="script.js"></script>
|
||||||
<script>Elm.Main.embed(document.body, { production: true })</script>
|
<script>
|
||||||
|
var app = Elm.Main.embed(document.body, { production: true, defaultCreator: window.localStorage.getItem('defaultCreator') });
|
||||||
|
app.ports.persistDefaultCreator.subscribe(function(name) {
|
||||||
|
window.localStorage.setItem('defaultCreator', name);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -62,6 +62,11 @@ init flags location =
|
|||||||
|> Json.decodeValue (Json.field "production" Json.bool)
|
|> Json.decodeValue (Json.field "production" Json.bool)
|
||||||
|> Result.withDefault False
|
|> Result.withDefault False
|
||||||
|
|
||||||
|
defaultCreator =
|
||||||
|
flags
|
||||||
|
|> Json.decodeValue (Json.field "defaultCreator" Json.string)
|
||||||
|
|> Result.withDefault ""
|
||||||
|
|
||||||
apiUrl =
|
apiUrl =
|
||||||
if prod then
|
if prod then
|
||||||
Api.makeApiUrl location.pathname
|
Api.makeApiUrl location.pathname
|
||||||
@ -88,6 +93,7 @@ init flags location =
|
|||||||
libUrl
|
libUrl
|
||||||
Loading
|
Loading
|
||||||
Loading
|
Loading
|
||||||
|
defaultCreator
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@ type alias Model =
|
|||||||
, libUrl : String
|
, libUrl : String
|
||||||
, bootstrapCSS : ApiData String
|
, bootstrapCSS : ApiData String
|
||||||
, fontAwesomeCSS : ApiData String
|
, fontAwesomeCSS : ApiData String
|
||||||
|
, defaultCreator : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -45,6 +46,7 @@ type Msg
|
|||||||
| UpdateFilter String
|
| UpdateFilter String
|
||||||
| BootstrapCSSLoaded (ApiData String)
|
| BootstrapCSSLoaded (ApiData String)
|
||||||
| FontAwesomeCSSLoaded (ApiData String)
|
| FontAwesomeCSSLoaded (ApiData String)
|
||||||
|
| SetDefaultCreator String
|
||||||
|
|
||||||
|
|
||||||
type Route
|
type Route
|
||||||
|
@ -31,9 +31,9 @@ update msg ({ basePath, apiUrl } as model) =
|
|||||||
List.map (\( k, v ) -> Matcher False k v) labels
|
List.map (\( k, v ) -> Matcher False k v) labels
|
||||||
|
|
||||||
( silenceForm, cmd ) =
|
( silenceForm, cmd ) =
|
||||||
Views.SilenceForm.Updates.update (NewSilenceFromMatchers matchers) model.silenceForm basePath apiUrl
|
Views.SilenceForm.Updates.update (NewSilenceFromMatchers model.defaultCreator matchers) model.silenceForm basePath apiUrl
|
||||||
in
|
in
|
||||||
( { model | silenceForm = silenceForm }, Cmd.map MsgForSilenceForm cmd )
|
( { model | silenceForm = silenceForm }, cmd )
|
||||||
|
|
||||||
NavigateToAlerts filter ->
|
NavigateToAlerts filter ->
|
||||||
let
|
let
|
||||||
@ -68,7 +68,7 @@ update msg ({ basePath, apiUrl } as model) =
|
|||||||
, if keep then
|
, if keep then
|
||||||
Cmd.none
|
Cmd.none
|
||||||
else
|
else
|
||||||
Task.perform (NewSilenceFromMatchers >> MsgForSilenceForm) (Task.succeed [])
|
Task.perform (NewSilenceFromMatchers model.defaultCreator >> MsgForSilenceForm) (Task.succeed [])
|
||||||
)
|
)
|
||||||
|
|
||||||
NavigateToSilenceFormEdit uuid ->
|
NavigateToSilenceFormEdit uuid ->
|
||||||
@ -125,10 +125,13 @@ update msg ({ basePath, apiUrl } as model) =
|
|||||||
( silenceForm, cmd ) =
|
( silenceForm, cmd ) =
|
||||||
Views.SilenceForm.Updates.update msg model.silenceForm basePath apiUrl
|
Views.SilenceForm.Updates.update msg model.silenceForm basePath apiUrl
|
||||||
in
|
in
|
||||||
( { model | silenceForm = silenceForm }, Cmd.map MsgForSilenceForm cmd )
|
( { model | silenceForm = silenceForm }, cmd )
|
||||||
|
|
||||||
BootstrapCSSLoaded css ->
|
BootstrapCSSLoaded css ->
|
||||||
( { model | bootstrapCSS = css }, Cmd.none )
|
( { model | bootstrapCSS = css }, Cmd.none )
|
||||||
|
|
||||||
FontAwesomeCSSLoaded css ->
|
FontAwesomeCSSLoaded css ->
|
||||||
( { model | fontAwesomeCSS = css }, Cmd.none )
|
( { model | fontAwesomeCSS = css }, Cmd.none )
|
||||||
|
|
||||||
|
SetDefaultCreator name ->
|
||||||
|
( { model | defaultCreator = name }, Cmd.none )
|
||||||
|
@ -82,10 +82,10 @@ currentView model =
|
|||||||
SilenceList.view model.silenceList
|
SilenceList.view model.silenceList
|
||||||
|
|
||||||
SilenceFormNewRoute keep ->
|
SilenceFormNewRoute keep ->
|
||||||
SilenceForm.view Nothing model.silenceForm |> Html.map MsgForSilenceForm
|
SilenceForm.view Nothing model.defaultCreator model.silenceForm |> Html.map MsgForSilenceForm
|
||||||
|
|
||||||
SilenceFormEditRoute silenceId ->
|
SilenceFormEditRoute silenceId ->
|
||||||
SilenceForm.view (Just silenceId) model.silenceForm |> Html.map MsgForSilenceForm
|
SilenceForm.view (Just silenceId) "" model.silenceForm |> Html.map MsgForSilenceForm
|
||||||
|
|
||||||
TopLevelRoute ->
|
TopLevelRoute ->
|
||||||
Utils.Views.loading
|
Utils.Views.loading
|
||||||
|
@ -60,8 +60,8 @@ type SilenceFormMsg
|
|||||||
| PreviewSilence
|
| PreviewSilence
|
||||||
| AlertGroupsPreview (ApiData (List Alert))
|
| AlertGroupsPreview (ApiData (List Alert))
|
||||||
| FetchSilence String
|
| FetchSilence String
|
||||||
| NewSilenceFromMatchers (List Matcher)
|
| NewSilenceFromMatchers String (List Matcher)
|
||||||
| NewSilenceFromMatchersAndTime (List Matcher) Time
|
| NewSilenceFromMatchersAndTime String (List Matcher) Time
|
||||||
| SilenceFetch (ApiData Silence)
|
| SilenceFetch (ApiData Silence)
|
||||||
| SilenceCreate (ApiData SilenceId)
|
| SilenceCreate (ApiData SilenceId)
|
||||||
|
|
||||||
@ -172,12 +172,13 @@ defaultDuration =
|
|||||||
2 * Time.hour
|
2 * Time.hour
|
||||||
|
|
||||||
|
|
||||||
fromMatchersAndTime : List Matcher -> Time -> SilenceForm
|
fromMatchersAndTime : String -> List Matcher -> Time -> SilenceForm
|
||||||
fromMatchersAndTime matchers now =
|
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)
|
||||||
|
, createdBy = initialField defaultCreator
|
||||||
, matchers =
|
, matchers =
|
||||||
-- If no matchers were specified, add an empty row
|
-- If no matchers were specified, add an empty row
|
||||||
if List.isEmpty matchers then
|
if List.isEmpty matchers then
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
module Views.SilenceForm.Updates exposing (update)
|
port module Views.SilenceForm.Updates exposing (update)
|
||||||
|
|
||||||
import Alerts.Api
|
import Alerts.Api
|
||||||
import Silences.Api
|
import Silences.Api
|
||||||
import Task
|
import Task
|
||||||
import Time
|
import Time
|
||||||
|
import Types exposing (Msg(MsgForSilenceForm, SetDefaultCreator))
|
||||||
import Navigation
|
import Navigation
|
||||||
import Utils.Date exposing (timeFromString)
|
import Utils.Date exposing (timeFromString)
|
||||||
import Utils.List
|
import Utils.List
|
||||||
@ -169,14 +170,18 @@ updateForm msg form =
|
|||||||
{ form | matchers = matchers }
|
{ form | matchers = matchers }
|
||||||
|
|
||||||
|
|
||||||
update : SilenceFormMsg -> Model -> String -> String -> ( Model, Cmd SilenceFormMsg )
|
update : SilenceFormMsg -> Model -> String -> String -> ( Model, Cmd Msg )
|
||||||
update msg model basePath apiUrl =
|
update msg model basePath apiUrl =
|
||||||
case msg of
|
case msg of
|
||||||
CreateSilence ->
|
CreateSilence ->
|
||||||
case toSilence model.form of
|
case toSilence model.form of
|
||||||
Just silence ->
|
Just silence ->
|
||||||
( { model | silenceId = Loading }
|
( { model | silenceId = Loading }
|
||||||
, Silences.Api.create apiUrl silence |> Cmd.map SilenceCreate
|
, Cmd.batch
|
||||||
|
[ Silences.Api.create apiUrl silence |> Cmd.map (SilenceCreate >> MsgForSilenceForm)
|
||||||
|
, persistDefaultCreator silence.createdBy
|
||||||
|
, Task.succeed silence.createdBy |> Task.perform SetDefaultCreator
|
||||||
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
Nothing ->
|
Nothing ->
|
||||||
@ -199,11 +204,11 @@ update msg model basePath apiUrl =
|
|||||||
in
|
in
|
||||||
( { model | silenceId = silenceId }, cmd )
|
( { model | silenceId = silenceId }, cmd )
|
||||||
|
|
||||||
NewSilenceFromMatchers matchers ->
|
NewSilenceFromMatchers defaultCreator matchers ->
|
||||||
( model, Task.perform (NewSilenceFromMatchersAndTime matchers) Time.now )
|
( model, Task.perform (NewSilenceFromMatchersAndTime defaultCreator matchers >> MsgForSilenceForm) Time.now )
|
||||||
|
|
||||||
NewSilenceFromMatchersAndTime matchers time ->
|
NewSilenceFromMatchersAndTime defaultCreator matchers time ->
|
||||||
( { form = fromMatchersAndTime matchers time
|
( { form = fromMatchersAndTime defaultCreator matchers time
|
||||||
, alerts = Initial
|
, alerts = Initial
|
||||||
, silenceId = Initial
|
, silenceId = Initial
|
||||||
}
|
}
|
||||||
@ -211,11 +216,11 @@ update msg model basePath apiUrl =
|
|||||||
)
|
)
|
||||||
|
|
||||||
FetchSilence silenceId ->
|
FetchSilence silenceId ->
|
||||||
( model, Silences.Api.getSilence apiUrl silenceId SilenceFetch )
|
( model, Silences.Api.getSilence apiUrl silenceId (SilenceFetch >> MsgForSilenceForm) )
|
||||||
|
|
||||||
SilenceFetch (Success silence) ->
|
SilenceFetch (Success silence) ->
|
||||||
( { model | form = fromSilence silence }
|
( { model | form = fromSilence silence }
|
||||||
, Task.perform identity (Task.succeed PreviewSilence)
|
, Task.perform identity (Task.succeed (MsgForSilenceForm PreviewSilence))
|
||||||
)
|
)
|
||||||
|
|
||||||
SilenceFetch _ ->
|
SilenceFetch _ ->
|
||||||
@ -228,7 +233,7 @@ update msg model basePath apiUrl =
|
|||||||
, Alerts.Api.fetchAlerts
|
, Alerts.Api.fetchAlerts
|
||||||
apiUrl
|
apiUrl
|
||||||
{ nullFilter | text = Just (Utils.List.mjoin silence.matchers) }
|
{ nullFilter | text = Just (Utils.List.mjoin silence.matchers) }
|
||||||
|> Cmd.map AlertGroupsPreview
|
|> Cmd.map (AlertGroupsPreview >> MsgForSilenceForm)
|
||||||
)
|
)
|
||||||
|
|
||||||
Nothing ->
|
Nothing ->
|
||||||
@ -251,3 +256,6 @@ update msg model basePath apiUrl =
|
|||||||
}
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
port persistDefaultCreator : String -> Cmd msg
|
||||||
|
@ -13,8 +13,8 @@ import Utils.FormValidation exposing (ValidationState(..), ValidatedField)
|
|||||||
import Views.SilenceForm.Types exposing (Model, SilenceFormMsg(..), SilenceFormFieldMsg(..), SilenceForm)
|
import Views.SilenceForm.Types exposing (Model, SilenceFormMsg(..), SilenceFormFieldMsg(..), SilenceForm)
|
||||||
|
|
||||||
|
|
||||||
view : Maybe SilenceId -> Model -> Html SilenceFormMsg
|
view : Maybe SilenceId -> String -> Model -> Html SilenceFormMsg
|
||||||
view maybeId { form, silenceId, alerts } =
|
view maybeId defaultCreator { form, silenceId, alerts } =
|
||||||
let
|
let
|
||||||
( title, resetClick ) =
|
( title, resetClick ) =
|
||||||
case maybeId of
|
case maybeId of
|
||||||
@ -22,7 +22,7 @@ view maybeId { form, silenceId, alerts } =
|
|||||||
( "Edit Silence", FetchSilence silenceId )
|
( "Edit Silence", FetchSilence silenceId )
|
||||||
|
|
||||||
Nothing ->
|
Nothing ->
|
||||||
( "New Silence", NewSilenceFromMatchers [] )
|
( "New Silence", NewSilenceFromMatchers defaultCreator [] )
|
||||||
in
|
in
|
||||||
div []
|
div []
|
||||||
[ h1 [] [ text title ]
|
[ h1 [] [ text title ]
|
||||||
|
@ -100,7 +100,7 @@ editButton silence =
|
|||||||
a
|
a
|
||||||
[ class "btn btn-outline-info border-0"
|
[ class "btn btn-outline-info border-0"
|
||||||
, href "#/silences/new?keep=1"
|
, href "#/silences/new?keep=1"
|
||||||
, onClick (NewSilenceFromMatchers silence.matchers |> MsgForSilenceForm)
|
, onClick (NewSilenceFromMatchers silence.createdBy silence.matchers |> MsgForSilenceForm)
|
||||||
]
|
]
|
||||||
[ text "Recreate"
|
[ text "Recreate"
|
||||||
]
|
]
|
||||||
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user