388 lines
9.9 KiB
Go
388 lines
9.9 KiB
Go
package common
|
||
|
||
import (
|
||
"backend/Type"
|
||
"bytes"
|
||
"encoding/json"
|
||
"fmt"
|
||
"net/http"
|
||
"time"
|
||
)
|
||
|
||
func SendFeishuMsg(msg string) error {
|
||
// 创建请求体
|
||
payload := map[string]interface{}{
|
||
"msg_type": "text",
|
||
"content": map[string]string{
|
||
"text": msg,
|
||
},
|
||
}
|
||
payloadBytes, err := json.Marshal(payload)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
// 创建HTTP请求
|
||
req, err := http.NewRequest("POST", GetFeishuUrl(), bytes.NewBuffer(payloadBytes))
|
||
if err != nil {
|
||
return err
|
||
}
|
||
req.Header.Set("Content-Type", "application/json")
|
||
|
||
// 发送请求
|
||
client := &http.Client{}
|
||
resp, err := client.Do(req)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
defer resp.Body.Close()
|
||
|
||
// 检查响应状态码
|
||
if resp.StatusCode != http.StatusOK {
|
||
return fmt.Errorf("failed to send message, status code: %d", resp.StatusCode)
|
||
}
|
||
|
||
return nil
|
||
}
|
||
|
||
func SendNoticeMsg(AppName, ServerName, notice string) error {
|
||
str := fmt.Sprintf(`
|
||
## **端口扫描异常**
|
||
|
||
- 项目名称: %s
|
||
- 服务器名称: %s
|
||
- 异常信息: %s
|
||
|
||
<at id="all"></at>
|
||
`, AppName, ServerName, notice)
|
||
// 创建请求体
|
||
payload := map[string]interface{}{
|
||
"msg_type": "interactive",
|
||
"card": map[string]interface{}{
|
||
"type": "template",
|
||
"data": map[string]interface{}{
|
||
"template_id": "AAqBcOkbPmfUZ",
|
||
"template_version_name": "1.0.3",
|
||
"template_variable": map[string]interface{}{
|
||
"appName": AppName,
|
||
"msg": str,
|
||
},
|
||
},
|
||
},
|
||
}
|
||
payloadBytes, err := json.Marshal(payload)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
// 创建HTTP请求
|
||
req, err := http.NewRequest("POST", GetNoticeUrl(), bytes.NewBuffer(payloadBytes))
|
||
if err != nil {
|
||
return err
|
||
}
|
||
req.Header.Set("Content-Type", "application/json")
|
||
|
||
// 发送请求
|
||
client := &http.Client{}
|
||
resp, err := client.Do(req)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
defer resp.Body.Close()
|
||
|
||
// 检查响应状态码
|
||
if resp.StatusCode != http.StatusOK {
|
||
return fmt.Errorf("failed to send message, status code: %d", resp.StatusCode)
|
||
}
|
||
|
||
return nil
|
||
}
|
||
|
||
// table_raw_array_1
|
||
func SendOperationMsg(data *Type.Operation) error {
|
||
// retainStr := ""
|
||
// for _, v := range data.Retain {
|
||
// retainStr += fmt.Sprintf("| %s | %d | %d | %.2f | %.2f%% | %.2f%% | %.2f%% | %.2f%% |\n", v.Date, v.Register, v.Login, v.Recharge, 100*float64(v.SecondRemain)/float64(v.Register), 100*float64(v.ThirdRemain)/float64(v.Register), 100*float64(v.SeventhRemain)/float64(v.Register), 100*float64(v.ThirtiethRemain)/float64(v.Register))
|
||
// }
|
||
RetainData := make([]map[string]interface{}, 0)
|
||
for _, v := range data.Retain {
|
||
var retain2, retain3, retain7 string
|
||
if v.Register == 0 {
|
||
retain2 = "0.00%"
|
||
retain3 = "0.00%"
|
||
retain7 = "0.00%"
|
||
} else {
|
||
retain2 = fmt.Sprintf("%.2f%%", 100*float64(v.SecondRemain)/float64(v.Register))
|
||
retain3 = fmt.Sprintf("%.2f%%", 100*float64(v.ThirdRemain)/float64(v.Register))
|
||
retain7 = fmt.Sprintf("%.2f%%", 100*float64(v.SeventhRemain)/float64(v.Register))
|
||
}
|
||
RetainData = append(RetainData, map[string]interface{}{
|
||
"Date": v.Date,
|
||
"Reg": v.Register,
|
||
"Login": v.Login,
|
||
"Pay": v.Recharge,
|
||
"Retain2": retain2,
|
||
"Retain3": retain3,
|
||
"Retain7": retain7,
|
||
// "Retain14": fmt.Sprintf("%.2f%%", 100*float64(v.ThirtiethRemain)/float64(v.Register)),
|
||
})
|
||
}
|
||
var c1, c2 string
|
||
if data.Retain[0].PerOnlineTime > data.Retain[1].PerOnlineTime {
|
||
c1 = FONT_COLOR_UP
|
||
} else {
|
||
c1 = FONT_COLOR_DOWN
|
||
}
|
||
if data.Retain[0].PerOrderNum > data.Retain[1].PerOrderNum {
|
||
c2 = FONT_COLOR_UP
|
||
} else {
|
||
c2 = FONT_COLOR_DOWN
|
||
}
|
||
str := fmt.Sprintf(`
|
||
# 日期 %s
|
||
-----------------------------
|
||
## 总体数据
|
||
|
||
- **注册**:%d
|
||
- **充值**:%.2f
|
||
- **流失率**:%.2f%%
|
||
> 超过7天未登录视为流失
|
||
|
||
## 昨日数据
|
||
|
||
- **注册**:%d
|
||
- **充值**:%.2f
|
||
- **登录**:%d
|
||
- **平均在线时长**:<font color="%s">%.2f</font>分钟
|
||
- **平均完成订单数**:<font color="%s">%.2f</font>
|
||
----------------------
|
||
|
||
## 留存数据
|
||
|
||
`, time.Now().In(time.UTC).Format("2006-01-02"),
|
||
data.Register, data.Recharge, data.ChurnRate, data.Retain[0].Register, data.Retain[0].Recharge, data.Retain[0].Login,
|
||
c1, data.Retain[0].PerOnlineTime, c2, data.Retain[0].PerOrderNum)
|
||
// 创建请求体
|
||
payload := map[string]interface{}{
|
||
"msg_type": "interactive",
|
||
"card": map[string]interface{}{
|
||
"type": "template",
|
||
"data": map[string]interface{}{
|
||
"template_id": "AAqBcfmUwQya1",
|
||
"template_version_name": "1.0.8",
|
||
"template_variable": map[string]interface{}{
|
||
"msg": str,
|
||
"appName": "merge_pet_london",
|
||
"table_raw_array_1": RetainData,
|
||
},
|
||
},
|
||
},
|
||
}
|
||
payloadBytes, err := json.Marshal(payload)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
// 创建HTTP请求
|
||
req, err := http.NewRequest("POST", GetOperationUrl(), bytes.NewBuffer(payloadBytes))
|
||
if err != nil {
|
||
return err
|
||
}
|
||
req.Header.Set("Content-Type", "application/json")
|
||
|
||
// 发送请求
|
||
client := &http.Client{}
|
||
resp, err := client.Do(req)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
defer resp.Body.Close()
|
||
|
||
// 检查响应状态码
|
||
if resp.StatusCode != http.StatusOK {
|
||
return fmt.Errorf("failed to send message, status code: %d", resp.StatusCode)
|
||
}
|
||
|
||
return nil
|
||
}
|
||
|
||
func SendUpdateCard() error {
|
||
payload := map[string]interface{}{
|
||
"msg_type": "interactive",
|
||
"card": map[string]interface{}{
|
||
"type": "template",
|
||
"data": map[string]interface{}{
|
||
"template_id": "AAqBmWrjPeHVp",
|
||
"template_version_name": "1.0.3",
|
||
// "template_variable": map[string]interface{}{},
|
||
},
|
||
},
|
||
}
|
||
payloadBytes, err := json.Marshal(payload)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
// 创建HTTP请求
|
||
req, err := http.NewRequest("POST", GetOperationUrl(), bytes.NewBuffer(payloadBytes))
|
||
if err != nil {
|
||
return err
|
||
}
|
||
req.Header.Set("Content-Type", "application/json")
|
||
|
||
// 发送请求
|
||
client := &http.Client{}
|
||
resp, err := client.Do(req)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
defer resp.Body.Close()
|
||
|
||
// 检查响应状态码
|
||
if resp.StatusCode != http.StatusOK {
|
||
return fmt.Errorf("failed to send message, status code: %d", resp.StatusCode)
|
||
}
|
||
|
||
return nil
|
||
}
|
||
|
||
func SendServerInfoCard(data *Type.ServerInfo) error {
|
||
table := make([]map[string]interface{}, 0)
|
||
for _, v := range data.ServerList {
|
||
table = append(table, map[string]interface{}{
|
||
"AppId": data.AppName,
|
||
"server": v.ServerName,
|
||
"status": v.Status,
|
||
"Mem": v.Mem,
|
||
"playerNum": v.PlayerNum,
|
||
})
|
||
}
|
||
payload := map[string]interface{}{
|
||
"msg_type": "interactive",
|
||
"card": map[string]interface{}{
|
||
"type": "template",
|
||
"data": map[string]interface{}{
|
||
"template_id": "AAqBmWrjPeHVp",
|
||
"template_version_name": "1.0.7",
|
||
"template_variable": map[string]interface{}{
|
||
"AppId": data.AppName,
|
||
"Mem": data.Mem,
|
||
"Cpu": data.Cpu,
|
||
"table_raw_array_1": table,
|
||
},
|
||
},
|
||
},
|
||
}
|
||
payloadBytes, err := json.Marshal(payload)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
// 创建HTTP请求
|
||
req, err := http.NewRequest("POST", GetFeishuUrl(), bytes.NewBuffer(payloadBytes))
|
||
if err != nil {
|
||
return err
|
||
}
|
||
req.Header.Set("Content-Type", "application/json")
|
||
|
||
// 发送请求
|
||
client := &http.Client{}
|
||
resp, err := client.Do(req)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
defer resp.Body.Close()
|
||
|
||
// 检查响应状态码
|
||
if resp.StatusCode != http.StatusOK {
|
||
return fmt.Errorf("failed to send message, status code: %d", resp.StatusCode)
|
||
}
|
||
|
||
return nil
|
||
}
|
||
|
||
// table_raw_array_1
|
||
func SendWeekOperationMsg(data *Type.Operation) error {
|
||
// retainStr := ""
|
||
// for _, v := range data.Retain {
|
||
// retainStr += fmt.Sprintf("| %s | %d | %d | %.2f | %.2f%% | %.2f%% | %.2f%% | %.2f%% |\n", v.Date, v.Register, v.Login, v.Recharge, 100*float64(v.SecondRemain)/float64(v.Register), 100*float64(v.ThirdRemain)/float64(v.Register), 100*float64(v.SeventhRemain)/float64(v.Register), 100*float64(v.ThirtiethRemain)/float64(v.Register))
|
||
// }
|
||
RetainData := make([]map[string]interface{}, 0)
|
||
for _, v := range data.Retain {
|
||
RetainData = append(RetainData, map[string]interface{}{
|
||
"Date": v.Date,
|
||
"Reg": v.Register,
|
||
"Login": v.Login,
|
||
"Pay": v.Recharge,
|
||
"Retain2": fmt.Sprintf("%.2f%%", 100*float64(v.SecondRemain)/float64(v.Register)),
|
||
"Retain3": fmt.Sprintf("%.2f%%", 100*float64(v.ThirdRemain)/float64(v.Register)),
|
||
"Retain7": fmt.Sprintf("%.2f%%", 100*float64(v.SeventhRemain)/float64(v.Register)),
|
||
// "Retain14": fmt.Sprintf("%.2f%%", 100*float64(v.ThirtiethRemain)/float64(v.Register)),
|
||
})
|
||
}
|
||
str := fmt.Sprintf(`
|
||
# 日期 %s
|
||
-----------------------------
|
||
## 总体数据
|
||
|
||
- **注册**:%d
|
||
- **充值**:%.2f
|
||
- **流失率**:%.2f%%
|
||
> 超过7天未登录视为流失
|
||
|
||
## 昨日数据
|
||
|
||
- **注册**:%d
|
||
- **充值**:%.2f
|
||
- **登录**:%d
|
||
- **平均在线时长**:%.2f分钟
|
||
- **平均完成订单数**:%.2f
|
||
----------------------
|
||
|
||
## 留存数据
|
||
|
||
`, time.Now().In(time.UTC).Format("2006-01-02"), data.Register, data.Recharge, data.ChurnRate, data.Retain[0].Register, data.Retain[0].Recharge, data.Retain[0].Login, data.Retain[0].PerOnlineTime, data.Retain[0].PerOrderNum)
|
||
// 创建请求体
|
||
payload := map[string]interface{}{
|
||
"msg_type": "interactive",
|
||
"card": map[string]interface{}{
|
||
"type": "template",
|
||
"data": map[string]interface{}{
|
||
"template_id": "AAqBcfmUwQya1",
|
||
"template_version_name": "1.0.5",
|
||
"template_variable": map[string]interface{}{
|
||
"msg": str,
|
||
"appName": "merge_pet_london",
|
||
"table_raw_array_1": RetainData,
|
||
},
|
||
},
|
||
},
|
||
}
|
||
payloadBytes, err := json.Marshal(payload)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
// 创建HTTP请求
|
||
req, err := http.NewRequest("POST", GetOperationUrl(), bytes.NewBuffer(payloadBytes))
|
||
if err != nil {
|
||
return err
|
||
}
|
||
req.Header.Set("Content-Type", "application/json")
|
||
|
||
// 发送请求
|
||
client := &http.Client{}
|
||
resp, err := client.Do(req)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
defer resp.Body.Close()
|
||
|
||
// 检查响应状态码
|
||
if resp.StatusCode != http.StatusOK {
|
||
return fmt.Errorf("failed to send message, status code: %d", resp.StatusCode)
|
||
}
|
||
|
||
return nil
|
||
}
|