Este commit está contenido en:
Your Name
2020-05-27 18:35:33 +00:00
padre 6f5d5e501c
commit 167e394d08
Se han modificado 5 ficheros con 130 adiciones y 0 borrados

Ver fichero

@@ -0,0 +1,26 @@
version: '2'
services:
tail:
image: node:12-slim
restart: always
hostname: tail
container_name: tail
working_dir: /tail
entrypoint:
- node
- index
volumes:
- ./tail:/tail
- /opt/docker/production/nginx/logs/access.log:/access.log:ro
- /opt/docker/production/fail2ban/fail2ban.log:/fail2ban.log:ro
networks:
mynet:
ipv4_address: 172.28.0.101
networks:
mynet:
driver: bridge
ipam:
config:
- subnet: 172.28.0.0/24

41
production/tail/tail/index.js Archivo normal
Ver fichero

@@ -0,0 +1,41 @@
const http = require('http'),
express = require('express'),
app = express(),
ts = require('tail-stream'),
Transform = require('stream').Transform,
server = http.createServer(app).listen(80, () => {
console.log(`Listening on: ${server.address().address}:${server.address().port}`)
})/*.on('connection', socket => {
socket.setTimeout(300 * 1000)
})*/
server.keepAliveTimeout = 300 * 1000
server.timeout = 300 * 1000
app.disable('x-powered-by').use('/tail', (req, res, next) => {
res.header('Content-Type', 'text/event-stream')
res.header('Connection', 'keep-alive')
res.header('Cache-Control', 'no-cache')
const transform = new Transform({
transform: (chunk, enc, cb) => {
cb(null, Buffer.from(chunk.toString().replace(/\n/, '\n\ndata: ')))
}
})
res.on('close', () => {
transform.destroy()
})
ts.createReadStream('/access.log', { beginAt: 'end' }).pipe(transform).pipe(res)
}).use('/f2b', (req, res, next) => {
res.header('Content-Type', 'text/event-stream')
res.header('Connection', 'keep-alive')
res.header('Cache-Control', 'no-cache')
const transform = new Transform({
transform: (chunk, enc, cb) => {
cb(null, Buffer.from(chunk.toString().replace(/\n/, '\n\ndata: ')))
}
})
res.on('close', () => {
transform.destroy()
})
ts.createReadStream('/fail2ban.log', { beginAt: 'end' }).pipe(transform).pipe(res)
}).use(express.static(__dirname + '/public'))

Ver fichero

@@ -0,0 +1,12 @@
{
"name": "tail",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"express": "*",
"tail-stream": "*"
},
"author": "",
"license": "MIT"
}

Ver fichero

@@ -0,0 +1,27 @@
<!DOCTYPE html>
<html>
<head>
<script>
window.onload = function () {
var source = new EventSource('/f2b'),
timeout,
scroll = true
source.onmessage = function (event) {
document.getElementById('result').innerHTML += '<li>' + event.data.replace(/ Ban/i,' <span style="color:white;background-color:black;">Ban</span>') + '</li>'
timeout ? window.clearTimeout(timeout) : null
timeout = window.setTimeout(window.location.reload, 4 * 60 * 1000, false)
document.body.addEventListener("click", function(event) {
scroll = scroll ? false : true
})
scroll ? window.scrollTo(0,document.body.scrollHeight) : null
}
source.onerror = function (error) {
console.error(error)
}
}
</script>
</head>
<body>
<ol id="result"></ol>
</body>
</html>

Ver fichero

@@ -0,0 +1,24 @@
<!DOCTYPE html>
<html>
<head>
<script>
window.onload = function () {
var source = new EventSource('/tail'),
scroll = true
source.onmessage = function (event) {
document.getElementById('result').innerHTML += '<li>' + event.data.replace(/hatthieves/i,'<span style="color:white;background-color:black;">hatthieves</span>') + '</li>'
document.body.addEventListener("click", function(event) {
scroll = scroll ? false : true
})
scroll ? window.scrollTo(0,document.body.scrollHeight) : null
}
source.onerror = function (error) {
console.error(error)
}
}
</script>
</head>
<body>
<ol id="result"></ol>
</body>
</html>