func (a *Alert) Send(b []Alerter) {
	a.Log()
	for i := range b {
		go func(c Alerter) {
			err := c.Alert(a)
			if err != nil {
				log.Println(err)
			}
		}(b[i])
	}
}
Send is for sending out alerts to syslog and to alerts that are active in conf
package cmd
import (
	"fmt"
	"log"
	"strings"
	"github.com/pkg/errors"
)
type Evaluator interface {
	Send(a []Alerter)
	Evaluate()
}
type Alert struct {
	Messages         []error
	SubjectAddendums []string
}
func (a *Alert) ShouldSend() bool {
	return len(a.Messages) > 0
}
func (a *Alert) Evaluate() {
	if a.ShouldSend() {
		a.Send(Config.Alerters)
	}
}
func (a *Alert) Len() int {
	return len(a.Messages)
}
func (a *Alert) Add(e1, e2 error, s, subAddendum string) {
	a.SubjectAddendums = append(a.SubjectAddendums, subAddendum)
	e := e1
	if e2 != nil {
		e = errors.Wrap(e1, e2.Error())
	}
	err := errors.Wrap(e, s)
	a.Messages = append(a.Messages, err)
}
func (a *Alert) Concat(b ...*Alert) {
	for _, v := range b {
		for _, msg := range v.Messages {
			a.Messages = append(a.Messages, msg)
		}
		for _, addendum := range v.SubjectAddendums {
			a.SubjectAddendums = append(a.SubjectAddendums, addendum)
		}
	}
}
func (a *Alert) Log() {
	log.Println("ALERT:")
	for _, msg := range a.Messages {
		log.Println(msg)
	}
}
func (a *Alert) Clear() {
	a.Messages = []error{}
	a.SubjectAddendums = []string{}
}
func (a *Alert) Dump() string {
	s := ""
	for _, v := range a.Messages {
		s += fmt.Sprintf("%s\n\n", v.Error())
	}
	return s
}
func (a *Alert) DumpEmail() (s string) {
	for _, e := range a.Messages {
		errString := e.Error()
		splitErr := strings.SplitN(errString, ":", 3)
		for _, v := range splitErr {
			s += fmt.Sprintf("%s\n\t", v)
		}
		s += fmt.Sprintf("\n\n")
	}
	return s
}