github.com/astaxie/beego@v1.12.3/logs/slack.go (about)

     1  package logs
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"net/http"
     7  	"net/url"
     8  	"time"
     9  )
    10  
    11  // SLACKWriter implements beego LoggerInterface and is used to send jiaoliao webhook
    12  type SLACKWriter struct {
    13  	WebhookURL string `json:"webhookurl"`
    14  	Level      int    `json:"level"`
    15  }
    16  
    17  // newSLACKWriter create jiaoliao writer.
    18  func newSLACKWriter() Logger {
    19  	return &SLACKWriter{Level: LevelTrace}
    20  }
    21  
    22  // Init SLACKWriter with json config string
    23  func (s *SLACKWriter) Init(jsonconfig string) error {
    24  	return json.Unmarshal([]byte(jsonconfig), s)
    25  }
    26  
    27  // WriteMsg write message in smtp writer.
    28  // it will send an email with subject and only this message.
    29  func (s *SLACKWriter) WriteMsg(when time.Time, msg string, level int) error {
    30  	if level > s.Level {
    31  		return nil
    32  	}
    33  
    34  	text := fmt.Sprintf("{\"text\": \"%s %s\"}", when.Format("2006-01-02 15:04:05"), msg)
    35  
    36  	form := url.Values{}
    37  	form.Add("payload", text)
    38  
    39  	resp, err := http.PostForm(s.WebhookURL, form)
    40  	if err != nil {
    41  		return err
    42  	}
    43  	defer resp.Body.Close()
    44  	if resp.StatusCode != http.StatusOK {
    45  		return fmt.Errorf("Post webhook failed %s %d", resp.Status, resp.StatusCode)
    46  	}
    47  	return nil
    48  }
    49  
    50  // Flush implementing method. empty.
    51  func (s *SLACKWriter) Flush() {
    52  }
    53  
    54  // Destroy implementing method. empty.
    55  func (s *SLACKWriter) Destroy() {
    56  }
    57  
    58  func init() {
    59  	Register(AdapterSlack, newSLACKWriter)
    60  }