statping/types/hits/interface.go

90 lines
1.6 KiB
Go
Raw Normal View History

2020-03-04 10:29:00 +00:00
package hits
import (
"fmt"
2020-03-09 18:17:55 +00:00
"github.com/statping/statping/database"
2020-03-04 10:29:00 +00:00
"time"
)
type ColumnIDInterfacer interface {
HitsColumnID() (string, int64)
}
type Hitters struct {
db database.Database
}
func (h Hitters) Db() database.Database {
return h.db
}
2020-03-06 09:33:46 +00:00
func (h Hitters) First() *Hit {
var hit Hit
h.db.Order("id ASC").Limit(1).Find(&hit)
return &hit
}
func (h Hitters) Last() *Hit {
var hit Hit
h.db.Order("id DESC").Limit(1).Find(&hit)
return &hit
}
2020-03-04 10:29:00 +00:00
func (h Hitters) Since(t time.Time) []*Hit {
var hits []*Hit
h.db.Since(t).Find(&hits)
return hits
}
func (h Hitters) List() []*Hit {
var hits []*Hit
h.db.Find(&hits)
return hits
}
2020-03-10 05:24:35 +00:00
func (h Hitters) LastAmount(amount int) []*Hit {
2020-03-04 10:29:00 +00:00
var hits []*Hit
2020-03-10 05:24:35 +00:00
h.db.Order("id asc").Limit(amount).Find(&hits)
2020-03-04 10:29:00 +00:00
return hits
}
func (h Hitters) Count() int {
var count int
h.db.Count(&count)
return count
}
2020-03-10 05:24:35 +00:00
func (h Hitters) DeleteAll() error {
q := h.db.Delete(&Hit{})
return q.Error()
}
2020-03-04 10:29:00 +00:00
func (h Hitters) Sum() float64 {
result := struct {
amount float64
}{0}
2020-03-10 05:24:35 +00:00
h.db.Select("AVG(latency) as amount").Scan(&result)
2020-03-04 10:29:00 +00:00
return result.amount
}
2020-03-10 05:24:35 +00:00
func (h Hitters) Avg() float64 {
2020-03-06 22:18:06 +00:00
result := struct {
2020-03-10 05:24:35 +00:00
amount float64
2020-03-06 22:18:06 +00:00
}{0}
h.db.Select("AVG(latency) as amount").Scan(&result)
return result.amount
}
2020-03-04 10:29:00 +00:00
func AllHits(obj ColumnIDInterfacer) Hitters {
column, id := obj.HitsColumnID()
2020-03-10 05:24:35 +00:00
return Hitters{db.Where(fmt.Sprintf("%s = ?", column), id)}
2020-03-04 10:29:00 +00:00
}
2020-03-10 05:24:35 +00:00
func Since(t time.Time, obj ColumnIDInterfacer) Hitters {
2020-03-04 10:29:00 +00:00
column, id := obj.HitsColumnID()
2020-03-10 05:24:35 +00:00
timestamp := db.FormatTime(t)
return Hitters{db.Where(fmt.Sprintf("%s = ? AND created_at > ?", column), id, timestamp)}
2020-03-04 10:29:00 +00:00
}