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