go编写zabbix企业微信媒介脚本

发布时间 2023-07-11 17:39:35作者: 厚礼蝎
package main

import (
	"bytes"
	"fmt"
	"io"
	"net/http"
	"os"
	"time"

	"github.com/bytedance/sonic"
)

var (
	subject, message, webHook, is_all, user_phone string
)

type Text struct {
	Content             string   `json:"content"`
	MentionedList       []string `json:"mentioned_list"`
	MentionedMobileList []string `json:"mentioned_mobile_list"`
}

func NewText(cont string) *Text {
	return &Text{
		Content:             cont,
		MentionedList:       []string{},
		MentionedMobileList: []string{},
	}
}

type TextMessage struct {
	MsgType string `json:"msgtype"`
	Text    *Text  `json:"text"`
}

func NewTextMessage(txt *Text) *TextMessage {
	return &TextMessage{
		MsgType: "text",
		Text:    txt,
	}
}

func main() {
	// fmt.Println(len(os.Args))
	if len(os.Args) == 6 {
		subject = os.Args[1]
		message = os.Args[2]
		webHook = os.Args[3]
		is_all = os.Args[4]
		user_phone = os.Args[5]

	} else {
		fmt.Println("参数不足")
		return
	}
	// fmt.Printf("第一个参数: %s\n", subject)
	// fmt.Printf("第二个参数: %s\n", message)
	// fmt.Printf("第三个参数: %s\n", webHook)
	// fmt.Printf("第四个参数: %s\n", is_all)
	// fmt.Printf("第五个参数: %s\n", user_phone)

	cont := subject + "\n" + message
	txt := NewText(cont)
	if is_all == "true" {
		txt.MentionedList = append(txt.MentionedList, "@all")
	} else {
		txt.MentionedMobileList = append(txt.MentionedMobileList, user_phone)
	}
	tmsg := NewTextMessage(txt)
	msg, err := sonic.Marshal(tmsg)
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	//创建请求
	request, err := http.NewRequest("POST", webHook, bytes.NewReader(msg))
	if err != nil {
		fmt.Println(err)
		return
	}
	//设置header
	request.Header.Add("Content-Type", "application/json")
	//新建客户端
	cli := http.Client{
		//设置客户端超时时长
		Timeout: 2 * time.Second,
	}
	//客户端发起请求
	resp, err := cli.Do(request)
	if err != nil {
		fmt.Println(err)
		return
	}
	defer resp.Body.Close()
	fmt.Println(resp.StatusCode)
	io.Copy(os.Stdout, resp.Body)
}