When playground is created or modified it emits an event. (#225)
The scheduler listens to playground events and updates it's configuration immediately.
This commit is contained in:
committed by
Marcos Nils
parent
65b8364ef2
commit
d758c1a303
@@ -15,13 +15,14 @@ var (
|
|||||||
SESSION_END = EventType("session end")
|
SESSION_END = EventType("session end")
|
||||||
SESSION_READY = EventType("session ready")
|
SESSION_READY = EventType("session ready")
|
||||||
SESSION_BUILDER_OUT = EventType("session builder out")
|
SESSION_BUILDER_OUT = EventType("session builder out")
|
||||||
|
PLAYGROUND_NEW = EventType("playground_new")
|
||||||
)
|
)
|
||||||
|
|
||||||
type Handler func(sessionId string, args ...interface{})
|
type Handler func(id string, args ...interface{})
|
||||||
type AnyHandler func(eventType EventType, sessionId string, args ...interface{})
|
type AnyHandler func(eventType EventType, id string, args ...interface{})
|
||||||
|
|
||||||
type EventApi interface {
|
type EventApi interface {
|
||||||
Emit(name EventType, sessionId string, args ...interface{})
|
Emit(name EventType, id string, args ...interface{})
|
||||||
On(name EventType, handler Handler)
|
On(name EventType, handler Handler)
|
||||||
OnAny(handler AnyHandler)
|
OnAny(handler AnyHandler)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package pwd
|
|||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
|
"github.com/play-with-docker/play-with-docker/event"
|
||||||
"github.com/play-with-docker/play-with-docker/pwd/types"
|
"github.com/play-with-docker/play-with-docker/pwd/types"
|
||||||
"github.com/satori/go.uuid"
|
"github.com/satori/go.uuid"
|
||||||
)
|
)
|
||||||
@@ -14,6 +15,7 @@ func (p *pwd) PlaygroundNew(playground types.Playground) (*types.Playground, err
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
p.event.Emit(event.PLAYGROUND_NEW, playground.Id)
|
||||||
return &playground, nil
|
return &playground, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ func TestPlaygroundNew(t *testing.T) {
|
|||||||
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_g, _f, _s))
|
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_g, _f, _s))
|
||||||
sp := provisioner.NewOverlaySessionProvisioner(_f)
|
sp := provisioner.NewOverlaySessionProvisioner(_f)
|
||||||
|
|
||||||
|
var nilArgs []interface{}
|
||||||
|
_e.M.On("Emit", event.PLAYGROUND_NEW, uuid.NewV5(uuid.NamespaceOID, "localhost").String(), nilArgs).Return()
|
||||||
_s.On("PlaygroundPut", mock.AnythingOfType("*types.Playground")).Return(nil)
|
_s.On("PlaygroundPut", mock.AnythingOfType("*types.Playground")).Return(nil)
|
||||||
|
|
||||||
p := NewPWD(_f, _e, _s, sp, ipf)
|
p := NewPWD(_f, _e, _s, sp, ipf)
|
||||||
@@ -52,6 +54,8 @@ func TestPlaygroundGet(t *testing.T) {
|
|||||||
_g := &id.MockGenerator{}
|
_g := &id.MockGenerator{}
|
||||||
_e := &event.Mock{}
|
_e := &event.Mock{}
|
||||||
|
|
||||||
|
var nilArgs []interface{}
|
||||||
|
_e.M.On("Emit", event.PLAYGROUND_NEW, uuid.NewV5(uuid.NamespaceOID, "localhost").String(), nilArgs).Return()
|
||||||
_s.On("PlaygroundPut", mock.AnythingOfType("*types.Playground")).Return(nil)
|
_s.On("PlaygroundPut", mock.AnythingOfType("*types.Playground")).Return(nil)
|
||||||
|
|
||||||
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_g, _f, _s))
|
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_g, _f, _s))
|
||||||
@@ -86,6 +90,8 @@ func TestPlaygroundFindByDomain(t *testing.T) {
|
|||||||
_g := &id.MockGenerator{}
|
_g := &id.MockGenerator{}
|
||||||
_e := &event.Mock{}
|
_e := &event.Mock{}
|
||||||
|
|
||||||
|
var nilArgs []interface{}
|
||||||
|
_e.M.On("Emit", event.PLAYGROUND_NEW, uuid.NewV5(uuid.NamespaceOID, "localhost").String(), nilArgs).Return()
|
||||||
_s.On("PlaygroundPut", mock.AnythingOfType("*types.Playground")).Return(nil)
|
_s.On("PlaygroundPut", mock.AnythingOfType("*types.Playground")).Return(nil)
|
||||||
|
|
||||||
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_g, _f, _s))
|
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_g, _f, _s))
|
||||||
@@ -120,6 +126,9 @@ func TestPlaygroundList(t *testing.T) {
|
|||||||
_g := &id.MockGenerator{}
|
_g := &id.MockGenerator{}
|
||||||
_e := &event.Mock{}
|
_e := &event.Mock{}
|
||||||
|
|
||||||
|
var nilArgs []interface{}
|
||||||
|
_e.M.On("Emit", event.PLAYGROUND_NEW, uuid.NewV5(uuid.NamespaceOID, "localhost1").String(), nilArgs).Return()
|
||||||
|
_e.M.On("Emit", event.PLAYGROUND_NEW, uuid.NewV5(uuid.NamespaceOID, "localhost2").String(), nilArgs).Return()
|
||||||
_s.On("PlaygroundPut", mock.AnythingOfType("*types.Playground")).Return(nil)
|
_s.On("PlaygroundPut", mock.AnythingOfType("*types.Playground")).Return(nil)
|
||||||
|
|
||||||
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_g, _f, _s))
|
ipf := provisioner.NewInstanceProvisionerFactory(provisioner.NewWindowsASG(_f, _s), provisioner.NewDinD(_g, _f, _s))
|
||||||
|
|||||||
@@ -308,6 +308,15 @@ func (s *scheduler) Start() error {
|
|||||||
instance := &types.Instance{Name: instanceName}
|
instance := &types.Instance{Name: instanceName}
|
||||||
s.unscheduleInstance(instance)
|
s.unscheduleInstance(instance)
|
||||||
})
|
})
|
||||||
|
s.event.On(event.PLAYGROUND_NEW, func(playgroundId string, args ...interface{}) {
|
||||||
|
s.mx.Lock()
|
||||||
|
defer s.mx.Unlock()
|
||||||
|
|
||||||
|
log.Printf("EVENT: Playground New %s\n", playgroundId)
|
||||||
|
|
||||||
|
// We just update all playgrounds we manage to be safe. This is pretty fast anyway and this event should be fairly rare
|
||||||
|
s.updatePlaygrounds()
|
||||||
|
})
|
||||||
s.started = true
|
s.started = true
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
Reference in New Issue
Block a user