Skip to content

Commit e9ac419

Browse files
committed
Add mail
1 parent afa2498 commit e9ac419

12 files changed

+1008
-0
lines changed

client/health.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package client
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"io"
7+
"io/ioutil"
8+
"net"
9+
"net/http"
10+
"time"
11+
)
12+
13+
type HealthChecker struct {
14+
name string
15+
url string
16+
timeout time.Duration
17+
}
18+
19+
func NewHealthChecker(name, url string, options ...time.Duration) *HealthChecker {
20+
if len(options) >= 1 && options[0] > 0 {
21+
return &HealthChecker{name, url, options[0]}
22+
} else {
23+
return &HealthChecker{name, url, 4 * time.Second}
24+
}
25+
}
26+
27+
func (s *HealthChecker) Name() string {
28+
return s.name
29+
}
30+
31+
func (s *HealthChecker) Check(ctx context.Context) (map[string]interface{}, error) {
32+
res := make(map[string]interface{})
33+
client := http.Client{
34+
Timeout: s.timeout,
35+
// never follow redirects
36+
CheckRedirect: func(*http.Request, []*http.Request) error {
37+
return http.ErrUseLastResponse
38+
},
39+
}
40+
resp, err := client.Get(s.url)
41+
if e, ok := err.(net.Error); ok && e.Timeout() {
42+
return res, fmt.Errorf("time out: %w", e)
43+
} else if err != nil {
44+
return res, err
45+
}
46+
_, _ = io.Copy(ioutil.Discard, resp.Body)
47+
_ = resp.Body.Close()
48+
if resp.StatusCode >= 500 {
49+
return res, fmt.Errorf("status code is: %d", resp.StatusCode)
50+
}
51+
return res, nil
52+
}
53+
54+
func (s *HealthChecker) Build(ctx context.Context, data map[string]interface{}, err error) map[string]interface{} {
55+
if err == nil {
56+
return data
57+
}
58+
if data == nil {
59+
data = make(map[string]interface{}, 0)
60+
}
61+
data["error"] = err.Error()
62+
return data
63+
}

mail/default_simple_mail_sender.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package mail
2+
3+
type DefaultSimpleMailSender struct {
4+
MailSender MailSender
5+
}
6+
7+
func NewSimpleMailSender(mailService MailSender) *DefaultSimpleMailSender {
8+
return &DefaultSimpleMailSender{MailSender: mailService}
9+
}
10+
11+
func (s *DefaultSimpleMailSender) Send(m SimpleMail) error {
12+
var contents = make([]Content, len(m.Content))
13+
for i, content := range m.Content {
14+
contents[i] = content
15+
}
16+
mail := NewMailInit(m.From, m.Subject, m.To, m.Cc, contents...)
17+
return s.MailSender.Send(*mail)
18+
}
19+
20+
func NewSimpleHtmlMail(mailFrom Email, subject string, mailTo []Email, cc *[]Email, htmlContent string) *SimpleMail {
21+
html := NewContent("text/html", htmlContent)
22+
s := SimpleMail{
23+
From: mailFrom,
24+
To: mailTo,
25+
Cc: cc,
26+
Subject: subject,
27+
Content: []Content{*html},
28+
}
29+
return &s
30+
}

mail/default_template_loader.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package mail
2+
3+
import "context"
4+
5+
type DefaultTemplateLoader struct {
6+
Subject string
7+
Body string
8+
}
9+
10+
func NewTemplateLoader(subject string, body string) *DefaultTemplateLoader {
11+
return &DefaultTemplateLoader{subject, body}
12+
}
13+
14+
func NewTemplateLoaderByConfig(c TemplateConfig) *DefaultTemplateLoader {
15+
return &DefaultTemplateLoader{c.Subject, c.Body}
16+
}
17+
18+
func (s *DefaultTemplateLoader) Load(ctx context.Context, id string) (string, string, error) {
19+
return s.Subject, s.Body, nil
20+
}

0 commit comments

Comments
 (0)