mirror of
https://github.com/axllent/mailpit.git
synced 2025-01-08 00:39:22 +02:00
77 lines
2.0 KiB
Go
77 lines
2.0 KiB
Go
package cmd
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"fmt"
|
|
"net/http"
|
|
"os"
|
|
"path"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/axllent/mailpit/config"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var (
|
|
useHTTPS bool
|
|
)
|
|
|
|
// readyzCmd represents the healthcheck command
|
|
var readyzCmd = &cobra.Command{
|
|
Use: "readyz",
|
|
Short: "Run a healthcheck to test if Mailpit is running",
|
|
Long: `This command connects to the /readyz endpoint of a running Mailpit server
|
|
and exits with a status of 0 if the connection is successful, else with a
|
|
status 1 if unhealthy.
|
|
|
|
If running within Docker, it should automatically detect environment
|
|
settings to determine the HTTP bind interface & port.
|
|
`,
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
webroot := strings.TrimRight(path.Join("/", config.Webroot, "/"), "/") + "/"
|
|
proto := "http"
|
|
if useHTTPS {
|
|
proto = "https"
|
|
}
|
|
|
|
uri := fmt.Sprintf("%s://%s%sreadyz", proto, config.HTTPListen, webroot)
|
|
|
|
conf := &http.Transport{
|
|
IdleConnTimeout: time.Second * 5,
|
|
ExpectContinueTimeout: time.Second * 5,
|
|
TLSHandshakeTimeout: time.Second * 5,
|
|
// do not verify TLS in case this instance is using HTTPS
|
|
TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, // #nosec
|
|
}
|
|
client := &http.Client{Transport: conf}
|
|
|
|
res, err := client.Get(uri)
|
|
if err != nil || res.StatusCode != 200 {
|
|
os.Exit(1)
|
|
}
|
|
},
|
|
}
|
|
|
|
func init() {
|
|
rootCmd.AddCommand(readyzCmd)
|
|
|
|
if len(os.Getenv("MP_UI_BIND_ADDR")) > 0 {
|
|
config.HTTPListen = os.Getenv("MP_UI_BIND_ADDR")
|
|
}
|
|
|
|
if len(os.Getenv("MP_WEBROOT")) > 0 {
|
|
config.Webroot = os.Getenv("MP_WEBROOT")
|
|
}
|
|
|
|
config.UITLSCert = os.Getenv("MP_UI_TLS_CERT")
|
|
|
|
if config.UITLSCert != "" {
|
|
useHTTPS = true
|
|
}
|
|
|
|
readyzCmd.Flags().StringVarP(&config.HTTPListen, "listen", "l", config.HTTPListen, "Set the HTTP bind interface & port")
|
|
readyzCmd.Flags().StringVar(&config.Webroot, "webroot", config.Webroot, "Set the webroot for web UI & API")
|
|
readyzCmd.Flags().BoolVar(&useHTTPS, "https", useHTTPS, "Connect via HTTPS (ignores HTTPS validation)")
|
|
}
|