func logAuditEvent( eventtype string, message string, description string, entityId *uuid.UUID, clusterId *uuid.UUID, notificationEntity models.NotificationEntity, taskId *uuid.UUID, deletionAudit bool, ctxt string) error { var event models.AppEvent eventId, err := uuid.New() if err != nil { logger.Get().Error("%s-Uuid generation for the event failed for event: %s. error: %v", ctxt, event.Name, err) return err } event.EventId = *eventId if entityId != nil { event.EntityId = *entityId } if clusterId != nil { event.ClusterId = *clusterId } event.NotificationEntity = notificationEntity event.Timestamp = time.Now() event.Notify = false event.Name = eventtype event.Message = message event.Description = description event.Severity = models.ALARM_STATUS_CLEARED if taskId != nil { event.Tags = map[string]string{ "Task Id": (*taskId).String(), } } if err := common_event.AuditLog(ctxt, event, GetDbProvider()); err != nil { logger.Get().Error("%s- Error logging the event: %s. Error:%v", ctxt, event.Name, err) return err } if deletionAudit { if err := common_event.DismissAllEventsForEntity(event.EntityId, event, ctxt); err != nil { logger.Get().Error("%s-Error while dismissing events for entity: %v. Error: %v", ctxt, event.EntityId, err) } } return nil }
func RouteEvent(event models.NodeEvent) { reqId, err := uuid.New() if err != nil { logger.Get().Error("Error Creating the RequestId. error: %v", err) return } ctxt := fmt.Sprintf("%v:%v", models.ENGINE_NAME, reqId.String()) var e models.AppEvent e.Timestamp = event.Timestamp e.Tags = event.Tags e.Message = event.Message eventId, err := uuid.New() if err != nil { logger.Get().Error("%s-Uuid generation for the event failed for node: %s. error: %v", ctxt, event.Node, err) return } e.EventId = *eventId // querying DB to get node ID and Cluster ID for the event sessionCopy := db.GetDatastore().Copy() defer sessionCopy.Close() var node models.Node coll := sessionCopy.DB(conf.SystemConfig.DBConfig.Database).C(models.COLL_NAME_STORAGE_NODES) if err := coll.Find(bson.M{"hostname": event.Node}).One(&node); err != nil { logger.Get().Error("%s-Node information read from DB failed for node: %s. error: %v", ctxt, event.Node, err) return } // Push the event to DB only if the node is managed if node.Hostname == "" || !node.Enabled { return } e.ClusterId = node.ClusterId e.NodeId = node.NodeId e.NodeName = node.Hostname // Invoking the event handler for tag, handler := range handlermap { if match, err := filepath.Match(tag, event.Tag); err == nil { if match { if e, err = handler.(func(models.AppEvent, string) (models.AppEvent, error))(e, ctxt); err != nil { logger.Get().Error("%s-Event Handling Failed for event for node: %s. error: %v", ctxt, node.Hostname, err) return } if e.Name == "" { return } if err := common_event.AuditLog(ctxt, e, skyring.GetDbProvider()); err != nil { logger.Get().Error("%s-Could not persist the event to DB for node: %s. error: %v", ctxt, node.Hostname, err) return } else { // For upcoming any new event , broadcasting to all connected clients eventObj, err := json.Marshal(e) if err != nil { logger.Get().Error("%s-Error marshalling the event data for node: %s. error: %v", ctxt, node.Hostname, err) } GetBroadcaster().chBroadcast <- string(eventObj) return } } } else { logger.Get().Error("%s-Error while maping handler for event for node: %s. error: %v", ctxt, node.Hostname, err) return } } e.Name = event.Tag app := skyring.GetApp() if err := app.RouteProviderEvents(ctxt, e); err != nil { logger.Get().Error("%s-Event:%s could not be handled for node: %s. error: %v", ctxt, event.Tag, node.Hostname, err) } return }