fileboy/notifer.go

81 lines
1.6 KiB
Go
Raw Normal View History

2019-01-02 11:07:52 +00:00
package main
import (
"bytes"
"encoding/json"
"log"
"net/http"
"strings"
2019-01-03 01:54:25 +00:00
"time"
2019-01-02 11:07:52 +00:00
)
type postParams struct {
ProjectFolder string `json:"project_folder"`
File string `json:"file"`
Changed int64 `json:"changed"`
Ext string `json:"ext"`
2019-12-04 03:50:11 +00:00
Event string `json:"event"`
2019-01-02 11:07:52 +00:00
}
type NetNotifier struct {
CallUrl string
CanPost bool
}
func newNetNotifier(callUrl string) *NetNotifier {
callPost := true
if strings.TrimSpace(callUrl) == "" {
callPost = false
}
return &NetNotifier{
CallUrl: callUrl,
CanPost: callPost,
}
}
2019-01-03 01:56:26 +00:00
func (n *NetNotifier) Put(cf *changedFile) {
2019-01-02 11:07:52 +00:00
if !n.CanPost {
2019-01-19 09:10:07 +00:00
log.Println(PreWarn, "notifier call url ignore. ", n.CallUrl)
2019-01-02 11:07:52 +00:00
return
}
n.dispatch(&postParams{
ProjectFolder: projectFolder,
File: cf.Name,
Changed: cf.Changed,
Ext: cf.Ext,
2019-12-04 03:50:11 +00:00
Event: cf.Event,
2019-01-02 11:07:52 +00:00
})
}
func (n *NetNotifier) dispatch(params *postParams) {
b, err := json.Marshal(params)
if err != nil {
2019-01-19 09:10:07 +00:00
log.Println(PreError, "json.Marshal n.params. ", err)
2019-01-02 11:07:52 +00:00
return
}
2019-01-03 01:54:25 +00:00
client := &http.Client{
Timeout: time.Second * 15,
}
2019-01-02 11:07:52 +00:00
req, err := http.NewRequest("POST", n.CallUrl, bytes.NewBuffer(b))
if err != nil {
2019-01-19 09:10:07 +00:00
log.Println(PreError, "http.NewRequest. ", err)
2019-01-02 11:07:52 +00:00
return
}
req.Header.Set("Content-Type", "application/json;charset=UTF-8")
2019-12-17 08:38:14 +00:00
req.Header.Set("User-Agent", "FileBoy Net Notifier v1.12")
2019-01-02 11:07:52 +00:00
resp, err := client.Do(req)
if err != nil {
2019-01-19 09:10:07 +00:00
log.Println(PreError, "notifier call failed. err:", err)
return
}
defer func() {
if resp != nil && resp.Body != nil {
_ = resp.Body.Close()
}
}()
2019-01-02 11:07:52 +00:00
if resp.StatusCode >= 300 {
// todo retry???
}
log.Println("notifier done .")
}