-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathevent.go
83 lines (68 loc) · 2.01 KB
/
event.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package gitdb
import (
"fmt"
"github.com/bouggo/log"
"github.com/distatus/battery"
)
type eventType string
var (
w eventType = "write" //write
wBefore eventType = "writeBefore" //writeBefore
d eventType = "delete" //delete
r eventType = "read" //read
)
type dbEvent struct {
Type eventType
Dataset string
Description string
Commit bool
}
func newWriteEvent(description string, dataset string, commit bool) *dbEvent {
return &dbEvent{Type: w, Description: description, Dataset: dataset, Commit: commit}
}
func newWriteBeforeEvent(description string, dataset string) *dbEvent {
return &dbEvent{Type: wBefore, Description: description, Dataset: dataset}
}
func newReadEvent(description string, dataset string) *dbEvent {
return &dbEvent{Type: r, Description: description, Dataset: dataset}
}
func newDeleteEvent(description string, dataset string, commit bool) *dbEvent {
return &dbEvent{Type: w, Description: description, Dataset: dataset, Commit: commit}
}
func (g *gitdb) startEventLoop() {
go func(g *gitdb) {
log.Test("starting event loop")
for {
select {
case <-g.shutdown:
log.Info("event shutdown")
log.Test("shutting down event loop")
return
case e := <-g.events:
switch e.Type {
case w, d:
if e.Commit {
if err := g.driver.commit(e.Dataset, e.Description, g.config.User); err != nil {
log.Error(err.Error())
}
log.Test("handled write event for " + e.Description)
}
g.commit.Done()
default:
log.Test("No handler found for " + string(e.Type) + " event")
}
}
}
}(g)
}
func hasSufficientBatteryPower(threshold float64) bool {
batt, err := battery.Get(0)
if err != nil || batt.State == battery.Charging {
//device is probably running on direct power
return true
}
percentageCharge := batt.Current / batt.Full * 100
log.Info(fmt.Sprintf("Battery Level: %6.2f%%", percentageCharge))
//return true if battery life is above threshold
return percentageCharge >= threshold
}