From fbcd9f8e5a45d753bf117743dc7d2e638040386f Mon Sep 17 00:00:00 2001 From: Adrien Audebert Date: Mon, 29 Jul 2024 15:23:26 +0200 Subject: [PATCH 1/8] add .env var --- .env | 9 +++++++++ pong/static/index.html | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.env b/.env index 224e164..df357f6 100644 --- a/.env +++ b/.env @@ -13,3 +13,12 @@ DB_PORT=5432 PROJECT_PATH=${PWD}/pong POSTGRES_DATA_PATH=${PWD}/data/db + +ELASTIC_PASSWORD=qwerty42 +STACK_VERSION=8.14.3 +ES_PORT=127.0.0.1:9200 +CLUSTER_NAME=docker-cluster +LICENSE=basic + +KIBANA_PASSWORD=qwerty42 +KIBANA_PORT=5601 diff --git a/pong/static/index.html b/pong/static/index.html index 1aad5b6..0ffc170 100644 --- a/pong/static/index.html +++ b/pong/static/index.html @@ -37,6 +37,6 @@
- + From 86102dab20ff1614bd9826d942e3018c25f91e09 Mon Sep 17 00:00:00 2001 From: Adrien Audebert Date: Tue, 30 Jul 2024 18:52:34 +0200 Subject: [PATCH 2/8] elk in progress --- .env | 18 +++++-- docker-compose.yaml | 121 ++++++++++++++++++++++++++++++-------------- logstash.conf | 23 +++++++++ makefile | 4 +- 4 files changed, 123 insertions(+), 43 deletions(-) create mode 100644 logstash.conf diff --git a/.env b/.env index df357f6..8abdf3a 100644 --- a/.env +++ b/.env @@ -11,14 +11,24 @@ POSTGRES_PASSWORD=qwerty DB_HOST=db DB_PORT=5432 -PROJECT_PATH=${PWD}/pong -POSTGRES_DATA_PATH=${PWD}/data/db +#PROJECT_PATH=${PWD}/pong +#POSTGRES_DATA_PATH=${PWD}/data/db +#ES_DATA_PATH=${PWD}/data/es +#KIBA_DATA_PATH=${PWD}/data/kiba +#LSTASH_DATA_PATH=${PWD}/data/lstash -ELASTIC_PASSWORD=qwerty42 +# ElasticSearch settings STACK_VERSION=8.14.3 -ES_PORT=127.0.0.1:9200 CLUSTER_NAME=docker-cluster LICENSE=basic +ELASTIC_PASSWORD=qwerty42 +ES_PORT=127.0.0.1:9200 + +# Kibana settings KIBANA_PASSWORD=qwerty42 KIBANA_PORT=5601 + +ES_MEM_LIMIT=1073741824 +KB_MEM_LIMIT=1073741824 +LS_MEM_LIMIT=1073741824 diff --git a/docker-compose.yaml b/docker-compose.yaml index 351dbe4..e317179 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,25 +1,7 @@ services: - db: - image: postgres:latest - container_name: postgres - restart: always - volumes: - - postgres_data:/var/lib/postgresql/data - ports: - - "5432:5432" - healthcheck: - test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] - interval: 10s - timeout: 5s - retries: 5 - networks: - - app-network - environment: - POSTGRES_DB: ${POSTGRES_DB} - POSTGRES_USER: ${POSTGRES_USER} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} - backend: + depends_on: + - db build: context: . dockerfile: Dockerfile @@ -27,16 +9,14 @@ services: container_name: backend restart: always command: /bin/sh -c "sleep 5 && - venv/bin/python manage.py makemigrations --noinput && - venv/bin/python manage.py migrate --noinput && - venv/bin/python manage.py collectstatic --noinput && - venv/bin/daphne -b 0.0.0.0 -p 80 pong.asgi:application" + venv/bin/python manage.py makemigrations --noinput && + venv/bin/python manage.py migrate --noinput && + venv/bin/python manage.py collectstatic --noinput && + venv/bin/daphne -b 0.0.0.0 -p 80 pong.asgi:application" volumes: - pong:/transcendence/pong ports: - "80:80" - depends_on: - - db networks: - app-network environment: @@ -45,25 +25,92 @@ services: DB_NAME: ${POSTGRES_DB} DB_USER: ${POSTGRES_USER} DB_PASSWORD: ${POSTGRES_PASSWORD} + #healthcheck: + #test: ["CMD-SHELL", "curl -f http://localhost:80 || exit 1"] + #interval: 20s + #timeout: 5s + #retries: 5 + + db: + image: postgres:latest + container_name: postgres + restart: always + volumes: + - pong_pg_data:/var/lib/postgresql/data + ports: + - "5432:5432" + networks: + - app-network + environment: + POSTGRES_DB: ${POSTGRES_DB} + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} healthcheck: - test: ["CMD-SHELL", "curl -f http://localhost:80 || exit 1"] + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 10s timeout: 5s retries: 5 + es01: + image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION} + volumes: + - pong_logstash_data_01:/usr/share/elasticsearch/data + ports: + - ${ES_PORT}:9200 + environment: + - node.name=es01 + - cluster.name=${CLUSTER_NAME} + - discovery.type=single-node + - ELASTIC_PASSWORD=${ELASTIC_PASSWORD} + mem_limit: ${ES_MEM_LIMIT} + ulimits: + memlock: + soft: -1 + hard: -1 + + logstash01: + depends_on: + - es01 + - kibana + image: docker.elastic.co/logstash/logstash:${STACK_VERSION} + container_name: logstash + volumes: + - pong_logstash_data_01:/usr/share/logstash/data/logstash.conf + ports: + - "5044:5044" + + kibana: + image: docker.elastic.co/kibana/kibana:${STACK_VERSION} + container_name: kibana + volumes: + - pong_kibana:/usr/share/kibana/data + - pong_logstash_data_01:/usr/share/logstash/data + user: root + ports: + - 5601:5601 + environment: + - SERVERNAME=kibana + - ELASTICSEARCH_HOSTS=https://es01:9200 + - ELASTICSEARCH_USERNAME=kibana_system + - ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD} + mem_limit: ${KB_MEM_LIMIT} + #healthcheck: + #test: ["CMD-SHELL", "curl -s -I http://localhost:5601 | grep -q 'HTTP/1.1 302 Found'"] + #interval: 20s + #timeout: 10s + #retries: 120 + volumes: - postgres_data: - driver: local - driver_opts: - type: none - device: ${POSTGRES_DATA_PATH} - o: bind pong: driver: local - driver_opts: - type: none - device: ${PROJECT_PATH} - o: bind + pong_pg_data: + driver: local + pong_es_data_01: + driver: local + pong_kibana: + driver: local + pong_logstash_data_01: + driver: local networks: app-network: diff --git a/logstash.conf b/logstash.conf new file mode 100644 index 0000000..88ba485 --- /dev/null +++ b/logstash.conf @@ -0,0 +1,23 @@ +input { + stdin { } +} + +filter { + # Adjust the grok pattern according to the PostgreSQL log format + # Example log format: "2024-07-30 10:20:30 UTC LOG: statement: SELECT * FROM table" + grok { + match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{GREEDYDATA:log_message}" } + } + + # Optionally, parse and format the extracted timestamp field + date { + match => [ "timestamp", "ISO8601" ] + target => "@timestamp" + # Optional: specify timezone if needed + # timezone => "UTC" + } +} + +output { + stdout { codec => rubydebug } +} diff --git a/makefile b/makefile index 30c4fcb..f62a24f 100644 --- a/makefile +++ b/makefile @@ -22,8 +22,8 @@ down: destroy: $(COMPOSE) down -v --rmi all sudo rm -rf $$PWD/data/db - #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 :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 logs: $(COMPOSE) logs -f $(CONTAINER) From 5f22737bf27427fe759d3aac34061ad463781067 Mon Sep 17 00:00:00 2001 From: Adrien Audebert Date: Wed, 31 Jul 2024 13:46:39 +0200 Subject: [PATCH 3/8] env_template update --- env_template | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/env_template b/env_template index ffa026a..991d475 100644 --- a/env_template +++ b/env_template @@ -1,10 +1,10 @@ # Django settings -SECRET_KEY= +SECRET_KEY="FollowTheWhiteRabbit" DEBUG=True DJANGO_ALLOWED_HOSTS=['*'] # PostgreSQL settings -POSTGRES_DB= +POSTGRES_DB= POSTGRES_USER= POSTGRES_PASSWORD= @@ -13,3 +13,23 @@ DB_PORT=5432 PROJECT_PATH=${PWD}/pong POSTGRES_DATA_PATH=${PWD}/data/db +ES_DATA_PATH=${PWD}/data/es +KIBA_DATA_PATH=${PWD}/data/kiba +LSTASH_DATA_PATH=${PWD}/data/lstash + +# ElasticSearch settings +STACK_VERSION=8.14.3 +CLUSTER_NAME=docker-cluster +LICENSE=basic + +ELASTIC_PASSWORD= +ES_PORT=9200 + +# Kibana settings +KIBANA_PASSWORD= +KIBANA_PORT=5601 + +ES_MEM_LIMIT=1073741824 +KB_MEM_LIMIT=1073741824 +LS_MEM_LIMIT=1073741824 + From b3b2bdf18cc1aade24d4ad98998c7d293375e77e Mon Sep 17 00:00:00 2001 From: Adrien Audebert Date: Mon, 5 Aug 2024 13:49:25 +0200 Subject: [PATCH 4/8] update --- .env | 6 +----- docker-compose.yaml | 50 ++++++++++++++++++++------------------------- logstash.conf | 44 +++++++++++++++++++++++++-------------- makefile | 6 ++---- 4 files changed, 54 insertions(+), 52 deletions(-) diff --git a/.env b/.env index cab57c9..afb0168 100644 --- a/.env +++ b/.env @@ -12,18 +12,14 @@ DB_HOST=db DB_PORT=5432 PROJECT_PATH=${PWD}/pong -POSTGRES_DATA_PATH=${PWD}/data/db -ES_DATA_PATH=${PWD}/data/es -KIBA_DATA_PATH=${PWD}/data/kiba -LSTASH_DATA_PATH=${PWD}/data/lstash # ElasticSearch settings STACK_VERSION=8.14.3 CLUSTER_NAME=docker-cluster LICENSE=basic +ELASTIC_USERNAME=adrien ELASTIC_PASSWORD=qwerty42 -ES_PORT=9200 # Kibana settings KIBANA_PASSWORD=qwerty42 diff --git a/docker-compose.yaml b/docker-compose.yaml index ddc7844..d35c128 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -40,13 +40,19 @@ services: POSTGRES_DB: ${POSTGRES_DB} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 10s + timeout: 5s + retries: 5 es01: image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION} + container_name: es01 volumes: - pong_logstash_data_01:/usr/share/elasticsearch/data ports: - - ${ES_PORT}:9200 + - "127.0.0.1:9200:9200" networks: - app-network environment: @@ -54,6 +60,8 @@ services: - cluster.name=${CLUSTER_NAME} - discovery.type=single-node - ELASTIC_PASSWORD=${ELASTIC_PASSWORD} + - xpack.security.enabled=false + - xpack.license.self_generated.type=trial mem_limit: ${ES_MEM_LIMIT} ulimits: memlock: @@ -65,34 +73,36 @@ services: - es01 - kibana image: docker.elastic.co/logstash/logstash:${STACK_VERSION} - container_name: logstash + container_name: logstash01 volumes: - - pong_logstash_data_01:/usr/share/logstash/data/logstash.conf + - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf ports: - "5044:5044" networks: - app-network environment: - - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 - - ELASTICSEARCH_USERNAME=kibana_system - - ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD} + - ELASTIC_HOSTS=http://es01:9200 + - ELASTIC_USER=${ELASTIC_USERNAME} + - ELASTIC_PASSWORD=${ELASTIC_PASSWORD} + - xpack.monitoring.enabled=false kibana: image: docker.elastic.co/kibana/kibana:${STACK_VERSION} + depends_on: + - es01 container_name: kibana volumes: - pong_kibana:/usr/share/kibana/data - - pong_logstash_data_01:/usr/share/logstash/data - user: root + user: "1000:1000" ports: - 5601:5601 networks: - app-network environment: - - SERVERNAME=kibana - - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 - - ELASTICSEARCH_USERNAME=kibana_system - - ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD} + - SERVERNAME=pong.kibana.org + - ELASTICSEARCH_HOSTS=http://es01:9200 + - ELASTICSEARCH_USERNAME=${ELASTIC_USERNAME} + - ELASTICSEARCH_PASSWORD=${ELASTIC_PASSWORD} mem_limit: ${KB_MEM_LIMIT} #healthcheck: #test: ["CMD-SHELL", "curl -s -I http://localhost:5601 | grep -q 'HTTP/1.1 302 Found'"] @@ -109,28 +119,12 @@ volumes: o: bind pong_pg_data: driver: local - driver_opts: - type: none - device: ${POSTGRES_DATA_PATH} - o: bind pong_es_data_01: driver: local - driver_opts: - type: none - device: ${ES_DATA_PATH} - o: bind pong_kibana: driver: local - driver_opts: - type: none - device: ${KIBA_DATA_PATH} - o: bind pong_logstash_data_01: driver: local - driver_opts: - type: none - device: ${LSTASH_DATA_PATH} - o: bind networks: app-network: diff --git a/logstash.conf b/logstash.conf index beca20b..6ee59a8 100644 --- a/logstash.conf +++ b/logstash.conf @@ -1,26 +1,40 @@ input { - stdin { } -} - -filter { - grok { - match => { - "message" => '%{IP:client_ip} - - \[%{HTTPDATE:timestamp}\] "%{WORD:http_method} %{URIPATH:request_path}" %{NUMBER:http_status_code} %{NUMBER:response_size}' - } - # Optional: add a tag to the event for easier identification - add_tag => ["parsed_log"] + # Input from Docker container's stdout + beats { + port => 5044 + } } - # Optionally, convert the timestamp to the Logstash @timestamp +filter { + # Grok filter to parse the log lines + grok { + match => { + "message" => [ + "%{DATA:container_name}\s*\|\s*%{IP:client_ip}:%{NUMBER:client_port} - - \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}\" %{NUMBER:status} %{NUMBER:bytes}" + ] + } + } + + # Date filter to convert timestamp to a proper date format date { - match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ] + match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"] target => "@timestamp" + remove_field => ["timestamp"] } } output { - elasticsearch { - hosts => ["http://es01:9200"] - index => "logstash-%{+YYYY.MM.dd}" + # Output to stdout for testing purposes + stdout { + codec => rubydebug } + + # Optionally, output to Elasticsearch +elasticsearch { + hosts => ["localhost:9200"] + index => "docker-logs-%{+YYYY.MM.dd}" + user=> "${ELASTIC_USER}" + password=> "${ELASTIC_PASSWORD}" + } + } diff --git a/makefile b/makefile index 9b3edb8..754f563 100644 --- a/makefile +++ b/makefile @@ -3,7 +3,6 @@ COMPOSE=docker compose -f $(COMPOSE_FILE) CONTAINER=$(c) up: - sudo mkdir -p $$PWD/data/db $(COMPOSE) build $(COMPOSE) up $(CONTAINER) @@ -21,9 +20,8 @@ down: destroy: $(COMPOSE) down -v --rmi all - #sudo rm -rf $$PWD/data/db - #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 :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 logs: $(COMPOSE) logs -f $(CONTAINER) From f2b558abe57fc6c19a5ab8973e4c4d1eb63bb03c Mon Sep 17 00:00:00 2001 From: Adrien Audebert Date: Wed, 7 Aug 2024 14:12:59 +0200 Subject: [PATCH 5/8] filebeat in progress --- .env | 4 -- .gitignore | 1 + docker-compose.yaml | 53 ++++++++++------ docker-compose.yml | 144 ++++++++++++++++++++++++++++++++++++++++++++ filebeat.yml | 32 ++++++++++ logstash.conf | 39 +++--------- makefile | 3 +- 7 files changed, 219 insertions(+), 57 deletions(-) create mode 100644 docker-compose.yml create mode 100644 filebeat.yml diff --git a/.env b/.env index afb0168..d87bad8 100644 --- a/.env +++ b/.env @@ -24,7 +24,3 @@ ELASTIC_PASSWORD=qwerty42 # Kibana settings KIBANA_PASSWORD=qwerty42 KIBANA_PORT=5601 - -ES_MEM_LIMIT=1073741824 -KB_MEM_LIMIT=1073741824 -LS_MEM_LIMIT=1073741824 diff --git a/.gitignore b/.gitignore index 3adaaf8..b798a44 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ venv/ __pycache__/ data/ +.env diff --git a/docker-compose.yaml b/docker-compose.yaml index d35c128..6eb4002 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,7 +1,5 @@ services: backend: - depends_on: - - db build: context: . dockerfile: Dockerfile @@ -25,6 +23,8 @@ services: DB_NAME: ${POSTGRES_DB} DB_USER: ${POSTGRES_USER} DB_PASSWORD: ${POSTGRES_PASSWORD} + depends_on: + - db db: image: postgres:latest @@ -40,11 +40,11 @@ services: POSTGRES_DB: ${POSTGRES_DB} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} - healthcheck: - test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] - interval: 10s - timeout: 5s - retries: 5 + #healthcheck: + #test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + #interval: 10s + #timeout: 5s + #retries: 5 es01: image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION} @@ -62,20 +62,14 @@ services: - ELASTIC_PASSWORD=${ELASTIC_PASSWORD} - xpack.security.enabled=false - xpack.license.self_generated.type=trial - mem_limit: ${ES_MEM_LIMIT} - ulimits: - memlock: - soft: -1 - hard: -1 + depends_on: + - logstash01 logstash01: - depends_on: - - es01 - - kibana image: docker.elastic.co/logstash/logstash:${STACK_VERSION} container_name: logstash01 volumes: - - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf + - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf:ro ports: - "5044:5044" networks: @@ -88,8 +82,6 @@ services: kibana: image: docker.elastic.co/kibana/kibana:${STACK_VERSION} - depends_on: - - es01 container_name: kibana volumes: - pong_kibana:/usr/share/kibana/data @@ -103,13 +95,32 @@ services: - ELASTICSEARCH_HOSTS=http://es01:9200 - ELASTICSEARCH_USERNAME=${ELASTIC_USERNAME} - ELASTICSEARCH_PASSWORD=${ELASTIC_PASSWORD} - mem_limit: ${KB_MEM_LIMIT} - #healthcheck: + depends_on: + - es01 + #healthcheck: #test: ["CMD-SHELL", "curl -s -I http://localhost:5601 | grep -q 'HTTP/1.1 302 Found'"] #interval: 20s #timeout: 10s #retries: 120 + filebeat01: + depends_on: + - es01 + image: docker.elastic.co/beats/filebeat:${STACK_VERSION} + volumes: + - pong_filebeat_data_01:/usr/share/filebeat/data + - ./filebeat.yml:/usr/share/filebeat/filebeat.yml:ro + - /var/lib/docker/containers:/var/lib/docker/containers:ro + - /var/run/docker.sock:/var/run/docker.sock:ro + environment: + - ELASTIC_USER=elastic + - ELASTIC_PASSWORD=${ELASTIC_PASSWORD} + - ELASTIC_HOSTS=https://es01:9200 + - KIBANA_HOSTS=http://kibana:5601 + - LOGSTASH_HOSTS=http://logstash01:9600 + networks: + - app-network + volumes: pong: driver: local @@ -125,6 +136,8 @@ volumes: driver: local pong_logstash_data_01: driver: local + pong_filebeat_data_01: + driver: local networks: app-network: diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..5f5beee --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,144 @@ +services: + backend: + build: + context: . + dockerfile: Dockerfile + image: backend + container_name: backend + restart: always + command: /bin/sh -c "sleep 5 && + venv/bin/python manage.py makemigrations --noinput && + venv/bin/python manage.py migrate --noinput && + venv/bin/python manage.py collectstatic --noinput && + venv/bin/daphne -b 0.0.0.0 -p 80 pong.asgi:application" + volumes: + - pong:/transcendence/pong + ports: + - "8080:8080" + networks: + - app-network + environment: + DB_HOST: db + DB_PORT: 5432 + DB_NAME: ${POSTGRES_DB} + DB_USER: ${POSTGRES_USER} + DB_PASSWORD: ${POSTGRES_PASSWORD} + depends_on: + - db + + db: + image: postgres:latest + container_name: postgres + restart: always + volumes: + - pong_pg_data:/var/lib/postgresql/data + ports: + - "5432:5432" + networks: + - app-network + environment: + POSTGRES_DB: ${POSTGRES_DB} + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + #healthcheck: + #test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + #interval: 10s + #timeout: 5s + #retries: 5 + + es01: + image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION} + container_name: es01 + volumes: + - pong_logstash_data_01:/usr/share/elasticsearch/data + ports: + - "127.0.0.1:9200:9200" + networks: + - app-network + environment: + - node.name=es01 + - cluster.name=${CLUSTER_NAME} + - discovery.type=single-node + - ELASTIC_PASSWORD=${ELASTIC_PASSWORD} + - xpack.security.enabled=false + - xpack.license.self_generated.type=trial + depends_on: + - logstash01 + + logstash01: + image: docker.elastic.co/logstash/logstash:${STACK_VERSION} + container_name: logstash01 + volumes: + - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf:ro + ports: + - "5044:5044" + networks: + - app-network + environment: + - ELASTIC_HOSTS=http://es01:9200 + - ELASTIC_USER=${ELASTIC_USERNAME} + - ELASTIC_PASSWORD=${ELASTIC_PASSWORD} + - xpack.monitoring.enabled=false + + kibana: + image: docker.elastic.co/kibana/kibana:${STACK_VERSION} + container_name: kibana + volumes: + - pong_kibana:/usr/share/kibana/data + user: "1000:1000" + ports: + - 5601:5601 + networks: + - app-network + environment: + - SERVERNAME=pong.kibana.org + - ELASTICSEARCH_HOSTS=http://es01:9200 + - ELASTICSEARCH_USERNAME=${ELASTIC_USERNAME} + - ELASTICSEARCH_PASSWORD=${ELASTIC_PASSWORD} + depends_on: + - es01 + #healthcheck: + #test: ["CMD-SHELL", "curl -s -I http://localhost:5601 | grep -q 'HTTP/1.1 302 Found'"] + #interval: 20s + #timeout: 10s + #retries: 120 + + filebeat01: + depends_on: + - es01 + image: docker.elastic.co/beats/filebeat:${STACK_VERSION} + volumes: + - pong_filebeat_data_01:/usr/share/filebeat/data + - ./filebeat.yml:/usr/share/filebeat/filebeat.yml:ro + - /var/lib/docker/containers:/var/lib/docker/containers:ro + - /var/run/docker.sock:/var/run/docker.sock:ro + environment: + - ELASTIC_USER=elastic + - ELASTIC_PASSWORD=${ELASTIC_PASSWORD} + - ELASTIC_HOSTS=https://es01:9200 + - KIBANA_HOSTS=http://kibana:5601 + - LOGSTASH_HOSTS=http://logstash01:9600 + networks: + - app-network + +volumes: + pong: + driver: local + driver_opts: + type: none + device: ${PROJECT_PATH} + o: bind + pong_pg_data: + driver: local + pong_es_data_01: + driver: local + pong_kibana: + driver: local + pong_logstash_data_01: + driver: local + pong_filebeat_data_01: + driver: local + +networks: + app-network: + driver: bridge diff --git a/filebeat.yml b/filebeat.yml new file mode 100644 index 0000000..f5be95b --- /dev/null +++ b/filebeat.yml @@ -0,0 +1,32 @@ +filebeat.inputs: +#- type: docker + #containers.ids: + # - "*" +- type: filestream + id: default-filestream + paths: + - ingest_data/*.log + +filebeat.autodiscover: + providers: + - type: docker + hints.enabled: true + +processors: +- add_docker_metadata: ~ + + +setup.kibana: + host: ${KIBANA_HOSTS} + username: ${ELASTIC_USER} + password: ${ELASTIC_PASSWORD} + + +output.elasticsearch: + hosts: ${ELASTIC_HOSTS} + username: ${ELASTIC_USER} + password: ${ELASTIC_PASSWORD} + ssl.enabled: false + +#output.logstash: + #hosts: ["http://logstash01:9600"] diff --git a/logstash.conf b/logstash.conf index 6ee59a8..9236eb1 100644 --- a/logstash.conf +++ b/logstash.conf @@ -1,40 +1,17 @@ input { - # Input from Docker container's stdout - beats { + beat { port => 5044 } - } +} filter { - # Grok filter to parse the log lines - grok { - match => { - "message" => [ - "%{DATA:container_name}\s*\|\s*%{IP:client_ip}:%{NUMBER:client_port} - - \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}\" %{NUMBER:status} %{NUMBER:bytes}" - ] - } - } - - # Date filter to convert timestamp to a proper date format - date { - match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"] - target => "@timestamp" - remove_field => ["timestamp"] - } } output { - # Output to stdout for testing purposes - stdout { - codec => rubydebug - } - - # Optionally, output to Elasticsearch -elasticsearch { - hosts => ["localhost:9200"] - index => "docker-logs-%{+YYYY.MM.dd}" - user=> "${ELASTIC_USER}" - password=> "${ELASTIC_PASSWORD}" - } - + elasticsearch { + hosts => ["http://es01:9200"] + index => "docker-logs-%{+YYYY.MM.dd}" + user=> "${ELASTIC_USER}" + password=> "${ELASTIC_PASSWORD}" + } } diff --git a/makefile b/makefile index 754f563..169500b 100644 --- a/makefile +++ b/makefile @@ -1,4 +1,4 @@ -COMPOSE_FILE=docker-compose.yaml +COMPOSE_FILE=docker-compose.yml COMPOSE=docker compose -f $(COMPOSE_FILE) CONTAINER=$(c) @@ -44,4 +44,3 @@ help: @echo " make logs [c=service] # Tail logs of containers" @echo " make ps # List containers" @echo " make help # Show this help" - From 4b82bbbfd185ab7fad2aedb8eb510e1a8a7e127c Mon Sep 17 00:00:00 2001 From: Adrien Audebert Date: Wed, 7 Aug 2024 15:30:11 +0200 Subject: [PATCH 6/8] in progress --- .env | 4 ++- docker-compose.yaml | 24 +++---------- docker-compose.yaml-simle | 61 ++++++++++++++++++++++++++++++++ docker-compose.yml | 74 +++++++++++++++++++++++++++++++++++++-- filebeat.yml | 32 +++-------------- logstash.conf | 8 +++-- makefile | 4 +-- 7 files changed, 152 insertions(+), 55 deletions(-) create mode 100644 docker-compose.yaml-simle diff --git a/.env b/.env index d87bad8..78f2dda 100644 --- a/.env +++ b/.env @@ -16,7 +16,7 @@ PROJECT_PATH=${PWD}/pong # ElasticSearch settings STACK_VERSION=8.14.3 CLUSTER_NAME=docker-cluster -LICENSE=basic +LICENSE=trial ELASTIC_USERNAME=adrien ELASTIC_PASSWORD=qwerty42 @@ -24,3 +24,5 @@ ELASTIC_PASSWORD=qwerty42 # Kibana settings KIBANA_PASSWORD=qwerty42 KIBANA_PORT=5601 + +ENCRYPTION_KEY=c34d38b3a14956121ff2170e5030b471551370178f43e5626eec58b04a30fae2 diff --git a/docker-compose.yaml b/docker-compose.yaml index 6eb4002..8b2b3dd 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -10,11 +10,11 @@ services: venv/bin/python manage.py makemigrations --noinput && venv/bin/python manage.py migrate --noinput && venv/bin/python manage.py collectstatic --noinput && - venv/bin/daphne -b 0.0.0.0 -p 80 pong.asgi:application" + venv/bin/daphne -b 0.0.0.0 -p 8080 pong.asgi:application" volumes: - pong:/transcendence/pong ports: - - "80:80" + - "8080:8080" networks: - app-network environment: @@ -70,6 +70,8 @@ services: container_name: logstash01 volumes: - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf:ro + - /var/lib/docker/containers:/var/lib/docker/containers:ro + - /var/run/docker.sock:/var/run/docker.sock:ro ports: - "5044:5044" networks: @@ -103,24 +105,6 @@ services: #timeout: 10s #retries: 120 - filebeat01: - depends_on: - - es01 - image: docker.elastic.co/beats/filebeat:${STACK_VERSION} - volumes: - - pong_filebeat_data_01:/usr/share/filebeat/data - - ./filebeat.yml:/usr/share/filebeat/filebeat.yml:ro - - /var/lib/docker/containers:/var/lib/docker/containers:ro - - /var/run/docker.sock:/var/run/docker.sock:ro - environment: - - ELASTIC_USER=elastic - - ELASTIC_PASSWORD=${ELASTIC_PASSWORD} - - ELASTIC_HOSTS=https://es01:9200 - - KIBANA_HOSTS=http://kibana:5601 - - LOGSTASH_HOSTS=http://logstash01:9600 - networks: - - app-network - volumes: pong: driver: local diff --git a/docker-compose.yaml-simle b/docker-compose.yaml-simle new file mode 100644 index 0000000..d11b2d0 --- /dev/null +++ b/docker-compose.yaml-simle @@ -0,0 +1,61 @@ +services: + backend: + build: + context: . + dockerfile: Dockerfile + image: backend + container_name: backend + restart: always + command: /bin/sh -c "sleep 5 && + venv/bin/python manage.py makemigrations --noinput && + venv/bin/python manage.py migrate --noinput && + venv/bin/python manage.py collectstatic --noinput && + venv/bin/daphne -b 0.0.0.0 -p 8080 pong.asgi:application" + volumes: + - pong:/transcendence/pong + ports: + - "8080:8080" + networks: + - app-network + environment: + DB_HOST: db + DB_PORT: 5432 + DB_NAME: ${POSTGRES_DB} + DB_USER: ${POSTGRES_USER} + DB_PASSWORD: ${POSTGRES_PASSWORD} + depends_on: + - db + + db: + image: postgres:latest + container_name: postgres + restart: always + volumes: + - pong_pg_data:/var/lib/postgresql/data + ports: + - "5432:5432" + networks: + - app-network + environment: + POSTGRES_DB: ${POSTGRES_DB} + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 10s + timeout: 5s + retries: 5 + +volumes: + pong: + driver: local + driver_opts: + type: none + device: ${PROJECT_PATH} + o: bind + pong_pg_data: + driver: local + +networks: + app-network: + driver: bridge diff --git a/docker-compose.yml b/docker-compose.yml index 5f5beee..944e595 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,59 @@ services: + setup: + image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION} + volumes: + - certs:/usr/share/elasticsearch/config/certs + user: "0" + command: > + bash -c ' + if [ x${ELASTIC_PASSWORD} == x ]; then + echo "Set the ELASTIC_PASSWORD environment variable in the .env file"; + exit 1; + elif [ x${KIBANA_PASSWORD} == x ]; then + echo "Set the KIBANA_PASSWORD environment variable in the .env file"; + exit 1; + fi; + if [ ! -f config/certs/ca.zip ]; then + echo "Creating CA"; + bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip; + unzip config/certs/ca.zip -d config/certs; + fi; + if [ ! -f config/certs/certs.zip ]; then + echo "Creating certs"; + echo -ne \ + "instances:\n"\ + " - name: es01\n"\ + " dns:\n"\ + " - es01\n"\ + " - localhost\n"\ + " ip:\n"\ + " - 127.0.0.1\n"\ + " - name: kibana\n"\ + " dns:\n"\ + " - kibana\n"\ + " - localhost\n"\ + " ip:\n"\ + " - 127.0.0.1\n"\ + > config/certs/instances.yml; + bin/elasticsearch-certutil cert --silent --pem -out config/certs/certs.zip --in config/certs/instances.yml --ca-cert config/certs/ca/ca.crt --ca-key config/certs/ca/ca.key; + unzip config/certs/certs.zip -d config/certs; + fi; + echo "Setting file permissions" + chown -R root:root config/certs; + find . -type d -exec chmod 750 \{\} \;; + find . -type f -exec chmod 640 \{\} \;; + echo "Waiting for Elasticsearch availability"; + until curl -s --cacert config/certs/ca/ca.crt https://es01:9200 | grep -q "missing authentication credentials"; do sleep 30; done; + echo "Setting kibana_system password"; + until curl -s -X POST --cacert config/certs/ca/ca.crt -u "elastic:${ELASTIC_PASSWORD}" -H "Content-Type: application/json" https://es01:9200/_security/user/kibana_system/_password -d "{\"password\":\"${KIBANA_PASSWORD}\"}" | grep -q "^{}"; do sleep 10; done; + echo "All done!"; + ' + healthcheck: + test: ["CMD-SHELL", "[ -f config/certs/es01/es01.crt ]"] + interval: 1s + timeout: 5s + retries: 120 + backend: build: context: . @@ -10,7 +65,7 @@ services: venv/bin/python manage.py makemigrations --noinput && venv/bin/python manage.py migrate --noinput && venv/bin/python manage.py collectstatic --noinput && - venv/bin/daphne -b 0.0.0.0 -p 80 pong.asgi:application" + venv/bin/daphne -b 0.0.0.0 -p 8080 pong.asgi:application" volumes: - pong:/transcendence/pong ports: @@ -50,6 +105,7 @@ services: image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION} container_name: es01 volumes: + - certs:/usr/share/elasticsearch/config/certs - pong_logstash_data_01:/usr/share/elasticsearch/data ports: - "127.0.0.1:9200:9200" @@ -60,8 +116,18 @@ services: - cluster.name=${CLUSTER_NAME} - discovery.type=single-node - ELASTIC_PASSWORD=${ELASTIC_PASSWORD} - - xpack.security.enabled=false - - xpack.license.self_generated.type=trial + - bootstrap.memory_lock=true + - xpack.security.enabled=true + - xpack.security.http.ssl.enabled=true + - xpack.security.http.ssl.key=certs/es01/es01.key + - xpack.security.http.ssl.certificate=certs/es01/es01.crt + - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt + - xpack.security.transport.ssl.enabled=true + - xpack.security.transport.ssl.key=certs/es01/es01.key + - xpack.security.transport.ssl.certificate=certs/es01/es01.crt + - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt + - xpack.security.transport.ssl.verification_mode=certificate + - xpack.license.self_generated.type=${LICENSE} depends_on: - logstash01 @@ -122,6 +188,8 @@ services: - app-network volumes: + certs: + driver: local pong: driver: local driver_opts: diff --git a/filebeat.yml b/filebeat.yml index f5be95b..3082ccb 100644 --- a/filebeat.yml +++ b/filebeat.yml @@ -1,32 +1,10 @@ filebeat.inputs: -#- type: docker - #containers.ids: - # - "*" -- type: filestream - id: default-filestream - paths: - - ingest_data/*.log - -filebeat.autodiscover: - providers: - - type: docker - hints.enabled: true +- type: docker + containers.ids: + - "*" processors: - add_docker_metadata: ~ - -setup.kibana: - host: ${KIBANA_HOSTS} - username: ${ELASTIC_USER} - password: ${ELASTIC_PASSWORD} - - -output.elasticsearch: - hosts: ${ELASTIC_HOSTS} - username: ${ELASTIC_USER} - password: ${ELASTIC_PASSWORD} - ssl.enabled: false - -#output.logstash: - #hosts: ["http://logstash01:9600"] +output.logstash: + hosts: ["http://logstash01:5044"] diff --git a/logstash.conf b/logstash.conf index 9236eb1..4872c61 100644 --- a/logstash.conf +++ b/logstash.conf @@ -1,6 +1,10 @@ input { - beat { - port => 5044 + file { + path => "/var/lib/docker/containers/*/*.log" + start_position => "beginning" + sincedb_path => "/usr/share/logstash/data/sincedb" + type => "docker" + codec => "json" } } diff --git a/makefile b/makefile index 169500b..126ed39 100644 --- a/makefile +++ b/makefile @@ -1,10 +1,10 @@ -COMPOSE_FILE=docker-compose.yml +COMPOSE_FILE=docker-compose.yaml COMPOSE=docker compose -f $(COMPOSE_FILE) CONTAINER=$(c) up: $(COMPOSE) build - $(COMPOSE) up $(CONTAINER) + $(COMPOSE) up build: $(COMPOSE) build $(CONTAINER) From b4dfc443a7fa2fb3bd8905eaacc01b5f65084bf6 Mon Sep 17 00:00:00 2001 From: jcheca Date: Thu, 8 Aug 2024 15:54:58 +0200 Subject: [PATCH 7/8] update --- pong/static/flags/de.svg | 7 + pong/static/flags/es.svg | 712 +++++++++++++++++++++++++++++++++++++++ pong/static/flags/fr.svg | 7 + pong/static/flags/it.svg | 7 + pong/static/flags/us.svg | 57 ++++ pong/static/index.html | 215 +++++++++++- 6 files changed, 997 insertions(+), 8 deletions(-) create mode 100755 pong/static/flags/de.svg create mode 100755 pong/static/flags/es.svg create mode 100755 pong/static/flags/fr.svg create mode 100755 pong/static/flags/it.svg create mode 100755 pong/static/flags/us.svg diff --git a/pong/static/flags/de.svg b/pong/static/flags/de.svg new file mode 100755 index 0000000..61e64d0 --- /dev/null +++ b/pong/static/flags/de.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/pong/static/flags/es.svg b/pong/static/flags/es.svg new file mode 100755 index 0000000..ce2e1a8 --- /dev/null +++ b/pong/static/flags/es.svg @@ -0,0 +1,712 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pong/static/flags/fr.svg b/pong/static/flags/fr.svg new file mode 100755 index 0000000..240e789 --- /dev/null +++ b/pong/static/flags/fr.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/pong/static/flags/it.svg b/pong/static/flags/it.svg new file mode 100755 index 0000000..038afd9 --- /dev/null +++ b/pong/static/flags/it.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/pong/static/flags/us.svg b/pong/static/flags/us.svg new file mode 100755 index 0000000..8a8fb5c --- /dev/null +++ b/pong/static/flags/us.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pong/static/index.html b/pong/static/index.html index 9bfdf51..68b11bb 100644 --- a/pong/static/index.html +++ b/pong/static/index.html @@ -1,6 +1,6 @@ {% load static %} - + @@ -10,10 +10,73 @@ + + + + +
+ Français + English + Italiano + Español + Deutsch +
@@ -22,24 +85,43 @@
+ + +
-

BIENVENUE DANS LE PONG 42

+

BIENVENUE DANS LE PONG 42

- +
@@ -60,6 +142,52 @@
+ + - + \ No newline at end of file From ff50d6d054ffcd0a38263881ce3bef5cb76065b0 Mon Sep 17 00:00:00 2001 From: jcheca Date: Thu, 8 Aug 2024 16:28:16 +0200 Subject: [PATCH 8/8] add web3 --- pong/game/urls.py | 1 + pong/game/views.py | 70 +++++++++++++++++++++++++++++++++++++++ pong/static/index.html | 75 ++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 3 +- 4 files changed, 148 insertions(+), 1 deletion(-) diff --git a/pong/game/urls.py b/pong/game/urls.py index 570f027..4375a95 100644 --- a/pong/game/urls.py +++ b/pong/game/urls.py @@ -9,6 +9,7 @@ urlpatterns = [ path('check_user_exists/', views.check_user_exists, name='check_user_exists'), path('register_user/', views.register_user, name='register_user'), path('authenticate_user/', views.authenticate_user, name='authenticate_user'), + path('web3/', views.read_data, name='read_data'), path('players/', player_list, name='player_list'), path('matches/', match_list, name='match_list'), path('tournois/', tournoi_list, name='tournoi_list'), diff --git a/pong/game/views.py b/pong/game/views.py index 298fa5b..66c8955 100644 --- a/pong/game/views.py +++ b/pong/game/views.py @@ -202,3 +202,73 @@ def tournoi_list(request): return render(request, 'pong/tournoi_list.html', {'tournois': tournois}) ####################### THEOUCHE PART ############################ + + + +####################### jcheca PART ############################ + +from web3 import Web3 + +provider = Web3.HTTPProvider("https://sepolia.infura.io/v3/60e51df7c97c4f4c8ab41605a4eb9907") +web3 = Web3(provider) +eth_gas_price = web3.eth.gas_price/1000000000 +print(eth_gas_price) + +contract_address = "0x078D04Eb6fb97Cd863361FC86000647DC876441B" +contract_abi = [{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"uint256","name":"_timecode","type":"uint256"},{"internalType":"uint256","name":"_participantCount","type":"uint256"},{"internalType":"string[]","name":"_playerPseudonyms","type":"string[]"},{"internalType":"string[]","name":"_finalOrder","type":"string[]"}],"name":"addTournament","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllTournaments","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"timecode","type":"uint256"},{"internalType":"uint256","name":"participantCount","type":"uint256"},{"internalType":"string[]","name":"playerPseudonyms","type":"string[]"},{"internalType":"string[]","name":"finalOrder","type":"string[]"}],"internalType":"struct PongTournament.Tournament[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getTournament","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"timecode","type":"uint256"},{"internalType":"uint256","name":"participantCount","type":"uint256"},{"internalType":"string[]","name":"playerPseudonyms","type":"string[]"},{"internalType":"string[]","name":"finalOrder","type":"string[]"}],"internalType":"struct PongTournament.Tournament","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tournamentCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tournaments","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"timecode","type":"uint256"},{"internalType":"uint256","name":"participantCount","type":"uint256"}],"stateMutability":"view","type":"function"}] + +contract = web3.eth.contract(address=contract_address, abi=contract_abi) + +def read_data(request): + # Créer une instance du contrat + + # Appeler une fonction du contrat pour obtenir tous les tournois + tournaments = contract.functions.getAllTournaments().call() + + # Afficher les résultats + json_data = [] + for tournament in tournaments: + tournament_data = [] + for item in tournament: + print(f"{item}") + tournament_data.append(item) + json_data.append(tournament_data) + + # Retourner le JSON comme réponse HTTP + # print(f"Tournament ID: {tournament[0]}") + # print(f"Name: {tournament[1]}") + # print(f"Timecode: {tournament[2]}") + # print(f"Participant Count: {tournament[3]}") + # print(f"Player Pseudonyms: {', '.join(tournament[4])}") + # print(f"Final Order: {', '.join(tournament[5])}") + print("-----------------------------") + return JsonResponse(json_data, safe=False) + + +def write_data(request): + # addTournament(string,uint256,uint256,string[],string[]) + + # # Configuration de la transaction pour la fonction store + # account = "0x66CeBE2A1F7dae0F6AdBAad2c15A56A9121abfEf" + # private_key = "beb16ee3434ec5abec8b799549846cc04443c967b8d3643b943e2e969e7d25be" + + # nonce = web3.eth.get_transaction_count(account) + # transaction = contract.functions.addTournament("test",1721830559,6,["aaudeber", "tlorne", "ocassany", "yestello", "jcheca", "toto"],["toto", "jcheca", "yestello", "tlorne", "ocassany", "aaudeber"]).build_transaction({ + # 'chainId': 11155111, # ID de la chaîne Sepolia + # 'gas': 2000000, + # 'gasPrice': web3.to_wei(eth_gas_price, 'gwei'), + # 'nonce': nonce + # }) + + # # Signature de la transaction + # signed_txn = web3.eth.account.sign_transaction(transaction, private_key) + + # # Envoi de la transaction + # tx_hash = web3.eth.send_raw_transaction(signed_txn.rawTransaction) + # print("Transaction hash:", web3.to_hex(tx_hash)) + + # # Attente de la confirmation de la transaction + # tx_receipt = web3.eth.wait_for_transaction_receipt(tx_hash) + # print("Transaction receipt:", tx_receipt) + print("-----------------------------") + diff --git a/pong/static/index.html b/pong/static/index.html index 68b11bb..4135741 100644 --- a/pong/static/index.html +++ b/pong/static/index.html @@ -67,6 +67,50 @@ font-size: 16px; } + @@ -105,6 +149,37 @@
+ + +

BIENVENUE DANS LE PONG 42

diff --git a/requirements.txt b/requirements.txt index 9b9e85a..0792c48 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,4 +2,5 @@ Django psycopg2 python-dotenv channels -daphne \ No newline at end of file +daphne +web3 \ No newline at end of file