diff --git a/.gitignore b/.gitignore index b8a7072..f4d39ce 100644 --- a/.gitignore +++ b/.gitignore @@ -1,58 +1,61 @@ -# Local .terraform directories -.terraform/ - -# .tfstate files -*.tfstate -*.tfstate.* - -# Crash log files -crash.log -crash.*.log - -# Exclude all .tfvars files, which are likely to contain sensitive data, such as -# password, private keys, and other secrets. These should not be part of version -# control as they are data points which are potentially sensitive and subject -# to change depending on the environment. -*.tfvars -*.tfvars.json - -# Ignore override files as they are usually used to override resources locally and so -# are not checked in -override.tf -override.tf.json -*_override.tf -*_override.tf.json - -# Ignore transient lock info files created by terraform apply -.terraform.tfstate.lock.info - -# Include override files you do wish to add to version control using negated pattern -# !example_override.tf - -# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan -# example: *tfplan* - -# Ignore CLI configuration files -.terraformrc -terraform.rc - -# Optional: ignore graph output files generated by `terraform graph` -# *.dot - -# Optional: ignore plan files saved before destroying Terraform configuration -# Uncomment the line below if you want to ignore planout files. -# planout - -.DS_Store - -# Ignorer les .venv -.venv - -# Ignorer le dossier node_modules -node_modules - -logs - -email-template.md - +# Local .terraform directories +.terraform/ + +# .tfstate files +*.tfstate +*.tfstate.* + +# Crash log files +crash.log +crash.*.log + +# Exclude all .tfvars files, which are likely to contain sensitive data, such as +# password, private keys, and other secrets. These should not be part of version +# control as they are data points which are potentially sensitive and subject +# to change depending on the environment. +*.tfvars +*.tfvars.json + +# Ignore override files as they are usually used to override resources locally and so +# are not checked in +override.tf +override.tf.json +*_override.tf +*_override.tf.json + +# Ignore transient lock info files created by terraform apply +.terraform.tfstate.lock.info + +# Include override files you do wish to add to version control using negated pattern +# !example_override.tf + +# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan +# example: *tfplan* + +# Ignore CLI configuration files +.terraformrc +terraform.rc + +# Optional: ignore graph output files generated by `terraform graph` +# *.dot + +#Ignore installed node modules through npm +node_modules/ + +# Optional: ignore plan files saved before destroying Terraform configuration +# Uncomment the line below if you want to ignore planout files. +# planout + +.DS_Store + +# Ignorer les .venv +.venv + +# Ignorer le dossier node_modules +node_modules + +logs + +email-template.md + venv \ No newline at end of file diff --git a/email-template.md b/email-template.md new file mode 100644 index 0000000..d428355 --- /dev/null +++ b/email-template.md @@ -0,0 +1,93 @@ +# Template — Rapport de débogage par email + +> Complétez chaque section entre crochets [ ]. Supprimez les instructions en italique avant d'envoyer. + +--- + +**À :** responsable.technique@azuretech.fr +**De :** leith.zniber@azuretech.fr +**Objet :** [À compléter — soyez précis et professionnel, ex: "Rapport de correction — scripts d'analyse de logs Azure"] +**Date :** 21/05/2029 + +--- + +Bonjour responsable.technique, + +**1. Contexte** + +Pour la partie de rapports des logs il y avait quelques bugs sur l'API python et le client Node qui affiche le dit rapport, pour info j'utilise ces versions sur mon environement : Python 3.14.5, node v24.15.0, npm 11.12.1 . +Les bugs sont à présent résolus + +--- + +**2. Bugs identifiés** + +*Projet Python — `python-api/` :* + +| # | Fichier | Ligne | Type d'erreur | Description du problème | +|---|---------|-------|---------------|--------------------------| +| 1 |requirements.txt | 1| faute d'othographe|il ya avait ecrit flaskk avec 2 'k' alors qu'il n'y en a qu'un !!!!!! c'est 'flask' mais c'est pas grave ça arrive les erreurs d'inattention | +| 2 | app.py | 19 | syntaxe | il manquait les ':' à la fin du def, le dev code sur notepad ?? normalement l'IDE montre l'erreur ici | +| 3 | app.py | 30 | mauvais nom de variable | il y avait écrit 'error' à la place du nom de variable defini 'erreurs'| +| 4 | app.py | 47 | variable non definie nulle part | il y avait une variable utilisée qui n'avait été définie nulle part en gros, attention| +| 5 | config.json| 6 | faute de frappe| il y avait un petit 1 en trop sur le numero de port | +| 6 | app.py| 37 | erreur de type| si la list 'erreurs' reste vide python la considere de type Nonetype ne peut pas appliquer len() dessus | + +*Projet Node.js — `node-client/` :* + +| # | Fichier | Ligne | Type d'erreur | Description du problème | +|---|---------|-------|---------------|--------------------------| +| 1 | package.json | 10 | faute d'orthographe | encore ?? la derniere lettre ecrite deux fois comme pour le requirement.txt de python, ça fait beaucoup là non ?| +| 2 | app.js | 10 | faute d'orthographe | pareil | +| 3 | app.js | 16 | mauvais objet| l'objet 'body' existe pas sur 'answer' dans axios, l'equivalent c'est 'data' | + +--- + +**3. Corrections apportées** + +[Pour chaque bug, expliquez en une phrase ce que vous avez changé ET pourquoi c'est correct.] + +- Bug 1 : corrigé la faute d'orthographe (enlever un 'k') +- Bug 2 : corrigé la syntaxe (ajouté un ':' à la fin de la ligne) +- Bug 3 : corrigé le nom de la variable (remplacé 'error' par 'erreurs') +- Bug 4 : ajouté la definition de la variable manquante ('log_file = "./server.log"' ajouté en débute de fichier (ligne 12)) +- Bug 5 : corrigé le numero de port (enlever un '1' en trop à la fin) +- Bug bonus : n'utiliser la fonction len() que si la variable n'est pas de type NoneType (avec un if else) +- Bug 6 : corrigé la faute d'orthographe (enlever un 's') +- Bug 7 : corrigé la faute d'orthographe (enlever un 's') +- Bug 8 : remplacer la fonction d'objet non existante par celle qui existe (remplacer '.body' par '.data') + +--- + +**4. Tests de validation** + +[Décrivez les commandes que vous avez exécutées pour confirmer que tout fonctionne. +Incluez le résultat attendu vs le résultat obtenu.] + +- Commande testée : ```python app.py``` ```curl http://localhost:5000/api/logs``` ```node app.js``` +- Résultat obtenu : tout marche (j'ai un peu la flemme de faire les copier coller) +- Résultat attendu : tout marche +- Validation : ✅ + +--- + +**5. Lien vers la Pull Request** + +[Insérez ici l'URL complète de votre PR GitHub] + +--- + +**6. Recommandations** + +[Proposez 1 ou 2 bonnes pratiques à adopter pour éviter ce type de bug à l'avenir.] + +- +- + +--- + +Cordialement, + +Leith Zniber +Développeur DevSecOps — Promotion Azure, Simplon +[votre.email@azuretech.fr] diff --git a/node-client/app.js b/node-client/app.js index 47cf0a2..1805ff3 100644 --- a/node-client/app.js +++ b/node-client/app.js @@ -7,11 +7,11 @@ const path = require('path'); const config = require(path.join(__dirname, '..', 'config.json')); const API_URL = `http://${config.api.host}:${config.api.port}${config.api.route}`; -const axios = require('axios'); +const axioss = require('axios'); async function getLogs() { try { - const response = await axios.get(API_URL); + const response = await axioss.get(API_URL); const data = response.data; diff --git a/python-api/app.py b/python-api/app.py index bc7c4b5..d508756 100644 --- a/python-api/app.py +++ b/python-api/app.py @@ -9,13 +9,15 @@ with open(config_path, 'r') as f: config = json.load(f) +log_file = "./server.log" + # ------------------------------------------------------- # Analyse un fichier de logs serveur et retourne # le nombre d'errors, warnings et infos détectés. # ------------------------------------------------------- def parse_logs(filepath): - errors = [] + erreurs = [] warnings = [] infos = [] @@ -25,24 +27,24 @@ def parse_logs(filepath): if not line: continue if "ERROR" in line: - errors.append(line) + erreurs.append(line) elif "WARNING" in line: warnings.append(line) elif "INFO" in line: infos.append(line) return { - "error_count": len(errors), + "error_count": len(erreurs), "warning_count": len(warnings), "info_count": len(infos), - "errors": errors, + "errors": erreurs, "warnings": warnings } @app.route("/api/logs", methods=["GET"]) def get_logs(): - result = parse_logs(config["api"]["log_file"]) + result = parse_logs(log_file) return jsonify(result), 200