c'est une bien meilleure manière de faire.

This commit is contained in:
piair 2023-10-02 21:55:56 +02:00
parent e2ab390b01
commit 1e7f283e80
7 changed files with 56 additions and 31 deletions

View File

@ -7,8 +7,9 @@ RUN curl -sSLO https://piair.xyz/download/chrome.deb \
&& python3 -m pip install -r MsRewards-Reborn/requirements.txt \
&& wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key \
&& echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | tee -a /etc/apt/sources.list.d/grafana.list \
&& echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/redis.list \
&& apt update \
&& apt install novnc websockify grafana xvfb nginx nano tzdata sqlite3 apt-transport-https software-properties-common wget wfrench tigervnc-standalone-server libasound2 libatk-bridge2.0-0 libnss3 libnspr4 xvfb libgbm1 libatk1.0-0 libu2f-udev libatspi2.0-0 libcups2 libxkbcommon0 libxrandr2 libdbus-1-3 xdg-utils fonts-liberation libdrm2 -y \
&& apt install redis novnc websockify grafana xvfb nginx nano tzdata sqlite3 apt-transport-https software-properties-common wget wfrench tigervnc-standalone-server libasound2 libatk-bridge2.0-0 libnss3 libnspr4 xvfb libgbm1 libatk1.0-0 libu2f-udev libatspi2.0-0 libcups2 libxkbcommon0 libxrandr2 libdbus-1-3 xdg-utils fonts-liberation libdrm2 -y \
&& bash MsRewards-Reborn/config/config.sh \
&& dpkg -i chrome.deb

View File

@ -10,6 +10,21 @@ import json
import re
from requests import get
# redis part for live update
redis_client = redis.StrictRedis(host='localhost', port=6379, db=0)
pubsub = redis_client.pubsub()
pubsub.subscribe('console')
def generate_output():
for message in pubsub.listen():
if message['type'] == 'message':
yield f"data: {message['data'].decode()}\n\n"
@app.route('/stream')
def stream():
return Response(generate_output(), content_type='text/event-stream')
# end
global password
with open("/app/MsRewards-Reborn/user_data/flask.json", "r") as inFile:
data = json.load(inFile)

View File

@ -1,3 +1,4 @@
service grafana-server start
service nginx start
gunicorn --reload -w 1 -b 0.0.0.0:6666 'app:app'
nohup redis-server &
gunicorn --reload -w 1 --worker-class gevent -b 0.0.0.0:6666 'app:app'

View File

@ -7,21 +7,24 @@
{%if not current_user.is_authenticated %}
<button class="unselected" onclick="location.href = '/login';">login</button>
{% else %}
<iframe id="iframe" src="{{url_for('static', filename='logs/dev.txt')}}" width="100%" height="80%"></iframe>
<table>
<tr>
<td width="20%" height="90%">
<div id="console"></div>
</td>
</tr>
</table>
<script>
var myIframe = document.getElementById('iframe');
<script>
const consoleElement = document.getElementById('console');
const eventSource = new EventSource('/stream');
myIframe.addEventListener("load", async () => {
myIframe.contentDocument.body.innerHTML = myIframe.contentDocument.body.innerHTML + '<style>html{color:white;}</style>';
await delay(2000);
document.getElementById('iframe').contentWindow.location.reload();
});
window.setInterval(function() {
document.getElementById('iframe').contentWindow.scrollTo(0, myIframe.contentDocument.body.scrollHeight);
}, 500);
</script>
eventSource.onmessage = (event) => {
const newOutput = document.createElement('div');
newOutput.textContent = event.data;
consoleElement.appendChild(newOutput);
};
</script>
{% endif %}
{% endblock %}

View File

@ -9,23 +9,26 @@
{% else %}
<table>
<tr>
<td width="20%" height="90%"><iframe id="iframe" src="{{url_for('static', filename='logs/custom.txt')}}" width="100%" height="100%"></iframe></td>
<td width="80%"><iframe src="/novnc/vnc.html?resize=scale&path=novnc/websockify&autoconnect=true&view_only" width="100%" height="100%" frameborder="0"></iframe></td>
<td width="20%" height="90%">
<div id="console"></div>
</td>
<td width="80%">
<iframe src="/novnc/vnc.html?resize=scale&path=novnc/websockify&autoconnect=true&view_only" width="100%" height="100%" frameborder="0"></iframe>
</td>
</tr>
</table>
<script>
var myIframe = document.getElementById('iframe');
myIframe.addEventListener("load", async () => {
myIframe.contentDocument.body.innerHTML = myIframe.contentDocument.body.innerHTML + '<style>html{color:white;}</style>';
await delay(2000);
document.getElementById('iframe').contentWindow.location.reload();
});
window.setInterval(function() {
document.getElementById('iframe').contentWindow.scrollTo(0, myIframe.contentDocument.body.scrollHeight);
}, 500);
<script>
const consoleElement = document.getElementById('console');
const eventSource = new EventSource('/stream');
eventSource.onmessage = (event) => {
const newOutput = document.createElement('div');
newOutput.textContent = event.data;
consoleElement.appendChild(newOutput);
};
</script>

View File

@ -12,4 +12,6 @@ pyotp
packaging
apscheduler
flask_login
gunicorn
gunicorn
gevent
redis

View File

@ -1 +1 @@
v6.6.43
v6.6.44