You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.1 KiB
54 lines
1.1 KiB
package stat |
|
|
|
import ( |
|
"context" |
|
"strconv" |
|
"time" |
|
|
|
"go-common/app/job/main/reply/conf" |
|
"go-common/library/log" |
|
"go-common/library/queue/databus" |
|
) |
|
|
|
type statMsg struct { |
|
ID int64 `json:"id"` |
|
Timestamp int64 `json:"timestamp"` |
|
Count int `json:"count"` |
|
Type string `json:"type"` |
|
} |
|
|
|
// Dao stat dao. |
|
type Dao struct { |
|
// new databus stats |
|
types map[int8]string |
|
databus *databus.Databus |
|
} |
|
|
|
// New new a stat dao and return. |
|
func New(c *conf.Config) *Dao { |
|
d := new(Dao) |
|
// new databus stats |
|
d.types = make(map[int8]string) |
|
for name, typ := range c.StatTypes { |
|
d.types[typ] = name |
|
} |
|
d.databus = databus.New(c.Databus.Stats) |
|
return d |
|
} |
|
|
|
// Send update stat. |
|
func (d *Dao) Send(c context.Context, typ int8, oid int64, cnt int) (err error) { |
|
// new databus stats |
|
if name, ok := d.types[typ]; ok { |
|
m := &statMsg{ |
|
ID: oid, |
|
Type: name, |
|
Count: cnt, |
|
Timestamp: time.Now().Unix(), |
|
} |
|
if err = d.databus.Send(c, strconv.FormatInt(oid, 10), m); err != nil { |
|
log.Error("d.databus.Send(%d,%d,%d) error(%v)", typ, oid, cnt, err) |
|
} |
|
} |
|
return |
|
}
|
|
|