Initial commit
This commit is contained in:
commit
4d7c983600
13 changed files with 723 additions and 0 deletions
64
db/bolt.go
Normal file
64
db/bolt.go
Normal file
|
@ -0,0 +1,64 @@
|
|||
package db
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"path"
|
||||
|
||||
"go.etcd.io/bbolt"
|
||||
)
|
||||
|
||||
type (
|
||||
Bolt struct {
|
||||
db *bbolt.DB
|
||||
}
|
||||
|
||||
Status struct {
|
||||
ID []byte
|
||||
Failed bool
|
||||
Notified bool
|
||||
}
|
||||
)
|
||||
|
||||
var (
|
||||
statusBucket = []byte("status")
|
||||
)
|
||||
|
||||
func NewBolt(filename string) (*Bolt, error) {
|
||||
dbPath := path.Join(filename)
|
||||
|
||||
db, err := bbolt.Open(dbPath, 0600, nil)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("bolot init: %w", err)
|
||||
}
|
||||
|
||||
return &Bolt{db}, nil
|
||||
}
|
||||
|
||||
func (b *Bolt) Status(id []byte) (st Status, err error) {
|
||||
return st, b.db.Update(func(tx *bbolt.Tx) error {
|
||||
bkt, err := tx.CreateBucketIfNotExists(statusBucket)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
v := bkt.Get(id)
|
||||
if len(v) == 0 {
|
||||
return nil
|
||||
}
|
||||
return json.Unmarshal(v, &st)
|
||||
})
|
||||
}
|
||||
|
||||
func (b *Bolt) SetStatus(id []byte, st Status) error {
|
||||
return b.db.Update(func(tx *bbolt.Tx) error {
|
||||
bkt, err := tx.CreateBucketIfNotExists(statusBucket)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
v, err := json.Marshal(st)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return bkt.Put(id, v)
|
||||
})
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue