monitoring-forgeのMackerel pluginで広く利用している go-flags の共通処理をまとめたライブラリです。
flagrun は、Mackerel plugin のエントリーポイントで繰り返し書くような以下の処理を1つの Go 関数にまとめたものです。
- ヘルプ表示(
--help/-h) - バージョン表示(
--version/-v) - 引数が必要かどうかの判定
- エラー時の終了コード返却(UNKNOWN)
また、用途に応じて以下の3種類のインターフェースを提供します。
Runner[T]— 汎用的な(メッセージ, 終了コード)を返す形式Checker— mackerelio/checkers の*checkers.Checkerを返す形式Shipper— 何も返さず、副作用でメトリクスなどを送信する形式
go get github.com/monitoring-forge/flagrunRunner[T] インターフェースを実装した構造体を flagrun.Go に渡します。
Run メソッドの戻り値は (メッセージ, 終了コード) です。終了コードが OK の場合、メッセージは標準出力へ出力されます。OK 以外の場合は標準エラー出力へ出力されます。終了コードは os.Exit に渡されます。
package main
import (
"github.com/monitoring-forge/flagrun"
)
type Opt struct {
Host string `short:"H" long:"host" default:"localhost" description:"Target host"`
Port int `short:"p" long:"port" default:"8080" description:"Target port"`
Version bool `short:"v" long:"version" description:"Show version"`
}
func (p *Opt) Run(args []string) (string, int) {
// Mackerel plugin のメイン処理を実装
return "ok\t1", flagrun.OK
}
func main() {
opt := &Opt{}
os.Exit(flagrun.Go(
opt,
flagrun.Version(version),
))
}Checker インターフェースを実装した構造体を flagrun.Check に渡します。
Run メソッドの戻り値は *checkers.Checker です。Checker.String() の結果を標準出力へ出力し、Checker.Status を終了コードとして返します。
package main
import (
"github.com/mackerelio/checkers"
"github.com/monitoring-forge/flagrun"
)
type Opt struct {
Host string `short:"H" long:"host" default:"localhost" description:"Target host"`
Version bool `short:"v" long:"version" description:"Show version"`
}
func (p *Opt) Run(args []string) *checkers.Checker {
return checkers.Ok("service is reachable")
}
func main() {
opt := &Opt{}
os.Exit(flagrun.Check(
opt,
flagrun.Version(version),
))
}Shipper インターフェースを実装した構造体を flagrun.Ship に渡します。
Run メソッドは戻り値を持ちません。メトリクスの送信など、副作用だけを行いたい場合に使います。終了コードは常に OK を返します。
package main
import (
"github.com/monitoring-forge/flagrun"
)
type Opt struct {
Host string `short:"H" long:"host" default:"localhost" description:"Target host"`
Version bool `short:"v" long:"version" description:"Show version"`
}
func (p *Opt) Run(args []string) {
// 副作用でメトリクスを送信
}
func main() {
opt := &Opt{}
os.Exit(flagrun.Ship(
opt,
flagrun.Version(version),
))
}| flagrun.Go / flagrun.Check / flagrun.Ship では、以下の関数を使って動作をカスタマイズできます。
| 関数 | 説明 |
|---|---|
flagrun.Version(version string) |
バージョン表示に使用する文字列を指定します。 |
flagrun.Commit(commit string) |
コミットハッシュなどを指定します(デフォルト: dev)。 |
flagrun.ArgsRequired() |
コマンドライン引数を必須にします。引数がない場合は UNKNOWN で終了します。 |
flagrun.AlwaysStdout() |
Run の戻り値を、終了コードに関係なく標準出力へ出力します。flagrun.Check では常に標準出力へ出力されるため、このオプションは不要です。 |
| 定数 | 値 | 説明 |
|---|---|---|
flagrun.OK |
0 |
正常終了 |
flagrun.WARNING |
1 |
警告 |
flagrun.CRITICAL |
2 |
致命的エラー |
flagrun.UNKNOWN |
3 |
不明なエラー(パースエラー、引数不足など) |
LICENSE を参照してください。