Skip to content

Commit 47e910e

Browse files
committed
Added NodeChange and SetState and Event functions
1 parent 8288bb7 commit 47e910e

File tree

3 files changed

+82
-8
lines changed

3 files changed

+82
-8
lines changed

pfsd/exporter/exporter.go

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,15 @@ import (
55
"github.com/cpssd/paranoid/logger"
66
)
77

8-
var Log *logger.ParanoidLogger
9-
var server *Server
8+
var (
9+
Log *logger.ParanoidLogger
10+
server *Server
11+
nodeList map[string]MessageNode
12+
)
13+
14+
func init() {
15+
nodeList = make(map[string]MessageNode)
16+
}
1017

1118
func Send(msg Message) {
1219
server.Send(msg)
@@ -19,3 +26,45 @@ func NewStdServer(port string) {
1926
func Listen() {
2027
server.Run()
2128
}
29+
30+
// SetState is used to set the local exporter state
31+
func SetState(nodes []MessageNode) {
32+
for i := 0; i < len(nodes); i++ {
33+
nodeList[nodes[i].Uuid] = nodes[i]
34+
}
35+
}
36+
37+
// NodeChange sends a message to the client whenever there is a change in nodes
38+
func NodeChange(node MessageNode) {
39+
msg := Message{
40+
Type: NodeChangeMessage,
41+
Data: MessageData{
42+
Node: node,
43+
},
44+
}
45+
46+
// Check does the message exist to determine the response
47+
// TODO: Add implementation when a node is deleted. This is currently
48+
// not supported with our raft implementation
49+
if _, ok := nodeList[node.Uuid]; !ok {
50+
msg.Data.Action = "add"
51+
} else {
52+
msg.Data.Action = "update"
53+
}
54+
55+
nodeList[node.Uuid] = node
56+
server.Send(msg)
57+
}
58+
59+
// Send an event that happened to the client
60+
func Event(msg Message) {
61+
server.Send(msg)
62+
}
63+
64+
func toNodeArray(m map[string]MessageNode) []MessageNode {
65+
var nodes []MessageNode
66+
for _, n := range m {
67+
nodes = append(nodes, n)
68+
}
69+
return nodes
70+
}

pfsd/exporter/message.go

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,47 @@
11
package exporter
22

3-
type MessageType int
3+
type MessageType string
44

55
const (
6-
NodeChangeMessage MessageType = iota
7-
RaftActionMessage
6+
StateMessage MessageType = "state"
7+
NodeChangeMessage = "nodechange"
8+
RaftActionMessage = "event"
89
)
910

11+
func (m MessageType) String() string {
12+
switch m {
13+
case StateMessage:
14+
return "state"
15+
case NodeChangeMessage:
16+
return "nodechange"
17+
case RaftActionMessage:
18+
return "event"
19+
default:
20+
return ""
21+
}
22+
}
23+
1024
type Message struct {
1125
Type MessageType `json:"type"`
1226
Data MessageData `json:"data"`
1327
}
1428

1529
type MessageData struct {
16-
// Used for "nodechange"
17-
Node MessageNode `json:"node,omitempty"`
1830
// Used for "status"
1931
Nodes []MessageNode `json:"nodes,omitempty"`
20-
// Used for Event
32+
// Used for "nodechange"
33+
Action string `json:"action,omitempty"`
34+
// Used for "nodechange"
35+
Node MessageNode `json:"node,omitempty"`
36+
// Used for "event"
2137
Event MessageEvent `json:"event,omitempty"`
2238
}
2339

2440
type MessageNode struct {
2541
Uuid string `json:"uuid"`
2642
CommonName string `json:"commonName"`
2743
State string `json:"state"`
44+
Addr string `json:"addr"`
2845
}
2946

3047
type MessageEvent struct {

pfsd/exporter/server.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,14 @@ func (s *Server) Run() {
2626
msgs: make(chan Message),
2727
}
2828
s.client.listen()
29+
30+
// Send the state message
31+
s.Send(Message{
32+
Type: StateMessage,
33+
Data: MessageData{
34+
Nodes: toNodeArray(nodeList),
35+
},
36+
})
2937
}
3038

3139
http.ListenAndServe(":"+s.port, websocket.Handler(onConnected))

0 commit comments

Comments
 (0)