Add Discord logging
This commit is contained in:
6
Jenkinsfile
vendored
6
Jenkinsfile
vendored
@@ -4,6 +4,8 @@ pipeline {
|
|||||||
environment {
|
environment {
|
||||||
TS = credentials('jc_turnstile')
|
TS = credentials('jc_turnstile')
|
||||||
DISCORD = credentials('jc_discord')
|
DISCORD = credentials('jc_discord')
|
||||||
|
DISCORD_ERR_STAGING('jc_discord_err_staging')
|
||||||
|
DISCORD_ERR_PROD('jc_discord_err_prod')
|
||||||
}
|
}
|
||||||
|
|
||||||
stages{
|
stages{
|
||||||
@@ -58,7 +60,7 @@ pipeline {
|
|||||||
sh "docker pull registry.jakecharman.co.uk/jakecharman.co.uk:latest"
|
sh "docker pull registry.jakecharman.co.uk/jakecharman.co.uk:latest"
|
||||||
sh "docker stop jake || true"
|
sh "docker stop jake || true"
|
||||||
sh "docker rm jake || true"
|
sh "docker rm jake || true"
|
||||||
sh "docker run --name jake -e DISCORD_WEBHOOK=$DISCORD -e TURNSTILE_SECRET=$TS --restart always --network containers_default -v /opt/containers/jc/projects/:/var/www/jc/projects/ -d registry.jakecharman.co.uk/jakecharman.co.uk:latest"
|
sh "docker run --name jake -e DISCORD_ERR_HOOK=$DISCORD_ERR_STAGING -e DISCORD_WEBHOOK=$DISCORD -e TURNSTILE_SECRET=$TS --restart always --network containers_default -v /opt/containers/jc/projects/:/var/www/jc/projects/ -d registry.jakecharman.co.uk/jakecharman.co.uk:latest"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -98,7 +100,7 @@ pipeline {
|
|||||||
sh "docker pull registry.jakecharman.co.uk/jakecharman.co.uk:latest"
|
sh "docker pull registry.jakecharman.co.uk/jakecharman.co.uk:latest"
|
||||||
sh "docker stop jake || true"
|
sh "docker stop jake || true"
|
||||||
sh "docker rm jake || true"
|
sh "docker rm jake || true"
|
||||||
sh "docker run --name jake -e DISCORD_WEBHOOK=$DISCORD -e TURNSTILE_SECRET=$TS --restart always --network containers_default -v /opt/containers/jc/projects/:/var/www/jc/projects/ -d registry.jakecharman.co.uk/jakecharman.co.uk:latest"
|
sh "docker run --name jake -e DISCORD_ERR_HOOK=$DISCORD_ERR_PROD -e DISCORD_WEBHOOK=$DISCORD -e TURNSTILE_SECRET=$TS --restart always --network containers_default -v /opt/containers/jc/projects/:/var/www/jc/projects/ -d registry.jakecharman.co.uk/jakecharman.co.uk:latest"
|
||||||
sh "/home/jenkins/clearCFCache/clearCache.py a514fb61e1413b88aabbb19df16b8508"
|
sh "/home/jenkins/clearCFCache/clearCache.py a514fb61e1413b88aabbb19df16b8508"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -9,5 +9,4 @@ if [[ -d "../jc-content" ]]; then
|
|||||||
content_dir="-v $(realpath ../jc-content):/var/www/jc/projects"
|
content_dir="-v $(realpath ../jc-content):/var/www/jc/projects"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
docker run -v $(pwd)/src/:/var/www/jc $content_dir jc-ng-localtest
|
docker run -e DISCORD_ERR_HOOK=dummy $1 -v $(pwd)/src/:/var/www/jc $content_dir jc-ng-localtest
|
||||||
|
|
||||||
|
37
src/index.py
37
src/index.py
@@ -1,12 +1,49 @@
|
|||||||
#!/usr/bin/python3
|
#!/usr/bin/python3
|
||||||
|
|
||||||
from flask import Flask, render_template, Response
|
from flask import Flask, render_template, Response
|
||||||
|
import traceback
|
||||||
|
from os import environ
|
||||||
|
import threading
|
||||||
|
from requests import post
|
||||||
|
import logging
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
|
||||||
import projects
|
import projects
|
||||||
import contact
|
import contact
|
||||||
|
|
||||||
|
class DiscordLogger(logging.Handler):
|
||||||
|
''' Simple logging handler to send a message to Discord '''
|
||||||
|
|
||||||
|
level = logging.ERROR
|
||||||
|
|
||||||
|
def __init__(self, webhook):
|
||||||
|
super().__init__()
|
||||||
|
self._webhook = webhook
|
||||||
|
|
||||||
|
def send_to_discord(self, msg: logging.LogRecord):
|
||||||
|
''' Send the message '''
|
||||||
|
if msg.exc_info is not None:
|
||||||
|
message_to_send = f'{msg.msg}\n\n{"".join(traceback.format_exception(*msg.exc_info))}'
|
||||||
|
else:
|
||||||
|
message_to_send = msg.msg
|
||||||
|
if len(message_to_send) > 2000:
|
||||||
|
chars_to_lose = len(message_to_send) - 2000
|
||||||
|
if msg.exc_info is not None:
|
||||||
|
message_to_send = f'{msg.msg}\n\n{"".join(traceback.format_exception(*msg.exc_info))[-chars_to_lose:]}'
|
||||||
|
else:
|
||||||
|
message_to_send = msg.msg[-chars_to_lose:]
|
||||||
|
post(self._webhook, data={'content': message_to_send}, timeout=30)
|
||||||
|
|
||||||
|
def emit(self, record: logging.LogRecord) -> None:
|
||||||
|
''' Take in the record and start a new thread to send it to Discord '''
|
||||||
|
app.logger.info('Sending error to Discord')
|
||||||
|
dc_thread = threading.Thread(target=self.send_to_discord, args=[record])
|
||||||
|
dc_thread.start()
|
||||||
|
|
||||||
|
discord_logger = DiscordLogger(environ['DISCORD_ERR_HOOK'])
|
||||||
|
app.logger.addHandler(discord_logger)
|
||||||
|
|
||||||
@app.route('/')
|
@app.route('/')
|
||||||
def index():
|
def index():
|
||||||
return render_template('index.html')
|
return render_template('index.html')
|
||||||
|
Reference in New Issue
Block a user