statping/types/failures/interface.go

72 lines
1.4 KiB
Go
Raw Normal View History

2020-03-04 10:29:00 +00:00
package failures
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 {
FailuresColumnID() (string, int64)
}
type Failurer struct {
db database.Database
}
func (f Failurer) Db() database.Database {
return f.db
}
2020-03-10 05:24:35 +00:00
func (f Failurer) First() *Failure {
var fail Failure
f.db.Order("id ASC").Limit(1).Find(&fail)
return &fail
2020-03-04 10:29:00 +00:00
}
2020-03-10 05:24:35 +00:00
func (f Failurer) Last() *Failure {
var fail Failure
f.db.Order("id DESC").Limit(1).Find(&fail)
return &fail
2020-03-04 10:29:00 +00:00
}
2020-03-10 05:24:35 +00:00
func (f Failurer) List() []*Failure {
2020-03-04 10:29:00 +00:00
var fails []*Failure
2020-03-10 05:24:35 +00:00
f.db.Find(&fails)
2020-03-04 10:29:00 +00:00
return fails
}
2020-03-10 05:24:35 +00:00
func (f Failurer) LastAmount(amount int) []*Failure {
var fail []*Failure
f.db.Order("id asc").Limit(amount).Find(&fail)
return fail
}
2020-03-04 10:29:00 +00:00
func (f Failurer) Since(t time.Time) []*Failure {
var fails []*Failure
f.db.Since(t).Find(&fails)
return fails
}
2020-03-10 05:24:35 +00:00
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()
}
2020-03-04 10:29:00 +00:00
func AllFailures(obj ColumnIDInterfacer) Failurer {
column, id := obj.FailuresColumnID()
2020-03-10 05:24:35 +00:00
return Failurer{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) Failurer {
2020-03-04 10:29:00 +00:00
column, id := obj.FailuresColumnID()
2020-03-10 05:24:35 +00:00
timestamp := db.FormatTime(t)
return Failurer{db.Where(fmt.Sprintf("%s = ? AND created_at > ?", column), id, timestamp)}
2020-03-04 10:29:00 +00:00
}