mirror of https://github.com/mthenw/frontail.git
Files on socket.io namespace
parent
fcbef4a122
commit
146c53500c
9
index.js
9
index.js
|
@ -1,5 +1,6 @@
|
|||
var connect = require('connect');
|
||||
var cookieParser = require('cookie');
|
||||
var crypto = require('crypto');
|
||||
var daemon = require('daemon');
|
||||
var fs = require('fs');
|
||||
var http = require('http');
|
||||
|
@ -41,6 +42,7 @@ var connectBuilder = require('./lib/connect_builder');
|
|||
var doAuthorization = false;
|
||||
var sessionSecret = null;
|
||||
var sessionKey = null;
|
||||
var filesNamespace = null;
|
||||
if (program.args.length === 0) {
|
||||
console.error('Arguments needed, use --help');
|
||||
process.exit();
|
||||
|
@ -50,6 +52,7 @@ var connectBuilder = require('./lib/connect_builder');
|
|||
sessionSecret = String(+new Date()) + Math.random();
|
||||
sessionKey = 'sid';
|
||||
}
|
||||
filesNamespace = crypto.createHash('md5').update(program.args.join(' ')).digest('hex');
|
||||
}
|
||||
|
||||
if (program.daemonize) {
|
||||
|
@ -86,7 +89,7 @@ var connectBuilder = require('./lib/connect_builder');
|
|||
}
|
||||
|
||||
builder.static(__dirname + '/lib/web/assets');
|
||||
builder.index(__dirname + '/lib/web/index.html', program.args.join(' '), program.theme);
|
||||
builder.index(__dirname + '/lib/web/index.html', program.args.join(' '), filesNamespace, program.theme);
|
||||
|
||||
var app = builder.build();
|
||||
var server;
|
||||
|
@ -125,7 +128,7 @@ var connectBuilder = require('./lib/connect_builder');
|
|||
* When connected send starting data
|
||||
*/
|
||||
var tailer = tail(program.args, {buffer: program.number});
|
||||
io.sockets.on('connection', function (socket) {
|
||||
var filesSocket = io.of('/' + filesNamespace).on('connection', function (socket) {
|
||||
socket.emit('options:lines', program.lines);
|
||||
|
||||
tailer.getBuffer().forEach(function (line) {
|
||||
|
@ -137,7 +140,7 @@ var connectBuilder = require('./lib/connect_builder');
|
|||
* Send incoming data
|
||||
*/
|
||||
tailer.on('line', function (line) {
|
||||
io.sockets.emit('line', sanitizer(line).xss());
|
||||
filesSocket.emit('line', sanitizer(line).xss());
|
||||
});
|
||||
}
|
||||
})();
|
||||
|
|
|
@ -20,15 +20,16 @@ var fs = require('fs');
|
|||
return this.app;
|
||||
};
|
||||
|
||||
ConnectBuilder.prototype.index = function (path, title, theme) {
|
||||
ConnectBuilder.prototype.index = function (path, files, filesNamespace, theme) {
|
||||
theme = theme || 'default';
|
||||
|
||||
this.app.use(function (req, res) {
|
||||
fs.readFile(path, function (err, data) {
|
||||
res.writeHead(200, {'Content-Type': 'text/html'});
|
||||
res.end(data.toString('utf-8')
|
||||
.replace(/__TITLE__/g, title)
|
||||
.replace(/__THEME__/g, theme),
|
||||
.replace(/__TITLE__/g, files)
|
||||
.replace(/__THEME__/g, theme)
|
||||
.replace(/__NAMESPACE__/g, filesNamespace),
|
||||
'utf-8'
|
||||
);
|
||||
});
|
||||
|
|
|
@ -90,7 +90,7 @@ window.App = (function (window, document, io) {
|
|||
var that = this;
|
||||
|
||||
// socket.io init
|
||||
_socket = new io.connect();
|
||||
_socket = new io.connect('/' + opts.namespace);
|
||||
_socket
|
||||
.on('options:lines', function (limit) {
|
||||
_linesLimit = limit;
|
||||
|
|
|
@ -17,7 +17,8 @@
|
|||
<script type="text/javascript">
|
||||
window.load = App.init({
|
||||
container: document.getElementsByClassName('log')[0],
|
||||
filterInput: document.getElementsByClassName('query')[0]
|
||||
filterInput: document.getElementsByClassName('query')[0],
|
||||
namespace: '__NAMESPACE__'
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -64,7 +64,7 @@ var connectBuilder = require('../lib/connect_builder');
|
|||
});
|
||||
|
||||
it('builds app that serve index file', function (done) {
|
||||
var app = connectBuilder().index(__dirname + '/fixtures/index').build();
|
||||
var app = connectBuilder().index(__dirname + '/fixtures/index', '/testfile').build();
|
||||
|
||||
app
|
||||
.request()
|
||||
|
@ -78,39 +78,50 @@ var connectBuilder = require('../lib/connect_builder');
|
|||
|
||||
it('builds app that replace index title', function (done) {
|
||||
var app = connectBuilder()
|
||||
.index(__dirname + '/fixtures/index_with_title', 'Test')
|
||||
.index(__dirname + '/fixtures/index_with_title', '/testfile')
|
||||
.build();
|
||||
|
||||
app
|
||||
.request()
|
||||
.get('/')
|
||||
.expect('<head><title>Test</title></head>', done);
|
||||
.expect('<head><title>/testfile</title></head>', done);
|
||||
});
|
||||
|
||||
it('builds app that sets socket.io namespace based on files', function (done) {
|
||||
var app = connectBuilder()
|
||||
.index(__dirname + '/fixtures/index_with_ns', '/testfile', 'ns', 'dark')
|
||||
.build();
|
||||
|
||||
app
|
||||
.request()
|
||||
.get('/')
|
||||
.expect('ns', done);
|
||||
});
|
||||
|
||||
it('builds app that sets theme', function (done) {
|
||||
var app = connectBuilder()
|
||||
.index(__dirname + '/fixtures/index_with_theme', 'Test', 'dark')
|
||||
.index(__dirname + '/fixtures/index_with_theme', '/testfile', 'ns', 'dark')
|
||||
.build();
|
||||
|
||||
app
|
||||
.request()
|
||||
.get('/')
|
||||
.expect(
|
||||
'<head><title>Test</title><link href="dark.css" rel="stylesheet" type="text/css"/></head>',
|
||||
'<head><title>/testfile</title><link href="dark.css" rel="stylesheet" type="text/css"/></head>',
|
||||
done
|
||||
);
|
||||
});
|
||||
|
||||
it('builds app that sets default theme', function (done) {
|
||||
var app = connectBuilder()
|
||||
.index(__dirname + '/fixtures/index_with_theme', 'Test')
|
||||
.index(__dirname + '/fixtures/index_with_theme', '/testfile')
|
||||
.build();
|
||||
|
||||
app
|
||||
.request()
|
||||
.get('/')
|
||||
.expect(
|
||||
'<head><title>Test</title><link href="default.css" rel="stylesheet" type="text/css"/></head>',
|
||||
'<head><title>/testfile</title><link href="default.css" rel="stylesheet" type="text/css"/></head>',
|
||||
done
|
||||
);
|
||||
});
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
__NAMESPACE__
|
Loading…
Reference in New Issue