status update now reported to the server. More robustness needed.
This commit is contained in:
parent
459300b0d3
commit
78819f1ebe
@ -159,8 +159,6 @@ func main() {
|
|||||||
}
|
}
|
||||||
wsURL := flag.Arg(0)
|
wsURL := flag.Arg(0)
|
||||||
|
|
||||||
agent.ConfigureAgent(*advanceWarningTime, *agentExpriryTime, *tickerInterval)
|
|
||||||
|
|
||||||
dialer := websocket.Dialer{
|
dialer := websocket.Dialer{
|
||||||
Proxy: http.ProxyFromEnvironment,
|
Proxy: http.ProxyFromEnvironment,
|
||||||
HandshakeTimeout: 45 * time.Second,
|
HandshakeTimeout: 45 * time.Second,
|
||||||
@ -226,5 +224,7 @@ func main() {
|
|||||||
strings.ReplaceAll(urlObject.Scheme, "ws", "http")+
|
strings.ReplaceAll(urlObject.Scheme, "ws", "http")+
|
||||||
"://"+urlObject.Host+"/docs/wsproxy")
|
"://"+urlObject.Host+"/docs/wsproxy")
|
||||||
log.Println()
|
log.Println()
|
||||||
|
|
||||||
|
agent.ConfigureAgent(commChannel, *advanceWarningTime, *agentExpriryTime, *tickerInterval)
|
||||||
service.Run(commChannel.Session)
|
service.Run(commChannel.Session)
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package agent
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"converge/pkg/async"
|
"converge/pkg/async"
|
||||||
|
"converge/pkg/comms"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/fsnotify/fsnotify"
|
"github.com/fsnotify/fsnotify"
|
||||||
"github.com/gliderlabs/ssh"
|
"github.com/gliderlabs/ssh"
|
||||||
@ -31,6 +32,7 @@ import (
|
|||||||
// global configuration
|
// global configuration
|
||||||
|
|
||||||
type AgentState struct {
|
type AgentState struct {
|
||||||
|
commChannel comms.CommChannel
|
||||||
startTime time.Time
|
startTime time.Time
|
||||||
|
|
||||||
// Advance warning time to notify the user of something important happening
|
// Advance warning time to notify the user of something important happening
|
||||||
@ -73,7 +75,8 @@ var events = make(chan func(), 10)
|
|||||||
|
|
||||||
// External interface, asynchronous, apart from the initialization.
|
// External interface, asynchronous, apart from the initialization.
|
||||||
|
|
||||||
func ConfigureAgent(advanceWarningTime, agentExpiryTime, tickerInterval time.Duration) {
|
func ConfigureAgent(commChannel comms.CommChannel,
|
||||||
|
advanceWarningTime, agentExpiryTime, tickerInterval time.Duration) {
|
||||||
if fileExists(holdFilename) {
|
if fileExists(holdFilename) {
|
||||||
log.Printf("Removing hold file '%s'", holdFilename)
|
log.Printf("Removing hold file '%s'", holdFilename)
|
||||||
err := os.Remove(holdFilename)
|
err := os.Remove(holdFilename)
|
||||||
@ -82,6 +85,7 @@ func ConfigureAgent(advanceWarningTime, agentExpiryTime, tickerInterval time.Dur
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
state = AgentState{
|
state = AgentState{
|
||||||
|
commChannel: commChannel,
|
||||||
startTime: time.Now(),
|
startTime: time.Now(),
|
||||||
advanceWarningTime: advanceWarningTime,
|
advanceWarningTime: advanceWarningTime,
|
||||||
agentExpriryTime: agentExpiryTime,
|
agentExpriryTime: agentExpiryTime,
|
||||||
@ -97,6 +101,9 @@ func ConfigureAgent(advanceWarningTime, agentExpiryTime, tickerInterval time.Dur
|
|||||||
log.Printf("Agent expires at %s",
|
log.Printf("Agent expires at %s",
|
||||||
state.expiryTime(holdFilename).Format(time.DateTime))
|
state.expiryTime(holdFilename).Format(time.DateTime))
|
||||||
|
|
||||||
|
comms.SendSessionInfo(state.commChannel)
|
||||||
|
comms.SendExpiryTimeUpdate(state.commChannel, state.expiryTime(holdFilename))
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
<-state.ticker.C
|
<-state.ticker.C
|
||||||
@ -284,6 +291,7 @@ func holdFileChange() {
|
|||||||
message += holdFileMessage()
|
message += holdFileMessage()
|
||||||
messageUsers(message)
|
messageUsers(message)
|
||||||
state.lastExpiryTimmeReported = newExpiryTIme
|
state.lastExpiryTimmeReported = newExpiryTIme
|
||||||
|
comms.SendExpiryTimeUpdate(state.commChannel, state.lastExpiryTimmeReported)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ func NewCommChannel(role Role, wsConn io.ReadWriteCloser) (CommChannel, error) {
|
|||||||
}
|
}
|
||||||
log.Println("Communication channel between agent and converge server established")
|
log.Println("Communication channel between agent and converge server established")
|
||||||
|
|
||||||
gob.Register(RemoteSession{})
|
gob.Register(SessionInfo{})
|
||||||
gob.Register(ExpiryTimeUpdate{})
|
gob.Register(ExpiryTimeUpdate{})
|
||||||
gob.Register(ConvergeMessage{})
|
gob.Register(ConvergeMessage{})
|
||||||
|
|
||||||
@ -79,15 +79,6 @@ func NewCommChannel(role Role, wsConn io.ReadWriteCloser) (CommChannel, error) {
|
|||||||
commChannel.Decoder = gob.NewDecoder(commChannel.Peer)
|
commChannel.Decoder = gob.NewDecoder(commChannel.Peer)
|
||||||
|
|
||||||
switch role {
|
switch role {
|
||||||
case Agent:
|
|
||||||
err := commChannel.Encoder.Encode(ConvergeMessage{Value: NewRemoteSession()})
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("Encoding error %v", err)
|
|
||||||
}
|
|
||||||
err = commChannel.Encoder.Encode(ConvergeMessage{Value: NewExpiryTimeUpdate(time.Now())})
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("Encoding error %v", err)
|
|
||||||
}
|
|
||||||
case ConvergeServer:
|
case ConvergeServer:
|
||||||
go serverReader(commChannel)
|
go serverReader(commChannel)
|
||||||
}
|
}
|
||||||
@ -101,10 +92,12 @@ func serverReader(channel CommChannel) {
|
|||||||
err := channel.Decoder.Decode(&result)
|
err := channel.Decoder.Decode(&result)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Error decoding object %v", err)
|
// TODO more clean solution, need to explicitly close when agent exits.
|
||||||
|
log.Printf("Exiting serverReader %v", err)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
switch v := result.Value.(type) {
|
switch v := result.Value.(type) {
|
||||||
case RemoteSession:
|
case SessionInfo:
|
||||||
log.Println("RECEIVED: session info ", v)
|
log.Println("RECEIVED: session info ", v)
|
||||||
case ExpiryTimeUpdate:
|
case ExpiryTimeUpdate:
|
||||||
log.Println("RECEIVED: expirytime update ", v)
|
log.Println("RECEIVED: expirytime update ", v)
|
||||||
@ -114,17 +107,17 @@ func serverReader(channel CommChannel) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type RemoteSession struct {
|
type SessionInfo struct {
|
||||||
Username string
|
Username string
|
||||||
Hostname string
|
Hostname string
|
||||||
Pwd string
|
Pwd string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewRemoteSession() RemoteSession {
|
func NewSessionInfo() SessionInfo {
|
||||||
username, _ := user.Current()
|
username, _ := user.Current()
|
||||||
host, _ := os.Hostname()
|
host, _ := os.Hostname()
|
||||||
pwd, _ := os.Getwd()
|
pwd, _ := os.Getwd()
|
||||||
return RemoteSession{
|
return SessionInfo{
|
||||||
Username: username.Username,
|
Username: username.Username,
|
||||||
Hostname: host,
|
Hostname: host,
|
||||||
Pwd: pwd,
|
Pwd: pwd,
|
||||||
|
20
pkg/comms/serverapi.go
Normal file
20
pkg/comms/serverapi.go
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package comms
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func SendSessionInfo(commChannel CommChannel) {
|
||||||
|
err := commChannel.Encoder.Encode(ConvergeMessage{Value: NewSessionInfo()})
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Encoding error %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func SendExpiryTimeUpdate(commChannel CommChannel, expiryTime time.Time) {
|
||||||
|
err := commChannel.Encoder.Encode(ConvergeMessage{Value: NewExpiryTimeUpdate(expiryTime)})
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Encoding error %v", err)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user