12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- package warden
- import (
- "context"
- "strconv"
- "time"
- "go-common/library/ecode"
- nmd "go-common/library/net/metadata"
- "go-common/library/stat/summary"
- "go-common/library/stat/sys/cpu"
- "google.golang.org/grpc"
- "google.golang.org/grpc/metadata"
- )
- func (s *Server) stats() grpc.UnaryServerInterceptor {
- errstat := summary.New(time.Second*3, 10)
- return func(ctx context.Context, req interface{}, args *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) {
- c := int64(0)
- if resp, err = handler(ctx, req); err != nil {
- if ecode.ServerErr.Equal(err) || ecode.ServiceUnavailable.Equal(err) ||
- ecode.Deadline.Equal(err) || ecode.LimitExceed.Equal(err) {
- c = 1
- }
- }
- errstat.Add(c)
- errors, requests := errstat.Value()
- kv := []string{
- nmd.Errors, strconv.FormatInt(errors, 10),
- nmd.Requests, strconv.FormatInt(requests, 10),
- }
- var cpustat cpu.Stat
- cpu.ReadStat(&cpustat)
- if cpustat.Usage != 0 {
- kv = append(kv, nmd.CPUUsage, strconv.FormatInt(int64(cpustat.Usage), 10))
- }
- trailer := metadata.Pairs(kv...)
- grpc.SetTrailer(ctx, trailer)
- return
- }
- }
|