-
Notifications
You must be signed in to change notification settings - Fork 0
/
lock.go
48 lines (41 loc) · 882 Bytes
/
lock.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
package shedlock
import (
"github.com/robfig/cron"
"os"
"time"
)
type QuartzJob interface {
cron.Job
}
type ShedLock struct {
Name string `gorm:"name"`
LockUntil time.Time `gorm:"lock_until"`
LockedAt time.Time `gorm:"locked_at"`
LockedBy string `gorm:"locked_by" hostname+name`
}
type Schedule struct {
Name string
Spec string
Cmd func()
Job cron.Job
LockTime int `json:"lock_time" 20 sec`
}
type Locker interface {
AddFun(name string, spec string, cmd func()) error
AddJob(name string, spec string, job cron.Job) error
AddSchedules(schedules []*Schedule) error
DoLock(name string) bool
Insert(name string) bool
Find(name string) *Schedule
Update(name string) bool
Unlock(name string) bool
Start()
Stop()
}
func LocalHostName() string {
hostname, err := os.Hostname()
if err != nil {
return ""
}
return hostname
}