Merge pull request #128 from resin-io/remove-terminal

Remove the old terminal code
This commit is contained in:
Page- 2016-04-17 00:48:08 +01:00
commit d0318c47d6
7 changed files with 1 additions and 228 deletions

View File

@ -107,78 +107,6 @@ $
<hr>
### POST /v1/spawn-tty
Starts a web terminal session.
When successful, responds with 200 and the URL of the terminal.
#### Request body
Has to be a JSON object with an `appId` property, corresponding to the ID of the application the device is running.
Example:
```json
{
"appId": 2167
}
```
#### Examples:
From the app on the device:
```bash
$ curl -X POST --header "Content-Type:application/json" \
--data '{"appId": <appId>}' \
"$RESIN_SUPERVISOR_ADDRESS/v1/spawn-tty?apikey=$RESIN_SUPERVISOR_API_KEY"
```
Response:
```none
http://124135325.ngrok.com
```
Remotely via the API proxy:
```bash
$ curl -X POST --header "Content-Type:application/json" \
--header "Authorization: Bearer <auth token>" \
--data '{"deviceId": <deviceId>, "appId": <appId>, "data": {"appId": <appId>}}' \
"https://api.resin.io/supervisor/v1/spawn-tty"
```
<hr>
### POST /v1/despawn-tty
Stops a web terminal session.
When successful, responds with an empty 200 response.
#### Request body
Has to be a JSON object with an `appId` property, corresponding to the ID of the application the device is running.
Example:
```json
{
"appId": 2167
}
```
#### Examples:
From the app on the device:
```bash
$ curl -X POST --header "Content-Type:application/json" \
--data '{"appId": <appId>}' \
"$RESIN_SUPERVISOR_ADDRESS/v1/despawn-tty?apikey=$RESIN_SUPERVISOR_API_KEY"
```
(Empty response)
Remotely via the API proxy:
```bash
$ curl -X POST --header "Content-Type:application/json" \
--header "Authorization: Bearer <auth token>" \
--data '{"deviceId": <deviceId>, "appId": <appId>, "data": {"appId": <appId>}}' \
"https://api.resin.io/supervisor/v1/despawn-tty"
```
<hr>
### POST /v1/reboot
Reboots the device

View File

@ -19,16 +19,13 @@
"lodash": "^3.0.0",
"mixpanel": "0.0.20",
"network-checker": "~0.0.5",
"ngrok": "~0.1.97",
"pinejs-client": "^1.7.1",
"pubnub": "^3.7.13",
"request": "^2.51.0",
"resin-register-device": "^2.0.0",
"request-progress": "^0.3.1",
"rwlock": "^5.0.0",
"server-destroy": "^1.0.0",
"sqlite3": "~3.0.4",
"tty.js": "0.2.14-1",
"typed-error": "~0.1.0"
},
"engines": {

View File

@ -1,7 +1,6 @@
Promise = require 'bluebird'
fs = Promise.promisifyAll require 'fs'
utils = require './utils'
tty = require './lib/tty'
knex = require './db'
express = require 'express'
bodyParser = require 'body-parser'
@ -37,36 +36,6 @@ module.exports = (application) ->
application.update(req.body.force)
res.sendStatus(204)
api.post '/v1/spawn-tty', (req, res) ->
appId = req.body.appId
utils.mixpanelTrack('Spawn tty', appId)
if !appId?
return res.status(400).send('Missing app id')
knex('app').select().where({ appId })
.then ([ app ]) ->
if !app?
throw new Error('App not found')
tty.start(app)
.then ({url}) ->
res.status(200).send(url)
.catch (err) ->
res.status(503).send(err?.message or err or 'Unknown error')
api.post '/v1/despawn-tty', (req, res) ->
appId = req.body.appId
utils.mixpanelTrack('Despawn tty', appId)
if !appId?
return res.status(400).send('Missing app id')
knex('app').select().where({ appId })
.then ([ app ]) ->
if !app?
throw new Error('App not found')
tty.stop(app)
.then ->
res.sendStatus(200)
.catch (err) ->
res.status(503).send(err?.message or err or 'Unknown error')
api.post '/v1/reboot', (req, res) ->
utils.mixpanelTrack('Reboot')
request.post(config.gosuperAddress + '/v1/reboot')

View File

@ -7,7 +7,6 @@ config = require './config'
dockerUtils = require './docker-utils'
Promise = require 'bluebird'
utils = require './utils'
tty = require './lib/tty'
logger = require './lib/logger'
{ cachedResinApi } = require './request'
device = require './device'
@ -100,12 +99,7 @@ application.kill = kill = (app, updateDB = true) ->
logSystemEvent(logTypes.stopApp, app)
device.updateState(status: 'Stopping')
container = docker.getContainer(app.containerId)
tty.stop(app)
.catch (err) ->
console.error('Error stopping tty', err)
return # Even if stopping the tty fails we want to finish stopping the container
.then ->
container.stopAsync(t: 10)
container.stopAsync(t: 10)
.then ->
container.removeAsync(v: true)
# Bluebird throws OperationalError for errors resulting in the normal execution of a promisified function.

View File

@ -1,65 +0,0 @@
html, body {
display: block;
margin: 0;
}
body {
padding: 20px;
}
body > h1 {
display: none;
}
#help, #lights {
display: none;
}
#open {
position: static;
-ms-user-select: none;
-moz-user-select: none;
-webkit-user-select: none;
user-select: none;
background: #75ddff;
border: 1px solid #5cd6ff;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
color: white;
cursor: pointer;
outline: 0;
display: inline-block;
font-size: 15px;
font-weight: normal;
line-height: 21px;
margin-bottom: 0;
padding: 6px 12px;
text-align: center;
text-decoration: none;
text-transform: uppercase;
vertical-align: middle;
white-space: nowrap;
}
#open:hover, #open:active {
outline: 0;
background-color: #42d0ff;
border-color: #1ec7ff;
color: white;
}
#open:active {
-moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.window {
margin-left: 20px;
margin-top: 20px;
}

View File

View File

@ -1,50 +0,0 @@
_ = require 'lodash'
Promise = require 'bluebird'
TypedError = require 'typed-error'
# Only load ngrok/tty when they are actually needed,
# to reduce memory in the likely case they are never used.
ngrok = null
tty = null
enableDestroy = null
init = _.once ->
ngrok = Promise.promisifyAll require 'ngrok'
tty = Promise.promisifyAll require 'tty.js'
enableDestroy = require 'server-destroy'
class DisconnectedError extends TypedError
# socat UNIX:/data/host -,raw,echo=0
apps = {}
nextPort = 81
exports.start = (app) ->
init()
apps[app.id] ?= Promise.rejected()
return apps[app.id] = apps[app.id].catch ->
port = nextPort++
server = tty.createServer
shell: './src/enterContainer.sh'
shellArgs: do ->
i = 0
return (session) -> [ app.containerId, session.id, i++ ]
static: __dirname + '/static'
enableDestroy(server.server)
Promise.props
server: server.listenAsync(port, null).return(server.server)
url: ngrok.connectAsync(port)
exports.stop = (app) ->
if !apps[app.id]?
return Promise.resolve()
apps[app.id] = apps[app.id].then ({server, url}) ->
destroy = Promise.promisify(server.destroy, server)
Promise.join(
destroy()
# ngrok must have been loaded already or we wouldn't have a url to disconnect from.
ngrok.disconnectAsync(url)
->
# We throw an error so that `.start` will catch and restart the session.
throw new DisconnectedError()
)
return apps[app.id].catch DisconnectedError, -> # All good, since we want to disconnect here!