-
Notifications
You must be signed in to change notification settings - Fork 0
/
pigpig_discover.go
88 lines (74 loc) · 1.87 KB
/
pigpig_discover.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
84
85
86
87
88
// Copyright 2022 NotOne Lv <aiphalv0010@gmail.com>. All rights reserved.
// Use of this source code is governed by a MIT style
// license that can be found in the LICENSE file.
package etcd
import (
"context"
"strings"
"sync"
"github.com/notone0010/pigpig/pkg/log"
)
type serviceDiscover struct {
ds *datastore
}
var (
proxyMap map[string][]byte
mu sync.Mutex
)
func newDiscover(ds *datastore) *serviceDiscover {
return &serviceDiscover{
ds: ds,
}
}
func (d *serviceDiscover) DiscoverStart(ctx context.Context, prefix string) error {
return d.ds.Watch(ctx, prefix, d.SetProxyList, d.ModifyProxyList, d.DeleteProxyList)
}
func (d *serviceDiscover) RestartSession() error {
return d.ds.RestartSession()
}
func (d *serviceDiscover) SetProxyList(ctx context.Context, key, addr []byte) {
mu.Lock()
defer mu.Unlock()
if proxyMap == nil {
proxyMap = make(map[string][]byte, 1)
}
proxyMap[string(key)] = addr
log.Infof("proxy node list added %s", key)
}
func (d *serviceDiscover) ModifyProxyList(ctx context.Context, key, oldAddr, addr []byte) {
mu.Lock()
defer mu.Unlock()
proxyMap[string(key)] = addr
log.Infof("proxy node list modified %s", key)
}
func (d *serviceDiscover) DeleteProxyList(ctx context.Context, key []byte) {
mu.Lock()
defer mu.Unlock()
delete(proxyMap, string(key))
log.Infof("proxy node list deleted %s", key)
}
func (d *serviceDiscover) GetService() []string {
mu.Lock()
defer mu.Unlock()
addrs := make([]string, 0)
for k, v := range proxyMap {
if !strings.Contains(k, "https") {
addrs = append(addrs, string(v))
}
}
return addrs
}
func (d *serviceDiscover) GetHttpsService() []string {
mu.Lock()
defer mu.Unlock()
addrs := make([]string, 0)
for k, v := range proxyMap {
if strings.Contains(k, "https") {
addrs = append(addrs, string(v))
}
}
return addrs
}
func (d *serviceDiscover) Close() error {
return d.ds.Close()
}