Merge branch 'adrien' of github.com:AudebertAdrien/ft_transcendence into trash

This commit is contained in:
Theouche 2024-08-27 17:00:39 +02:00
commit 2f9d24d4e5
10 changed files with 140 additions and 147 deletions

1
.env
View File

@ -13,6 +13,7 @@ DB_HOST=db
DB_PORT=5432 DB_PORT=5432
PWD_PATH=${PWD} PWD_PATH=${PWD}
PROJECT_PATH=${PWD_PATH}/pong PROJECT_PATH=${PWD_PATH}/pong
DJANGO_LOGS=${PWD_PATH}/logs
# ElasticSearch settings # ElasticSearch settings
STACK_VERSION=8.14.3 STACK_VERSION=8.14.3

View File

@ -1,21 +1,28 @@
input { input {
udp { file {
host => "0.0.0.0" path => "/usr/share/logstash/logs/django.log"
port => 5044 start_position => "beginning"
sincedb_path => "/dev/null"
codec => "json"
} }
} }
filter {} filter {
json {
source => "message"
target => "json_message"
}
}
output { output {
elasticsearch { elasticsearch {
index => "logstash-%{+YYYY.MM.dd}"
hosts => ["https://es01:9200"] hosts => ["https://es01:9200"]
user => "elastic" user => "elastic"
password => elastic_pass password => "${ELASTIC_PASSWORD}"
ssl_enabled => true ssl_enabled => true
ssl_certificate_authorities => "/usr/share/logstash/certs/ca/ca.crt" ssl_certificate_authorities => "/usr/share/logstash/certs/ca/ca.crt"
ssl_verification_mode => "full" ssl_verification_mode => "full"
index => "django-logs-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
} }
#stdout {}
}

View File

@ -74,6 +74,7 @@ services:
venv/bin/daphne -b 0.0.0.0 -p 8080 pong.asgi:application" venv/bin/daphne -b 0.0.0.0 -p 8080 pong.asgi:application"
volumes: volumes:
- pong:/transcendence/pong - pong:/transcendence/pong
- pong_django_logs:/transcendence/logs
ports: ports:
- 8080:8080 - 8080:8080
networks: networks:
@ -200,6 +201,7 @@ services:
- certs:/usr/share/logstash/certs - certs:/usr/share/logstash/certs
- pong_logstash_data01:/usr/share/logstash/data - pong_logstash_data01:/usr/share/logstash/data
- ./config/logstash.conf:/usr/share/logstash/pipeline/logstash.conf:ro - ./config/logstash.conf:/usr/share/logstash/pipeline/logstash.conf:ro
- pong_django_logs:/usr/share/logstash/logs
ports: ports:
- "5044:5044/udp" - "5044:5044/udp"
command: logstash -f /usr/share/logstash/pipeline/logstash.conf command: logstash -f /usr/share/logstash/pipeline/logstash.conf
@ -217,6 +219,12 @@ volumes:
type: none type: none
device: ${PROJECT_PATH} device: ${PROJECT_PATH}
o: bind o: bind
pong_django_logs:
driver: local
driver_opts:
type: none
device: ${DJANGO_LOGS}
o: bind
pong_pg_data: pong_pg_data:
driver: local driver: local
pong_es_data_01: pong_es_data_01:

1
logs/django.log Normal file
View File

@ -0,0 +1 @@
{"message": "Not Found: /totofaitduvelo", "taskName": null, "status_code": 404, "request": "<ASGIRequest: GET '/totofaitduvelo'>"}

View File

@ -4,7 +4,7 @@ CONTAINER=$(c)
up: down up: down
$(COMPOSE) build $(COMPOSE) build
$(COMPOSE) up $(CONTAINER) || true $(COMPOSE) up -d $(CONTAINER) || true
build: build:
$(COMPOSE) build $(CONTAINER) $(COMPOSE) build $(CONTAINER)
@ -20,8 +20,8 @@ down:
destroy: destroy:
$(COMPOSE) down -v --rmi all $(COMPOSE) down -v --rmi all
#sudo lsof -i :5432 | awk 'NR>1 {print $$2}' | xargs sudo kill -9 || true sudo lsof -i :5432 | awk 'NR>1 {print $$2}' | xargs sudo kill -9 || true
#sudo lsof -i :80 | awk 'NR>1 {print $$2}' | xargs sudo kill -9 || true sudo lsof -i :80 | awk 'NR>1 {print $$2}' | xargs sudo kill -9 || true
logs: logs:
$(COMPOSE) logs -f $(CONTAINER) $(COMPOSE) logs -f $(CONTAINER)

View File

@ -40,7 +40,7 @@ class MatchMaker:
await asyncio.sleep(1) await asyncio.sleep(1)
self.timer += 1 self.timer += 1
# Waiting for more than 30s -> BOT game # Waiting for more than 30s -> BOT game
if self.timer >= 30 and self.waiting_players: if self.timer >= 15 and self.waiting_players:
player1 = self.waiting_players.pop(0) player1 = self.waiting_players.pop(0)
print(f"*** MATCH FOUND: {player1.user.username} vs BOT") print(f"*** MATCH FOUND: {player1.user.username} vs BOT")
self.botgame = True self.botgame = True
@ -112,4 +112,4 @@ class MatchMaker:
match_maker = MatchMaker() match_maker = MatchMaker()
# to get what you want use get_player_p_win(player_name) !! (voir utils.py) # to get what you want use get_player_p_win(player_name) !! (voir utils.py)
# #

View File

@ -6,8 +6,9 @@ Django settings for pong project.
Generated by 'django-admin startproject' using Django 3.2. Generated by 'django-admin startproject' using Django 3.2.
""" """
from pathlib import Path
import os import os
import logging.config
from pathlib import Path
# Build paths inside the project like this: BASE_DIR / 'subdir'. # Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent BASE_DIR = Path(__file__).resolve().parent.parent
@ -136,18 +137,36 @@ CHANNEL_LAYERS = {
} }
LOGGING = { LOGGING = {
'version': 1, 'version': 1, # The version of the logging configuration schema
'disable_existing_loggers': False, 'disable_existing_loggers': False, # Allows existing loggers to keep logging
'handlers': { 'formatters': { # Defines how log messages will be formatted
'json': {
'()': 'pythonjsonlogger.jsonlogger.JsonFormatter',
# Formatter that outputs logs in JSON format, which is ideal for ingestion by Logstash.
},
'default': {
'format': '[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s',
# This is a basic text formatter with timestamp, log level, logger name, line number, and the actual message.
},
},
'handlers': { # Handlers determine where the log messages are sent
'file': {
'level': 'INFO', # Minimum log level to be handled (INFO and above)
'class': 'logging.FileHandler',
'filename': os.path.join(BASE_DIR, 'logs/django.log'), # The file where logs will be saved
'formatter': 'json', # Uses the JSON formatter defined above
},
'console': { 'console': {
'level': 'DEBUG', 'level': 'DEBUG', # Minimum log level to be handled (DEBUG and above)
'class': 'logging.StreamHandler', 'class': 'logging.StreamHandler',
'formatter': 'default', # Uses the default text formatter
}, },
}, },
'loggers': { 'loggers': { # Loggers are the actual log streams that get configured
'django': { 'django': { # The Django logger catches all messages sent by the Django framework
'handlers': ['console'], 'handlers': ['file', 'console'], # Sends logs to both the file and the console
'level': 'DEBUG', 'level': 'DEBUG', # Minimum log level to be logged
'propagate': True, # If True, messages will be passed to the parent loggers as well
}, },
}, },
} }

View File

@ -557,28 +557,31 @@ document.addEventListener('DOMContentLoaded', () => {
const matchListBody = document.querySelector('#match-list tbody'); const matchListBody = document.querySelector('#match-list tbody');
matchListBody.innerHTML = ''; matchListBody.innerHTML = '';
if (matches.length === 0) { const row = document.createElement('tr');
console.log('No matches to display'); if (matches.length != 0) {
} matches.forEach(match => {
row.innerHTML = `
matches.forEach(match => { <td>${match.id}</td>
const row = document.createElement('tr'); <td>${match.player1__name}</td>
row.innerHTML = ` <td>${match.player2__name}</td>
<td>${match.id}</td> <td>${match.score_player1}</td>
<td>${match.player1__name}</td> <td>${match.score_player2}</td>
<td>${match.player2__name}</td> <td>${match.winner__name}</td>
<td>${match.score_player1}</td> <td>${match.nbr_ball_touch_p1}</td>
<td>${match.score_player2}</td> <td>${match.nbr_ball_touch_p2}</td>
<td>${match.winner__name}</td> <td>${match.duration}</td>
<td>${match.nbr_ball_touch_p1}</td> <td>${match.date}</td>
<td>${match.nbr_ball_touch_p2}</td> <td>${match.is_tournoi}</td>
<td>${match.duration}</td> <td>${match.tournoi__name}</td>
<td>${match.date}</td> `;
<td>${match.is_tournoi}</td> matchListBody.appendChild(row);
<td>${match.tournoi__name}</td> });
`; } else {
matchListBody.appendChild(row); row.innerHTML = `
}); <td colspan="12">No matches found.</td>
`;
matchListBody.appendChild(row);
}
} }
function displayPlayers(players) { function displayPlayers(players) {
@ -586,51 +589,58 @@ document.addEventListener('DOMContentLoaded', () => {
const playersListBody = document.querySelector('#player-list tbody'); const playersListBody = document.querySelector('#player-list tbody');
playersListBody.innerHTML = ''; playersListBody.innerHTML = '';
if (players.length === 0) { const row = document.createElement('tr');
console.log('No players to display'); if (players.length != 0) {
} players.forEach(player => {
row.innerHTML = `
<td>${player.id}</td>
<td>${player.name}</td>
<td>${player.total_match}</td>
<td>${player.total_win}</td>
<td>${player.p_win}</td>
<td>${player.m_score_match}</td>
<td>${player.m_score_adv_match}</td>
<td>${player.best_score}</td>
<td>${player.m_nbr_ball_touch}</td>
<td>${player.total_duration}</td>
<td>${player.m_duration}</td>
<td>${player.num_participated_tournaments}</td>
<td>${player.num_won_tournaments}</td>
`;
playersListBody.appendChild(row);
});
} else {
row.innerHTML = `
<td colspan="12">No matches found.</td>
`
playersListBody.appendChild(row);
}
}
players.forEach(player => { function displayTournois(tournois) {
const row = document.createElement('tr'); console.log('Displaying tournois:');
row.innerHTML = ` const tournoisListBody = document.querySelector('#tournoi-list tbody');
<td>${player.id}</td> tournoisListBody.innerHTML = '';
<td>${player.name}</td>
<td>${player.total_match}</td>
<td>${player.total_win}</td>
<td>${player.p_win}</td>
<td>${player.m_score_match}</td>
<td>${player.m_score_adv_match}</td>
<td>${player.best_score}</td>
<td>${player.m_nbr_ball_touch}</td>
<td>${player.total_duration}</td>
<td>${player.m_duration}</td>
<td>${player.num_participated_tournaments}</td>
<td>${player.num_won_tournaments}</td>
`;
playersListBody.appendChild(row);
});
}
function displayTournois(tournois) { const row = document.createElement('tr');
console.log('Displaying tournois:'); if (tournois.length != 0) {
const tournoisListBody = document.querySelector('#tournoi-list tbody'); tournois.forEach(tournoi => {
tournoisListBody.innerHTML = ''; row.innerHTML = `
<td>${tournoi.id}</td>
if (tournois.length === 0) { <td>${tournoi.name}</td>
console.log('No tournois to display'); <td>${tournoi.nbr_player}</td>
} <td>${tournoi.date}</td>
<td>${tournoi.winner.name}</td>
tournois.forEach(tournoi => { `;
const row = document.createElement('tr'); tournoisListBody.appendChild(row);
row.innerHTML = ` });
<td>${tournoi.id}</td> } else {
<td>${tournoi.name}</td> row.innerHTML = `
<td>${tournoi.nbr_player}</td> <td colspan="12">No matches found.</td>
<td>${tournoi.date}</td> `
<td>${tournoi.winner.name}</td> tournoisListBody.appendChild(row);
`; }
tournoisListBody.appendChild(row);
});
} }
////////////////////////////// END BURGER BUTTON //////////////////////////////// ////////////////////////////// END BURGER BUTTON ////////////////////////////////

View File

@ -144,27 +144,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% for match in matches %} </tbody>
<tr>
<td>{{ match.id }}</td>
<td>{{ match.player1.name }}</td>
<td>{{ match.player2.name }}</td>
<td>{{ match.score_player1 }}</td>
<td>{{ match.score_player2 }}</td>
<td>{{ match.winner.name }}</td>
<td>{{ match.nbr_ball_touch_p1 }}</td>
<td>{{ match.nbr_ball_touch_p2 }}</td>
<td>{{ match.duration }}</td>
<td>{{ match.date }}</td>
<td>{{ match.is_tournoi }}</td>
<td>{{ match.tournoi.name }}</td>
</tr>
{% empty %}
<tr>
<td colspan="12">No matches found.</td>
</tr>
{% endfor %}
</tbody>
</table> </table>
</div> </div>
@ -189,28 +169,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% for player in players %} </tbody>
<tr>
<td>{{ player.id }}</td>
<td>{{ player.name }}</td>
<td>{{ player.total_match }}</td>
<td>{{ player.total_win }}</td>
<td>{{ player.p_win }}</td>
<td>{{ player.m_score_match }}</td>
<td>{{ player.m_score_adv_match }}</td>
<td>{{ player.best_score }}</td>
<td>{{ player.m_nbr_ball_touch }}</td>
<td>{{ player.total_duration }}</td>
<td>{{ player.m_duration }}</td>
<td>{{ player.num_participated_tournaments }}</td>
<td>{{ player.num_won_tournaments }}</td>
</tr>
{% empty %}
<tr>
<td colspan="13">No players found.</td>
</tr>
{% endfor %}
</tbody>
</table> </table>
</div> </div>
@ -226,21 +185,8 @@
<th>Winner</th> <th>Winner</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% for tournoi in tournois %} </tbody>
<tr>
<td>{{ tournoi.id }}</td>
<td>{{ tournoi.name }}</td>
<td>{{ tournoi.nbr_player }}</td>
<td>{{ tournoi.date }}</td>
<td>{{ tournoi.winner.name }}</td>
</tr>
{% empty %}
<tr>
<td colspan="14">No tournois found.</td>
</tr>
{% endfor %}
</tbody>
</table> </table>
</div> </div>

View File

@ -5,3 +5,4 @@ channels
daphne daphne
djangorestframework djangorestframework
web3 web3
python-json-logger==2.0.7