利用 Golang 和 Line Notify 进行 API 证书过期检查 #golang
使用golang进行API的存活监视和证书到期检查,并使用Line Notify通知结果。使用Let’s Encrypt进行证书颁发,但有效期为3个月即过期。
由于Go语言有可能在公司的新产品上使用,我决定试着使用一下。
前期准备
-
- Golang の開発環境の構築(以下のサイト参考にした)
Golang 本家サイト
Intellij golang IDE
Line Notify 準備
コマンドラインから LINE にメッセージを送れる LINE Notify
规格
修改参数以使其能够设置要检查的端点 URI 和用于 Line Notify 的令牌。
$ apichecker -endpoint=${エンドポイントURI} -token=${Line Notify 用 Token}
源代码
$ go version
go version go1.9 darwin/amd64
package main
import (
"fmt"
"net/http"
"flag"
"log"
"net/url"
"strings"
"io/ioutil"
)
func main() {
var endpoint = flag.String("endpoint", "", "check target Endpoint URL")
var lineToken = flag.String("token", "", "LINE notify token")
flag.Parse()
var apiResult = getAPI(*endpoint)
var result = postLINE(*lineToken, apiResult)
fmt.Printf("LINE Post result [%t]\n", result)
}
func getAPI(endpoint string) string {
if endpoint == "" {
log.Fatal("not endpoint")
return "not endpoint"
}
var result = ""
resp, err := http.Get(endpoint)
if err != nil {
result = fmt.Sprintf("NG [%s]", err)
} else {
defer resp.Body.Close()
result = fmt.Sprintf("OK [%s]", endpoint)
}
return result
}
func postLINE(token string, message string) bool {
if token == "" {
log.Fatal("not token")
return false
} else if message == "" {
log.Fatal("not text")
return false
}
data := url.Values{"message": {message}}
r, _ := http.NewRequest("POST", "https://notify-api.line.me/api/notify", strings.NewReader(data.Encode()))
r.Header.Set("Content-Type", "application/x-www-form-urlencoded")
r.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token))
resp, err := http.DefaultClient.Do(r)
if err != nil {
log.Fatal(err)
return false
}
defer resp.Body.Close()
_, err = ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
return false
}
return true
}
我参考了 “通过 Go 发送 LINE Notify” 的资料。
执行结果
如果一切正常
$ go run apichecker.go -endpoint=https://www.yahoo.co.jp -token=${Line Notify 用 Token}
LINE Post result [true]

在 NG 的情况下(证书错误)
$ go run apichecker.go -endpoint=https://www.yahoo.jp -token=${Line Notify 用 Token}
LINE Post result [true]

Appendix
- ソースコード