// buildClients constructs clients objects for frontend consumption func (d *Daemon) buildClients() { for _, c := range d.Data.Clients { client, ok := c.(map[string]interface{}) if !ok { continue } dc, ok := client["dc"].(string) if !ok { continue } name, ok := client["name"].(string) if !ok { continue } client["_id"] = fmt.Sprintf("%s/%s", dc, name) if client["version"] == nil { client["version"] = "0.12.x" } client = findClientEvents(client, &d.Data.Events) client["acknowledged"] = helpers.IsAcknowledged("", name, dc, d.Data.Stashes) } }
func (u *Uchiwa) buildClientHistory(client, dc string, history []interface{}) []interface{} { for _, h := range history { m, ok := h.(map[string]interface{}) if !ok { logger.Warningf("Could not assert this client history to an interface: %+v", h) continue } // Set some attributes for easier frontend consumption check, ok := m["check"].(string) if !ok { continue } m["client"] = client m["dc"] = dc m["acknowledged"] = helpers.IsAcknowledged(check, client, dc, u.Data.Stashes) // Add missing attributes to last_result object if m["last_result"] != nil { if m["last_status"] == 0.0 { continue } event, err := helpers.GetEvent(check, client, dc, &u.Data.Events) if err != nil { continue } lastResult, ok := m["last_result"].(map[string]interface{}) if !ok { continue } if event["action"] != nil { lastResult["action"] = event["action"] } if event["occurrences"] != nil { lastResult["occurrences"] = event["occurrences"] } } // Maintain backward compatiblity with Sensu <= 0.17 // by constructing the last_result object if m["last_status"] != nil && m["last_status"] != 0.0 { event, err := helpers.GetEvent(check, client, dc, &u.Data.Events) if err != nil { continue } m["last_result"] = event } else { m["last_result"] = map[string]interface{}{"last_execution": m["last_execution"], "status": m["last_status"]} } } return history }
// BuildEvents constructs events objects for frontend consumption func (d *Daemon) buildEvents() { for _, e := range d.Data.Events { m := e.(map[string]interface{}) // build backward compatible event object for Sensu < 0.13.0 if m["id"] == nil { // build client object c := m["client"] delete(m, "client") m["client"] = map[string]interface{}{"name": c} // build check object c = m["check"] delete(m, "check") m["check"] = map[string]interface{}{"name": c, "issued": m["issued"], "output": m["output"], "status": m["status"]} // is flapping? if m["action"] == false { m["action"] = "create" } else { m["action"] = "flapping" } // remove old entries delete(m, "issued") delete(m, "output") delete(m, "status") } // we assume the event isn't acknowledged in case we can't assert the following values m["acknowledged"] = false // get client name c, ok := m["client"].(map[string]interface{}) if !ok { logger.Warningf("Could not assert event's client interface from %+v", c) continue } clientName, ok := c["name"].(string) if !ok { logger.Warningf("Could not assert event's client name from %+v", c) continue } // get check name k, ok := m["check"].(map[string]interface{}) if !ok { logger.Warningf("Could not assert event's check interface from %+v", k) continue } checkName, ok := k["name"].(string) if !ok { logger.Warningf("Could not assert event's check name from %+v", k) continue } // get dc name dcName, ok := m["dc"].(string) if !ok { logger.Warningf("Could not assert event's datacenter name from %+v", m) continue } // Set the event unique ID m["_id"] = fmt.Sprintf("%s/%s/%s", dcName, clientName, checkName) // determine if the event is acknowledged m["acknowledged"] = helpers.IsAcknowledged(checkName, clientName, dcName, d.Data.Stashes) // detertermine if the client is acknowledged m["client"].(map[string]interface{})["acknowledged"] = helpers.IsAcknowledged("", clientName, dcName, d.Data.Stashes) } }