Handle Alarms
This commit is contained in:
parent
6e6521c814
commit
9fcb4a1867
24 changed files with 1148 additions and 136 deletions
193
model/alarm.go
Normal file
193
model/alarm.go
Normal file
|
|
@ -0,0 +1,193 @@
|
|||
package reveil
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Date time.Time
|
||||
|
||||
func (d *Date) MarshalJSON() (dst []byte, err error) {
|
||||
return []byte(fmt.Sprintf("\"%04d-%02d-%02d\"", time.Time(*d).Year(), time.Time(*d).Month(), time.Time(*d).Day())), nil
|
||||
}
|
||||
|
||||
func (d *Date) UnmarshalJSON(src []byte) error {
|
||||
tmp, err := time.Parse("\"2006-01-02\"", string(src))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
*d = Date(tmp)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
type Hour time.Time
|
||||
|
||||
func (h *Hour) MarshalJSON() (dst []byte, err error) {
|
||||
return []byte(fmt.Sprintf("\"%02d:%02d\"", time.Time(*h).Hour(), time.Time(*h).Minute())), nil
|
||||
}
|
||||
|
||||
func (h *Hour) UnmarshalJSON(src []byte) error {
|
||||
tmp, err := time.Parse("\"15:04\"", string(src))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
*h = Hour(tmp)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
type AlarmRepeated struct {
|
||||
Id Identifier `json:"id"`
|
||||
Weekday uint8 `json:"weekday"`
|
||||
StartTime *Hour `json:"time"`
|
||||
FollowingRoutines []Identifier `json:"routines"`
|
||||
IgnoreExceptions bool `json:"ignore_exceptions"`
|
||||
Comment string `json:"comment"`
|
||||
}
|
||||
|
||||
func GetAlarmRepeated(db *LevelDBStorage, id Identifier) (alarm *AlarmRepeated, err error) {
|
||||
alarm = &AlarmRepeated{}
|
||||
err = db.get(fmt.Sprintf("alarm-repeated-%s", id.ToString()), alarm)
|
||||
return
|
||||
}
|
||||
|
||||
func GetAlarmsRepeated(db *LevelDBStorage) (alarms []*AlarmRepeated, err error) {
|
||||
iter := db.search("alarm-repeated-")
|
||||
defer iter.Release()
|
||||
|
||||
for iter.Next() {
|
||||
var a AlarmRepeated
|
||||
|
||||
err = decodeData(iter.Value(), &a)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
alarms = append(alarms, &a)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func PutAlarmRepeated(db *LevelDBStorage, alarm *AlarmRepeated) (err error) {
|
||||
var key string
|
||||
var id Identifier
|
||||
|
||||
if alarm.Id.IsEmpty() {
|
||||
key, id, err = db.findBytesKey("alarm-repeated-", IDENTIFIER_LEN)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
alarm.Id = id
|
||||
|
||||
return db.put(key, alarm)
|
||||
}
|
||||
|
||||
func DeleteAlarmRepeated(db *LevelDBStorage, alarm *AlarmRepeated) (err error) {
|
||||
return db.delete(fmt.Sprintf("alarm-repeated-%s", alarm.Id.ToString()))
|
||||
}
|
||||
|
||||
type AlarmSingle struct {
|
||||
Id Identifier `json:"id"`
|
||||
Time time.Time `json:"time"`
|
||||
FollowingRoutines []Identifier `json:"routines"`
|
||||
Comment string `json:"comment"`
|
||||
}
|
||||
|
||||
func GetAlarmSingle(db *LevelDBStorage, id Identifier) (alarm *AlarmSingle, err error) {
|
||||
alarm = &AlarmSingle{}
|
||||
err = db.get(fmt.Sprintf("alarm-single-%s", id.ToString()), alarm)
|
||||
return
|
||||
}
|
||||
|
||||
func GetAlarmsSingle(db *LevelDBStorage) (alarms []*AlarmSingle, err error) {
|
||||
iter := db.search("alarm-single-")
|
||||
defer iter.Release()
|
||||
|
||||
for iter.Next() {
|
||||
var a AlarmSingle
|
||||
|
||||
err = decodeData(iter.Value(), &a)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
alarms = append(alarms, &a)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func PutAlarmSingle(db *LevelDBStorage, alarm *AlarmSingle) (err error) {
|
||||
var key string
|
||||
var id Identifier
|
||||
|
||||
if alarm.Id.IsEmpty() {
|
||||
key, id, err = db.findBytesKey("alarm-single-", IDENTIFIER_LEN)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
alarm.Id = id
|
||||
|
||||
return db.put(key, alarm)
|
||||
}
|
||||
|
||||
func DeleteAlarmSingle(db *LevelDBStorage, alarm *AlarmSingle) (err error) {
|
||||
return db.delete(fmt.Sprintf("alarm-single-%s", alarm.Id.ToString()))
|
||||
}
|
||||
|
||||
type AlarmException struct {
|
||||
Id Identifier `json:"id"`
|
||||
Start *Date `json:"start"`
|
||||
End *Date `json:"end"`
|
||||
Comment string `json:"comment"`
|
||||
}
|
||||
|
||||
func GetAlarmException(db *LevelDBStorage, id Identifier) (alarm *AlarmException, err error) {
|
||||
alarm = &AlarmException{}
|
||||
err = db.get(fmt.Sprintf("alarm-exception-%s", id.ToString()), alarm)
|
||||
return
|
||||
}
|
||||
|
||||
func GetAlarmExceptions(db *LevelDBStorage) (alarms []*AlarmException, err error) {
|
||||
iter := db.search("alarm-exception-")
|
||||
defer iter.Release()
|
||||
|
||||
for iter.Next() {
|
||||
var a AlarmException
|
||||
|
||||
err = decodeData(iter.Value(), &a)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
alarms = append(alarms, &a)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func PutAlarmException(db *LevelDBStorage, alarm *AlarmException) (err error) {
|
||||
var key string
|
||||
var id Identifier
|
||||
|
||||
if alarm.Id.IsEmpty() {
|
||||
key, id, err = db.findBytesKey("alarm-exception-", IDENTIFIER_LEN)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
alarm.Id = id
|
||||
|
||||
return db.put(key, alarm)
|
||||
}
|
||||
|
||||
func DeleteAlarmException(db *LevelDBStorage, alarm *AlarmException) (err error) {
|
||||
return db.delete(fmt.Sprintf("alarm-exception-%s", alarm.Id.ToString()))
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue