func popEvent(queues []string) (*model.Event, error) { log := logger.Logger() count := len(queues) params := make([]interface{}, count+1) for i := 0; i < count; i++ { params[i] = queues[i] } // set timeout 0 params[count] = 0 rc := g.RedisConnPool.Get() defer rc.Close() reply, err := redis.Strings(rc.Do("BRPOP", params...)) if err != nil { log.Error(fmt.Sprintf("get alarm event from redis fail: %v", err)) return nil, err } var event model.Event err = json.Unmarshal([]byte(reply[1]), &event) if err != nil { log.Error(fmt.Sprintf("parse alarm event fail: %v", err)) return nil, err } log.Debug(event.String()) //insert event into database eventmodel.InsertEvent(&event) // save in memory. display in dashboard g.Events.Put(&event) return &event, nil }
func InsertEvent(eve *coommonModel.Event) { log := logger.Logger() q := orm.NewOrm() q.Using("falcon_portal") var event []EventCases q.Raw("select * from event_cases where id = ?", eve.Id).QueryRows(&event) if len(event) == 0 { //create cases sqltemplete := `INSERT INTO event_cases ( id, endpoint, metric, func, cond, note, max_step, current_step, priority, status, timestamp, update_at, tpl_creator, expression_id, strategy_id, template_id ) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)` res1, err := q.Raw( sqltemplete, eve.Id, eve.Endpoint, counterGen(eve.Metric(), utils.SortedTags(eve.PushedTags)), eve.Func(), //cond fmt.Sprintf("%v %v %v", eve.LeftValue, eve.Operator(), eve.RightValue()), eve.Strategy.Note, eve.MaxStep(), eve.CurrentStep, eve.Priority(), eve.Status, //start_at time.Unix(eve.EventTime, 0), //update_at time.Unix(eve.EventTime, 0), eve.Strategy.Tpl.Creator, eve.ExpressionId(), eve.StrategyId(), //template_id eve.TplId()).Exec() log.Debug(fmt.Sprintf("%v, %v", res1, err)) //insert case res2, err := insertEvent(q, eve) log.Debug(fmt.Sprintf("%v, %v", res2, err)) } else { sqltemplete := `UPDATE event_cases SET update_at = ?, max_step = ?, current_step = ?, note = ?, cond = ?, status = ?` //reopen case if event[0].ProcessStatus == "resolved" || event[0].ProcessStatus == "ignored" { sqltemplete = fmt.Sprintf("%v ,process_status = '%s', process_note = %d", sqltemplete, "unresolved", 0) } if eve.CurrentStep == 1 { sqltemplete = fmt.Sprintf("%v ,timestamp = ? WHERE id = ?", sqltemplete) //update start time of cases res1, err := q.Raw( sqltemplete, time.Unix(eve.EventTime, 0), eve.MaxStep(), eve.CurrentStep, eve.Strategy.Note, fmt.Sprintf("%v %v %v", eve.LeftValue, eve.Operator(), eve.RightValue()), eve.Status, time.Unix(eve.EventTime, 0), eve.Id).Exec() log.Debug(fmt.Sprintf("%v, %v", res1, err)) //insert case res2, err := insertEvent(q, eve) log.Debug(fmt.Sprintf("%v, %v", res2, err)) } else { sqltemplete = fmt.Sprintf("%v WHERE id = ?", sqltemplete) res1, err := q.Raw( sqltemplete, time.Unix(eve.EventTime, 0), eve.MaxStep(), eve.CurrentStep, eve.Strategy.Note, fmt.Sprintf("%v %v %v", eve.LeftValue, eve.Operator(), eve.RightValue()), eve.Status, eve.Id).Exec() log.Debug(fmt.Sprintf("%v, %v", res1, err)) //insert case res2, err := insertEvent(q, eve) log.Debug(fmt.Sprintf("%v, %v", res2, err)) } } }