-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtest.diff
More file actions
86 lines (82 loc) · 2.32 KB
/
Copy pathtest.diff
File metadata and controls
86 lines (82 loc) · 2.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
diff --git a/server.js b/server.js
index f092e85..549f3c7 100644
--- a/server.js
+++ b/server.js
@@ -11,12 +11,36 @@ let api = new Hyper()
app.use(express.static('build'))
+let activeRequest = null
io.on('connection', function (socket) {
- socket.emit('news', { hello: 'world' });
- socket.on('my other event', function (data) {
- console.log(data);
- });
-});
+ socket.on('startlogs', function (data) {
+ startLogs(socket, data.container)
+ })
+ socket.on('stoplogs', () => {
+ activeRequest.abort()
+ })
+ socket.on('disconnect', () => {
+ if(activeRequest) {
+ activeRequest.abort()
+ }
+ })
+})
+
+function startLogs(socket, containerId) {
+ let fetchOptions = api.sign('POST', `/containers/${containerId}/attach?logs=1&stream=0&stdout=1`)
+ var request = require('request')
+ let through2 = require('through2')
+ activeRequest = request.post({
+ url: fetchOptions.fullUrl,
+ headers: fetchOptions.headers
+ })
+ activeRequest.pipe(through2((chunk, enc, callback) => {
+ let logLine = chunk.slice(8, chunk.length).toString()
+ console.log('log emitted', logLine)
+ socket.emit('logs', logLine)
+ callback(null, chunk.slice(8, chunk.length))
+ }))
+}
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
diff --git a/src/components/Sidebar/index.js b/src/components/Sidebar/index.js
index 620f0a9..aaf461b 100644
--- a/src/components/Sidebar/index.js
+++ b/src/components/Sidebar/index.js
@@ -1,10 +1,35 @@
import React, { Component } from 'react'
+let io = window.io
export default class Sidebar extends Component {
+ constructor() {
+ super()
+ this.state = {
+ logs: []
+ }
+ }
+ componentDidMount() {
+ this.socket = io.connect('http://localhost:9000');
+ this.socket.emit('startlogs', { container: this.props.activeContainer })
+ this.socket.on('logs', (data) => {
+ let oldLogs = this.state.logs.slice()
+ oldLogs.push(data)
+ this.setState({
+ logs: oldLogs
+ })
+ })
+ }
+ componentWillUnmount() {
+ this.socket.emit('stoplogs')
+ this.socket.close()
+ }
render() {
return (
<div className='App_Sidebar'>
<h1>Logs for {this.props.activeContainer}</h1>
+ <pre>
+ {this.state.logs.map((l, key) => <div key={key}>{l}</div>)}
+ </pre>
</div>
)
}