-
Notifications
You must be signed in to change notification settings - Fork 0
/
sprgo.go
71 lines (62 loc) · 1.34 KB
/
sprgo.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
package SPR_go
import (
"errors"
"math/rand"
"sync"
"time"
localLog "github.com/daqnext/LocalLog/log"
"github.com/daqnext/SPR-go/goredis"
"github.com/daqnext/SPR-go/sprjob"
)
type SprJobMgr struct {
jobMap sync.Map
llog *localLog.LocalLog
}
type RedisConfig struct {
Addr string
Port int
UserName string
Password string
}
func init() {
rand.Seed(time.Now().UnixNano())
}
func New(config RedisConfig, localLogger *localLog.LocalLog) (*SprJobMgr, error) {
err := goredis.InitRedisClient(config.Addr, config.Port, config.UserName, config.Password, localLogger)
if err != nil {
return nil, errors.New("redis connect error")
}
sMgr := &SprJobMgr{
llog: localLogger,
}
return sMgr, nil
}
func (smgr *SprJobMgr) AddJobName(jobName string) error {
_, exist := smgr.jobMap.Load(jobName)
if exist {
return errors.New("job already exist")
}
//new job
job := sprjob.New(jobName)
smgr.jobMap.Store(jobName, job)
//start loop
job.StartLoop(smgr.llog)
return nil
}
func (smgr *SprJobMgr) RemoveJobName(jobName string) {
job, exist := smgr.jobMap.Load(jobName)
if !exist {
return
}
//stop
job.(*sprjob.SprJob).StopLoop()
//delete
smgr.jobMap.Delete(jobName)
}
func (smgr *SprJobMgr) IsMaster(jobName string) bool {
job, exist := smgr.jobMap.Load(jobName)
if !exist {
return false
}
return job.(*sprjob.SprJob).IsMaster
}