1
0
mirror of https://github.com/bingohuang/docker-labs.git synced 2025-07-14 10:17:26 +08:00

Merge pull request #34 from franela/session-expiration-clock

Add expiration clock to sessions
This commit is contained in:
Jonathan Leibiusky 2016-11-15 13:37:29 -03:00 committed by GitHub
commit a552e19ec6
4 changed files with 23 additions and 0 deletions

View File

@ -19,6 +19,8 @@ type Session struct {
Id string `json:"id"` Id string `json:"id"`
Instances map[string]*Instance `json:"instances"` Instances map[string]*Instance `json:"instances"`
clients []*Client `json:"-"` clients []*Client `json:"-"`
CreatedAt time.Time `json:"created_at"`
ExpiresAt time.Time `json:"expires_at"`
} }
func (s *Session) Lock() { func (s *Session) Lock() {
@ -87,6 +89,8 @@ func NewSession() (*Session, error) {
s := &Session{} s := &Session{}
s.Id = uuid.NewV4().String() s.Id = uuid.NewV4().String()
s.Instances = map[string]*Instance{} s.Instances = map[string]*Instance{}
s.CreatedAt = time.Now()
s.ExpiresAt = s.CreatedAt.Add(4 * time.Hour)
log.Printf("NewSession id=[%s]\n", s.Id) log.Printf("NewSession id=[%s]\n", s.Id)
sessions[s.Id] = s sessions[s.Id] = s

View File

@ -9,6 +9,7 @@
$scope.idx = {}; $scope.idx = {};
$scope.selectedInstance = null; $scope.selectedInstance = null;
$scope.isAlive = true; $scope.isAlive = true;
$scope.ttl = '--:--:--';
angular.element($window).bind('resize', function(){ angular.element($window).bind('resize', function(){
if ($scope.selectedInstance) { if ($scope.selectedInstance) {
@ -68,6 +69,13 @@
method: 'GET', method: 'GET',
url: '/sessions/' + $scope.sessionId, url: '/sessions/' + $scope.sessionId,
}).then(function(response) { }).then(function(response) {
if (response.data.created_at) {
$scope.expiresAt = moment(response.data.expires_at);
setInterval(function() {
$scope.ttl = moment.utc($scope.expiresAt.diff(moment())).format('HH:mm:ss');
$scope.$apply();
}, 1000);
}
var socket = io({path: '/sessions/' + sessionId + '/ws'}); var socket = io({path: '/sessions/' + sessionId + '/ws'});
socket.on('terminal out', function(name, data) { socket.on('terminal out', function(name, data) {

View File

@ -1,3 +1,5 @@
@import url('http://fonts.googleapis.com/css?family=Rationale');
.selected button { .selected button {
background-color: rgba(158,158,158,0.2); background-color: rgba(158,158,158,0.2);
} }
@ -18,3 +20,10 @@ md-card-content.terminal {
.terminal .xterm-rows { .terminal .xterm-rows {
background-color: #000; background-color: #000;
} }
.clock {
font-family: 'Rationale', sans-serif;
font-size: 3.0em;
color: #1da4eb;
text-align: center;
}

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">
<span class="clock">{{ttl}}</span>
<md-button class="md-warn md-raised" ng-click="closeSession()">Close session</md-button> <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>
@ -89,6 +90,7 @@
<script src="/assets/xterm.js"></script> <script src="/assets/xterm.js"></script>
<script src="/assets/xterm-addons/fit.js"></script> <script src="/assets/xterm-addons/fit.js"></script>
<script src="/assets/attach.js"></script> <script src="/assets/attach.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.16.0/moment.min.js"></script>
<script type="text/javascript" charset="utf-8"> <script type="text/javascript" charset="utf-8">
window.onbeforeunload = function (e) { window.onbeforeunload = function (e) {
e = e || window.event; e = e || window.event;