727 lines
46 KiB
HTML
727 lines
46 KiB
HTML
<!DOCTYPE html>
|
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
|
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
|
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
|
|
xmlns:p="http://primefaces.org/ui"
|
|
template="/templates/main-template.xhtml">
|
|
|
|
<ui:define name="title">Configuration Système - UnionFlow</ui:define>
|
|
|
|
<ui:define name="content">
|
|
<div class="ui-fluid">
|
|
<!-- En-tête principal avec disposition Freya stricte -->
|
|
<div class="card">
|
|
<div class="formgrid grid">
|
|
<div class="field col-12 lg:col-8">
|
|
<h2 class="text-primary font-bold mb-2">
|
|
<i class="pi pi-cog text-purple-500 mr-2"></i>
|
|
Configuration Système
|
|
</h2>
|
|
<p class="text-600 mt-0">
|
|
Paramètres globaux et administration de la plateforme UnionFlow •
|
|
<span class="font-semibold">Version #{configurationBean.versionSysteme}</span> •
|
|
<span class="font-semibold text-green-600">Environnement #{configurationBean.environnement}</span>
|
|
</p>
|
|
</div>
|
|
<div class="field col-12 lg:col-4 text-right">
|
|
<h:form id="formActionsEntete">
|
|
<p:commandButton icon="pi pi-save"
|
|
title="Sauvegarder configuration"
|
|
styleClass="ui-button-success ui-button-sm mr-3"
|
|
action="#{configurationBean.sauvegarderConfiguration}" />
|
|
<p:commandButton icon="pi pi-download"
|
|
title="Exporter"
|
|
styleClass="ui-button-info ui-button-outlined ui-button-sm mr-3"
|
|
action="#{configurationBean.exporterConfiguration}" />
|
|
<p:commandButton icon="pi pi-refresh"
|
|
title="Redémarrer services"
|
|
styleClass="ui-button-warning ui-button-outlined ui-button-sm"
|
|
onclick="return confirm('Redémarrer les services système ?');"
|
|
action="#{configurationBean.redemarrerServices}" />
|
|
</h:form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- KPIs Système avec grille Freya stricte -->
|
|
<div class="formgrid grid">
|
|
<!-- KPI 1: Statut Système -->
|
|
<ui:include src="/templates/components/cards/kpi-card.xhtml">
|
|
<ui:param name="title" value="Statut Système" />
|
|
<ui:param name="value" value="Opérationnel" />
|
|
<ui:param name="icon" value="pi-check-circle" />
|
|
<ui:param name="iconColor" value="green-600" />
|
|
<ui:param name="statusIcon" value="pi-circle-fill" />
|
|
<ui:param name="statusLabel" value="Uptime" />
|
|
<ui:param name="statusValue" value="#{configurationBean.tempsActivite}" />
|
|
<ui:param name="showProgress" value="false" />
|
|
</ui:include>
|
|
|
|
<!-- KPI 2: Utilisateurs Connectés -->
|
|
<ui:include src="/templates/components/cards/kpi-card.xhtml">
|
|
<ui:param name="title" value="Utilisateurs Actifs" />
|
|
<ui:param name="value" value="#{configurationBean.utilisateursConnectes}" />
|
|
<ui:param name="icon" value="pi-users" />
|
|
<ui:param name="iconColor" value="blue-600" />
|
|
<ui:param name="statusIcon" value="pi-clock" />
|
|
<ui:param name="statusLabel" value="Sessions" />
|
|
<ui:param name="statusValue" value="#{configurationBean.sessionsActives} actives" />
|
|
<ui:param name="showProgress" value="false" />
|
|
</ui:include>
|
|
|
|
<!-- KPI 3: Performance Système -->
|
|
<ui:include src="/templates/components/cards/kpi-card.xhtml">
|
|
<ui:param name="title" value="Performance" />
|
|
<ui:param name="value" value="CPU #{configurationBean.cpuUtilisation}%" />
|
|
<ui:param name="icon" value="pi-chart-line" />
|
|
<ui:param name="iconColor" value="orange-600" />
|
|
<ui:param name="progressValue" value="#{configurationBean.cpuUtilisation}" />
|
|
<ui:param name="noDataLabel" value="Mémoire: #{configurationBean.memoireUtilisee}%" />
|
|
<ui:param name="showGrowth" value="false" />
|
|
</ui:include>
|
|
|
|
<!-- KPI 4: Dernière Sauvegarde -->
|
|
<ui:include src="/templates/components/cards/kpi-card.xhtml">
|
|
<ui:param name="title" value="Dernière Sauvegarde" />
|
|
<ui:param name="value" value="#{configurationBean.derniereSauvegarde}" />
|
|
<ui:param name="icon" value="pi-save" />
|
|
<ui:param name="iconColor" value="purple-600" />
|
|
<ui:param name="statusIcon" value="pi-database" />
|
|
<ui:param name="statusLabel" value="Auto" />
|
|
<ui:param name="statusValue" value="#{configurationBean.frequenceSauvegarde}" />
|
|
<ui:param name="showProgress" value="false" />
|
|
</ui:include>
|
|
</div>
|
|
|
|
<!-- Configuration Générale avec structure Freya -->
|
|
<div class="card">
|
|
<h5 class="mb-3">
|
|
<i class="pi pi-cog text-purple-500 mr-2"></i>
|
|
Configuration Générale
|
|
</h5>
|
|
<h:form id="formConfigGenerale">
|
|
<div class="formgrid grid">
|
|
<div class="field col-12 md:col-6 lg:col-4">
|
|
<label for="nomApplication" class="block text-900 font-medium mb-2">Nom de l'Application</label>
|
|
<p:inputText id="nomApplication"
|
|
value="#{configurationBean.nomApplication}"
|
|
placeholder="UnionFlow"
|
|
styleClass="w-full" />
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6 lg:col-4">
|
|
<label for="version" class="block text-900 font-medium mb-2">Version Système</label>
|
|
<p:inputText id="version"
|
|
value="#{configurationBean.versionSysteme}"
|
|
readonly="true"
|
|
styleClass="w-full" />
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6 lg:col-4">
|
|
<label for="environnement" class="block text-900 font-medium mb-2">Environnement</label>
|
|
<p:selectOneMenu id="environnement"
|
|
value="#{configurationBean.environnement}"
|
|
styleClass="w-full">
|
|
<f:selectItem itemLabel="Développement" itemValue="DEV" />
|
|
<f:selectItem itemLabel="Test" itemValue="TEST" />
|
|
<f:selectItem itemLabel="Production" itemValue="PROD" />
|
|
</p:selectOneMenu>
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6 lg:col-4">
|
|
<label for="timezone" class="block text-900 font-medium mb-2">Fuseau Horaire</label>
|
|
<p:selectOneMenu id="timezone"
|
|
value="#{configurationBean.timezone}"
|
|
styleClass="w-full">
|
|
<f:selectItem itemLabel="GMT (Greenwich)" itemValue="GMT" />
|
|
<f:selectItem itemLabel="CET (Europe Central)" itemValue="CET" />
|
|
<f:selectItem itemLabel="WAT (Afrique Ouest)" itemValue="WAT" />
|
|
</p:selectOneMenu>
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6 lg:col-4">
|
|
<label for="langue" class="block text-900 font-medium mb-2">Langue par Défaut</label>
|
|
<p:selectOneMenu id="langue"
|
|
value="#{configurationBean.langueDefaut}"
|
|
styleClass="w-full">
|
|
<f:selectItem itemLabel="Français" itemValue="fr" />
|
|
<f:selectItem itemLabel="English" itemValue="en" />
|
|
<f:selectItem itemLabel="العربية" itemValue="ar" />
|
|
</p:selectOneMenu>
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6 lg:col-4">
|
|
<label for="devise" class="block text-900 font-medium mb-2">Devise par Défaut</label>
|
|
<p:selectOneMenu id="devise"
|
|
value="#{configurationBean.deviseDefaut}"
|
|
styleClass="w-full">
|
|
<f:selectItem itemLabel="FCFA (Franc CFA)" itemValue="XOF" />
|
|
<f:selectItem itemLabel="EUR (Euro)" itemValue="EUR" />
|
|
<f:selectItem itemLabel="USD (Dollar)" itemValue="USD" />
|
|
<f:selectItem itemLabel="GHS (Cédi Ghana)" itemValue="GHS" />
|
|
<f:selectItem itemLabel="NGN (Naira Nigeria)" itemValue="NGN" />
|
|
</p:selectOneMenu>
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6">
|
|
<label for="urlBase" class="block text-900 font-medium mb-2">URL Base Application</label>
|
|
<p:inputText id="urlBase"
|
|
value="#{configurationBean.urlBaseApplication}"
|
|
placeholder="https://unionflow.app"
|
|
styleClass="w-full" />
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6">
|
|
<label for="organisationPrincipale" class="block text-900 font-medium mb-2">Organisation Principale</label>
|
|
<p:inputText id="organisationPrincipale"
|
|
value="#{configurationBean.organisationPrincipale}"
|
|
placeholder="Lions Clubs Afrique de l'Ouest"
|
|
styleClass="w-full" />
|
|
</div>
|
|
</div>
|
|
|
|
<div class="flex justify-content-end mt-3">
|
|
<p:commandButton value="Appliquer"
|
|
icon="pi pi-check"
|
|
styleClass="ui-button-success ui-button-sm"
|
|
action="#{configurationBean.appliquerConfigGenerale}"
|
|
update="@form" />
|
|
</div>
|
|
</h:form>
|
|
</div>
|
|
|
|
<!-- Configuration Base de Données avec structure Freya -->
|
|
<div class="formgrid grid">
|
|
<div class="field col-12 lg:col-6">
|
|
<div class="card">
|
|
<h5 class="mb-3">
|
|
<i class="pi pi-database text-teal-500 mr-2"></i>
|
|
Base de Données
|
|
</h5>
|
|
<h:form id="formConfigBDD">
|
|
<div class="formgrid grid">
|
|
<div class="field col-12 md:col-6">
|
|
<label for="dbType" class="block text-900 font-medium mb-2">Type de Base</label>
|
|
<p:selectOneMenu id="dbType"
|
|
value="#{configurationBean.typeBDD}"
|
|
styleClass="w-full">
|
|
<f:selectItem itemLabel="PostgreSQL" itemValue="postgresql" />
|
|
<f:selectItem itemLabel="MySQL" itemValue="mysql" />
|
|
<f:selectItem itemLabel="H2 Database" itemValue="h2" />
|
|
</p:selectOneMenu>
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6">
|
|
<label for="dbHost" class="block text-900 font-medium mb-2">Serveur</label>
|
|
<p:inputText id="dbHost"
|
|
value="#{configurationBean.serveurBDD}"
|
|
placeholder="localhost"
|
|
styleClass="w-full" />
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6">
|
|
<label for="dbPort" class="block text-900 font-medium mb-2">Port</label>
|
|
<p:inputNumber id="dbPort"
|
|
value="#{configurationBean.portBDD}"
|
|
minValue="1"
|
|
maxValue="65535"
|
|
styleClass="w-full" />
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6">
|
|
<label for="dbName" class="block text-900 font-medium mb-2">Nom Base</label>
|
|
<p:inputText id="dbName"
|
|
value="#{configurationBean.nomBDD}"
|
|
placeholder="unionflow"
|
|
styleClass="w-full" />
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6">
|
|
<label for="dbUser" class="block text-900 font-medium mb-2">Utilisateur BDD</label>
|
|
<p:inputText id="dbUser"
|
|
value="#{configurationBean.utilisateurBDD}"
|
|
placeholder="unionflow_user"
|
|
styleClass="w-full" />
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6">
|
|
<label for="dbPassword" class="block text-900 font-medium mb-2">Mot de Passe BDD</label>
|
|
<p:password id="dbPassword"
|
|
value="#{configurationBean.motDePasseBDD}"
|
|
placeholder="Mot de passe sécurisé"
|
|
feedback="true"
|
|
styleClass="w-full" />
|
|
</div>
|
|
|
|
<div class="field col-12">
|
|
<div class="flex align-items-center justify-content-between">
|
|
<div>
|
|
<p:selectBooleanCheckbox id="dbSSL"
|
|
value="#{configurationBean.sslActifBDD}" />
|
|
<label for="dbSSL" class="ml-2">Connexion SSL/TLS Sécurisée</label>
|
|
</div>
|
|
<div>
|
|
<span class="text-600 text-sm">Pool: </span>
|
|
<p:inputNumber id="poolSize"
|
|
value="#{configurationBean.taillePoolConnexions}"
|
|
minValue="5"
|
|
maxValue="100"
|
|
placeholder="20"
|
|
size="3" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="flex justify-content-end gap-2 mt-3">
|
|
<p:commandButton value="Tester Connexion"
|
|
icon="pi pi-check"
|
|
styleClass="ui-button-outlined ui-button-success ui-button-sm"
|
|
action="#{configurationBean.testerConnexionBDD}"
|
|
update="@form" />
|
|
<p:commandButton value="Appliquer"
|
|
icon="pi pi-save"
|
|
styleClass="ui-button-info ui-button-sm"
|
|
action="#{configurationBean.appliquerConfigBDD}"
|
|
update="@form" />
|
|
</div>
|
|
</h:form>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="field col-12 lg:col-6">
|
|
<div class="card">
|
|
<h5 class="mb-3">
|
|
<i class="pi pi-envelope text-blue-500 mr-2"></i>
|
|
Configuration Email
|
|
</h5>
|
|
<h:form id="formConfigEmail">
|
|
<div class="formgrid grid">
|
|
<div class="field col-12 md:col-6">
|
|
<label for="smtpHost" class="block text-900 font-medium mb-2">Serveur SMTP</label>
|
|
<p:inputText id="smtpHost"
|
|
value="#{configurationBean.serveurSMTP}"
|
|
placeholder="smtp.gmail.com"
|
|
styleClass="w-full" />
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6">
|
|
<label for="smtpPort" class="block text-900 font-medium mb-2">Port SMTP</label>
|
|
<p:inputNumber id="smtpPort"
|
|
value="#{configurationBean.portSMTP}"
|
|
minValue="1"
|
|
maxValue="65535"
|
|
styleClass="w-full" />
|
|
</div>
|
|
|
|
<div class="field col-12">
|
|
<label for="emailFrom" class="block text-900 font-medium mb-2">Email Expéditeur</label>
|
|
<p:inputText id="emailFrom"
|
|
value="#{configurationBean.emailExpediteur}"
|
|
placeholder="noreply@unionflow.app"
|
|
styleClass="w-full" />
|
|
</div>
|
|
|
|
<div class="field col-12">
|
|
<label for="nomExpediteur" class="block text-900 font-medium mb-2">Nom Affiché Expéditeur</label>
|
|
<p:inputText id="nomExpediteur"
|
|
value="#{configurationBean.nomExpediteur}"
|
|
placeholder="UnionFlow Notifications"
|
|
styleClass="w-full" />
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6">
|
|
<label for="smtpUser" class="block text-900 font-medium mb-2">Utilisateur SMTP</label>
|
|
<p:inputText id="smtpUser"
|
|
value="#{configurationBean.utilisateurSMTP}"
|
|
placeholder="smtp_user@gmail.com"
|
|
styleClass="w-full" />
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6">
|
|
<label for="smtpPassword" class="block text-900 font-medium mb-2">Mot de Passe SMTP</label>
|
|
<p:password id="smtpPassword"
|
|
value="#{configurationBean.motDePasseSMTP}"
|
|
placeholder="Token ou mot de passe"
|
|
styleClass="w-full" />
|
|
</div>
|
|
|
|
<div class="field col-12">
|
|
<div class="flex align-items-center justify-content-between">
|
|
<div class="flex align-items-center gap-3">
|
|
<div>
|
|
<p:selectBooleanCheckbox id="smtpAuth"
|
|
value="#{configurationBean.authentificationSMTP}" />
|
|
<label for="smtpAuth" class="ml-2">Auth SMTP</label>
|
|
</div>
|
|
<div>
|
|
<p:selectBooleanCheckbox id="smtpTLS"
|
|
value="#{configurationBean.tlsActive}" />
|
|
<label for="smtpTLS" class="ml-2">TLS/SSL</label>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<span class="text-600 text-sm mr-2">Limite/h:</span>
|
|
<p:inputNumber id="rateLimitEmail"
|
|
value="#{configurationBean.limiteTauxEmail}"
|
|
minValue="50"
|
|
maxValue="2000"
|
|
placeholder="500"
|
|
size="5" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="flex justify-content-end gap-2 mt-3">
|
|
<p:commandButton value="Tester Email"
|
|
icon="pi pi-send"
|
|
styleClass="ui-button-outlined ui-button-info ui-button-sm"
|
|
action="#{configurationBean.testerEmail}"
|
|
update="@form" />
|
|
<p:commandButton value="Appliquer"
|
|
icon="pi pi-save"
|
|
styleClass="ui-button-success ui-button-sm"
|
|
action="#{configurationBean.appliquerConfigEmail}"
|
|
update="@form" />
|
|
</div>
|
|
</h:form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Configuration Sécurité avec structure Freya -->
|
|
<div class="card">
|
|
<h5 class="mb-3">
|
|
<i class="pi pi-shield text-red-500 mr-2"></i>
|
|
Sécurité et Authentification
|
|
</h5>
|
|
<h:form id="formConfigSecurite">
|
|
<div class="formgrid grid">
|
|
<div class="field col-12 md:col-6 lg:col-4">
|
|
<label for="sessionTimeout" class="block text-900 font-medium mb-2">Timeout Session (min)</label>
|
|
<p:inputNumber id="sessionTimeout"
|
|
value="#{configurationBean.timeoutSession}"
|
|
minValue="5"
|
|
maxValue="1440"
|
|
styleClass="w-full" />
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6 lg:col-4">
|
|
<label for="maxLoginAttempts" class="block text-900 font-medium mb-2">Tentatives Max</label>
|
|
<p:inputNumber id="maxLoginAttempts"
|
|
value="#{configurationBean.tentativesMaxConnexion}"
|
|
minValue="3"
|
|
maxValue="10"
|
|
styleClass="w-full" />
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6 lg:col-4">
|
|
<label for="complexiteMotDePasse" class="block text-900 font-medium mb-2">Complexité Mot de Passe</label>
|
|
<p:selectOneMenu id="complexiteMotDePasse"
|
|
value="#{configurationBean.complexiteMotDePasse}"
|
|
styleClass="w-full">
|
|
<f:selectItem itemLabel="Basique (8 caractères)" itemValue="BASIC" />
|
|
<f:selectItem itemLabel="Moyenne (8+ maj+min+chiffre)" itemValue="MEDIUM" />
|
|
<f:selectItem itemLabel="Forte (12+ maj+min+chiffre+symbole)" itemValue="STRONG" />
|
|
</p:selectOneMenu>
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6 lg:col-4">
|
|
<label for="dureeValiditeMDP" class="block text-900 font-medium mb-2">Validité MDP (jours)</label>
|
|
<p:inputNumber id="dureeValiditeMDP"
|
|
value="#{configurationBean.dureeValiditeMotDePasse}"
|
|
minValue="30"
|
|
maxValue="365"
|
|
placeholder="90"
|
|
styleClass="w-full" />
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6 lg:col-4">
|
|
<label for="retentionLogs" class="block text-900 font-medium mb-2">Rétention Logs (jours)</label>
|
|
<p:inputNumber id="retentionLogs"
|
|
value="#{configurationBean.retentionLogs}"
|
|
minValue="90"
|
|
maxValue="1825"
|
|
placeholder="365"
|
|
styleClass="w-full" />
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Options de sécurité -->
|
|
<div class="surface-100 border-round-lg p-3 mt-3">
|
|
<h6 class="mb-3">Options de Sécurité Avancées</h6>
|
|
<div class="formgrid grid">
|
|
<div class="field col-12 md:col-6 lg:col-3">
|
|
<div class="flex align-items-center">
|
|
<p:selectBooleanCheckbox id="forcePasswordChange"
|
|
value="#{configurationBean.forcerChangementMotDePasse}" />
|
|
<label for="forcePasswordChange" class="ml-2 text-sm">Forcer changement MDP périodique</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6 lg:col-3">
|
|
<div class="flex align-items-center">
|
|
<p:selectBooleanCheckbox id="enableTwoFactor"
|
|
value="#{configurationBean.authentification2FA}" />
|
|
<label for="enableTwoFactor" class="ml-2 text-sm">Authentification 2FA</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6 lg:col-3">
|
|
<div class="flex align-items-center">
|
|
<p:selectBooleanCheckbox id="logSecurityEvents"
|
|
value="#{configurationBean.journaliserEvenementsSecurite}" />
|
|
<label for="logSecurityEvents" class="ml-2 text-sm">Journaliser événements sécurité</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6 lg:col-3">
|
|
<div class="flex align-items-center">
|
|
<p:selectBooleanCheckbox id="chiffrementBDD"
|
|
value="#{configurationBean.chiffrementBDD}" />
|
|
<label for="chiffrementBDD" class="ml-2 text-sm">Chiffrement BDD</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="flex justify-content-end mt-3">
|
|
<p:commandButton value="Appliquer Configuration Sécurité"
|
|
icon="pi pi-shield"
|
|
styleClass="ui-button-danger ui-button-sm"
|
|
action="#{configurationBean.appliquerConfigSecurite}"
|
|
update="@form" />
|
|
</div>
|
|
</h:form>
|
|
</div>
|
|
|
|
<!-- Monitoring Système Avancé avec grille Freya -->
|
|
<div class="formgrid grid">
|
|
<!-- Performance en temps réel -->
|
|
<div class="field col-12 lg:col-8">
|
|
<div class="card">
|
|
<div class="flex align-items-center justify-content-between mb-3">
|
|
<h5 class="m-0">
|
|
<i class="pi pi-chart-line text-cyan-500 mr-2"></i>
|
|
Monitoring Performance
|
|
</h5>
|
|
<h:form id="formActualiserMonitoring">
|
|
<p:commandButton icon="pi pi-refresh"
|
|
title="Actualiser"
|
|
styleClass="ui-button-outlined ui-button-secondary ui-button-sm"
|
|
action="#{configurationBean.actualiserMonitoring}"
|
|
update="@(.monitoring)" />
|
|
</h:form>
|
|
</div>
|
|
|
|
<div class="formgrid grid monitoring">
|
|
<div class="field col-12 md:col-6 lg:col-4">
|
|
<div class="surface-50 border-round-lg p-3 text-center">
|
|
<div class="text-500 text-sm mb-2">CPU Utilisation</div>
|
|
<div class="text-900 font-bold text-2xl mb-2 #{configurationBean.cpuUtilisationStyle}">#{configurationBean.cpuUtilisation}%</div>
|
|
<p:progressBar value="#{configurationBean.cpuUtilisation}"
|
|
showValue="false"
|
|
styleClass="surface-200"
|
|
style="height: 0.5rem;" />
|
|
<div class="text-500 text-xs mt-2">Seuil critique: 80%</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6 lg:col-4">
|
|
<div class="surface-50 border-round-lg p-3 text-center">
|
|
<div class="text-500 text-sm mb-2">Mémoire RAM</div>
|
|
<div class="text-900 font-bold text-2xl mb-2">#{configurationBean.memoireUtilisee}%</div>
|
|
<p:progressBar value="#{configurationBean.memoireUtilisee}"
|
|
showValue="false"
|
|
styleClass="surface-200"
|
|
style="height: 0.5rem;" />
|
|
<div class="text-500 text-xs mt-2">#{configurationBean.memoireTotal} GB total</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6 lg:col-4">
|
|
<div class="surface-50 border-round-lg p-3 text-center">
|
|
<div class="text-500 text-sm mb-2">Disque Disponible</div>
|
|
<div class="text-900 font-bold text-2xl mb-2 #{configurationBean.disqueDisponibleStyle}">#{configurationBean.disqueDisponible} GB</div>
|
|
<div class="text-500 text-xs">Min requis: 10 GB</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6 lg:col-4">
|
|
<div class="surface-50 border-round-lg p-3 text-center">
|
|
<div class="text-500 text-sm mb-2">Connexions BDD</div>
|
|
<div class="text-900 font-bold text-2xl mb-2 text-teal-500">#{configurationBean.connexionsBDDActives}</div>
|
|
<div class="text-500 text-xs">Pool max: #{configurationBean.taillePoolConnexions}</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6 lg:col-4">
|
|
<div class="surface-50 border-round-lg p-3 text-center">
|
|
<div class="text-500 text-sm mb-2">Queue Emails</div>
|
|
<div class="text-900 font-bold text-2xl mb-2 #{configurationBean.queueEmailsStyle}">#{configurationBean.queueEmailsEnAttente}</div>
|
|
<div class="text-500 text-xs">En attente traitement</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6 lg:col-4">
|
|
<div class="surface-50 border-round-lg p-3 text-center">
|
|
<div class="text-500 text-sm mb-2">Logs Erreurs (24h)</div>
|
|
<div class="text-900 font-bold text-2xl mb-2 #{configurationBean.logsErreursStyle}">#{configurationBean.logsErreurs24h}</div>
|
|
<div class="text-500 text-xs">Dernières 24 heures</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Alertes système automatiques -->
|
|
<div class="surface-100 border-round-lg p-3 mt-3">
|
|
<h6 class="mb-3">Alertes Système Automatiques</h6>
|
|
<div class="formgrid grid">
|
|
<div class="field col-12 md:col-4">
|
|
<div class="flex align-items-center p-2 #{configurationBean.cpuAlertStyle} border-round-lg">
|
|
<i class="pi #{configurationBean.cpuAlertIcon} mr-2"></i>
|
|
<span class="text-sm font-medium">CPU: #{configurationBean.cpuAlertText}</span>
|
|
</div>
|
|
</div>
|
|
<div class="field col-12 md:col-4">
|
|
<div class="flex align-items-center p-2 #{configurationBean.memoireAlertStyle} border-round-lg">
|
|
<i class="pi #{configurationBean.memoireAlertIcon} mr-2"></i>
|
|
<span class="text-sm font-medium">Mémoire: #{configurationBean.memoireAlertText}</span>
|
|
</div>
|
|
</div>
|
|
<div class="field col-12 md:col-4">
|
|
<div class="flex align-items-center p-2 #{configurationBean.disqueAlertStyle} border-round-lg">
|
|
<i class="pi #{configurationBean.disqueAlertIcon} mr-2"></i>
|
|
<span class="text-sm font-medium">Disque: #{configurationBean.disqueAlertText}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Actions et Services -->
|
|
<div class="field col-12 lg:col-4">
|
|
<div class="card">
|
|
<h5 class="mb-3">
|
|
<i class="pi pi-cog text-orange-500 mr-2"></i>
|
|
Actions Système
|
|
</h5>
|
|
|
|
<!-- Mode Maintenance -->
|
|
<div class="surface-50 border-round-lg p-3 mb-3">
|
|
<div class="flex align-items-center justify-content-between">
|
|
<div>
|
|
<div class="font-medium text-900">Mode Maintenance</div>
|
|
<div class="text-500 text-xs">Bloque l'accès utilisateurs</div>
|
|
</div>
|
|
<h:form id="formModeMaintenance">
|
|
<p:selectBooleanCheckbox id="modeMaintenance"
|
|
value="#{configurationBean.modeMaintenance}">
|
|
<p:ajax update="@form" />
|
|
</p:selectBooleanCheckbox>
|
|
</h:form>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Configuration Sauvegarde -->
|
|
<div class="surface-50 border-round-lg p-3 mb-3">
|
|
<div class="font-medium text-900 mb-2">Sauvegarde Automatique</div>
|
|
<h:form id="formSauvegarde">
|
|
<div class="formgrid grid">
|
|
<div class="field col-12">
|
|
<p:selectOneMenu value="#{configurationBean.frequenceSauvegarde}"
|
|
styleClass="w-full">
|
|
<f:selectItem itemLabel="Toutes les 4h" itemValue="4H" />
|
|
<f:selectItem itemLabel="Quotidienne (2h00)" itemValue="DAILY" />
|
|
<f:selectItem itemLabel="Hebdomadaire" itemValue="WEEKLY" />
|
|
</p:selectOneMenu>
|
|
</div>
|
|
<div class="field col-12">
|
|
<div class="text-500 text-xs">Rétention: </div>
|
|
<p:inputNumber value="#{configurationBean.retentionSauvegardes}"
|
|
minValue="7" maxValue="365" size="3" suffix=" jours" />
|
|
</div>
|
|
</div>
|
|
</h:form>
|
|
</div>
|
|
|
|
<!-- Actions rapides -->
|
|
<h:form id="formActionsRapides">
|
|
<div class="flex flex-column gap-2">
|
|
<p:commandButton value="Forcer Sauvegarde"
|
|
icon="pi pi-save"
|
|
styleClass="ui-button-info ui-button-outlined ui-button-sm w-full"
|
|
action="#{configurationBean.forcerSauvegarde}" />
|
|
|
|
<p:commandButton value="Nettoyer Cache"
|
|
icon="pi pi-refresh"
|
|
styleClass="ui-button-secondary ui-button-outlined ui-button-sm w-full"
|
|
action="#{configurationBean.nettoyerCache}" />
|
|
|
|
<p:commandButton value="Audit Système"
|
|
icon="pi pi-shield"
|
|
styleClass="ui-button-warning ui-button-outlined ui-button-sm w-full"
|
|
action="#{configurationBean.auditSysteme}" />
|
|
|
|
<p:commandButton value="Redémarrer Services"
|
|
icon="pi pi-power-off"
|
|
styleClass="ui-button-danger ui-button-outlined ui-button-sm w-full"
|
|
onclick="return confirm('Redémarrer les services ?');"
|
|
action="#{configurationBean.redemarrerServices}" />
|
|
</div>
|
|
</h:form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Configuration Alertes avec structure Freya -->
|
|
<div class="card">
|
|
<h5 class="mb-3">
|
|
<i class="pi pi-bell text-orange-500 mr-2"></i>
|
|
Alertes et Notifications
|
|
</h5>
|
|
<h:form id="formConfigAlertes">
|
|
<div class="formgrid grid">
|
|
<div class="field col-12 md:col-6">
|
|
<label for="emailAlertes" class="block text-900 font-medium mb-2">Email Alertes Système</label>
|
|
<p:inputText id="emailAlertes"
|
|
value="#{configurationBean.emailAlertes}"
|
|
placeholder="admin@unionflow.app"
|
|
styleClass="w-full" />
|
|
</div>
|
|
|
|
<div class="field col-12 md:col-6">
|
|
<div class="flex flex-column gap-2">
|
|
<div class="flex align-items-center">
|
|
<p:selectBooleanCheckbox id="alertesCPU"
|
|
value="#{configurationBean.alertesCPU}" />
|
|
<label for="alertesCPU" class="ml-2">Alertes CPU (>80%)</label>
|
|
</div>
|
|
<div class="flex align-items-center">
|
|
<p:selectBooleanCheckbox id="alertesMemoire"
|
|
value="#{configurationBean.alertesMemoire}" />
|
|
<label for="alertesMemoire" class="ml-2">Alertes Mémoire (>85%)</label>
|
|
</div>
|
|
<div class="flex align-items-center">
|
|
<p:selectBooleanCheckbox id="alertesDisque"
|
|
value="#{configurationBean.alertesDisque}" />
|
|
<label for="alertesDisque" class="ml-2">Alertes Disque (<10 GB)</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="flex justify-content-end mt-3">
|
|
<p:commandButton value="Sauvegarder Alertes"
|
|
icon="pi pi-check"
|
|
styleClass="ui-button-success ui-button-sm"
|
|
action="#{configurationBean.sauvegarderAlertes}"
|
|
update="@form" />
|
|
</div>
|
|
</h:form>
|
|
</div>
|
|
</div>
|
|
</ui:define>
|
|
</ui:composition> |