func post(rtm *slack.RTM, channel string, message Message, debug bool) { t := time.Now() ts := t.Format("Mon Jan 2 15:04:05 -0700 MST 2006") params := slack.PostMessageParameters{ Username: "******", } attachment := slack.Attachment{ Pretext: message.Subject, Text: message.Detail, } params.Attachments = []slack.Attachment{attachment} title := fmt.Sprintf("Alert *%s* with Severity %d (Magnitude: %d, Floater: %.4f)", message.Subject, message.Severity, message.Magnitude, message.Floater) channelID, timestamp, err := rtm.PostMessage(channel, title, params) if err != nil { fmt.Printf("[%s] ERROR Error received: %s\n", ts, err) return } if debug { fmt.Printf("[%s] INFO Message %+v successfully sent to channel %s at %s", ts, message, channelID, timestamp) } }
func pull(rtm *slack.RTM, o Opts) { /* Using a FIFO queue */ t := time.Now() ts := t.Format("Mon Jan 2 15:04:05 -0700 MST 2006") rc, err := cluster.NewCluster(o.redis_connection) if err != nil { fmt.Printf("[%s] ERROR Redis connection error: %s\n", ts, err) os.Exit(1) } r := rc.Cmd("SELECT", o.redis_db) for { t = time.Now() ts = t.Format("Mon Jan 2 15:04:05 -0700 MST 2006") r = rc.Cmd("RPOP", o.redis_list) switch r.Type { case redis.ErrorReply: fmt.Printf("[%s] ERROR ErrorReply received: %s\n", ts, r.Err.Error()) case redis.NilReply: if o.debug { fmt.Printf("[%s] INFO NilReply reply received\n", ts) } case redis.StatusReply: if o.debug { fmt.Printf("[%s] INFO StatusReply reply received: not processing\n", ts) } case redis.BulkReply: // Send to Slack data, err := r.Bytes() if err != nil { fmt.Printf("[%s] ERROR Error received: %s\n", ts, err) } else { if o.json { type Message struct { Name string Source string Detail string } var message Message err := json.Unmarshal(data, &message) if err != nil { fmt.Printf("[%s] ERROR Error received: %s\n", ts, err) } params := slack.PostMessageParameters{ Username: "******", } attachment := slack.Attachment{ Pretext: message.Source, Text: message.Detail, } params.Attachments = []slack.Attachment{attachment} channelID, timestamp, err := rtm.PostMessage(o.slack_channel, string(message.Name), params) if err != nil { fmt.Printf("[%s] ERROR Error received: %s\n", ts, err) return } if o.debug { fmt.Printf("[%s] INFO Message %+v successfully sent to channel %s at %s", ts, message, channelID, timestamp) } } else { if o.debug { fmt.Printf("[%s] INFO BulkReply reply received: %s\n", ts, data) } rtm.SendMessage(rtm.NewOutgoingMessage(string(data), o.slack_channel)) } } case redis.MultiReply: if o.debug { fmt.Printf("[%s] INFO MultiReply reply received: not processing\n", ts) } case redis.IntegerReply: if o.debug { fmt.Printf("[%s] INFO IntegerReply reply received: not processing\n", ts) } default: if o.debug { fmt.Printf("[%s] INFO Unknown reply received: not processing\n", ts) } } time.Sleep(time.Duration(o.watch_interval) * time.Millisecond) } }