TWSNMP FC: ログ関連のページ完成
夜中に何度か猫にに起こされました。4時近くになったので自発的に起きると猫はかみさんの布団に潜って寝てしまいました。
昨日の朝作ったNetFlowのページを夜試してみました。どうもNetFlowのデータを送るプログラムを起動していないことに気づきました。しばらくWindowsマシンを操作していなかったのでアップデートのため再起動された時にいろいろなプログラムが停止していました。必要なプロログラムを起動すると、NetFlowの画面も表示できました。
のような感じです。
ログ表示のページを全て作ってみるとGO言語のサーバー側で同じようなソースコードが沢山でてきました。これは関数にまとめたほうがよいと思って整理しました。
var logLevelMap = map[string]*regexp.Regexp{
"high": regexp.MustCompile("high"),
"low": regexp.MustCompile("(high|low)"),
"warn": regexp.MustCompile("(high|low|warn)"),
}
func makeTimeFilter(sd, st string, oh int) int64 {
var t time.Time
var err error
if t, err = time.Parse("2006-01-02T15:04 MST", fmt.Sprintf("%sT%s JST", sd, st)); err != nil {
log.Printf("makeTimeFilter err=%v", err)
t = time.Now().Add(-time.Hour * time.Duration(oh))
}
return t.UnixNano()
}
func makeStringFilter(f string) *regexp.Regexp {
if f == "" {
return nil
}
r, err := regexp.Compile(f)
if err != nil {
log.Printf("makeStringFilter err=%v", err)
return nil
}
return r
}
func getLogLevelFilter(f string) *regexp.Regexp {
return logLevelMap[f]
}
という関数にまとめることで、
var srcFilter *regexp.Regexp
if filter.Src != "" {
if srcFilter, err = regexp.Compile(filter.Src); err != nil {
log.Printf("postSyslog err=%v", err)
return echo.ErrBadRequest
}
}
var dstFilter *regexp.Regexp
if filter.Dst != "" {
if dstFilter, err = regexp.Compile(filter.Dst); err != nil {
log.Printf("postSyslog err=%v", err)
return echo.ErrBadRequest
}
}
var protocolFilter *regexp.Regexp
if filter.Protocol != "" {
if protocolFilter, err = regexp.Compile(filter.Protocol); err != nil {
log.Printf("postSyslog err=%v", err)
return echo.ErrBadRequest
}
}
st := time.Now().Add(-time.Hour * 24).UnixNano()
if t, err := time.Parse("2006-01-02T15:04 MST", fmt.Sprintf("%sT%s JST", filter.StartDate, filter.StartTime)); err == nil {
st = t.UnixNano()
}
et := time.Now().UnixNano()
if t, err := time.Parse("2006-01-02T15:04 MST", fmt.Sprintf("%sT%s JST", filter.EndDate, filter.EndTime)); err == nil {
et = t.UnixNano()
}
のように書いていた処理を、
srcFilter := makeStringFilter(filter.Src)
dstFilter := makeStringFilter(filter.Dst)
protocolFilter := makeStringFilter(filter.Protocol)
st := makeTimeFilter(filter.StartDate, filter.EndDate, 3)
et := makeTimeFilter(filter.EndDate, filter.EndTime, 0)
のように整理できました。これは気持ちよいです。
昨日と今日の開発は
です。明日に続く。
いいなと思ったら応援しよう!
開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。
ソフトウェアのマニュアルをnoteの記事で提供しています。
サポートによりnoteの運営にも貢献できるのでよろしくお願います。