Skip to content

Commit

Permalink
Implementing purge and forceClose
Browse files Browse the repository at this point in the history
  • Loading branch information
Craig Peterson committed Feb 17, 2016
1 parent a7a48d3 commit 8ccbc06
Show file tree
Hide file tree
Showing 9 changed files with 118 additions and 50 deletions.
4 changes: 4 additions & 0 deletions cmd/bosun/sched/sched.go
Original file line number Diff line number Diff line change
Expand Up @@ -600,12 +600,16 @@ func (s *Schedule) Action(user, message string, t models.ActionType, ak models.A
if st.IsActive() {
return fmt.Errorf("cannot close active alert")
}
fallthrough
case models.ActionForceClose:
st.Open = false
st.End = &timestamp
case models.ActionForget:
if !isUnknown {
return fmt.Errorf("can only forget unknowns")
}
fallthrough
case models.ActionPurge:
return s.DataAccess.State().Forget(ak)
default:
return fmt.Errorf("unknown action type: %v", t)
Expand Down
120 changes: 70 additions & 50 deletions cmd/bosun/web/static.go
Original file line number Diff line number Diff line change
Expand Up @@ -9099,7 +9099,7 @@ xitlUKAxazlo8/8JAAD//4NB/DtLfAAA

"/js/bosun.js": {
local: "web/static/js/bosun.js",
size: 108586,
size: 108866,
modtime: 0,
compressed: `
H4sIAAAJbogA/+z9e3vbRpIoDv+9+RQwx2NCEUVKTpzJyJb9OrZz2YmTrO3MzhxZqwUJkIRFAjQASuLY
Expand Down Expand Up @@ -9451,7 +9451,7 @@ Xbambpg1kzD966L0W+plEu84v+IjGM1WF0iLWI86O9soPB58uAp3TnZGM9ymDt6u7+/vj213IrjtGzQj
2Ux1Mn8GMp+Kbc6C7ni/UxITueSr9QLlDZKvyTk3w9wSVkqYV9slvCnkIOCOC829aZEvn4u7OlpQ0TkM
HFvhr+o1V3r0dvx1vBEXeWxdB9330bMdMSPjDqkUDuXbN8fJM9V1inOjEymQeK1v7wgZrZ6rkUbYEeCr
mK26zjExIdhVKJzTnxIqr7YhxWB1SvDTZfPTYdpOz/g9lze6BMHj8XMkgDdIICvXJyFigpi7kvG9CPO4
fTpYxIhJyP8/AAD//2VI8q8qqAEA
fTpYxEhXQn5bF7NP0x8rxLxFf0ySTzc20xq9SdD/PwAA//+6IDoJQqkBAA==
`,
},

Expand Down Expand Up @@ -12424,37 +12424,37 @@ bNNNMvIm425oAQ2itVF+BNdwA4t/AwAA///HUuwLLBAAAA==

"/js/state.ts": {
local: "web/static/js/state.ts",
size: 5266,
size: 5502,
modtime: 0,
compressed: `
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
gKGSFAAA
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
8TrG9IdYdtlQ2mf9bwAAAP//itkeCH4VAAA=
`,
},

Expand Down Expand Up @@ -13026,27 +13026,27 @@ NeZtQ48ZNx5cB0tkPLvkz/bBIAzIu+Vq0mH5U/wNAAD//wJxdrNjAwAA

"/partials/alertstate.html": {
local: "web/static/partials/alertstate.html",
size: 3849,
size: 3915,
modtime: 0,
compressed: `
H4sIAAAJbogA/7RWX2/jNgx/zn0KzQc0CTYnaFcUWGG7uA0dVmx72bV7V2zG1iJLmSS39Xr+7qNkubFT
9/r3Hhqrokj++CNFKsrYNUk51ToOtlQADwugGRN5QEQe9gW/2PUsrZQCYT4baio9/34aruTt1J9l6SYO
jMxzDrN5kHyYRMXx0LZhhoOVTCJKCgVru5xEGqXEyeLgsmCawC2qldQwKQhL8UfBVoFGx5qYghr8AUI5
KEPwNBME9Wlq2DWQmZAiFFKVlM+JRpiwCDoQOa+3hbXXD+5uer8d9vyGmuVieupN4FGzaIMmBwcjm9/F
ZNp6nTZBEi1tSI8EV1YGnoqqoJqsAATRjINIIXtBENeSVyWEcr1G+GnBeLb47K08Be3fCrQjvaRq82zm
KwHXlFdISeaZIZ/sCU2ogoH0psCQKMlgCyJDRLU10ibuBQF2KIcputr52QuTWju22uIAlJLqN6aNVPWZ
CyO+u0MgMoNZa8YhnzeNq9IxjtZMPSt9jpgMFK/xNhHneEHO7UeTVJZA1kqWqINSTTjboC76wX0NioEm
GTV0RTX60roCIhXKsbzWWGTIJHKg6hdwZlHfl8OFdjj2aFrSXlWgFV3ImzhoWbnIguTj3V33T9OcPqgj
1FgxkcWBL7lq9Q+khnz54p06Yn+HeuB0p971iYrzULG8MMEOgzeQy4AYjVnHUu5v9gy2QUTL4jj5EC2x
t+HnQYdbyax21hlWhPXgelXvmGq3Bnup5KEuw5O2LsZOj57/0Ysm0TaJtFFS5IljgiAVlsR2K1puvYkW
9CPWfrq3NqT8vxs9E7SEeUCW+3Z6q7eAtn0O3g3wgwZqgROXWeKvnA7tbRgcvcSN4FsF+DeDG/2GAHtd
Zln4DrOBetdfXIJsY/kVa5z4JmQL9oeHFrqr9lfF4Upxq2WX5DxjqPWI0hJut+rM/qDTlZHUt7Rz3HGO
7QK0xtb5mAVMAMPGbM5YFveve5BceAmZfRzNJXaIZTLvmshYenaLb3Ot/JB7Uwq9ZGUEwb8wgzWtuHHr
Wx30iPJz+SyrlHsuxIfFQTdPeoOkaQ4MzfX+kLnEPZeRQ1LISt2z9jYIR6+CcOQg6HfCcPIqDCfviuHw
dUQcvi8TR8evS8fxHop3b3SfUovvLa0OezNNN6jnF7vtlEsNraBd7kT4cMnBdGM3V7Lado/nGB/PldgI
eSOmQavdnn4+A/sPlj9wXrSBvowcq0daxdcT1CV8B2JxWW+hafZm4TjgxRW+AINkVZMRO1bWNL0X1GSC
L8/Rkdn3bgdnMtB6CsSfOChojlqnYzC8dIjkKz3//juSNvcKcw5+tg+zRybE4ZEfEYVaPjVN8Gw3nsLC
lHxofw+T//wfAAD//0rIvmwJDwAA
H4sIAAAJbogA/7RWS2/jNhA+e38FqwViG61sJA0CNLAcbIsUDdpeuknvtDSWWFOkSlJJ1Kz+e4cUZUuO
snl5D7GYeX7z4AwXCbslMadaR0FBBfAwA5owkQZEpGGX8Ys9T+JSKRDms6Gm1NPvx+FK3o+9LIs3UWBk
mnKYTIPlh9EiO+3bNsxwsJzRgpJMwdoeRwuNXOJ4UXCdMU3gHtVyapgUhMX4o6BQoNGxJiajBn+AUA7K
EJRmgqA+jQ27BTIRUoRCqpzyKdEIE2ZBCyLlVZFZe93gHsZbctjxG2qWivG5N4GiZtYETY6OBojfRWTc
eB3XwXIxtyE9EVxeGnguqoxqsgIQRDMOIobkFUHcSl7mEMr1GuHHGePJ7LO38hy0f0vQLuk5VZsXZ74U
cEt5iSlJfGbIJyuhCVXQ495lGBIlCRQgEkRUWSNN4V4RYIuyX6KbnZ+9MKm1Y7stCkApqX5j2khVXbgw
oocHBCITmDRmHPJpXbsuHcrRmqkXlc8lJgHFK7xNxDmekUv70SSWOZC1kjnqIFcTzjaoi36QrkEx0CSh
hq6oRl9al0CkQj621xqbDDOJOVDVK3JmUW/b4Uo7HHtpmtNOV6AVncm7KGiycpUEy48PD+0/dX3+qI9Q
Y8VEEgW+5crVPxAb8uWLd+oS+ztUPac79XZOlJyHiqWZCXYYvIFUBsRorDq2cpfYMdgEsZhnp8sPiznO
Nvw8mnArmVTOOsOOsB7crOqIqYbUo8WShzoPz5q+GJIelP/Rs0aLYrnQRkmRLl0mCKbCJrEhLeaFN9GA
fsLaT1tr/ZT/d6cnguYwDch8307n9B7Qds7BwQA/GqAWOHGVJf7K6dDehp7oNRKCbxXg3wzu9DsC7EyZ
eeYnzAaq3XxxBbKD5VfsceKHkG3YHx5baK/aXyWHG8Wtlj2Sy4Sh1hNKc7gv1IX9QacrI6kfaZdIcY7t
AbTG0fmUBSwAw8FsLlgSda97sLzyHDL5OFhLnBDz5bQdIkPl2R2+zbXyS+5dJfSclREE/8IE1rTkxp3v
ddBJlN/LF0mp3HMhOs6O2n3SWSR1fWRoqveXzDXSXEWOSSZLtc3a+yCcvAnCiYOgD4Th7E0Yzg6K4fht
iTg+bCZOTt9WjtM9FAcfdJ9ii+89ow5nM403qOcPO3LMpYaG0Rx3LHy4xNAV6BJ6YimYdjunSpZF+8aO
8I1dio2Qd2IcbG2gdEe9KJHQ8Jrji3O4/+T5AzdOk6rXpdfqkUbx7SluW2YHYnZdFVDXe9t0GPDsBt+Q
wXJVkQE7llfXnTfYaIRv18Gl2/VuV++yp/UciD9x1dAUtc6HYHhuH8lXtsb2O1A2945zDn62T7sndszx
iV8ymZo/t49Qtl1wYWZy3re/h8l//g8AAP//YTsmZEsPAAA=
`,
},

Expand Down Expand Up @@ -13188,6 +13188,16 @@ ZRAyfI3v8+rQ3Z8rAduX6nvI4fNPAAAA///3VswxUwkAAA==
`,
},

"/partials/forceClose.html": {
local: "web/static/partials/forceClose.html",
size: 83,
modtime: 0,
compressed: `
H4sIAAAJbogA/7JJVEjOSSwutlVKKslTAGLdlMS89NQiMLOiWEkhL103oyg1zVapujoxuSQzP09DPS2/
KDnVOSe/OFVds7ZWyc4NxFcAC9joJ9oBAgAA//8blXWUUwAAAA==
`,
},

"/partials/forget.html": {
local: "web/static/partials/forget.html",
size: 119,
Expand Down Expand Up @@ -13316,6 +13326,16 @@ MJVh+Be0VWJZF7KBEVISHwE9le8AAAD//xB1BPYxAwAA
`,
},

"/partials/purge.html": {
local: "web/static/partials/purge.html",
size: 72,
modtime: 0,
compressed: `
H4sIAAAJbogA/7JJVEjOSSwutlVKKslTAGLdlMS89NQiMLOiWEkhL103oyg1zVapujoxuSQzP09DvaC0
KD1VXbO2VskuAMS00U+0AwQAAP//rcT2g0gAAAA=
`,
},

"/partials/put.html": {
local: "web/static/partials/put.html",
size: 2350,
Expand Down
12 changes: 12 additions & 0 deletions cmd/bosun/web/static/js/bosun.js
Original file line number Diff line number Diff line change
Expand Up @@ -2861,3 +2861,15 @@ bosunApp.directive('tsForget', function () {
templateUrl: '/partials/forget.html'
};
});
bosunApp.directive('tsPurge', function () {
return {
restrict: 'E',
templateUrl: '/partials/purge.html'
};
});
bosunApp.directive('tsForceClose', function () {
return {
restrict: 'E',
templateUrl: '/partials/forceClose.html'
};
});
14 changes: 14 additions & 0 deletions cmd/bosun/web/static/js/state.ts
Original file line number Diff line number Diff line change
Expand Up @@ -183,3 +183,17 @@ bosunApp.directive('tsForget', () => {
templateUrl: '/partials/forget.html',
};
});

bosunApp.directive('tsPurge', () => {
return {
restrict: 'E',
templateUrl: '/partials/purge.html',
};
});

bosunApp.directive('tsForceClose', () => {
return {
restrict: 'E',
templateUrl: '/partials/forceClose.html',
};
});
2 changes: 2 additions & 0 deletions cmd/bosun/web/static/partials/alertstate.html
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,9 @@ <h4 class="panel-title">
<div class="col-sm-9">
<ts-ack></ts-ack>
<ts-close></ts-close>
<ts-force-close></ts-force-close>
<ts-forget ng-if="group.Status == 'unknown'"></ts-forget>
<ts-purge></ts-purge>
</div>
</div>
<div class="row" ng-show="state.LastAction">
Expand Down
1 change: 1 addition & 0 deletions cmd/bosun/web/static/partials/forceClose.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<a class="btn btn-danger btn-xs" ng-href="{{action('forceClose')}}">Force Close</a>
1 change: 1 addition & 0 deletions cmd/bosun/web/static/partials/purge.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<a class="btn btn-danger btn-xs" ng-href="{{action('purge')}}">Purge</a>
4 changes: 4 additions & 0 deletions cmd/bosun/web/web.go
Original file line number Diff line number Diff line change
Expand Up @@ -544,6 +544,10 @@ func Action(t miniprofiler.Timer, w http.ResponseWriter, r *http.Request) (inter
at = models.ActionClose
case "forget":
at = models.ActionForget
case "forceClose":
at = models.ActionForceClose
case "purge":
at = models.ActionPurge
}
errs := make(MultiError)
r.ParseForm()
Expand Down
10 changes: 10 additions & 0 deletions models/incidents.go
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,8 @@ const (
ActionAcknowledge
ActionClose
ActionForget
ActionForceClose
ActionPurge
)

func (a ActionType) String() string {
Expand All @@ -206,6 +208,10 @@ func (a ActionType) String() string {
return "Closed"
case ActionForget:
return "Forgotten"
case ActionForceClose:
return "ForceClosed"
case ActionPurge:
return "Purged"
default:
return "none"
}
Expand All @@ -223,6 +229,10 @@ func (a *ActionType) UnmarshalJSON(b []byte) error {
*a = ActionClose
case `"Forgotten"`:
*a = ActionForget
case `"Purged"`:
*a = ActionPurge
case `"ForceClosed"`:
*a = ActionForceClose
default:
*a = ActionNone
}
Expand Down

0 comments on commit 8ccbc06

Please sign in to comment.