Author SHA1 Message Date
ic-builder 62564a4796 solve: PUT not POST — GLPI updates require the update verb
ci / vet (pull_request) Successful in 46s
The POST on /Ticket/<id> silently no-oped; the manual PUT worked.
Ticket: https://projects.knownelement.com/issues/824
2026-09-06 13:29:17 -05:00
ic-builder f7ffa441f6 solve uses Ticket status 5 (solved), not the Change value
Ticket: https://projects.knownelement.com/issues/824
2026-09-06 13:18:05 -05:00
ic-builder 857be83724 Merge pull request 'UP solves open tickets after restarts' (#3) from ic-builder/up-solve-search into main
ci / vet (push) Successful in 1m25s
2026-09-06 18:09:39 +00:00
ic-builder de9b9c4a35 UP events solve open tickets even after bridge restarts
ci / vet (pull_request) Successful in 47s
In-memory dedupe resets on pod restart; recovery then no-ops and leaves
stale open tickets. UP now falls back to a GLPI search for an unsolved
ticket for that monitor.
Ticket: https://projects.knownelement.com/issues/824
2026-09-06 13:09:34 -05:00
2 changed files with 6 additions and 2 deletions
BIN
View File
Binary file not shown.
+5 -1
View File
@@ -216,15 +216,19 @@ func (b *bridge) handle(w http.ResponseWriter, r *http.Request) {
case 1: // UP
tid, exists := b.open[k.Monitor.Name]
if !exists {
// restarts wipe the in-memory map; search GLPI for an open ticket
tid, _ = b.glpi.openTicketFor(k.Monitor.Name)
if tid == 0 {
return
}
}
delete(b.open, k.Monitor.Name)
go func() {
fu := fmt.Sprintf("RECOVERY: monitor %s back UP at %s. Ticket auto-closing as solved with recovery evidence.", k.Monitor.Name, k.Heartbeat.Time)
if err := b.glpi.followup(tid, fu); err != nil {
log.Printf("followup failed (continuing to solve): %v", err)
}
if err := b.glpi.do("POST", fmt.Sprintf("/Ticket/%d", tid), map[string]any{"input": map[string]any{"status": 11}}, nil); err != nil { // 11 = solved
if err := b.glpi.do("PUT", fmt.Sprintf("/Ticket/%d", tid), map[string]any{"input": map[string]any{"status": 5}}, nil); err != nil { // ticket status 5 = solved
log.Printf("solve failed: %v", err)
}
}()