mirror of https://github.com/statping/statping
72 lines
1.4 KiB
Go
72 lines
1.4 KiB
Go
package failures
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/statping/statping/database"
|
|
"time"
|
|
)
|
|
|
|
type ColumnIDInterfacer interface {
|
|
FailuresColumnID() (string, int64)
|
|
}
|
|
|
|
type Failurer struct {
|
|
db database.Database
|
|
}
|
|
|
|
func (f Failurer) Db() database.Database {
|
|
return f.db
|
|
}
|
|
|
|
func (f Failurer) First() *Failure {
|
|
var fail Failure
|
|
f.db.Order("id ASC").Limit(1).Find(&fail)
|
|
return &fail
|
|
}
|
|
|
|
func (f Failurer) Last() *Failure {
|
|
var fail Failure
|
|
f.db.Order("id DESC").Limit(1).Find(&fail)
|
|
return &fail
|
|
}
|
|
|
|
func (f Failurer) List() []*Failure {
|
|
var fails []*Failure
|
|
f.db.Find(&fails)
|
|
return fails
|
|
}
|
|
|
|
func (f Failurer) LastAmount(amount int) []*Failure {
|
|
var fail []*Failure
|
|
f.db.Order("id asc").Limit(amount).Find(&fail)
|
|
return fail
|
|
}
|
|
|
|
func (f Failurer) Since(t time.Time) []*Failure {
|
|
var fails []*Failure
|
|
f.db.Since(t).Find(&fails)
|
|
return fails
|
|
}
|
|
|
|
func (f Failurer) Count() int {
|
|
var amount int
|
|
f.db.Count(&amount)
|
|
return amount
|
|
}
|
|
|
|
func (f Failurer) DeleteAll() error {
|
|
q := f.db.Delete(&Failure{})
|
|
return q.Error()
|
|
}
|
|
|
|
func AllFailures(obj ColumnIDInterfacer) Failurer {
|
|
column, id := obj.FailuresColumnID()
|
|
return Failurer{db.Where(fmt.Sprintf("%s = ?", column), id)}
|
|
}
|
|
|
|
func Since(t time.Time, obj ColumnIDInterfacer) Failurer {
|
|
column, id := obj.FailuresColumnID()
|
|
timestamp := db.FormatTime(t)
|
|
return Failurer{db.Where(fmt.Sprintf("%s = ? AND created_at > ?", column), id, timestamp)}
|
|
}
|