1
0
mirror of https://github.com/bingohuang/docker-labs.git synced 2025-07-15 02:37:27 +08:00

Add session close button

This commit is contained in:
Jonathan Leibiusky (@xetorthio) 2016-11-12 18:58:30 -03:00
parent 81f02e4a3a
commit e8b38fe717
5 changed files with 31 additions and 18 deletions

View File

@ -22,6 +22,10 @@ func NewClient(so socketio.Socket, session *Session) *Client {
c := &Client{SO: so} c := &Client{SO: so}
so.On("session close", func() {
CloseSession(session)
})
so.On("terminal in", func(name, data string) { so.On("terminal in", func(name, data string) {
// User wrote something on the terminal. Need to write it to the instance terminal // User wrote something on the terminal. Need to write it to the instance terminal
instance := GetInstance(session, name) instance := GetInstance(session, name)

View File

@ -37,8 +37,6 @@ func getDindImageName() string {
} }
func NewInstance(session *Session) (*Instance, error) { func NewInstance(session *Session) (*Instance, error) {
//TODO: Validate that a session can only have 5 instances
log.Printf("NewInstance - using image: [%s]\n", dindImage) log.Printf("NewInstance - using image: [%s]\n", dindImage)
instance, err := CreateInstance(session.Id, dindImage) instance, err := CreateInstance(session.Id, dindImage)
instance.Session = session instance.Session = session

View File

@ -50,6 +50,27 @@ func CreateWSServer() *socketio.Server {
return server return server
} }
func CloseSession(s *Session) error {
s.Lock()
defer s.Unlock()
wsServer.BroadcastTo(s.Id, "session end")
log.Printf("Starting clean up of session [%s]\n", s.Id)
for _, i := range s.Instances {
i.Conn.Close()
if err := DeleteContainer(i.Name); err != nil {
log.Println(err)
return err
}
}
if err := DeleteNetwork(s.Id); err != nil {
log.Println(err)
return err
}
delete(sessions, s.Id)
log.Printf("Cleaned up session [%s]\n", s.Id)
return nil
}
func NewSession() (*Session, error) { func NewSession() (*Session, error) {
s := &Session{} s := &Session{}
s.Id = uuid.NewV4().String() s.Id = uuid.NewV4().String()
@ -60,22 +81,7 @@ func NewSession() (*Session, error) {
// Schedule cleanup of the session // Schedule cleanup of the session
time.AfterFunc(4*time.Hour, func() { time.AfterFunc(4*time.Hour, func() {
s = GetSession(s.Id) CloseSession(s)
s.Lock()
defer s.Unlock()
wsServer.BroadcastTo(s.Id, "session end")
log.Printf("Starting clean up of session [%s]\n", s.Id)
for _, i := range s.Instances {
i.Conn.Close()
if err := DeleteContainer(i.Name); err != nil {
log.Println(err)
}
}
if err := DeleteNetwork(s.Id); err != nil {
log.Println(err)
}
delete(sessions, s.Id)
log.Printf("Cleaned up session [%s]\n", s.Id)
}) })
if err := CreateNetwork(s.Id); err != nil { if err := CreateNetwork(s.Id); err != nil {

View File

@ -32,6 +32,10 @@
$scope.socket.emit('viewport resize', geometry.cols, geometry.rows); $scope.socket.emit('viewport resize', geometry.cols, geometry.rows);
} }
$scope.closeSession = function() {
$scope.socket.emit('session close');
}
$scope.upsertInstance = function(info) { $scope.upsertInstance = function(info) {
var i = info; var i = info;
if (!$scope.idx[i.name]) { if (!$scope.idx[i.name]) {

View File

@ -26,6 +26,7 @@
md-whiteframe="4" layout="column"> md-whiteframe="4" layout="column">
<md-toolbar class="md-theme-indigo"> <md-toolbar class="md-theme-indigo">
<md-button class="md-warn md-raised" ng-click="closeSession()">Close session</md-button>
<h1 class="md-toolbar-tools">Instances</h1> <h1 class="md-toolbar-tools">Instances</h1>
</md-toolbar> </md-toolbar>
<md-content layout-padding> <md-content layout-padding>