diff --git a/mon-projet/README.txt b/mon-projet/README.txt new file mode 100644 index 0000000..29b81dd --- /dev/null +++ b/mon-projet/README.txt @@ -0,0 +1,35 @@ +# Mon projet Bash + +# 1. Combien de lignes contient server.log ? + + +# 2. Affichez uniquement les 5 premières lignes + + +# 3. Affichez uniquement les 3 dernières lignes + +# 4. Combien de lignes contiennent le mot ERROR ? + + +# 5. Affichez toutes les lignes WARNING + + +# 6. Affichez toutes les lignes CRITICAL + + +# 7. Combien d'erreurs ET de critiques y a-t-il au total ? +# (indice : grep -E "ERROR|CRITICAL") + + +# 1 liner for these commands + +echo -e "=== LOGS REPORTS ===\n +Number of lines : $(wc -l < server.log)\n +Errors : $(grep -c 'ERROR' server.log)\n +Warnings : $(grep -c 'WARNING' server.log)\n +Critical : $(grep -c 'CRITICAL' server.log)" > rapport.txt + +&& + +echo -e "=== ERROR LINES ===\n +$(grep 'ERROR' server.log)" > error.txt diff --git a/mon-projet/config/settings.txt b/mon-projet/config/settings.txt new file mode 100644 index 0000000..e69de29 diff --git a/mon-projet/erreurs.txt b/mon-projet/erreurs.txt new file mode 100644 index 0000000..259593d --- /dev/null +++ b/mon-projet/erreurs.txt @@ -0,0 +1,5 @@ +2024-01-15 08:02:45 ERROR Failed to connect to Azure Storage: connection timeout +2024-01-15 08:05:33 ERROR Authentication failed for service account: deploy_svc +2024-01-15 08:07:42 ERROR Database query timeout after 30s on table: audit_logs +2024-01-15 08:09:00 ERROR Max retries exceeded - Azure Storage service unavailable +2024-01-15 08:12:45 ERROR Backup failed: insufficient permissions on /var/backup/azure diff --git a/mon-projet/rapport.txt b/mon-projet/rapport.txt new file mode 100644 index 0000000..e69de29 diff --git a/mon-projet/src/analyse-niveaux.sh b/mon-projet/src/analyse-niveaux.sh new file mode 100644 index 0000000..4479ac3 --- /dev/null +++ b/mon-projet/src/analyse-niveaux.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# analyse-niveaux.sh — Count every level of the log + +LOG_FILE="ressources/server.log" + +echo "=== Analyse par niveau ===" + +for NIVEAU in INFO WARNING ERROR CRITICAL; do + NB=$(grep -c "$NIVEAU" "$LOG_FILE") + echo " $NIVEAU : $NB occurrence(s)" +done + +echo "==========================" +echo " TOTAL : $(wc -l <"$LOG_FILE") lignes" diff --git a/mon-projet/src/app.sh b/mon-projet/src/app.sh new file mode 100644 index 0000000..a9bf588 --- /dev/null +++ b/mon-projet/src/app.sh @@ -0,0 +1 @@ +#!/bin/bash diff --git a/mon-projet/src/azure-create-vm.sh b/mon-projet/src/azure-create-vm.sh new file mode 100644 index 0000000..89c37b6 --- /dev/null +++ b/mon-projet/src/azure-create-vm.sh @@ -0,0 +1,26 @@ +#!/bin/bash +RESOURCE_GROUP="asigurRG" +VM_NAME="ubuntuservmc" +VM_IMAGE="Ubuntu2204" +VM_SIZE="Standard_D2s_v3" + +# Créer une VM avec clé SSH générée automatiquement +az vm create \ + --resource-group "$RESOURCE_GROUP" \ + --name "$VM_NAME" \ + --image "$VM_IMAGE" \ + --size "$VM_SIZE" \ + --location "swedencentral" \ + --admin-username "debian" \ + --generate-ssh-keys \ + --output json + +# Récupérer l'IP publique +IP=$(az vm show \ + --resource-group "$RESOURCE_GROUP" \ + --name "$VM_NAME" \ + --show-details \ + --query "publicIps" \ + --output tsv) + +echo "IP de la VM : $IP" diff --git a/mon-projet/src/azure-key-vault.sh b/mon-projet/src/azure-key-vault.sh new file mode 100644 index 0000000..9d1ff5b --- /dev/null +++ b/mon-projet/src/azure-key-vault.sh @@ -0,0 +1,28 @@ +#!/bin/bash +KEYVAULT_NAME="adri-keyvault-$RANDOM" + +# Créer le Key Vault +az keyvault create \ + --name "$KEYVAULT_NAME" \ + --resource-group "$RESOURCE_GROUP" \ + --location "$LOCATION" + +# Ajouter un secret +az keyvault secret set \ + --vault-name "$KEYVAULT_NAME" \ + --name "db-password" \ + --value "Root1234@" + +# Récupérer un secret dans un script +SECRET=$(az keyvault secret show \ + --vault-name "$KEYVAULT_NAME" \ + --name "db-password" \ + --query "value" \ + --output tsv) + +echo "Secret récupéré (longueur : ${#SECRET} caractères)" + +# Lister tous les secrets +az keyvault secret list \ + --vault-name "$KEYVAULT_NAME" \ + --output table diff --git a/mon-projet/src/azure-storage.sh b/mon-projet/src/azure-storage.sh new file mode 100644 index 0000000..5db16a2 --- /dev/null +++ b/mon-projet/src/azure-storage.sh @@ -0,0 +1,60 @@ +#!/bin/bash +# azure-storage.sh — Crée un compte de stockage et uploade server.log + +set -e + +RESOURCE_GROUP="asigurRG" +LOCATION="francecentral" +STORAGE_ACCOUNT="adri-keyvault-$RANDOM" +CONTAINER="logs" +FICHIER_LOCAL="ressources/server.log" +FICHIER_BLOB="server.log" + +echo "=== Création du compte de stockage Azure ===" + +# Créer le compte de stockage +az storage account create \ + --name "$STORAGE_ACCOUNT" \ + --resource-group "$RESOURCE_GROUP" \ + --location "$LOCATION" \ + --sku Standard_LRS \ + --kind StorageV2 \ + --output none + +echo "Compte créé : $STORAGE_ACCOUNT" + +# Récupérer la clé de connexion +CLE=$(az storage account keys list \ + --resource-group "$RESOURCE_GROUP" \ + --account-name "$STORAGE_ACCOUNT" \ + --query "[0].value" \ + --output tsv) + +# Créer un conteneur +az storage container create \ + --name "$CONTAINER" \ + --account-name "$STORAGE_ACCOUNT" \ + --account-key "$CLE" \ + --output none + +echo "Conteneur créé : $CONTAINER" + +# Uploader server.log +az storage blob upload \ + --container-name "$CONTAINER" \ + --file "$FICHIER_LOCAL" \ + --name "$FICHIER_BLOB" \ + --account-name "$STORAGE_ACCOUNT" \ + --account-key "$CLE" \ + --output none + +echo "Fichier uploadé : $FICHIER_BLOB" + +# Lister les blobs du conteneur +echo "" +echo "=== Contenu du conteneur ===" +az storage blob list \ + --container-name "$CONTAINER" \ + --account-name "$STORAGE_ACCOUNT" \ + --account-key "$CLE" \ + --output table diff --git a/mon-projet/src/check-env.sh b/mon-projet/src/check-env.sh new file mode 100644 index 0000000..61ef75f --- /dev/null +++ b/mon-projet/src/check-env.sh @@ -0,0 +1,50 @@ +#!/bin/bash +# check-env.sh — Vérifie que l'environnement est prêt pour NexaCloud + +set -e + +VERT="\033[0;32m" +ROUGE="\033[0;31m" +JAUNE="\033[0;33m" +RESET="\033[0m" + +ok() { echo -e "${VERT} [OK]${RESET} $1"; } +warn() { echo -e "${JAUNE} [WARN]${RESET} $1"; } +err() { echo -e "${ROUGE} [ERR]${RESET} $1"; } + +# Cette fonction vérifie si une commande est installée +# $1 = nom de la commande | $2 = nom à afficher (optionnel) +verifier_commande() { + local cmd="$1" + local nom="${2:-$1}" + # La commande "command -v" vérifie si un programme existe + # &>/dev/null redirige la sortie pour ne rien afficher + if command -v "$cmd" &>/dev/null; then + ok "$nom installé" + else + err "$nom non trouvé" + fi +} + +verifier_fichier() { + local nom_fichier="$1" + if [ -f "$nom_fichier" ]; then + ok "$nom_fichier existe" + else + warn "$nom_fichier non trouvé" + fi +} + +echo "" +echo "=== Vérification de l'environnement NexaCloud ===" +echo "" + +verifier_commande "python3" "Python" +echo "" + +verifier_fichier "config.json" +verifier_fichier "ressources/server.log" + +echo "" +echo "=== Vérification terminée ===" +echo "" diff --git a/mon-projet/src/check-logs.sh b/mon-projet/src/check-logs.sh new file mode 100644 index 0000000..bccf97e --- /dev/null +++ b/mon-projet/src/check-logs.sh @@ -0,0 +1,37 @@ +#!/bin/bash +# check-logs.sh — Verify state and if there an error + +SEUIL_ERREURS=3 + +LOG_FILE="${1:-ressources/server.log}" + +if [ -z "$1" ]; then + echo "Pas de fichier de log spécifié, utilisation du fichier $LOG_FILE" +fi + +if [ -f "$LOG_FILE" ]; then + echo "Fichier $LOG_FILE trouvé" +else + echo "Fichier $LOG_FILE absent" + exit 1 +fi + +NB_ERREURS=$(grep -c "ERROR" "$LOG_FILE") +NB_CRITIQUES=$(grep -c "CRITICAL" "$LOG_FILE") +NB_WARNINGS=$(grep -c "WARNING" "$LOG_FILE") + +echo "=== Analyse de $LOG_FILE ===" +echo " INFO : $(grep -c "INFO" "$LOG_FILE")" +echo " WARNING : $NB_WARNINGS" +echo " ERROR : $NB_ERREURS" +echo " CRITICAL : $NB_CRITIQUES" +echo "===========================" + +# Vérifier le seuil d'erreurs +if [ "$NB_CRITIQUES" -gt 0 ]; then + echo "ALERTE CRITIQUE : $NB_CRITIQUES incident(s) critique(s) détecté(s) !" +elif [ "$NB_ERREURS" -gt "$SEUIL_ERREURS" ]; then + echo "ATTENTION : $NB_ERREURS erreurs détectées (seuil : $SEUIL_ERREURS)" +else + echo "OK : les logs sont dans les normes." +fi diff --git a/mon-projet/src/couleurs.sh b/mon-projet/src/couleurs.sh new file mode 100644 index 0000000..f125e0b --- /dev/null +++ b/mon-projet/src/couleurs.sh @@ -0,0 +1,19 @@ +#!/bin/bash +# couleurs.sh — Test function output + +# Colors +VERT="\033[0;32m" +ROUGE="\033[0;31m" +JAUNE="\033[0;33m" +CYAN="\033[0;36m" +RESET="\033[0m" + +ok() { echo -e "${VERT}[OK]${RESET} $1"; } +info() { echo -e "${CYAN}[INFO]${RESET} $1"; } +warn() { echo -e "${JAUNE}[WARN]${RESET} $1"; } +err() { echo -e "${ROUGE}[ERR]${RESET} $1"; } + +ok "Installation réussie" +info "Démarrage du serveur..." +warn "Mémoire basse : 78%" +err "Connexion échouée" diff --git a/mon-projet/src/info.sh b/mon-projet/src/info.sh new file mode 100644 index 0000000..d14ac50 --- /dev/null +++ b/mon-projet/src/info.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# info.sh — Affiche des informations sur l'environnement + +NOM_PROJET="NexaCloud" +VERSION="1.1.0" +LOG_FILE="ressources/server.log" + +echo "===============================" +echo " Projet : $NOM_PROJET" +echo " Version : $VERSION" +echo "===============================" + +# check if the log exist +if [ -f "$LOG_FILE" ]; then + NB_LIGNES=$(wc -l <"$LOG_FILE") + echo " Log : $LOG_FILE ($NB_LIGNES lignes)" +else + echo " Log : fichier introuvable !" +fi + +echo "===============================" diff --git a/mon-projet/src/rapport.sh b/mon-projet/src/rapport.sh new file mode 100644 index 0000000..6b81ce1 --- /dev/null +++ b/mon-projet/src/rapport.sh @@ -0,0 +1,57 @@ +#!/bin/bash +# rapport.sh — Génère un rapport complet avec des fonctions + +LOG_FILE="${1:-ressources/server.log}" +RAPPORT="mon-projet/logs/rapport-$(date +%Y%m%d-%H%M%S).txt" + +# ── Fonctions ────────────────────────────────────────────────────── + +afficher_titre() { + echo "===========================================" + echo " $1" + echo "===========================================" +} + +compter_niveau() { + local niveau="$1" + local fichier="$2" + grep -c "$niveau" "$fichier" 2>/dev/null || echo 0 +} + +ecrire_section() { + local titre="$1" + local contenu="$2" + { + echo "" + echo "--- $titre ---" + echo "$contenu" + } >>"$RAPPORT" +} + +# ── Script principal ─────────────────────────────────────────────── + +if [ ! -f "$LOG_FILE" ]; then + echo "Fichier introuvable : $LOG_FILE" + exit 1 +fi + +afficher_titre "RAPPORT D'ANALYSE — $(date '+%d/%m/%Y %H:%M')" + +INFO=$(compter_niveau "INFO" "$LOG_FILE") +WARNING=$(compter_niveau "WARNING" "$LOG_FILE") +ERROR=$(compter_niveau "ERROR" "$LOG_FILE") +CRITICAL=$(compter_niveau "CRITICAL" "$LOG_FILE") + +echo " INFO : $INFO" +echo " WARNING : $WARNING" +echo " ERROR : $ERROR" +echo " CRITICAL : $CRITICAL" + +# write the audit in a file +echo "RAPPORT D'ANALYSE — $(date '+%d/%m/%Y %H:%M')" >"$RAPPORT" +ecrire_section "Compteurs" "INFO=$INFO WARNING=$WARNING ERROR=$ERROR CRITICAL=$CRITICAL" +ecrire_section "Incidents critiques" "$(grep 'CRITICAL' "$LOG_FILE")" +ecrire_section "Erreurs" "$(grep 'ERROR' "$LOG_FILE")" + +echo "" +echo "Rapport sauvegardé : $RAPPORT" diff --git a/setup.sh b/setup.sh new file mode 100644 index 0000000..b80cfcd --- /dev/null +++ b/setup.sh @@ -0,0 +1,88 @@ +#!/bin/bash +# setup.sh — Prépare le projet NexaCloud en une commande + +set -e + +VERT="\033[0;32m" +ROUGE="\033[0;31m" +JAUNE="\033[0;33m" +CYAN="\033[0;36m" +BOLD="\033[1m" +RESET="\033[0m" + +info() { echo -e "${CYAN}[INFO]${RESET} $1"; } +ok() { echo -e "${VERT}[OK]${RESET} $1"; } +warn() { echo -e "${JAUNE}[WARN]${RESET} $1"; } +err() { + echo -e "${ROUGE}[ERR]${RESET} $1" + exit 1 +} + +# ── Bannière ──────────────────────────────────────────────── +echo "" +echo -e "${BOLD}${CYAN}============================================${RESET}" +echo -e "${BOLD}${CYAN} SETUP NEXACLOUD — $(date '+%d/%m/%Y %H:%M')${RESET}" +echo -e "${BOLD}${CYAN}============================================${RESET}" +echo "" + +# ── 1. Vérification des prérequis ─────────────────────────── +info "Vérification des prérequis..." + +command -v python3 &>/dev/null || err "Python3 non installé" +command -v node &>/dev/null || err "Node.js non installé" +command -v npm &>/dev/null || err "npm non installé" + +ok "Prérequis : Python3, Node.js, npm présents" + +# ── 2. Installation des dépendances Python ───────────────── +info "Installation des dépendances Python..." + +if [ -f "python-api/requirements.txt" ]; then + pip install -r python-api/requirements.txt --quiet + ok "Dépendances Python installées" +else + warn "python-api/requirements.txt introuvable" +fi + +# ── 3. Installation des dépendances Node ─────────────────── +info "Installation des dépendances Node..." + +if [ -f "node-client/package.json" ]; then + cd node-client && npm install --silent && cd .. + ok "Dépendances Node installées" +else + warn "node-client/package.json introuvable" +fi + +# ── 4. Analyse des logs ──────────────────────────────────── +info "Analyse des logs..." + +LOG="ressources/server.log" + +if [ -f "$LOG" ]; then + NB_ERR=$(grep -c "ERROR" "$LOG") + NB_CRIT=$(grep -c "CRITICAL" "$LOG") + + ok "Logs analysés : $NB_ERR erreur(s), $NB_CRIT critique(s)" + + if [ "$NB_CRIT" -gt 0 ]; then + echo -e "${ROUGE}[ALERTE]${RESET} Incidents critiques détectés :" + + grep "CRITICAL" "$LOG" | while read -r ligne; do + echo " -> $ligne" + done + fi +else + warn "Fichier de log introuvable : $LOG" +fi + +# ── 5. Message de fin ────────────────────────────────────── +echo "" +echo -e "${BOLD}${VERT}============================================${RESET}" +echo -e "${BOLD}${VERT} SETUP TERMINÉ AVEC SUCCÈS ${RESET}" +echo -e "${BOLD}${VERT}============================================${RESET}" +echo "" + +echo " Lancer l'API Python : cd python-api && python3 app.py" +echo " Lancer le client Node: cd node-client && node app.js" +echo ""