go 프로그램에서 실시간 통계를 기록하고 싶을때
By SeukWon Kang
goguelike의 webinfo 페이지를 보면
Stat total:4660/ 3.0/s lap:1/ 39.4/s
같은식의 실시간 통계를 볼수 있습니다. 이런식으로 어떤 행동의 총 횟수, 초당 일어난 시간(즉 평균) , 최근 횟수, 마지막 초당 횟수 등을 조사 기록하려면 꽤나 귀찮은 프로그래밍이 필요합니다.
그래서 제가 만들어 쓰는 것는 actionstat 패키지입니다.
사용 예는 https://github.com/kasworld/netspeed 의 서버 코드를 보면 됩니다만.. 간단히 적어보면
// init obj
stat := actionstat.NewActionStat()
// see stat
log.Info("%v", stat)
stat.UpdateLap()
// update info
stat.Inc()
같은 형태가 됩니다. 기록할 동작당 하나씩 actionstat object를 만들어 주고 적당한 주기마다 updatelap을 불러주고 추적할 행동이 일어날때마다 inc() 를 불러주면 됩니다.
stopwatch 처럼 여러개의 랩을 기록하고 싶다면 updatelap이 아니고 newlap을 사용하면 됩니다만 이경우 메모리사용량이 그대로 늘어나게 됩니다.
github 위치는 https://github.com/kasworld/actionstat 입니다.