Compare commits

..

3 Commits

Author SHA1 Message Date
f5f04ec782 add: data 2025-09-08 08:24:49 +02:00
66ded84720 add: better css & milestone 2025-07-29 17:19:42 +02:00
f0cd6ccc12 add: docker 2024-10-03 16:25:35 +02:00
6 changed files with 307 additions and 117 deletions

4
.gitignore vendored
View File

@ -1,2 +1,6 @@
.env
bozo
bin
lib
lib64
pyvenv.cfg

14
Dockerfile Normal file
View File

@ -0,0 +1,14 @@
FROM python:alpine
WORKDIR /app
RUN apk update && apk upgrade
RUN apk add python3 py3-pip
RUN python3 -m pip config set global.require-virtualenv False
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
ENTRYPOINT ["python3", "main.py"]

16
docker-compose.yml Normal file
View File

@ -0,0 +1,16 @@
version: '3.8'
name: ca42
services:
flask:
build: .
image: ca42
container_name: flask
restart: always
volumes:
- type: bind
source: .
target: /app
ports:
- 5000:5000

22
main.py
View File

@ -24,14 +24,28 @@ def update():
f.write(values)
return redirect('/')
def record():
global values
tmp = values.split(' ')
today = datetime.datetime.today()
longer = 0
if len(tmp) == 0:
return 0
if len(tmp) < 2:
return abs(datetime.datetime.strptime(tmp[0], "%Y-%m-%d") - today).days
for i in range(0, len(tmp) - 1):
if abs((datetime.datetime.strptime(tmp[i], "%Y-%m-%d").date() - datetime.datetime.strptime(tmp[i + 1], "%Y-%m-%d").date()).days) > longer:
longer = abs((datetime.datetime.strptime(tmp[i], "%Y-%m-%d").date() - datetime.datetime.strptime(tmp[i + 1], "%Y-%m-%d").date()).days)
if abs((today - datetime.datetime.strptime(tmp[-1], "%Y-%m-%d")).days) > longer:
longer = abs((today - datetime.datetime.strptime(tmp[-1], "%Y-%m-%d")).days)
return longer
@app.route("/", methods = ['GET'])
def normal():
print(values.split(" "))
return render_template('home.html', dates = wrap(values, 10), total = len(values.split(' ')), days = (datetime.datetime.today().date() - datetime.datetime.strptime(values.split(' ')[-1], "%Y-%m-%d").date()).days)
@app.route('/data', methods = ['GET'])
return render_template('home.html', longer = record(), dates = wrap(values, 10), total = len(values.split(' ')), days = (datetime.datetime.today().date() - datetime.datetime.strptime(values.split(' ')[-1], "%Y-%m-%d").date()).days)
@app.route("/data", methods = ['GET'])
def data():
return render_template('data.html')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=1)

View File

@ -1 +1,115 @@
<h1>zzz</h1>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>CA42 - Compteur</title>
<link href="https://fonts.googleapis.com/css2?family=Aldrich&family=Roboto&family=Teko&display=swap" rel="stylesheet">
<style>
body {
font-family: 'Roboto', Helvetica, Arial, sans-serif;
font-weight: 400;
}
h1, h2 {
text-transform: uppercase;
}
header {
min-height: 100px;
background: #29AC51;
color: #fff;
text-align: center;
}
header h1 {
padding: 30px;
margin: auto;
font-size: 50px;
}
#desc {
max-width: 550px;
text-align: center;
margin: auto;
padding: 10px 0 15px 0;
}
#counter {
max-width: 500px;
margin: auto;
padding: 10px 0 20px 0;
text-align: center;
}
h2 {
font-size: 50px;
font-family: 'Roboto', Helvetica, Arial, sans-serif;
}
#days {
font-family: 'Aldrich', sans-serif;
font-size: 55px;
padding: 10px 0 50px 0;
color: red;
}
#record {
font-family: 'Teko', sans-serif;
font-size: 30px;
}
#incident-btn {
padding: 35px 45px;
max-width: 150px;
text-align: center;
margin: auto;
color: #fff;
text-transform: uppercase;
font-size: 30px;
background: #B00000;
border-bottom: solid #A20000 4px;
cursor: pointer;
user-select: none;
}
#incident-btn:hover {
background-color: #ff0000;
}
.btn-text {
text-align: center;
padding-top: 15px;
}
</style>
</head>
<body>
<header>
<h1>ca42</h1>
</header>
<div id="desc">
<p>
Data sur les incidents enregistrés
</p>
</div>
<div id="counter">
<h2>Année avec le plus d'incident:</h2>
<p id="days">{{days}}</p>
<div>
<p id="last-incident"></p>
</div>
<div>
<p id="record">
Nombre total de problèmes : {{total}}<br>
Record de jours sans problèmes: {{longer}}
</p>
</div>
</div>
</body>
</html>

View File

@ -1,51 +1,67 @@
<link rel="stylesheet" href="../styles.css">
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>CA42 - Compteur</title>
<link href="https://fonts.googleapis.com/css2?family=Aldrich&family=Roboto&family=Teko&display=swap" rel="stylesheet">
<style>
body {
font-family: "Helvetica Neue", Helvetica, Arial;
font-weight: regular;
font-family: 'Roboto', Helvetica, Arial, sans-serif;
font-weight: 400;
}
h1, h2 {
text-transform: uppercase;
}
header {
min-height: 100px;
background: #29AC51;
color: #fff;
text-align: center;
h1 {
}
header h1 {
padding: 30px;
margin: auto;
font-size: 50px;
}
}
#desc {
max-width: 550px;
text-align: center;
margin: auto;
padding: 50px 0px 25px 0px;
padding: 10px 0 15px 0;
}
#counter {
max-width: 500px;
margin: auto;
padding: 25px 0 50px 0;
padding: 10px 0 20px 0;
text-align: center;
}
h2 {
font-size: 50px;
font-family: 'Teko', sans-serif;
font-family: 'Roboto', Helvetica, Arial, sans-serif;
}
#days {
font-family: 'Aldrich', sans-serif;
font-size: 55px;
padding: 50px 0 50px 0;
padding: 10px 0 50px 0;
color: red;
}
#record {
font-family: 'Teko', sans-serif;
font-size: 30px;
}
#incident-btn {
padding: 35px 45px 35px 45px;
padding: 35px 45px;
max-width: 150px;
text-align: center;
margin: auto;
@ -57,22 +73,52 @@ header {
cursor: pointer;
user-select: none;
}
#incident-btn:hover {
background-color: #ff0000;
}
.btn-text {
text-align: center;
padding-top: 15px;
}
</style>
</head>
<body>
<header>
<h1>ca42</h1>
</header>
<div id="desc">
<p>
Nombres de jours sans problèmes sanitaires à 42 Angoulême.
</p>
</div>
<div id="counter">
<h2>Jours depuis le dernier problème:</h2>
<p id="days">{{days}}</p>
<div>
<p id="last-incident"></p>
</div>
<div>
<p id="record">
Nombre total de problèmes : {{total}}<br>
Record de jours sans problèmes: {{longer}}
</p>
</div>
</div>
<div id="incident-btn">Incident</div>
<p class="btn-text">Note: Un accident par jour pour éviter la redondance</p>
<script>
// JavaScript function to handle button click
document.addEventListener("DOMContentLoaded", function () {
const incidentBtn = document.getElementById("incident-btn");
incidentBtn.addEventListener("click", function () {
// Make a POST request to the /api/update route
fetch("/api/update", {
method: "POST",
headers: {
@ -81,7 +127,6 @@ header {
})
.then(response => {
if (response.redirected) {
// If the request is successful and we are redirected
window.location.href = response.url;
} else {
alert("Error: Could not update the incident.");
@ -94,23 +139,6 @@ header {
});
});
</script>
<header>
<h1>ca42</h1>
</header>
<div id="desc">
<p>Nombres de jours sans problèmes sanitaires a 42 Angoulême.</p>
</div>
<div id="counter">
<h1>Jours depuis le dernier problème:</h1>
<div>
<p id="days">{{days}}</p>
</div>
<div>
<p id="last-incident"></p>
</div>
<div>
<p id="record">Nombre total de problèmes : {{total}}<p>
</div>
</div>
<div id="incident-btn" form action>Incident</div>
<p class="btn-text">Note: Un accident par jour pour éviter la redondance</p>
</body>
</html>