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.
statping/types/failures/interface.go

72 lines
1.4 KiB

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 DESC").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)}
}