forked from pneymrl2f/nightingale
bugfix: update session param has a mistake (#576)
* add cache counter for login part.1 * add login counter api * feature: prober support multi-metric with different tags * bugfix: session counter reset * add models.stats for counter * bugfix: update session param has a mistakemaster
parent
2d9bc50401
commit
e839c6bd6b
@ -0,0 +1,9 @@
|
||||
set names utf8;
|
||||
use n9e_rdb;
|
||||
|
||||
CREATE TABLE `stats`
|
||||
(
|
||||
`name` varchar(64) not null,
|
||||
`value` bigint not null default 0,
|
||||
PRIMARY KEY (`name`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8;
|
@ -0,0 +1,62 @@
|
||||
package models
|
||||
|
||||
type Stats struct {
|
||||
Name string `json:"name"`
|
||||
Value int64 `json:"value"`
|
||||
}
|
||||
|
||||
func NewStats(name string) (*Stats, error) {
|
||||
c := Stats{Name: name}
|
||||
|
||||
has, err := DB["rdb"].Where("name=?", c.Name).Get(&c)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if !has {
|
||||
c.Save()
|
||||
}
|
||||
|
||||
return &c, nil
|
||||
}
|
||||
|
||||
func MustNewStats(name string) *Stats {
|
||||
m, err := NewStats(name)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return m
|
||||
}
|
||||
|
||||
func (p *Stats) Get() int64 {
|
||||
var s Stats
|
||||
has, _ := DB["rdb"].Where("name=?", p.Name).Get(&s)
|
||||
if !has {
|
||||
p.Save()
|
||||
}
|
||||
return s.Value
|
||||
}
|
||||
|
||||
func (p *Stats) Save() error {
|
||||
_, err := DB["rdb"].Insert(p)
|
||||
return err
|
||||
}
|
||||
|
||||
func (p *Stats) Del() error {
|
||||
_, err := DB["rdb"].Where("name=?", p.Name).Delete(p)
|
||||
return err
|
||||
}
|
||||
|
||||
// for GAUAGE
|
||||
func (p *Stats) Update(i int64) error {
|
||||
p.Value = i
|
||||
_, err := DB["rdb"].Where("name=?", p.Name).Cols("value").Update(p)
|
||||
return err
|
||||
}
|
||||
|
||||
// for COUNTER
|
||||
func (p *Stats) Inc(i int) error {
|
||||
_, err := DB["rdb"].Exec("update stats set value = value + ? where name=?", i, p.Name)
|
||||
return err
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package http
|
||||
|
||||
import (
|
||||
"github.com/didi/nightingale/src/models"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type rdbStats struct {
|
||||
Login *models.Stats
|
||||
}
|
||||
|
||||
var (
|
||||
stats *rdbStats
|
||||
)
|
||||
|
||||
func initStats() {
|
||||
stats = &rdbStats{
|
||||
Login: models.MustNewStats("login"),
|
||||
}
|
||||
}
|
||||
|
||||
func counterGet(c *gin.Context) {
|
||||
renderData(c, map[string]int64{
|
||||
"login": stats.Login.Get(),
|
||||
}, nil)
|
||||
}
|
Loading…
Reference in new issue