TDB-SSI LES EXTENSIONS



Documents pareils
TDB-SSI Extension OpenVAS

Recherche dans un tableau

Stockage du fichier dans une table mysql:

Télécharger et Installer OpenOffice.org sous Windows

Installation et Réinstallation de Windows XP

Définition des Webservices Ordre de paiement par . Version 1.0

OPTENET DCAgent Manuel d'utilisateur

Edutab. gestion centralisée de tablettes Android

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

HelpAndManual_unregistered_evaluation_copy GESTIONNAIRE D'ALARMES CENTRALISE OPTIM'ALARM. Manuel d'utilisation

1. Installation du Module

PARAMÉTRAGE BOSCH SOMMAIRE DE LA CAMÉRA OSCH DINION-IP-NWC : CONFIGURATION POUR DE L ENREGISTREMENT PERMANENT... 2

Plateforme PAYZEN. Définition de Web-services

HP Data Protector Express Software - Tutoriel 4. Utilisation de Quick Access Control (Windows uniquement)

1. Introduction Création d'une requête...2

PARAGON SYSTEM BACKUP 2010

Guide d'intégration à ConnectWise

Guide d'utilisation du portail d'authentification Cerbère à usage des professionnels et des particuliers

DE LA CAMÉRA SOMMAIRE

DE LA CAMÉRA SOMMAIRE

SERVEUR DE MESSAGERIE

Cédric Gendre Inra, ESR Toulouse

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

Mémo d'utilisation de BD Dico1.6

La Clé informatique. Formation Internet Explorer Aide-mémoire

CMS Made Simple Version 1.4 Jamaica. Tutoriel utilisateur Récapitulatif Administration

v7.1 SP2 Guide des Nouveautés

Administration du site (Back Office)

Date de diffusion : Rédigé par : Version : Mars 2008 APEM 1.4. Sig-Artisanat : Guide de l'utilisateur 2 / 24

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

claroline classroom online

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Les messages d erreur d'applidis Client

IBM SPSS Statistics Version 22. Instructions d'installation sous Windows (licence simultanée)

Interface PC Vivago Ultra. Pro. Guide d'utilisation

(Fig. 1 :assistant connexion Internet)

Guide de l utilisateur. Demande d accréditation en ligne

MANUEL PROGRAMME DE GESTION DU CPL WI-FI

Business Intelligence avec SQL Server 2012

ETI/Domo. Français. ETI-Domo Config FR

Comment développer et intégrer un module à PhpMyLab?

Infrastructure - Capacity planning. Document FAQ. Infrastructure - Capacity planning. Page: 1 / 7 Dernière mise à jour: 16/04/14 16:09

Tutorial Ophcrack. I) Ophcrack en API. (ou comment utiliser Ophcrack pour recouvrir un mot de passe sous Windows XP et Windows Vista)

Middleware eid v2.6 pour Windows

Manuel d'utilisation de Mémo vocal

Espace numérique de travail collaboratif

Compte-rendu de projet de Système de gestion de base de données

NON URGENTE TEMPORAIRE DEFINITIVE. OBJET : FONCTIONNEMENT OmniVista 4760 SUR UN RÉSEAU VPN / NAT

Mon Compte Epargne Temps (CET) : manuel utilisateur

Phone Manager Soutien de l'application OCTOBER 2014 DOCUMENT RELEASE 4.1 SOUTIEN DE L'APPLICATION

Situation présente et devis technique

WINDOWS SERVER 2003-R2

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

4D Server et les licences : fonctionnement et environnement

Le générateur d'activités

NETWORK & SOFTWARE ENGINEERING MANUEL D UTILISATEUR. Logiciel TIJARA. NETWORK AND SOFTWARE ENGINEERING Manuel d'utilisateur "TIJARA" 1

MEDIAplus elearning. version 6.6

REALISER UN SITE INTERNET AVEC IZISPOT SOMMAIRE

Documentation Cobian

DOCUMENTATION VISUALISATION UNIT

Cours: Administration d'une Base de Données

Manuel d'utilisation d'apimail V3

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Débuter avec OOo Base

Manuel de l'utilisateur d'intego VirusBarrier Express et VirusBarrier Plus

Premiers pas sur e-lyco

KeePass - Mise en œuvre et utilisation

1. Comment accéder à mon panneau de configuration VPS?

2 Grad Info Soir Langage C++ Juin Projet BANQUE

DA MOTA Anthony - Comparaison de technologies : PhoneGap VS Cordova

Formation. Module WEB 4.1. Support de cours

Manuel d utilisation de la plate-forme de gestion de parc UCOPIA. La mobilité à la hauteur des exigences professionnelles

Créer une base de données

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Guide d'utilisation. OpenOffice Calc. AUTEUR INITIAL : VINCENT MEUNIER Publié sous licence Creative Commons

1 - Clients 2 - Devis 3 - Commandes 4 - Livraisons 5 - Factures 6 - Avoirs 7 - Modèles

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Mise à jour de version

Maintenance de son PC

1 Résolution de nom Introduction à la résolution de noms Le système DNS Les types de requêtes DNS...

Portail de demande en ligne (PDL) de la SODIMO - Guide de démarrage

Gérer une comptabilité dans Tiny

Guide d'installation sous Windows

Tutoriel - flux de facturation

Mise en service HORUS version HTTP

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

Guide d installation

Note : Ce tutoriel a été réalisé sur GNU/Linux (Ubuntu) avec un serveur LAMP installé en local.

Manuel d'utilisation

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Service client LSC 1

Guide d'utilisation de l'instrument électronique en ligne d'auto-évaluation du CAF

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Aide à l'utilisation de l'application 'base de données communales' intégrée à la plate-forme PEGASE. Interface 'Front-Office'

Programmation Objet - Cours II

Gestion des utilisateurs : Active Directory

[Serveur de déploiement FOG]

Enregistrer votre dispositif

Transcription:

TDB-SSI LES EXTENSIONS

U n i v e r s i t é d e l a M é d i t e r r a n é e F a c u l t é d e M é d e c i n e Projet TDB-SSI Documentation du Tableau de Bord de Sécurité des Systèmes d Information Marseille, le 13/03/2009 Les extensions Documentation du TDB-SSI Date : 13/03/09 Nom du fichier : TDB-SSI Les extensions.pdf Nombre de pages : 79 Auteur(s) : Jean-marc Pelle Validation : Chef de projet (Philippe Tourron) Approbation : Équipe Projet TDB-SSI Licence de ce document : TDB-SSI Les extensions by Université de la Méditerranée (CIGR - Faculté de Médecine de Marseille) est mis à disposition selon les termes de la licence Creative Commons Paternité-Pas d'utilisation Commerciale-Partage des Conditions Initiales à l'identique 2.0 France. Basé sur une oeuvre à infocigr.timone.univ-mrs.fr. Licence du logiciel TDB-SSI : Le logiciel TDB-SSI est régi par la licence CeCILL soumise au droit français et respectant les principes de diffusion des logiciels libres. Historique des modifications CIGR Université de la Méditerranée 2 tdb-ssi@medecine.univmed.fr

Date Objet de la modification Auteur(s) Statut 13/03/09 Création du document pour la diffusion de l application TDB-SSI 11/12/09 Mise en conformité avec les changements apportés par la version 1.0 RC2 Jean-Marc Pelle Jean-Marc Pelle Validé Validé Ce document a été réalisé dans le cadre du projet TDB-SSI Les commentaires et suggestions sont encouragés et peuvent être adressés à l'adresse suivante : tdb-ssi@medecine.univmed.fr CIGR Université de la Méditerranée 3 tdb-ssi@medecine.univmed.fr

Table des matières 1)Présentation...6 2)Les éléments manipulés par les extensions...7 2.1)Les sources...7 2.2)Les thèmes...8 2.3)Les sous-thèmes...8 2.4)Les indicateurs...9 2.4.1)Les propriétés générales des indicateurs...10 2.4.2)Les propriétés spécifiques à un type d'indicateur...12 2.5)Les modèles d indicateur...13 2.6)Les données saisies manuellement...14 3)La constitution d une extension...15 3.1)Le fichier d'extension sur le serveur WEB...15 3.2)Le (les) fichier(s) d'extension sur le serveur de collecte...15 4)L API des extensions...16 4.1)Fonctions et procédures hors classes sur le serveur WEB...16 4.1.1)connexion_bdd_tdb()...16 4.1.2)session_start()...16 4.1.3)controle_session_user_si(...)...17 4.1.4)require_once("../biblio/commun.php")...17 4.2)Fonctions et procédures hors classes sur le serveur de collecte...18 4.2.1)connexion_bdd_tdb()...18 4.2.2)require_once("commun.php")...18 4.2.3)error_log(...)...18 4.3)La classe PLUGIN...19 4.3.1)_construct(...)...19 4.3.2)ajouter_donnee_et_indic_manuel( )...19 4.3.3)ajouter_indic_si_auto ( )...21 4.3.4)ajouter_indic_moyen_direct( )...22 4.3.5)ajouter_modele ( )...24 4.3.6)ajouter_source ( )...25 4.3.7)ajouter_ss_theme ( )...25 4.3.8)ajouter_theme ( )...26 4.3.9)set_tab_moyens(...)...26 4.3.10)get_nb_moyens()...27 4.3.11)get_tab_moyens( )...27 4.4)La classe PLUGIN_COLLECTE...28 4.4.1) construct(...)...28 4.4.2)insert_valeur_indic_si_auto( )...29 4.4.3)insert_valeur_indic_moyen_direct( )...29 4.4.4)insert_valeur_indic_moyen_modele( )...30 4.4.5)set_tab_indics_moyen_dir( )...30 4.4.6)set_tab_moyens_audites(...)...31 4.4.7)get_nb_indics_moyen_dir()...31 4.4.8)get_nb_moyens_audites()...31 4.4.9)get_tab_indics_moyen_dir(...)...32 4.4.10)get_tab_moyens_audites(...)...32 4.4.11)Méthodes spécifiques pour les indicateurs «composés»...33 4.4.11.1)get_derniere_valeur_donnee(...)...33 4.4.11.2)get_derniere_valeur_indic_si_auto(...)...34 4.4.11.3)get_derniere_valeur_indic_moyen_modele(...)...34 CIGR Université de la Méditerranée 4 tdb-ssi@medecine.univmed.fr

4.4.11.4)get_derniere_valeur_indic_existant(...)...35 5)Logique algorithmique du code d'une extension...36 5.1)Logique algorithmique du code du fichier sur le serveur WEB...36 5.2)Logique algorithmique du code du fichier sur le serveur de collecte...37 6)PAS-A-PAS : Développer une extension - Le fichier sur le serveur WEB...38 6.1)Intégration du fichier dans l'application WEB...38 6.2)Configuration : L'extension...38 6.3)Configuration : La source...39 6.4)Configuration : Le thème et le sous-thème...40 6.5)Configuration : Les indicateurs, modèles et données à saisie manuelle...42 6.5.1)Arbre décisionnel...42 6.5.2)Configuration d'un indicateur de SI automatique...43 6.5.3)Configuration d'une donnée à saisie manuelle et de l'indicateur manuel qui l'audite...44 6.5.4)Configuration d'un indicateur de moyen direct...45 6.5.5)Configuration d'un modèle d'indicateur de moyen...46 6.6)Connexion à la base de données et contrôles de variables de sessions...47 6.7)Instanciation d'un objet de la classe PLUGIN...47 6.8)Création des éléments définis au cours de l'étape de configuration...47 7)PAS-A-PAS : Développer une extension Le fichier sur le serveur de collecte...48 7.1)Connexion à la base de données du tableau de bord...48 7.2)Définition du code de l extension et du numéro de la source correspondant à ce fichier...48 7.3)Instanciation d un objet de la classe PLUGIN_COLLECTE...49 7.4)Opérations spécifiques à un type d'indicateur...49 7.4.1)Les indicateurs de SI à collecte automatique...49 7.4.2)Les indicateurs de moyen par modèle...49 7.4.3)Les indicateurs de moyen directs...50 7.5)Récupération des valeurs à insérer dans la base de données...51 7.6)Insertion des valeurs récupérées dans la base de données du tableau de bord...51 8)Exemples d'extensions par type d'indicateurs créés...52 8.1)Indicateurs de moyen par modèle : l'extension LOGCHECK...52 8.1.1)Le fichier sur le serveur WEB...52 8.1.2)Le fichier sur le serveur de collecte...55 8.2)Indicateurs de moyen directs : l'extension ZABBIX...58 8.2.1)Le fichier sur le serveur WEB...58 8.2.2)Le fichier sur le serveur de collecte...64 8.3)Indicateurs de SI à collecte automatique : l'extension STATS...68 8.3.1)Le fichier sur le serveur WEB...68 8.3.2)Le fichier sur le serveur de collecte...71 8.4)Indicateurs de SI à collecte manuelle et données saisies : l'extension BUDGET...73 8.4.1)Le fichier sur le serveur WEB...73 8.4.2)Le fichier sur le serveur de collecte (cas du traitement d'un indicateur composé)...78 CIGR Université de la Méditerranée 5 tdb-ssi@medecine.univmed.fr

1) Présentation Sans les extensions, le tableau de bord ne pourrait générer que des indicateurs issus de données à saisie manuelle. En effet, les extensions permettent d intégrer dans le tableau de bord des indicateurs provenant de n importe quel type de source. Elles créent les indicateurs et les différents éléments nécessaires à leur fonctionnement au sein du tableau de bord. Elles permettent également d assurer la collecte automatique des valeurs de ces indicateurs. Les extensions sont aussi nommées «plugins». Structure de cette documentation : Chapitre 2 : Présentation des différents éléments qui seront créés et manipulés par une extension. Chapitre 3 : La constitution de l'extension au sein de l'architecture de l'application. Chapitre 4 : Présentation de l'api qui propose les outils nécessaires au développement d'une extension. Chapitre 5 : La logique algorithmique de chacun des deux fichiers composant l'extension. Chapitre 6 : Procédure pas-à-pas, développer le fichier de l'extension sur le serveur WEB. Chapitre 7 : Procédure pas-à-pas, développer le fichier de l'extension sur le serveur de collecte. Chapitre 8 : Exemples complets d'extensions. Vous n'êtes bien sûr pas obligés de lire cette documentation dans l'ordre. Vous pouvez très bien commencer par essayer de suivre les procédures pas-à-pas et vous reporter aux chapitres expliquant l'api (chap.4) ou les éléments manipulés (chap.2) au fur et à mesure selon vos besoins. N'hésitez pas non plus à vous reporter régulièrement aux exemples du chapitre 8 afin de mieux appréhender la structure d'une extension. CIGR Université de la Méditerranée 6 tdb-ssi@medecine.univmed.fr

2) Les éléments manipulés par les extensions Les extensions utilisent 6 éléments qui possèdent chacun des propriétés à définir. L'extension elle-même possède 3 propriétés: CODE_EXT code de l'extension string(6) LIB_EXT libellé de l'extension string(128) DESCRIPTION_EXT description de l'extension string(255) NB: String (6) signifie que l'élément est de type chaine de caractères et qu'il a une longueur maximale de 6 caractères. NB2: Pour chaque SI où elle est installée, une extension possède un numéro de version. 2.1) Les sources Une source est un fichier PHP exécuté automatiquement par le serveur de collecte grâce au CRON. Il effectue une série de traitements permettant de collecter les valeurs de tous les indicateurs correspondant à cette source. Liste des propriétés d'une source : NUM_SOURCE Numéro de la source dans l'extension Entier LIB_SOURCE Libellé de la source String(128) DESCRIPTION_SOURCE Description de la source String(255 PERIO_COLLECTE Code de la périodicité de collecte String(6) COLLECTE_NOCTURNE Collecte effectuée en nocturne ou pas Booléen (0 ou 1) Valeurs possibles du champ PERIO_COLLECTE : Ce champ correspond à la périodicité de collecte de l'indicateur, c'est à dire la périodicité d'exécution du fichier PHP de collecte par le CRON du serveur de collecte. Il peut prendre 7 valeurs : min : toutes les minutes heure : toutes les heures jour : quotidienne sem : hebdomadaire mois : mensuelle an : annuelle manuelle : la collecte n'est pas automatisée (cas des indicateurs manuels) CIGR Université de la Méditerranée 7 tdb-ssi@medecine.univmed.fr

2.2) Les thèmes Ils permettent de regrouper les sous-thèmes traitant d'une même thématique(exemple: les sousthèmes «Menaces virales» et «Menaces IDS» pourront appartenir au thème «Sécurité»). NUM_THEME Numéro du thème dans l'extension Entier LIB_THEME Libellé du thème String(128) 2.3) Les sous-thèmes Les sous-thèmes regroupent sémantiquement les différents indicateurs et données saisies selon une thématique commune(exemple : menaces virales, menaces IDS ). Ils serviront à créer des groupes d' indicateurs ayant un fort lien sémantique afin de les présenter de manière organisée dans l'interface WEB. NUM_SS_THEME Numéro du sous-thème dans l'extension Entier LIB_SS_THEME Libellé du sous-thème String(128) NUM_THEME Numéro du thème auquel appartient ce sousthème Entier CIGR Université de la Méditerranée 8 tdb-ssi@medecine.univmed.fr

2.4) Les indicateurs Ils sont de 4 types : - L indicateur de SI automatique : C est un indicateur qui concerne un SI dans son ensemble par opposition aux indicateurs de moyen qui se rapportent uniquement à un moyen du SI. La collecte des valeurs de ce type d indicateur est automatique, elle est déclenchée par le CRON du serveur de collecte. Exemples d indicateurs de ce type : Nombre de postes infectés par un virus, Nombre de moyens sous contrat de maintenance - L indicateur de SI manuel : C est un indicateur qui concerne aussi un SI dans son ensemble. A la différence du type d indicateur précédent, celui-ci est issu d une donnée saisie manuellement dans le tableau de bord. Cela implique que la collecte de ses valeurs n est pas assurée par le serveur de collecte, elle est uniquement déclenchée en cas d ajout ou de modification d une valeur de la donnée saisie correspondante. Exemples d indicateurs de ce type : budget annuel, nombre d interventions mensuelles concernant la sécurité - L indicateur de moyen par un modèle : C est un indicateur qui concerne un moyen particulier du SI. Il est de plus issu d un modèle d indicateur, c'est-à-dire que sa création et ses propriétés par défaut sont issues de l application d un modèle à un moyen (le modèle d indicateur est défini au paragraphe suivant) Exemple d indicateur de ce type : Criticité du rapport de log d un serveur. - L indicateur de moyen direct : C est aussi un indicateur qui concerne un moyen particulier du SI. Ce qui le différencie de l indicateur de moyen par modèle est d ordre technique. En effet, il ne provient pas d un modèle que l on applique à un moyen. Il est créé directement en puisant les données dans une base de données externe au tableau de bord qui contient des informations sur les différents moyens du tableau de bord. Des exemples de ce type d indicateurs sont les indicateurs issus d outils de supervision du type Zabbix ou Nagios. CIGR Université de la Méditerranée 9 tdb-ssi@medecine.univmed.fr

2.4.1) Les propriétés générales des indicateurs NUM_ID_INDIC Numéro identifiant de l'indicateur Entier CODE_TYPE_INDIC Code du type d indicateur String(6) IND_ALARME Indice de l alarme Entier de 0 à 3 CODE_NIV Code du niveau de visibilité String(6) CODE_TYPE_VAL Code du type de la valeur String(6) NUM_SOURCE Numéro de la source de l indicateur Entier(2) NUM_SS_THEME Numéro id du sous-thème correspondant Entier (8) IND_CONF Indice de confidentialité Entier de 0 à 4 CODE_HISTO Code de la durée d historisation String(6) CODE_GRAPH Code du graphique String(6) LIB_INDIC libellé de l'indicateur String(128) DESCRIPTION_INDIC description de l'indicateur String(255) COMMENT_INDIC commentaire sur l'indicateur Text(65535) UNITE_INDIC unité de l'indicateur String(128) VALEUR_SEUIL_INDIC valeur seuil de l'indicateur String(128) OPERATEUR_SEUIL_INDIC opérateur servant à activer l'alarme String(2) VALEUR_CIBLE_INDIC valeur cible de l'indicateur String(128) GENERATION_RAPPORT Génération d'un rapport ou pas Booléen (0 ou 1) RAPPORT ENVOI_EMAIL DATE_LAST_VALUE PRIORITE_INDIC rapport concernant la dernière valeur de l'indicateur envoi d'un email en cas d'activation de l'alarme date de la dernière valeur enregistrée de l'indicateur priorité d'affichage de l'indicateur (entier de 0 à 5) Text(65535) Booléen (0 ou 1) String Entier de 0 à 5 VALUE_CHANGE_SAVING Sauvegarde par changement de valeur Booléen (0 ou 1) CIGR Université de la Méditerranée 10 tdb-ssi@medecine.univmed.fr

Valeurs possibles de propriétés générales particulières : CODE_TYPE_INDIC : Type d'indicateur - auto : indicateur de SI à collecte automatique - manuel : indicateur de SI issu d'une donnée saisie manuellement - moydir : indicateur de moyen directement - moymod : indicateur de moyen issu d'un modèle CODE_NIV : Niveau de visibilité de l'indicateur - ope : opérationnel - pilo : pilotage - strat : stratégique CODE_TYPE_VAL : Type de la valeur - bool : booléen - int : entier - real : nombre réel - string : chaine de caractères CODE_HISTO : Durée d'historisation des valeurs de l'indicateur - 12h : 12 heures - jour : un jour - sem : une semaine - mois : un mois - 6mois : 6 mois - an : un an - def : définitif CODE_GRAPH : Graphique illustrant les valeurs de l'indicateur - cam : camembert - cour : courbe - histo : histogramme Attention dans le choix de la représentation graphique: - Les courbes montrent l'évolution des valeurs de type numérique d'un indicateur au cours du temps. Seuls les indicateurs dont la valeur est de type entier ou réel peuvent donc être représentés par une courbe. - Les camemberts et histogrammes montrent la fréquence d'apparition des différentes valeurs de l'indicateur pour une période donnée. Ces types de représentations graphiques ne sont donc pertinentes que pour des indicateurs qui n'ont que peu de valeurs différentes. CIGR Université de la Méditerranée 11 tdb-ssi@medecine.univmed.fr

2.4.2) Les propriétés spécifiques à un type d'indicateur Certaines propriétés n'appartiennent qu'à un type d'indicateur: - L indicateur de SI automatique : Il n'a aucune propriété spécifique. NUM_INDIC_SI_AUTO Numéro de l'indicateur de SI à collecte automatique dans l'extension. Entier - L indicateur de SI manuel : Il est relié à une donnée à saisie manuelle. NUM_DONNEE Numéro de la donnée correspondante dans l'extension Entier - L indicateur de moyen par un modèle : Il est relié à un modèle et à un moyen. NUM_MODELE Numéro du modèle correspondant dans l'extension. Entier NUM_ID_MOY Numéro identifiant du moyen correspondant Entier - L indicateur de moyen direct : il est relié à un moyen mais aussi à un enregistrement d'une table située dans une base de données externe au tableau de bord. TABLE_BDD_EXTERNE Nom de la table de la donnée externe ID_EXTERNE NUM_ID_MOY ID de l enregistrement de la donnée externe Numéro identifiant du moyen correspondant (entier auto-incrémenté) String(20) String(14) Entier CIGR Université de la Méditerranée 12 tdb-ssi@medecine.univmed.fr

2.5) Les modèles d indicateur TDB-SSI 1.0 - Les extensions Ce sont des modèles d indicateurs qui auditeront des moyens enregistrés dans le tableau de bord. Exemple : Criticité du rapport de log. En associant un modèle à un moyen on crée un indicateur de moyen par modèle dont toutes les propriétés par défaut seront celles du modèle qui a servi à le générer (exemples de propriétés : durée d historisation, représentation graphique, indice d alarme ). Le plus gros avantage qu'offre l'utilisation des modèles est la modification de masse. En effet, la modification d'une propriété d'un modèle entraine la modification de cette propriété pour tous les indicateurs qui en sont issus. A part num_modele et lib_modele, on retrouve les mêmes propriétés que dans l'élément «INDICATEURS». NUM_MODELE Numéro du modèle dans l'extension Entier NUM_SOURCE NUM_SS_THEME Numéro de la source du modèle dans l'extension Numéro du sous-thème associé dans l'extension Entier Entier IND_ALARME Indice de l alarme Entier de 0 à 4 CODE_NIV Code du niveau de visibilité String(6) IND_CONF Indice de confidentialité Entier de 0 à 4 CODE_TYPE_VAL Code du type de la valeur String(6) CODE_HISTO Code de la durée d historisation String(6) CODE_GRAPH Code du graphique String(6) LIB_MODELE Libellé du modèle String(128) LIB_INDIC Libellé de l indicateur String(128) DESCRIPTION_INDIC Description de l indicateur String(255) COMMENT_INDIC Commentaire de l indicateur Text(65535) UNITE_INDIC Unité de l indicateur String(128) VALEUR_SEUIL_INDIC Valeur seuil de l indicateur String(128) OPERATEUR_SEUIL_INDIC Opérateur de calcul de l alarme String(2) VALEUR_CIBLE_INDIC Valeur cible de l indicateur String(128) GENERATION_RAPPORT ENVOI_EMAIL Génération d'un rapport ou pas par l'indicateur lié Envoi d'un email en cas d'activation de l'alarme de l'indicateur lié Booléen 0 ou 1 Booléen 0 ou 1 PRIORITE_INDIC Priorité de l indicateur Entier de 0 à 5 VALUE_CHANGE_SAVING Sauvegarde par changement de valeur Booléen 0 ou 1 CIGR Université de la Méditerranée 13 tdb-ssi@medecine.univmed.fr

2.6) Les données saisies manuellement Il s agit de données dont les valeurs seront saisies manuellement à travers l interface utilisateur du tableau de bord. Chaque donnée à saisie manuelle peut-être auditée par un indicateur (et un seul). L indicateur sera de type indicateur de SI manuel. NUM_DONNEE NUM_SS_THEME Numéro de la donnée dans l'extension. Numéro du sous-thème correspondant dans l'extension Entier Entier IND_CONF Indice de confidentialité Entier de 0 à 4 CODE_PERIO_DONNEE Code de la périodicité de la donnée String(6) CODE_TYPE_VAL Code du type de la valeur String(6) CODE_EXT_DONNEE_INTER Code de l extension génératrice de la donnée inter-si String(6) LIB_DONNEE Libellé de la donnée String(128) DESCRIPTION_DONNEE Description de la donnée String(255) UNITE_DONNEE Unité de la donnée String(128) Valeurs possibles de la propriété CODE_PERIO_DONNEE : Ce champ correspond à la périodicité de la donnée à saisie manuelle. Il peut prendre 3 valeurs : jour : La donnée est quotidienne ou bien générique (c'est à dire qu'elle n'a aucune périodicité établie) mois : La donnée est mensuelle an : La donnée est annuelle CIGR Université de la Méditerranée 14 tdb-ssi@medecine.univmed.fr

3) La constitution d une extension Une extension est constituée par 2 fichiers. Le premier se situe sur le serveur WEB alors que le second se trouve sur le serveur de collecte. Ces deux fichiers ont des rôles totalement différents. 3.1) Le fichier d'extension sur le serveur WEB Le premier fichier se situe sur le serveur WEB de l application TDB-SSI, il se nomme «plg-<code_de_l_extension>.php», il se trouve dans «tdb-web/site/plugins». Son rôle est de créer des indicateurs, des modèles, des données à saisie manuelle, des sous-thèmes, des thèmes et des sources dans les tables correspondantes de la base de données du Tableau de bord. Il crée donc tous les éléments nécessaires au fonctionnement des nouveaux indicateurs définis dans l'extension. 3.2) Le (les) fichier(s) d'extension sur le serveur de collecte Ce fichier se nomme «<code_de_l_extension><numéro_de_la_source_dans_l_extension>.php» et se situe dans le dossier «tdb-collecte/sources» du serveur de collecte. Il s'agit donc du fichier PHP exécuté automatiquement par le serveur de collecte grâce au CRON, il correspond à l'élément nommé «source» que nous avons vu dans le chapitre 2. Son rôle est d assurer la collecte des valeurs des indicateurs qui lui sont associés. Si l'extension ne crée qu'une seule source, ce qui est généralement le cas, il n' y a donc qu'un seul fichier de collecte qui concerne cette extension. La source, puisqu'il n'y en a qu'une, a alors le numéro 1. Le fichier portera donc le nom «<code_de_l_extension>1.php». Ce fichier «source» est indispensable sauf dans le cas des indicateurs manuels dont la collecte n est pas automatisée et n'est pas assurée par le serveur de collecte. CIGR Université de la Méditerranée 15 tdb-ssi@medecine.univmed.fr

4) L API des extensions Une API (Application Programming Interface) propose par l intermédiaire de deux classes un ensemble de méthodes permettant de créer les éléments d'une extension puis de récolter les valeurs des indicateurs qu'elle a créé. Une documentation technique présentant l'api existe également au format HTML. 4.1) Fonctions et procédures hors classes sur le serveur WEB 4.1.1) connexion_bdd_tdb() connexion_bdd_tdb() La fonction connexion_bdd_tdb() permet de se connecter à la base de données du tableau de bord. Elle n'a aucun paramètre en entrée et renvoie la ressource de connexion à la base de données du tableau de bord. Exemple d'utilisation: $tdb_connec = connexion_bdd_tdb(); 4.1.2) session_start() C'est une procédure de restauration de session définie dans PHP. Le fichier se situant sur le serveur WEB est exécuté à partir de l'application TDB-SSI. Cela suppose que ce soit un utilisateur authentifié qui effectue cette opération, ce dernier a donc ouvert une session sur le serveur WEB. Le fichier de plugin du serveur WEB doit donc exécuter la procédure session_start() définie dans PHP afin de restaurer la session en cours et récupérer les variables de session existantes. Cette procédure n'a aucun paramètre en entrée. session_start() CIGR Université de la Méditerranée 16 tdb-ssi@medecine.univmed.fr

4.1.3) controle_session_user_si(...) TDB-SSI 1.0 - Les extensions La procédure controle_session_user_si() contrôle la validité des variables de session existantes. controle_session_user_si("admin",$tdb_connec); L'identité et les droits de l'utilisateur doivent être vérifiés en exécutant cette procédure dans le fichier d'extension du serveur WEB, Paramètres d'entrée: Le premier paramètre est 'admin', il ne doit pas être modifié. Le second paramètre est la ressource de connexion à la base de données que l'on a précédemment obtenu par la fonction connexion_bdd_tdb(). 4.1.4) require_once("../biblio/commun.php") Fonction d' inclusion du fichier commun.php, ce fichier regroupe des variables globales et les définitions de fonctions et de procédures utilisées par l'application TDB-SSI. La procédure controle_session_user_si() ainsi que la fonction connexion_bdd_tdb() sont définies dans ce fichier commun.php du serveur WEB. Il faut donc impérativement commencer le fichier de plugin du serveur WEB par: require_once("../biblio/commun.php"); CIGR Université de la Méditerranée 17 tdb-ssi@medecine.univmed.fr

4.2) Fonctions et procédures hors classes sur le serveur de collecte 4.2.1) connexion_bdd_tdb() connexion_bdd_tdb() La fonction connexion_bdd_tdb() permet de se connecter à la base de données du tableau de bord. Elle n'a aucun paramètre en entrée et renvoie la ressource de connexion à la base de données du tableau de bord. Exemple d'utilisation: $tdb_connec = connexion_bdd_tdb(); 4.2.2) require_once("commun.php") Fonction d' inclusion du fichier commun.php, ce fichier regroupe des variables globales et les définitions de fonctions et de procédures utilisées par l'application TDB-SSI. La fonction connexion_bdd_tdb() est définie dans ce fichier commun.php du serveur de collecte. La variable globale $si_serveur, définissant le SI pour le quel le serveur assure la collecte est aussi définie et valorisée dans ce fichier. Il faut donc impérativement commencer le fichier de plugin du serveur de collecte par: require_once("commun.php"); 4.2.3) error_log(...) error_log(«message d'erreur», 3, $log_file); Cette fonction permet d'enregistrer un message dans le fichier de log en cas d'erreur. Paramètres d'input: «message d'erreur» : Indiquer ici le message d'erreur que vous souhaitez enregistrer. 3 : Laisser ce paramètre tel qu'il est, il indique que vous voulez que ce message soit enregistré dans un fichier. $log_file: Laisser ce paramètre tel qu'il est. $log_file est une variable globale existante sur le serveur de collecte qui indique le chemin d'accès du fichier de log dans lequel enregistrer le message. CIGR Université de la Méditerranée 18 tdb-ssi@medecine.univmed.fr

4.3) La classe PLUGIN Elle propose en tout 10 méthodes (en plus du constructeur) afin de pouvoir développer le code du fichier d'extension du serveur WEB. On peut distinguer 3 types de méthodes : 7 méthodes permettent d ajouter ou mettre à jour des éléments. 1 méthode est un accesseur SET qui permet de valoriser un tableau qui contient les numéros id et les adresses ip de tous les moyens du SI. 2 méthodes sont des accesseurs GET qui permettent d'exploiter ce même tableau 4.3.1) _construct(...) construct($code_ext) C'est le constructeur, il permet d instancier un objet de la classe plugin. Paramètre en input $code_ext Chaine de caractères (6 max) Chaine vide interdite. Exemple de Syntaxe d utilisation : $code_plugin = «test»; $mon_plugin = new plugin($code_plugin); 4.3.2) ajouter_donnee_et_indic_manuel( ) ajouter_donnee_et_indic_manuel($num_donnee,$lib_donnee, $description_donnee,$unite_donnee,$type_val_donnee,$ind_conf_donnee, $perio_donnee,$alarme_indic,$niv_indic,$graph_indic,$lib_indic, $description_indic,$comment_indic,$valeur_seuil_indic, $operateur_seuil_indic,$valeur_cible_indic,$priorite_indic, $ind_conf_indic,$num_ss_theme,$envoi_email,$tdb_connec) C est une méthode qui permet d ajouter ou de mettre à jour une donnée à saisie manuelle ainsi que l'indicateur manuel qui l'audite. CIGR Université de la Méditerranée 19 tdb-ssi@medecine.univmed.fr

Output: void $num_donnee Entier Paramètres en Input $lib_donnee Chaine de caractères (128 max) Chaine vide interdite $description_donnee Chaine de caractères (255 max) Chaine vide autorisée $unite_donnee Chaine de caractères (128 max) Chaine vide autorisée $type_val_donnee Chaine de caractères $ind_conf_donnee Entier de 0 à 4 $perio_donnee Valeurs possibles : bool, int, real, string Chaine de caractères $alarme_indic Entier de 0 à 3 $niv_indic $graph_indic Valeurs possibles : an, jour, mois Chaine de caractères Valeurs possibles : ope, pilo, strat Chaine de caractères Valeurs possibles : cam, cour, histo Chaine vide interdite Chaine vide interdite Chaine vide interdite Chaine vide autorisée $lib_indic Chaine de caractères (128 max) Chaine vide interdite $description_indic Chaine de caractères (255 max) Chaine vide autorisée $comment_indic Chaine de caractères (65535max) Chaine vide autorisée $valeur_seuil_indic Chaine de caractères (128 max) Chaine vide autorisée $operateur_seuil_indic Chaine de caractères Valeurs possibles : <, <=, =, <>, >=,> Chaine vide autorisée $valeur_cible_indic Chaine de caractères (128 max) Chaine vide autorisée $priorite_indic Entier de 0 à 5 $ind_conf_indic Entier de 0 à 4 $num_ss_theme Entier $envoi_email Entier0 ou 1 $tdb_connec Ressource de connexion à la base de données du tableau de bord CIGR Université de la Méditerranée 20 tdb-ssi@medecine.univmed.fr

4.3.3) ajouter_indic_si_auto ( ) TDB-SSI 1.0 - Les extensions ajouter_indic_si_auto($num_indic_si_auto,$ind_alarme,$code_type_val, $code_niv,$code_graph,$code_histo,$num_source,$num_ss_theme, $lib_indic,$description_indic,$comment_indic,$unite,$valeur_seuil, $operateur_seuil,$valeur_cible,$priorite,$value_change_saving, $ind_conf,$envoi_email,$generation_rapport,$tdb_connec) Méthode qui permet d ajouter ou mettre à jour un indicateur du SI automatique (Output: void) $num_indic_si_auto Entier $ind_alarme Entier de 0 à 3 $code_type_val $code_niv $code_graph $code_histo $num_source $num_ss_theme Paramètres en Input Chaine de caractères Valeurs possibles : bool, int, real, string Chaine de caractères Valeurs possibles : ope, pilo, strat Chaine de caractères Valeurs possibles : cam, cour, histo Chaine caractères Valeurs possibles : aucune, 12h,'jour','sem', mois,'6mois', an', def Entier Entier Chaine vide interdite Chaine vide interdite Chaine vide autorisée Chaine vide interdite $lib_indic Chaine de caractères (128 max) Chaine vide interdite $description_indic Chaine de caractères (255 max) Chaine vide autorisée $comment_indic Chaine de caractères (65535max) Chaine vide autorisée $unite Chaine de caractères (128 max) Chaine vide autorisée $valeur_seuil Chaine de caractères (128 max) Chaine vide autorisée $operateur_seuil Chaine de caractères Valeurs possibles : <, <=, =, <>, >=, > Chaine vide autorisée $valeur_cible Chaine de caractères (128 max) Chaine vide autorisée $priorite Entier de 0 à 5 $value_change_saving booléen -> Vaut 0 ou 1 $ind_conf Entier de 0 à 4 $envoi_email Entier 0 ou 1 $generation_rapport Entier 0 ou 1 $tdb_connec Ressource de connexion à la base de données du tableau de bord CIGR Université de la Méditerranée 21 tdb-ssi@medecine.univmed.fr

4.3.4) ajouter_indic_moyen_direct( ) ajouter_indic_moyen_direct($ind_alarme,$code_type_val,$code_niv, $code_graph,$code_histo,$num_source,$num_ss_theme,$lib_indic, $description_indic,$comment_indic,$unite,$valeur_seuil, $operateur_seuil,$valeur_cible,$priorite,$value_change_saving, $ind_conf,$envoi_email,$generation_rapport,$num_id_moy, $id_externe_indic,$table_bdd_ext,$tdb_connec) Méthode qui permet d ajouter ou mettre à jour un indicateur de moyen direct Output : void $ind_alarme Entier de 0 à 3 $code_type_val $code_niv $code_graph $code_histo $num_source $num_ss_theme Paramètres en Input Chaine de caractères Valeurs possibles : bool, int, real, string Chaine de caractères Valeurs possibles : ope, pilo, strat Chaine de caractères Valeurs possibles : cam, cour, histo Chaine de caractères Valeurs possibles : aucune, 12h,'jour','sem', mois,'6mois', an', def Entier Entier Chaine vide interdite Chaine vide interdite Chaine vide autorisée Chaine vide interdite $lib_indic Chaine de caractères (128 max) Chaine vide interdite $description_indic Chaine de caractères (255 max) Chaine vide autorisée $comment_indic Chaine de caractères (65535max) Chaine vide autorisée $unite Chaine de caractères (128 max) Chaine vide autorisée $valeur_seuil Chaine de caractères (128 max) Chaine vide autorisée $operateur_seuil Chaine de caractères Valeurs possibles : <, <=, =, <>, >=, > Chaine vide autorisée $valeur_cible Chaine de caractères (128 max) Chaine vide autorisée $priorite Entier de 0 à 5 $value_change_saving booléen -> Vaut 0 ou 1 $ind_conf Entier de 0 à 4 CIGR Université de la Méditerranée 22 tdb-ssi@medecine.univmed.fr

$envoi_email Entier 0 ou 1 $generation_rapport Entier 0 ou 1 $num_id_moy Entier TDB-SSI 1.0 - Les extensions $id_externe_indic Chaine de caractères (14 max) Chaine vide interdite $table_bdd_ext Chaine de caractères (20 max) Chaine vide interdite $tdb_connec Ressource de connexion à la base de données du tableau de bord CIGR Université de la Méditerranée 23 tdb-ssi@medecine.univmed.fr

4.3.5) ajouter_modele ( ) TDB-SSI 1.0 - Les extensions ajouter_modele($num_modele,$lib_modele,$ind_alarme,$code_type_val, $code_niv,$code_graph,$code_histo,$num_source,$num_ss_theme, $lib_indic,$description_indic,$comment_indic,$unite,$valeur_seuil, $operateur_seuil,$valeur_cible,$priorite,$value_change_saving, $ind_conf,$envoi_email,$generation_rapport,$tdb_connec) Méthode qui permet d ajouter ou mettre à jour un modèle (Output : void) $num_modele Entier Paramètres en Input $lib_modele Chaine de caractères (128 max) Chaine vide interdite $ind_alarme Entier de 0 à 3 $code_type_val : $code_niv $code_graph $code_histo : $num_source $num_ss_theme Chaine de caractères Valeurs possibles: bool, int, real, string Chaine de caractères Valeurs possibles : ope, pilo, strat Chaine de caractères Valeurs possibles : cam, cour, histo Chaine caractères Valeurs possibles : aucune, '12h','jour','sem','mois','6mois','an','def' Entier Entier Chaine vide interdite Chaine vide interdite Chaine vide autorisée Chaine vide interdite $lib_indic Chaine de caractères (128 max) Chaine vide interdite $description_indic Chaine de caractères (255 max) Chaine vide autorisée $comment_indic Chaine de caractères (65535max) Chaine vide autorisée $unite Chaine de caractères (128 max) Chaine vide autorisée $valeur_seuil Chaine de caractères (128 max) Chaine vide autorisée $operateur_seuil Chaine de caractères Valeurs possibles : <, <=, =, <>, >=, '>' Chaine vide autorisée $valeur_cible Chaine de caractères (128 max) Chaine vide autorisée $priorite Entier de 0 à 5 $value_change_saving booléen -> Vaut 0 ou 1 $ind_conf Entier de 0 à 4 $envoi_email Entier 0 ou 1 $generation_rapport Entier 0 ou 1 $tdb_connec Ressource de connexion à la base de données CIGR Université de la Méditerranée 24 tdb-ssi@medecine.univmed.fr

4.3.6) ajouter_source ( ) ajouter_source($num_source,$lib_source,$description_source, $perio_collecte,$collecte_nocturne,$tdb_connec) Méthode qui permet de créer ou mettre à jour une source. Output : void $num_source Entier Paramètres en Input $lib_source Chaine de caractères (128 max) Chaine vide interdite $description_source Chaine de caractères (255 max) Chaine vide autorisée $perio_collecte Chaine de caractères Valeurs possibles : min, heure, jour, sem, mois, an, manuel $collecte_nocturne Booléen -> vaut 0 ou 1 $tdb_connec Ressource de connexion à la base de données du tableau de bord 4.3.7) ajouter_ss_theme ( ) ajouter_ss_theme($num_ss_theme,$lib_ss_theme,$num_theme,$tdb_connec) Méthode qui permet de créer ou mettre à jour un sous-thème Output : void $num_ss_theme Entier Paramètres en Input $lib_ss_theme Chaine de caractères (128 max) Chaine vide interdite $num_theme $tdb_connec Entier (ou chaine vide si le sousthème n'appartient à aucun thème) Ressource de connexion à la base de données du tableau de bord Chaine vide autorisée CIGR Université de la Méditerranée 25 tdb-ssi@medecine.univmed.fr

4.3.8) ajouter_theme ( ) ajouter_theme($num_theme,$lib_theme,$tdb_connec) Méthode qui permet de créer ou mettre à jour un thème. Output : void $num_theme Entier Paramètres en Input $lib_theme Chaine de caractères (128 max) Chaine vide interdite $tdb_connec Ressource de connexion à la base de données du tableau de bord 4.3.9) set_tab_moyens(...) set_tab_moyens($tdb_connec) Méthode qui permet de valoriser un tableau bi-dimensionnel indice-associatif de tous les moyens du SI. Les deux champs de la dimension associative sont num (numéro id du moyen) et ip (adresse IP du moyen). Cette méthode est utilisée afin de créer des indicateurs de moyen directs. Output : void Paramètre en Input : $tdb_connec : Ressource de connexion à la base de données du tableau de bord CIGR Université de la Méditerranée 26 tdb-ssi@medecine.univmed.fr

4.3.10) get_nb_moyens() get_nb_moyens() Fonction qui renvoie le nombre de moyens enregistrés dans le tableau de moyens qui a préalablement été valorisé grâce à la méthode set_tab_moyens($tdb_connec). Output : entier Input : void 4.3.11) get_tab_moyens( ) get_tab_moyens($i,$champ) Méthode qui renvoie le champ «$champ» d un enregistrement du tableau de moyens à l indice $i. Output : Entier ou chaine de caractère (le champ «ip» est une chaine de caractère et le champ «num» est un entier). Paramètres en Input $i Entier -> c est l indice du tableau $champ Chaine de caractères. Valeurs possible : «num» ou «ip» CIGR Université de la Méditerranée 27 tdb-ssi@medecine.univmed.fr

4.4) La classe PLUGIN_COLLECTE TDB-SSI 1.0 - Les extensions Elle propose en tout 9 méthodes (en plus du constructeur) afin de pouvoir développer le code du fichier d'extension du serveur de collecte. On peut distinguer 4 types de méthodes : 3 méthodes permettent d insérer la valeur d un indicateur à un instant T en fonction du type de l indicateur. 2 méthodes sont des setters permettant de valoriser deux tableaux d éléments utiles à la collecte. 4 méthodes sont des accesseurs get permettant de récupérer les enregistrements des deux tableaux. 4 méthodes spécifiques pour les indicateurs «composés». 4.4.1) construct(...) construct($code_ext,$num_source) C'est le constructeur, il permet d' instancier un objet de la classe plugin_collecte. Paramètres en input $code_ext Chaine de caractères (6 max) Chaine vide interdite. $num_source Entier $tdb_connec Ressource de connexion Signification des paramètres d'input : $code_ext : C est le code de l extension. $num_source : C est le numéro de la source qui correspond à ce fichier. $tdb_connec : Ressource de connexion à la base de données du tableau de bord. Exemple de Syntaxe d utilisation : $tdb_connec = connexion_bdd_tdb(); $code_ext = «test»; $num_source = 1; $ma_collecte = new plugin_collecte($code_ext,$num_source, $tdb_connec); CIGR Université de la Méditerranée 28 tdb-ssi@medecine.univmed.fr

4.4.2) insert_valeur_indic_si_auto( ) insert_valeur_indic_si_auto($num_indic_si_auto,$valeur,$rapport, $tdb_connec) Méthode qui insère la valeur d'un indicateur de SI à collecte automatique Output : void $num_indic_si_auto Entier Paramètres d input $valeur Chaine de caractères (128 max) Chaine vide autorisée $rapport Chaine de caractères (65535 max) Chaine vide autorisée $tdb_connec Ressource de connexion à la base de données du tableau de bord 4.4.3) insert_valeur_indic_moyen_direct( ) insert_valeur_indic_moyen_direct($ind_tab_indics_moyen_direct, $valeur,$rapport,$tdb_connec) Cette procédure permet d insérer la valeur d un indicateur de moyen direct. Output : void $ind_tab_indics_moyen_direct Paramètres d input Entier. $valeur Chaine de caractères (128 max) Chaine vide autorisée $rapport Chaine de caractères (65535 max) Chaine vide autorisée $tdb_connec Ressource de connexion à la base de données du tableau de bord Signification la variable $ind_tab_indics_moyen_direct : Il s'agit de l'indice de l'indicateur dans le tableau «tab_indics_moyen_direct» (voir le paragraphe 4.3.5). CIGR Université de la Méditerranée 29 tdb-ssi@medecine.univmed.fr

4.4.4) insert_valeur_indic_moyen_modele( ) insert_valeur_indic_moyen_modele($num_modele,$num_id_moy,$valeur, $rapport,$tdb_connec) Procédure qui insère la valeur d'un indicateur de moyen lié a un modèle. Output : void $num_modele $num_id_moy Entier Paramètres d input Entier : numéro id du moyen $valeur Chaine de caractères (128 max) Chaine vide autorisée. $rapport Chaine de caractères (65535 max) Chaine vide autorisée. $tdb_connec Ressource de connexion à la base de données du tableau de bord 4.4.5) set_tab_indics_moyen_dir( ) set_tab_indics_moyen_dir($table_bdd_ext,$tdb_connec) Méthode qui valorise un tableau bi-dimensionnel indice-associatif des indicateurs de moyen directs actifs pour cette source et la table de base de données externe passée en paramètre. Les 6 champs du tableau associatif sont : num_id_indic, date_last_value, histo, value_change_saving, id_ext et 'num_id_moy' Output : void Paramètres d input $table_bdd_ext Chaine de caractères (20 max) Chaine vide interdite $tdb_connec Ressource de connexion à la base de données du tableau de bord CIGR Université de la Méditerranée 30 tdb-ssi@medecine.univmed.fr

4.4.6) set_tab_moyens_audites(...) TDB-SSI 1.0 - Les extensions set_tab_moyens_audites($tdb_connec) Méthode qui valorise un tableau bi-dimensionnel indice-associatif('num','ip')des moyens de ce SI audités par au moins un indicateur actif lié à un modèle ayant ce fichier comme source Output : void Paramètre d input : $tdb_connec : Ressource de connexion à la base de données du tableau de bord 4.4.7) get_nb_indics_moyen_dir() get_nb_indics_moyen_dir() Fonction qui renvoie le nombre d enregistrements que contient le tableau d indicateurs de moyen directs préalablement valorisé par la procédure set_tab_moyen_dir( ) Output : Entier Input : void 4.4.8) get_nb_moyens_audites() get_nb_moyens_audites() Fonction qui renvoie le nombre d enregistrements que contient le tableau de moyens de ce SI audités par au moins un indicateur actif lié à un modèle ayant ce fichier comme source. Ce tableau a été préalablement valorisé par la méthode set_tab_moyens_audites($tdb_connec) Output : Entier Input : void CIGR Université de la Méditerranée 31 tdb-ssi@medecine.univmed.fr

4.4.9) get_tab_indics_moyen_dir(...) get_tab_indics_moyen_dir($i,$champ) Méthode qui renvoie le champ «$champ» d un enregistrement du tableau à l indice $i. Output: Entier ou chaine de caractère Entier pour les champs «num_id_indic», «value_change_saving» et «num_id_moy» Chaine de caractères pour les champs «date_last_value», «histo» et «id_ext» Paramètres en Input : $i : Entier (l indice du tableau) $champ : Chaine de caractères. Valeurs possibles : num_id_indic, date_last_value, histo, value_change_saving, id_ext et 'num_id_moy' 4.4.10) get_tab_moyens_audites(...) get_tab_moyens_audites($i,$champ) Méthode qui renvoie le champ «$champ» d un enregistrement du tableau de moyens audités à l indice $i Output : Entier ou chaine de caractère (le champ «ip» est une chaine de caractère et le champ «num» est un entier). Paramètres en Input : $i : Entier -> c est l indice du tableau $champ : Chaine de caractère. Valeurs possibles : «num» ou «ip» CIGR Université de la Méditerranée 32 tdb-ssi@medecine.univmed.fr

4.4.11) Méthodes spécifiques pour les indicateurs «composés» Vous pouvez être amenés à vouloir créer des indicateurs «composés». Il ne s'agit pas d'un nouveau type d'indicateurs, ce sont des indicateurs dont la valeur est calculée à partir de la dernière valeur d'autres indicateurs ou de données saisies déjà existantes dans le tableau de bord. L'API propose donc des méthodes permettant de récupérer les dernières valeurs d'indicateurs afin de pouvoir effectuer un traitement dessus. Vous avez un exemple d'indicateur composé dans le chapitre 8 avec l'extension BUDGET. 4.4.11.1) get_derniere_valeur_donnee(...) get_derniere_valeur_donnee($code_si_donnee,$code_ext_donnee, $num_donnee,$champ,$tdb_connec) Méthode qui renvoie la date de dernière valeur ou la dernière valeur d'une donnée. Remarque : Cette méthode ne doit être utilisée que dans le cas de données générées par une extension. Si la donnée a été créée via l'interface WEB du tableau de bord, vous pouvez récupérer la dernière valeur de l'indicateur qui l'audite en utilisant la méthode get_derniere_valeur_indic_existant(...) Output : Chaine de caractères ou false s'il n' y a pas de dernière valeur Paramètres en Input : $code_si_donnee : Code du SI de la donnée $code_ext_donnee : Code de l'extension d'origine de la donnée $num_donnee : Numéro de la donnée dans l'extension $champ : Chaine de caractère. Valeurs possibles : 'valeur' ou 'date' $tdb_connec : Ressource de connexion à la base de données du tableau de bord CIGR Université de la Méditerranée 33 tdb-ssi@medecine.univmed.fr

4.4.11.2) get_derniere_valeur_indic_si_auto(...) get_derniere_valeur_indic_si_auto($code_si_indic,$code_ext_indic, $num_indic_si_auto,$champ,$tdb_connec) Méthode qui renvoie la date de dernière valeur ou la dernière valeur d'un indicateur de SI à collecte automatique. Output : Chaine de caractères ou false s'il n' y a pas de dernière valeur Paramètres en Input : $code_si_indic : Code du SI de l'indicateur de SI $code_ext_indic : Code de l'extension d'origine de l'indicateur de SI $num_indic_si_auto : Numéro de l'indicateur de SI à collecte automatique dans l'extension. $champ : Chaine de caractère. Valeurs possibles : 'valeur' ou 'date' $tdb_connec : Ressource de connexion à la base de données du tableau de bord 4.4.11.3) get_derniere_valeur_indic_moyen_modele(...) get_derniere_valeur_indic_moyen_modele($num_modele,$num_id_moy, $champ,$tdb_connec) Méthode qui renvoie la date de dernière valeur ou la dernière valeur d'un indicateur de moyen par modèle issu de cette extension. Output : Chaine de caractères ou false s'il n' y a pas de dernière valeur Paramètres en Input : $num_modele : Numéro du modèle ayant généré l'indicateur. Le modèle doit avoir été créé par l'extension. $num_id_moy : Numéro identifiant du moyen. $champ : Chaine de caractère. Valeurs possibles : 'valeur' ou 'date' $tdb_connec : Ressource de connexion à la base de données du tableau de bord CIGR Université de la Méditerranée 34 tdb-ssi@medecine.univmed.fr

4.4.11.4) get_derniere_valeur_indic_existant(...) get_derniere_valeur_indic_existant($code_si_indic,$num_id_indic, $champ,$tdb_connec) Méthode qui renvoie la date de dernière valeur ou la dernière valeur d'un indicateur déjà existant dans le tableau de bord. Cette méthode fonctionne peu importe le type d'indicateur ou son moyen de création. L'inconvénient de cette méthode est qu'il faut d'abord récupérer le numéro ID de l'indicateur existant. Remarque: L'utilisation de cette méthode est nécessaire si l'on veut récupérer la valeur d'un indicateur de moyen direct ou d'un indicateur manuel qui audite une donnée créée via l'interface WEB du tableau de bord Output : Chaine de caractères ou false s'il n' y a pas de dernière valeur Paramètres en Input : $code_si_indic : Code du SI de l'indicateur $num_id_indic : Numéro identifiant de l'indicateur existant. $champ : Chaine de caractère. Valeurs possibles : 'valeur' ou 'date' $tdb_connec : Ressource de connexion à la base de données du tableau de bord CIGR Université de la Méditerranée 35 tdb-ssi@medecine.univmed.fr

5) Logique algorithmique du code d'une extension Comme nous l'avons vu dans le paragraphe 4, une extension se compose de deux fichiers PHP distincts ayant des rôles différents. Le premier fichier se situe sur le serveur WEB et le second sur le serveur de collecte. 5.1) Logique algorithmique du code du fichier sur le serveur WEB La structure générale de l'algorithme du code se décompose en 5 étapes: Étape 1: Appel aux fonctions require_once() et session_start() afin d'intégrer correctement le fichier dans l'application WEB. Étape 2: Configuration de l'extension, c'est à dire définition des variables qui représenteront les caractéristiques des éléments à créer par l'extension. Étape 3: Connexion à la base de données du tableau de bord et contrôle de validité des variables de session correspondant à l'authentification de l'utilisateur. Étape 4: Instanciation d'un objet de la classe PLUGIN Étape 5: Création (ou mise à jour si l'extension a déjà été activée) des éléments dont nous avons défini les caractéristiques dans les variables créées au cours de l'étape 2 (configuration de l'extension). Pour ce faire, nous allons utiliser les méthodes proposées par la classe PLUGIN. CIGR Université de la Méditerranée 36 tdb-ssi@medecine.univmed.fr

5.2) Logique algorithmique du code du fichier sur le serveur de collecte Pour ce fichier également, la structure générale de l'algorithme du code se décompose en 5 étapes: Étape 1: - Connexion à la base de données du tableau de bord - Définition des variables spécifiques à l'extension s'il en existe Étape 2: Définition du code de l extension et du numéro de la source correspondant à ce fichier Étape 3: Instanciation d un objet de la classe PLUGIN_COLLECTE Étape 4: Processus de récupération des valeurs à insérer dans la base de données. Ces traitements sont spécifiques à chaque extension. Différentes méthodes de la classe PLUGIN_COLLECTE peuvent être utilisées ici selon le traitement à réaliser. Étape 5: Insertion des valeurs récupérées dans la base de données du tableau de bord en utilisant une méthode d'insertion de valeur fournie par la classe PLUGIN_COLLECTE. CIGR Université de la Méditerranée 37 tdb-ssi@medecine.univmed.fr

6) PAS-A-PAS : Développer une extension - Le fichier sur le serveur WEB Nous allons voir ici les étapes à suivre et les questions à se poser afin de développer le fichier de l'extension qui se trouve sur le serveur WEB. Ce fichier va créer les différents éléments indispensables à l'intégration d'une extension dans l'application TDB-SSI. Les valeurs données à titre d'exemple apparaitront en gras et en italique. 6.1) Intégration du fichier dans l'application WEB Afin de s'intégrer correctement dans le reste de l'application, le code d'un fichier d'extension commence toujours de la même manière: <? //---------------------------PLUGIN TEST--------------------------------// require_once("../biblio/commun.php"); session_start(); Ensuite, il faut définir les éléments de configuration du plugin. //------------------------CONFIGURATION DU PLUGIN--------------------------// 6.2) Configuration : L'extension Déterminer le code de l'extension (chaine de 6 caractères au maximum) ex: 'test' Créer le libellé de l'extension (128 caractères au maximum) ex: 'plugin de test' Facultatif: Déterminer la description de l'extension (255 caractères au maximum): ex: 'Plugin de test créé afin de montrer la démarche de création d'un plugin' Déterminer un numéro de version pour votre extension. Puisque vous êtes en train de la créer, vous pouvez commencer par exemple par la version «1.0». //ELEMENTS DU PLUGIN A SAISIR DANS L'APPLICATION TDB-SSI DANS LE MENU "AJOUTER UNE EXTENSION" //Code : test //Libellé : plugin de test //Description : Plugin de test créé afin de montrer la démarche de création d'un plugin //CONFIGURATION DE L'EXTENSION $code_ext = 'test'; $version_ext = '1.0'; CIGR Université de la Méditerranée 38 tdb-ssi@medecine.univmed.fr

6.3) Configuration : La source TDB-SSI 1.0 - Les extensions Cette étape n'est pas nécessaire si vous ne devez créer que des données à saisie manuelle et des indicateurs manuels dans votre extension. Si vous ne savez pas encore les types d'indicateurs que vous devrez créer, passez à l'étape suivante, vous pourrez toujours revenir à ce paragraphe si vous devez créer une source. Nous allons créer une source de collecte et définir les paramètres de collecte que nous souhaitons lui attribuer: Définir le numéro de la source : La plupart du temps, vous n'aurez besoin de créer qu'une seule source pour une extension, son numéro sera donc 1. ex: 1 Déterminer un libellé pour la source (128 caractères au maximum) ex: 'demo' Facultatif: description de la source (255 caractères au maximum). A titre d'exemple, on ne donnera pas de description. La variable correspondante sera donc une string vide. '' Déterminer la périodicité de collecte désirée pour cette source. Rappel des périodicités possibles: min toutes les minutes, heure toutes les heures, jour quotidienne, sem hebdomadaire, mois mensuelle, an annuelle, manuelle la collecte n'est pas automatisée (cas des indicateurs manuels) ex: 'sem' Déterminer si la collecte doit se faire en nocturne (afin de profiter d'une période creuse en terme de trafic réseau) ou pas. La variable correspondante est un booléen qui vaut 1 si la collecte est nocturne et 0 si elle ne l'est pas. Ex: 1 Tous les éléments de configuration de la source et de sa collecte sont maintenant définis. Notre source qui se nomme demo et qui n'a pas de description sera donc collectée toutes les semaines en nocturne. //CONFIGURATION DE LA SOURCE ET DE LA COLLECTE $num_source = 1; $lib_source = "demo"; $description_source = ""; $perio_collecte = "sem"; $collecte_nocturne = 1; CIGR Université de la Méditerranée 39 tdb-ssi@medecine.univmed.fr

6.4) Configuration : Le thème et le sous-thème Rappel : Les sous-thèmes regroupent sémantiquement les différents indicateurs et données saisies selon une thématique commune(exemple : menaces virales, menaces IDS ). Il est possible de regrouper les sous-thèmes ayant un point commun, en les reliant à un même thème (exemple: Sécurité). La création d'un sous-thème est OBLIGATOIRE, en effet les indicateurs appartiennent forcément à un sous-thème. Il servira à créer des groupes d' indicateurs ayant un fort lien sémantique afin de les présenter de manière organisée dans l'interface WEB. Un sous-thème peut appartenir à un thème mais cela n'est pas obligé, la création d'un thème est donc facultative. Numéro du sous-thème : Le plus souvent, vous ne serez amené qu'à créer un seul sousthème dans une extension. ex: 1 Définition du libellé du sous-thème (128 caractères au maximum) ex: «Apprentissage de la démarche de création d'une extension» Déterminer le num_theme: Nous n'avons pas créé de thème, le sous-thème n'appartient à aucun thème, le num_thème est donc un caractère vide. ex: '' //CONFIGURATION DU SOUS_THEME $num_ss_theme = 1; $lib_ss_theme = «Apprentissage de la démarche de création d'une extension»; $num_theme = ''; Remarque: Il sera toujours possible de changer ultérieurement le sous-thème d'un indicateur ou le thème d'un sous-thème via l'interface WEB de l'application. CIGR Université de la Méditerranée 40 tdb-ssi@medecine.univmed.fr

Récapitulatif du code écrit jusqu'à présent: TDB-SSI 1.0 - Les extensions <? //---------------------------PLUGIN TEST--------------------------------// require_once("../biblio/commun.php"); session_start(); //ELEMENTS DU PLUGIN A SAISIR DANS L'APPLICATION TDBv2 DANS LE MENU "AJOUTER UNE EXTENSION" //Code : test //Libellé : plugin de test //Description : Plugin de test créé afin de montrer la démarche de création d'un plugin //CONFIGURATION DE L'EXTENSION $code_ext = 'test'; $version_ext = '1.0'; //CONFIGURATION DE LA SOURCE ET DE LA COLLECTE $num_source = 1; $lib_source = "demo"; $description_source = ""; $perio_collecte = "sem"; $collecte_nocturne = 1; //CONFIGURATION DU SOUS_THEME $num_ss_theme = 1; $lib_ss_theme = «Apprentissage de la démarche de création d'une extension»; $num_theme = ''; CIGR Université de la Méditerranée 41 tdb-ssi@medecine.univmed.fr

6.5) Configuration : Les indicateurs, modèles et données à saisie manuelle Rappel: Il existe 4 types d'indicateurs (cf chapitre 2) et donc différentes méthodes dans l'api correspondant à ces types d'indicateurs afin de créer les indicateurs voulus. Pour chaque indicateur que l'on veut créer, il faut donc commencer par identifier son type. 6.5.1) Arbre décisionnel Il va falloir se poser un certain nombre de questions pour arriver à trouver le type d'indicateur adéquat. On peut matérialiser cette démarche sous la forme d'un arbre décisionnel. Est-ce que je veux créer un indicateur qui audite un moyen en particulier? Oui, cet indicateur doit auditer un moyen précis identifiable par une adresse IP OUI NON Non cet indicateur concerne l ensemble du SI Il y a u ra p e u d in d ica te urs issu s d e cette exte nsio n p a r m o ye n. Je ve u x im po rte r d es info rm a tion s co n ce rn an t u n m oye n à p artir d u ne b a se de d on n é e s. Il y a ura b e a uco u p d indicateurs par moyen. C e t in d ica te u r d oit ê tre issu d u n e d o n n ée sa isie m a n u e lle m e n t via l in te rfa ce W EB d u ta b le a u d e b o rd La co lle cte d e ce t in d ica teu r est automatique, il n e p ro vie n t p a s d u ne d o n né e sa isie m a n u elle m e n t d a n s le tableau de bord Je dois créer un modèle d indicateur Je dois créer un indicateur de moyen direct Je d o is cré e r u ne d o n né e à sa isie m a n ue lle e t u n indicateur manuel Je dois créer un indicateur de SI automatique Selon l'indicateur préconisé par la sortie de l'arbre, vous pouvez vous reporter à un des 4 paragraphes suivants afin de coder sa configuration. CIGR Université de la Méditerranée 42 tdb-ssi@medecine.univmed.fr

6.5.2) Configuration d'un indicateur de SI automatique Les éléments à définir: Numéro de l'indicateur, indice de l'alarme, type de la valeur, niveau de visibilité, représentation graphique, durée d'historisation, libellé de l'indicateur, description de l'indicateur, commentaire de l'indicateur, unité de l'indicateur, valeur seuil, opérateur seuil, valeur cible, priorité d'affichage, sauvegarde par changement de valeur, indice de confidentialité, envoi d'email en cas d'alarme, génération d'un rapport. Ces éléments sont décrits dans le chapitre 2. Le code correspondant Les valeurs des variables proviennent de l'exemple du plugin STATS présenté ultérieurement. //CONFIGURATION DE L'INDICATEUR DE SI AUTOMATIQUE $num_indic_si_auto = 1; $ind_alarme = 2; $code_type_val = 'real'; $code_niv = "pilo"; $code_graph = "cour"; $code_histo = "an"; $lib_indic = 'Pourcentage des moyens sous contrat de maintenance'; $description_indic = ""; $comment_indic = "Calcul effectué à partir de la description des moyens enregistrée dans le tableau de bord"; $unite_indic ='%'; $valeur_seuil = '50'; $operateur_seuil = '<'; $valeur_cible = ''; $priorite = 0; $value_change_saving = 0; $ind_conf = 0; $envoi_email = 0; $generation_rapport = 0; CIGR Université de la Méditerranée 43 tdb-ssi@medecine.univmed.fr

6.5.3) Configuration d'une donnée à saisie manuelle et de l'indicateur manuel qui l'audite Remarque: Ce type d'indicateur n'a pas de source de définie. En effet, la collecte ne sera pas effectuée par le serveur de collecte. Les valeurs de l'indicateur seront simplement mises à jour en cas d'ajout/modification/suppression d'une valeur de la donnée correspondante par un utilisateur via l'interface WEB de l'application. Éléments de configuration d'une donnée à saisie manuelle: Numéro de la donnée, libellé de la donnée, description de la donnée, unité de la valeur de la donnée, type de la valeur de la donnée et indice de confidentialité de la donnée, périodicité de la donnée. Ces éléments sont décrits dans le chapitre 2. Éléments de configuration d'un indicateur manuel Indice de l'alarme, représentation graphique, libellé de l'indicateur, description de l'indicateur, commentaire, valeur seuil, opérateur de seuil, valeur cible, envoi d'email en cas d'alarme et priorité d'affichage. Ces éléments sont décrits dans le chapitre 2. Le code obtenu Cet extrait provient de l'exemple du plugin BUDGET présenté ultérieurement. //CONFIGURATION DE LA DONNEE A SAISIE MANUELLE 1 $num_donnee1 = 1; $lib_donnee1 = "Montant des investissements sécurité"; $description_donnee1 = ''; $unite_donnee1 = 'Euros'; $type_val_donnee1 = 'int'; $ind_conf_donnee1 = 3; $perio_donnee1 = 'an'; //CONFIGURATION DE L'INDICATEUR MANUEL 1 $alarme_indic1 = 0; $niv_indic1 = "strat"; $graph_indic1 = "cour"; $lib_indic1 = "Montant des investissements sécurité"; $description_indic1 = ''; $comment_indic1 = ''; $valeur_seuil_indic1 = ''; $operateur_seuil_indic1 = ''; $valeur_cible_indic1 = ''; $envoi_email_indic1 = 0; $priorite_indic1 = 0; $ind_conf_indic1 = 3; CIGR Université de la Méditerranée 44 tdb-ssi@medecine.univmed.fr

6.5.4) Configuration d'un indicateur de moyen direct Les éléments à définir: Nom de la table de la base de données externe, identifiant du champ dans la table de la base de données externe, indice de l'alarme, type de la valeur, niveau de visibilité, représentation graphique, durée d'historisation, libellé de l'indicateur, description, commentaire, unité, valeur seuil, opérateur de seuil, valeur cible, priorité d'affichage, sauvegarde par changement de valeur, indice de confidentialité, envoi d'email en cas d'alarme, génération d'un rapport. Ces éléments sont décrits dans les paragraphes 3.6.1 «Les champs de la table INDICATEUR» et 3.6.5 «Les champs de la table INDIC_MOYEN_DIR» Le code obtenu Les valeurs des variables sont une version simplifiée de l'exemple du plugin ZABBIX présenté ultérieurement.. // CONFIGURATION DES INDICATEURS DE MOYEN DIRECTS ISSUS DES TRIGGERS ZABBIX $table_bdd_ext_trigger = 'triggers'; $id_ext = '125'; $ind_alarme = 3; $type_val_trigger = 'int'; $niv_trigger = 'ope'; $graph_trigger='cour'; $histo_trigger = 'an'; $libelle = 'Visibilité du moyen' $description_trigger = "Issu d\'un trigger Zabbix"; $comment_trigger='signification des valeurs : 0 = Alarme Zabbix non déclenchée '. '/ 1 = Etat inconnu / 2 = Alarme Zabbix déclenchée'; $unite_trigger = ''; $valeur_seuil_trigger = '1'; $operateur_seuil_trigger = '>'; $valeur_cible_trigger = '0'; //Une priorite maximale est donnée aux indicateurs issus de triggers //afin qu'ils soient affichés en haut de la page $priorite_trigger = 5; $value_change_saving_trigger = 1; $ind_conf_trigger = 0; //Les indicateurs issus de triggers zabbix n'envoient pas d'email en cas d'alarme $envoi_email_trigger = 0; $generation_rapport_trigger = 1; CIGR Université de la Méditerranée 45 tdb-ssi@medecine.univmed.fr

6.5.5) Configuration d'un modèle d'indicateur de moyen Dans ce cas, seul un modèle d'indicateur est créé par l'extension. Des indicateurs auditant un moyen pourront ensuite être créés à partir de ce modèle via l'interface WEB d'administration de l'application. Les caractéristiques du modèle seront attribuées par défaut aux indicateurs qui seront générés. Les éléments à définir: Numéro du modèle, libellé du modèle, indice de l'alarme, type de la valeur, niveau de visibilité, représentation graphique, durée d'historisation, libellé de l'indicateur, description de l'indicateur, commentaire, unité de l'indicateur, valeur seuil, opérateur de seuil, valeur cible, priorité d'affichage, sauvegarde par changement de valeur, indice de confidentialité, envoi d'email en cas d'alarme, génération d'un rapport. Ces éléments sont décrits dans le chapitre 2. Le code obtenu Les valeurs des variables proviennent de l'exemple du plugin LOGCHECK présenté ultérieurement. //CONFIGURATION DU MODELE 1 $num_modele = 1; $lib_modele1 = "Logcheck Criticité du log"; $ind_alarme1 = 2; $code_type_val1 = 'int'; $code_niv1 = "ope"; $code_graph1 = "cour"; $code_histo1 = "6mois"; $lib_indic1 = 'Criticité du log'; $description_indic1 = "Indice de criticité du rapport de Log de Logcheck"; $comment_indic1 = 'Signification des valeurs : 0 = Aucun événement / '. '1 = Evénement Système / 2 = Evénement de Sécurité / 3 = Alerte d'attaque'; $unite_indic1 =''; $valeur_seuil1 = '1'; $operateur_seuil1 = ">"; $valeur_cible1 = '0'; $priorite1 = 0; $value_change_saving1 = 0; $ind_conf1 = 0; $envoi_email1 = 1; $generation_rapport1 = 1; CIGR Université de la Méditerranée 46 tdb-ssi@medecine.univmed.fr

6.6) Connexion à la base de données et contrôles de variables de sessions Cette étape est toujours la même pour toutes les extensions. //Connexion à la bdd tdb $tdb_connec = connexion_bdd_tdb(); // Vérification de l'existence des variables de session controle_session_user_si("admin",$tdb_connec); 6.7) Instanciation d'un objet de la classe PLUGIN Cette étape est également identique pour toutes les extensions. //-------------------CREATION DU PLUGIN---------------------------------// $mon_plugin = new plugin($code_ext); 6.8) Création des éléments définis au cours de l'étape de configuration Il ne reste plus qu'à créer les différents éléments dont nous avons défini les caractéristiques en utilisant les méthodes de la classe PLUGIN. Etant donné que cette phase est différente pour chaque type d'indicateur (ou modèle) créé, vous pouvez vous référer aux exemples complets d'extension donnés dans le chapitre 8 de cette documentation pour avoir plus de détails. CIGR Université de la Méditerranée 47 tdb-ssi@medecine.univmed.fr

7) PAS-A-PAS : Développer une extension Le fichier sur le serveur de collecte Le fichier situé sur le serveur de collecte a pour rôle de collecter et d'enregistrer les valeurs des indicateurs reliés à une source créée par une extension. Nous allons voir les étapes nécessaires à la création de ce fichier. Nous reprendrons l'exemple de l'extension nommée «TEST» commencé dans le paragraphe 9 «Démarche de création d'une extension : Le fichier sur le serveur WEB». 7.1) Connexion à la base de données du tableau de bord Tous les fichiers de collecte commencent de la même manière. <? //------Fichier de collecte de la source test1 -------------// //Connexion a la bdd du tableau de bord $tdb_connec = connexion_bdd_tdb(); 7.2) Définition du code de l extension et du numéro de la source correspondant à ce fichier Dans notre exemple nous avions précédemment spécifié que le code de l'extension était «test» et que le numéro de la source était 1. //-------Définition du code de l'extension et du numéro de la source---------------// $code_ext = 'test'; $num_source = 1; CIGR Université de la Méditerranée 48 tdb-ssi@medecine.univmed.fr

7.3) Instanciation d un objet de la classe PLUGIN_COLLECTE Instanciation d'un objet de la classe plugin_collecte : $ma_collecte = new plugin_collecte($code_ext,$num_source,$tdb_connec); /* Suite de l'algorithme */ 7.4) Opérations spécifiques à un type d'indicateur Il ne reste plus que 3 types d'indicateurs concernés puisque les traitements afin de récupérer les valeurs des indicateurs issus de données à saisie manuelle ne sont pas assurés par le serveur de collecte. 7.4.1) Les indicateurs de SI à collecte automatique Aucune opération spécifique à ce type d'indicateur n'est nécessaire dans le traitement de collecte. 7.4.2) Les indicateurs de moyen par modèle Ces indicateurs auditent un moyen et ils sont issus d'un modèle que l'on a créé dans le fichier de l'extension sur le serveur WEB. En utilisant la méthode set_tab_moyens_audites(...) on valorise un tableau qui contient le numéro identifiant et l'adresse IP des moyens de ce SI qui sont audités par un indicateur provenant d'un modèle associé à cette source. Pour chaque moyen de ce tableau, on pourra donc aller chercher la valeur de l'indicateur voulu puis l'insérer dans la base de données du tableau de bord. Exemple d'utilisation: $ma_collecte->set_tab_moyens_audites($tdb_connec); //Pour chaque moyen du SI possédant un indicateur provenant de notre extension for($i=0; $i < $ma_collecte->get_nb_moyens_audites(); $i++) { $num_moy = $ma_collecte->get_tab_moyens_audites($i,'num'); $ip_moy = $ma_collecte->get_tab_moyens_audites($i,'ip'); CIGR Université de la Méditerranée 49 tdb-ssi@medecine.univmed.fr

/* * - Suite des traitements afin de récupérer les valeurs * voulues pour chaque moyen dont on connait l'adresse IP. * * - Insertion de la valeur de l'indicateur dans la base de données * du tableau de bord. */ } 7.4.3) Les indicateurs de moyen directs Les valeurs de ces indicateurs proviennent d'une base de données externe au tableau de bord. Les propriétés «TABLE_BDD_EXTERNE» et «ID_EXTERNE» de ce type d'indicateur vont nous permettre d'aller récupérer la donnée voulue dans la base de données externe. En utilisant la méthode set_tab_indics_moyen_dir(...) on valorise un tableau qui contient des informations sur les indicateurs de moyen directs provenant de cette extension et dont la propriété «TABLE_BDD_EXTERNE» et celle qui est passée en paramètre. set_tab_indics_moyen_dir('nom de la table',$tdb_connec); Exemple d'utilisation: $ma_collecte->set_tab_indics_moyen_dir('ma_table',$tdb_connec); //Pour chaque indic de moyen direct de la table «ma_table» renvoyé for($i=0; $i < $ma_collecte->get_nb_indics_moyen_dir(); $i++) { $num_id_indic = $ma_collecte->get_tab_indics_moyen_dir($i,'num_id_indic'); $id_externe = $ma_collecte->get_tab_indics_moyen_dir($i,'id_ext'); /* Requête sur la base de données externe afin de récupérer la valeur recherchée grâce à la variable $id_externe */ /* Insertion de la valeur de l'indicateur dans la base de données du tableau de bord. */ } CIGR Université de la Méditerranée 50 tdb-ssi@medecine.univmed.fr

7.5) Récupération des valeurs à insérer dans la base de données Cette partie de l'algorithme est différente pour chaque fichier de collecte. Des exemples complets d'extensions sont fournis dans le chapitre 8, vous pouvez vous y référer afin d'avoir un aperçu des traitements possibles. 7.6) Insertion des valeurs récupérées dans la base de données du tableau de bord Une fois qu'on a réussi à récupérer les valeurs que l'on voulait, il faut les insérer dans la base de données en utilisant la méthode adéquate de la classe PLUGIN_COLLECTE. 3 méthodes sont disponibles selon le type d'indicateur pour lequel on veut insérer une valeur: insert_valeur_indic_si_auto(...) : Cette méthode est à utiliser dans le cas d'indicateurs de SI à collecte automatique. insert_valeur_indic_moyen_direct( ) : Cette méthode permet d insérer la valeur d un indicateur de moyen direct. insert_valeur_indic_moyen_modele( ) : Cette méthode est à utiliser dans le cas d'indicateur de moyen créé par un modèle. N'hésitez pas à consulter les exemples complets du chapitre 8 afin de voir des cas concrets d'utilisation. CIGR Université de la Méditerranée 51 tdb-ssi@medecine.univmed.fr

8) Exemples d'extensions par type d'indicateurs créés Nous allons voir pour chaque extension, les deux fichiers qui la composent. Une extension qui ne créerait que des indicateurs manuels constituerait une exception. En effet, puisqu'elle ne génèrerait aucune collecte automatique, elle ne serait donc constituée que d'un seul fichier, celui situé sur le serveur WEB. Même si dans presque tous ces exemples les extensions ne créent que des indicateurs ayant le même type, une extension peut bien sûr créer des indicateurs de types différents. 8.1) Indicateurs de moyen par modèle : l'extension LOGCHECK 8.1.1) Le fichier sur le serveur WEB Voici le code du fichier de l'extension LOGCHECK qui crée une source, un sous-thème et un modèle d indicateur. Les 7 étapes de l algorithme Étape 1 : Appel aux fonctions require_once(...) et session_start() afin d'intégrer correctement le fichier dans l'application WEB. Étape 2 : Définition et valorisation des variables qui seront les propriétés des différents éléments créés par l extension, c est à dire : - L extension elle-même - La source - Le sous-thème - Le modèle d indicateur Étape 3 : Connexion à la base de données du tableau de bord et vérification des variables de session de l utilisateur connecté à l application WEB TDB-SSI. Étape 4 : Instanciation de l objet de la classe plugin Étape 5 : Création ou mise à jour de la source en utilisant la méthode ajouter_source(...) Étape 6 : Création ou mise à jour du sous-thème en utilisant la méthode ajouter_ss_theme(...) Étape 7 : Création ou mise à jour du modèle en faisant appel à la méthode ajouter_modele(...) CIGR Université de la Méditerranée 52 tdb-ssi@medecine.univmed.fr

<? //--------------PLUGIN LOGCHECK--------------------------------// //Plugin qui crée un modèle d'indicateur. Les valeurs des indicateurs qui seront liés à // ce modèle seront automatiquement renseignés par les collectes de la source 'logchk1' Étape 1 require_once("../biblio/commun.php"); session_start(); Étape 2 //--------------CONFIGURATION DU PLUGIN--------------------------// //ELEMENTS DU PLUGIN A SAISIR DANS L'APPLICATION DANS LE MENU "AJOUTER UNE EXTENSION" //Code : logchk //Libellé : Audit des logs des moyens par Logcheck //Description : //CONFIGURATION DE L'EXTENSION $code_ext = 'logchk'; $version_ext = '1.0'; //CONFIGURATION DE LA SOURCE $num_source = 1; $lib_source = "Logcheck"; $description_source = "Analyse des logs"; $perio_collecte = "heure"; $collecte_nocturne = 0; //CONFIGURATION DU SOUS_THEME $lib_ss_theme = "Analyse des logs des moyens"; //CONFIGURATION DU MODELE 1 $num_modele1 = 1; $lib_modele1 = "Logcheck Criticité du log"; $ind_alarme1 = 2; $code_type_val1 = 'int'; $code_niv1 = "ope"; $code_graph1 = "cour"; $code_histo1 = "6mois"; $lib_indic1 = 'Criticité du log'; $description_indic1 = "Indice de criticité du rapport de Log de Logcheck"; $comment_indic1 = "Signification des valeurs : 0 = Aucun événement / 1 = Evénement Système / 2 = Evénement de Sécurité / 3 = Alerte d'attaque"; $unite_indic1 =''; CIGR Université de la Méditerranée 53 tdb-ssi@medecine.univmed.fr

$valeur_seuil1 = '1'; $operateur_seuil1 = ">"; $valeur_cible1 = '0'; $priorite1 = 0; $value_change_saving1 = 0; $ind_conf1 = 0; $envoi_email1 = 1; $generation_rapport1 = 1; Étape 3 //-----------------CONTROLES ET CONNEXION------------------------// //Connexion à la bdd tdb $tdb_connec = connexion_bdd_tdb(); // Vérification de l'existence des variables de session controle_session_user_si("admin",$tdb_connec); //----------------------CREATION PLUGIN-------------------------// Étape 4 $mon_plugin = new plugin($code_ext); Étape 5 //Création ou mise à jour de la source1 et de sa collecte dans ce SI $mon_plugin->ajouter_source($num_source,$lib_source,$description_source,$perio_collecte, $collecte_nocturne,$tdb_connec); $num_theme = ''; Étape 6 //Création ou mise à jour du sous-thème $mon_plugin->ajouter_ss_theme($num_ss_theme,$lib_ss_theme,$num_theme,$tdb_connec); Étape 7 //Création ou mise à jour du modèle1 'Criticité du log' $mon_plugin->ajouter_modele($num_modele1,$lib_modele1,$ind_alarme1,$code_type_val1, $code_niv1,$code_graph1,$code_histo1,$num_source,$num_ss_theme,$lib_indic1, $description_indic1,$comment_indic1,$unite_indic1,$valeur_seuil1,$operateur_seuil1, $valeur_cible1,$priorite1,$value_change_saving1,$ind_conf1,$envoi_email1, $generation_rapport1,$tdb_connec);?> CIGR Université de la Méditerranée 54 tdb-ssi@medecine.univmed.fr

8.1.2) Le fichier sur le serveur de collecte Collecte des indicateurs issus du modèle créé par l'extension LOGCHECK Les 7 étapes de l algorithme Étape 1 : Connexion à la base de données du tableau de bord Étape 2 : Définition des variables utilisées par Logcheck (spécifique à cette extension) Étape 3 : Définition et valorisation du code de l extension et le numéro de la source correspondant à ce fichier. Étape 4 : Instanciation d un objet de la classe PLUGIN_COLLECTE Étape 5 : Récupération de tous les moyens de ce SI audités par au moins un indicateur actif ayant ce fichier comme source en faisant appel à la méthode set_tab_moyens_audites() Étape 6 : Pour chaque moyen renvoyé par la méthode set_tab_moyens_audites on effectue les traitements qui déclenchent la création d un rapport du log et le calcul de sa criticité. Ces traitements sont spécifiques à cette extension. Étape 7 : On insère les valeurs obtenues à partir du log dans l'indicateur de criticite de log de ce moyen en utilisant la méthode insert_valeur_indic_moyen_modele() CIGR Université de la Méditerranée 55 tdb-ssi@medecine.univmed.fr

<? Étape 1 //Connexion a la bdd du tableau de bord $tdb_connec = connexion_bdd_tdb(); //Variables globales de Logcheck Étape 2 $rep_log = "/var/log/tdb/"; // répertoire où sont stockes les logs Étape 3 $code_ext = 'logchk'; $num_source = 1; Étape 4 $ma_collecte = new plugin_collecte($code_ext,$num_source,$tdb_connec); Étape 5 //Récupération des moyens de ce SI audités //par au moins un indicateur actif ayant ce fichier comme source $ma_collecte->set_tab_moyens_audites($tdb_connec); // Numero du modele de criticite du rapport de log cree par //l'extension logcheck $num_modele_criticite = 1; //Pour chaque moyen du SI possédant un indicateur de log for($i=0; $i < $ma_collecte->get_nb_moyens_audites(); $i++) { $num_moy = $ma_collecte->get_tab_moyens_audites($i,'num'); $ip_moy = $ma_collecte->get_tab_moyens_audites($i,'ip'); CIGR Université de la Méditerranée 56 tdb-ssi@medecine.univmed.fr

Étape 6 //Exécution de la commande Logcheck $log=$rep_log.$ip_moy.'.log'; if(is_file($log)) { $rapport=shell_exec("sudo -u logcheck logcheck -l $log -o"); // Traitement du rapport afin de déterminer une criticité $criti=0; if(strlen($rapport)!=0) { } if ( substr_count( $rapport,"attack Alerts")>0 ) $criti=3; else if ( substr_count($rapport,"security Events")>0) $criti=2; else if (substr_count($rapport,"system Events")>0) $criti=1; Étape 7 } else // Insertion de la valeur de l'indicateur de criticite de log $ma_collecte->insert_valeur_indic_moyen_modele($num_modele_criticite, $num_moy,$criti,$rapport,$tdb_connec); error_log("$date Erreur collecte $code_ext: Il n'y a pas de fichier de log correspondant a l'adresse ip $ip_moy sur le serveur \n",3,$log_file); } mysql_close($tdb_connec);?> CIGR Université de la Méditerranée 57 tdb-ssi@medecine.univmed.fr

8.2) Indicateurs de moyen directs : l'extension ZABBIX 8.2.1) Le fichier sur le serveur WEB L'extension crée une source, un thème, un sous-thème et des indicateurs de moyen directs. La particularité de ce type d'extension est qu on ne sait pas combien d indicateurs vont être créés, il s'agit d'une création d'indicateurs en masse. Le principe est tout d'abord de récupérer tous les moyens existants dans notre tableau de bord pour un SI. Ensuite, pour l'adresse IP de chaque moyen obtenu, on va regarder si des informations existent dans la base de données externe. Ici la base de données externe est celle de Zabbix et les informations en question sont des triggers. Pour chaque trigger trouvé, le script va alors créer un indicateur qui lui correspond dans le tableau de bord. Les 11 étapes de l'algorithme Étape 1 : Appel aux fonctions require_once(...) et session_start() afin d'intégrer correctement le fichier dans l'application WEB. Étape 2 : Définition et valorisation des variables qui seront les propriétés des différents éléments créés par l extension, c est à dire : L extension elle-même La source Le thème Le sous-thème Les indicateurs de moyen directs (leur propriété TABLE_BDD_EXT sera «triggers») Étape 3 : Connexion à la base de données du tableau de bord et vérification des variables de session de l utilisateur connecté à l application WEB TDB-SSI. Étape 4 : Instanciation de l objet de la classe plugin Étape 5 : Création ou mise à jour de la source et de sa collecte en utilisant la méthode ajouter_source(...) Étape 6 : Création ou mise à jour du thème en utilisant la méthode ajouter_theme(...) Étape 7 : Création ou mise à jour du sous-thème en utilisant la méthode ajouter_ss_theme(...) CIGR Université de la Méditerranée 58 tdb-ssi@medecine.univmed.fr

Étape 8 : Récupération de tous les numéros identifiant et les adresses ip des moyens du SI enregistrés dans le tableau de bord en utilisant les méthodes: set_tab_moyens(...) afin de valoriser le tableau de moyens. get_tab_moyens(...) afin d'avoir accès aux valeurs de ce tableau Étape 9 : Pour chaque moyen, on cherche les triggers correspondant à l'adresse IP de ce moyen dans la base de données de Zabbix (traitements spécifiques à cette extension) Étape 10 : Pour chaque trigger récupéré, on effectue les traitements nécessaires à la définition des propriétés de l indicateur de moyen direct que l on va créer (traitements spécifiques à cette extension). Étape 11 : Création ou mise à jour de l'indicateur de moyen direct correspondant au trigger en faisant appel à la méthode ajouter_indic_moyen_direct(...) CIGR Université de la Méditerranée 59 tdb-ssi@medecine.univmed.fr

<? //-----------------------------PLUGIN ZABBIX------------------------------// Étape 1 require_once("../biblio/commun.php"); session_start(); //--------------------CONFIGURATION DU PLUGIN----------------------// Étape 2 //ELEMENTS DU PLUGIN A SAISIR DANS L'APPLICATION DANS LE MENU "AJOUTER UNE EXTENSION" //Code : zabbix //Libellé : Extension Zabbix //Description : //CONFIGURATION DE L'EXTENSION $code_ext = 'zabbix'; $version_ext = '1.0'; //VARIABLES DE CONNEXION A LA BDD DE ZABBIX $host_bdd_zab = "ad_ip_serveur_zabbix"; $user_bdd_zab = "zabbix_user"; $pwd_bdd_zab = "zabbix_pwd"; $name_bdd_zab = "zabbix_bdd"; //CONFIGURATION DE LA SOURCE ET DE LA COLLECTE $num_source = 1; $lib_source = "Zabbix"; $description_source = "Audit de la plateforme ZABBIX"; $perio_collecte = "min"; $collecte_nocturne = 0; //CONFIGURATION DU THEME $num_theme = 1; $lib_theme = "Etat du parc"; //CONFIGURATION DU SOUS_THEME $num_ss_theme = 1; $lib_ss_theme = "Supervision des moyens"; CIGR Université de la Méditerranée 60 tdb-ssi@medecine.univmed.fr

// CONFIGURATION DES INDICATEURS DE MOYEN DIRECTS ISSUS DES TRIGGERS ZABBIX // Ces parametres peuvent etre utilises pour mettre a jour en masse tous les indicateurs ayant zabbix comme source en reactivant le plugin. $table_bdd_ext_trigger = 'triggers'; $type_val_trigger = 'int';//le trigger renvoie un entier pouvant avoir trois valeurs differentes 0,1 ou 2 $niv_trigger = 'ope'; $graph_trigger='cour'; $histo_trigger = 'an'; $description_trigger = "Issu d\'un trigger Zabbix"; $comment_trigger="signification des valeurs : 0 = Alarme Zabbix non déclenchée ". "/ 1 = Etat inconnu / 2 = Alarme Zabbix déclenchée"; $unite_trigger = ''; //Un trigger n'a pas d'unité $valeur_seuil_trigger = '1'; $operateur_seuil_trigger = '>'; $valeur_cible_trigger = '0'; //Une priorite maximale est donnee aux indicateurs issus de triggers afin qu'ils soient affiches en haut de la page $priorite_trigger = 5; $value_change_saving_trigger = 1; $ind_conf_trigger = 0; $envoi_email_trigger = 0; $generation_rapport_trigger = 1; //Les champs Alarme et Libellé d' un indicateur issu d'un trigger sont directement //renseignés à partir d'une requete sur la bdd de Zabbix Étape 3 //FONCTION DE CONNEXION A LA BDD DE ZABBIX output:ressource de connexion function connexion_bdd_zabbix() { global $host_bdd_zab, $user_bdd_zab, $pwd_bdd_zab, $name_bdd_zab; } $link_zab = mysql_connect($host_bdd_zab,$user_bdd_zab,$pwd_bdd_zab) or die("erreur de connexion au serveur $host_bdd_zab"); mysql_select_db($name_bdd_zab,$link_zab) or die("erreur de connexion a la base de donnees $name_bdd_zab"); return $link_zab; //---------------CONTROLES ET CONNEXION-------------------------// //Connexion aux bdd tdb et zabbix $tdb_connec = connexion_bdd_tdb(); $zab_connec = connexion_bdd_zabbix(); // Vérification de l'existence des variables de session controle_session_user_si("admin",$tdb_connec); CIGR Université de la Méditerranée 61 tdb-ssi@medecine.univmed.fr

//---------------CREATION DU PLUGIN---------------------------// Étape 4 $mon_plugin = new plugin($code_ext); //Création ou mise à jour de la source $mon_plugin->ajouter_source($num_source,$lib_source,$description_source,$perio_collecte, $collecte_nocturne,$tdb_connec); Étape 5 //Création ou mise à jour du thème $mon_plugin->ajouter_theme($num_theme,$lib_theme,$tdb_connec); Étape 6 //Création ou mise à jour du sous-thème $mon_plugin->ajouter_ss_theme($num_ss_theme,$lib_ss_theme,$num_theme,$tdb_connec); Étape 7 //Valorisation du tableau de tous les moyens du SI $mon_plugin->set_tab_moyens($tdb_connec); Étape 8 //Pour chaque moyen du SI for($i=0;$i<$mon_plugin->get_nb_moyens();$i++) { $num_id_moy = $mon_plugin->get_tab_moyens($i,'num'); $ip_moy = $mon_plugin->get_tab_moyens($i,'ip'); Étape 9 // Requete sur la bdd zabbix qui renvoie les triggers concernant le moyen considere $query_trigger = "SELECT DISTINCT triggers.triggerid, triggers.description, triggers.priority FROM triggers,functions,items,hosts WHERE triggers.triggerid = functions.triggerid AND functions.itemid = items.itemid AND items.hostid = hosts.hostid AND triggers.status = 0 AND hosts.status <> 1 AND hosts.ip like '$ip_moy'"; $result_trigger=mysql_query($query_trigger,$zab_connec) or die("echec requete select "); CIGR Université de la Méditerranée 62 tdb-ssi@medecine.univmed.fr

Étape 10 //Pour chaque Trigger qui concerne le moyen while($row_trigger = mysql_fetch_assoc($result_trigger)) { //Echappement des éventuels caractères spéciaux(',",\) presents dans //la description du trigger $lib_trigger = $row_trigger['description']; $id_ext_trigger = $row_trigger['triggerid']; Étape 11 //On etablit la conversion entre la priority du trigger de zabbix et les //alarmes du tdb switch ($row_trigger['priority']) { } case 0 : case 1 : case 2 : $alarme_trigger=0;//aucune break; $alarme_trigger=1;//basse break; case 3 : $alarme_trigger=2;//moyenne case 5 : default: break; case 4 : $alarme_trigger=3;//elevee break; $alarme_trigger=0; break; //Création ou mise à jour de l'indicateur de moyen direct correspondant au trigger $mon_plugin->ajouter_indic_moyen_direct($alarme_trigger,$type_val_trigger,$niv_trigger, $graph_trigger,$histo_trigger,$num_source,$num_ss_theme,$lib_trigger, $description_trigger,$comment_trigger,$unite_trigger,$valeur_seuil_trigger, $operateur_seuil_trigger,$valeur_cible_trigger,$priorite_trigger, $value_change_saving_trigger,$ind_conf_trigger,$envoi_email_trigger, $generation_rapport_trigger,$num_id_moy,$id_ext_trigger,$table_bdd_ext_trigger, $tdb_connec); } } mysql_close($zab_connec); CIGR Université de la Méditerranée 63 tdb-ssi@medecine.univmed.fr

8.2.2) Le fichier sur le serveur de collecte Collecte des indicateurs de moyen directs issus de l'extension ZABBIX ayant la propriété table_bdd_ext égale à «triggers». Les 6 étapes de l algorithme : Étape 1 : Connexion à la base de données de Zabbix et à celle du tableau de bord Étape 2 : Définition et valorisation du code de l extension et le numéro de la source correspondant à ce fichier. Étape 3 : Instanciation d un objet de la classe PLUGIN_COLLECTE Étape 4 : Récupération des indicateurs de moyen directs actifs de ce SI et cette extension associés à la table «triggers» en utilisant les méthodes: set_tab_indics_moyen_dir(...) afin de valoriser le tableau d'indicateurs de moyen directs. get_tab_indics_moyen_dir(...) afin d'avoir accès aux valeurs de ce tableau. Étape 5 : Pour chaque indicateur renvoyé, on requête la base de données de Zabbix pour chercher le trigger dont l'id correspond à la propriété «id_externe» de l'indicateur. Étape 6 : Insertion de la valeur de l'indicateur dans la base de données en utilisant la méthode insert_valeur_indic_moyen_direct(...) CIGR Université de la Méditerranée 64 tdb-ssi@medecine.univmed.fr

<? // Script qui execute la collecte des indicateurs ayant zabbix comme source Étape 1 //VARIABLES DE CONNEXION A LA BDD DE ZABBIX $host_bdd_zab = <adresse IP du serveur où se trouve Zabbix>; $user_bdd_zab = <Nom de l utilisateur de la base de données de Zabbix>; $pwd_bdd_zab = <Mot de passe de la base de données>; $name_bdd_zab = <Nom de la base de données>; $url_zabbix = "<URL_Zabbix>"; //url de l'interface WEB de zabbix //Fonction de connexion a la base de donnees de Zabbix function connexion_bdd_zabbix() { global $host_bdd_zab; global $user_bdd_zab; global $pwd_bdd_zab; global $name_bdd_zab; $link_zab = mysql_connect($host_bdd_zab,$user_bdd_zab,$pwd_bdd_zab) or die("erreur de connexion au serveur $host_bdd_zab"); mysql_select_db($name_bdd_zab,$link_zab) or die("erreur de connexion a la base de donnees $name_bdd_zab"); } return $link_zab; //Connexion aux bdd tdb et zabbix $tdb_connec = connexion_bdd_tdb(); $zab_connec = connexion_bdd_zabbix(); //Variables globales de Zabbix Étape 2 $code_ext = 'zabbix'; $num_source = 1; $rapport_trigger = "<strong><a href='$url_zabbix' target='_blank' title='accès à Zabbix dans une nouvelle fenêtre'>lien vers l'interface WEB de Zabbix</a></strong>"; Étape 3 $ma_collecte = new source_collecte($code_ext,$num_source,$tdb_connec); CIGR Université de la Méditerranée 65 tdb-ssi@medecine.univmed.fr

Étape 4 //Récupération des indicateurs de moyen directs actifs de ce SI et cette //extension associes a la table "triggers" $ma_collecte->set_tab_indics_moyen_dir('triggers',$tdb_connec); //Pour chaque indic de moyen direct de la table trigger renvoye for($i=0; $i < $ma_collecte->get_nb_indics_moyen_dir(); $i++) { $num_id_indic = $ma_collecte->get_tab_indics_moyen_dir($i,'num_id_indic'); $date_last_value = $ma_collecte->get_tab_indics_moyen_dir($i,'date_last_value'); $histo = $ma_collecte->get_tab_indics_moyen_dir($i,'histo'); $value_change_saving = $ma_collecte->get_tab_indics_moyen_dir($i,'value_change_saving'); $id_externe = $ma_collecte->get_tab_indics_moyen_dir($i,'id_ext'); Étape 5 // Requete sur la bdd zabbix qui renvoie le trigger actif dont l'id est celle du //champ "ID_EXTERNE" de la table INDIC_MOYEN_DIR du tableau de bord $query_trigger = "SELECT DISTINCT triggers.triggerid, triggers.value FROM triggers,functions,items,hosts WHERE triggers.triggerid = functions.triggerid AND functions.itemid = items.itemid AND items.hostid = hosts.hostid AND triggers.triggerid = $id_externe AND hosts.status <> 1 AND triggers.status = 0"; $result_trigger=mysql_query($query_trigger,$zab_connec); $row_trigger= mysql_fetch_assoc($result_trigger); CIGR Université de la Méditerranée 66 tdb-ssi@medecine.univmed.fr

Étape 6 // Verification qu'il y ait bien un trigger correspondant au champ id_externe if (mysql_num_rows($result_trigger)==1) { switch($row_trigger['value']) { case 0 : $valeur_trig = 0; break; case 1: $valeur_trig = 2; break; case 2: $valeur_trig = 1; } } } mysql_close($tdb_connec); mysql_close($zab_connec);?> //Insertion de la valeur de l'indicateur dans la base de donnees $ma_collecte->insert_valeur_indic_moyen_direct($i,$valeur_trig, $rapport,$tdb_connec); CIGR Université de la Méditerranée 67 tdb-ssi@medecine.univmed.fr

8.3) Indicateurs de SI à collecte automatique : l'extension STATS 8.3.1) Le fichier sur le serveur WEB Cette extension crée une source, un sous-thème et un indicateur de SI à collecte automatique. Les 7 étapes de l algorithme Étape 1 : Appel aux fonctions require_once() et session_start() afin d'intégrer correctement le fichier dans l'application WEB. Étape 2 : Définition et valorisation des variables qui seront les propriétés des différents éléments créés par l extension, c est à dire : - L extension elle-même - La source - Le sous-thème - L indicateur de SI à collecte automatique Étape 3 : Connexion à la base de données du tableau de bord et vérification des variables de session de l utilisateur connecté à l application WEB TDB-SSI. Étape 4 : Instanciation de l objet de la classe plugin Étape 5 : Création ou mise à jour de la source et de sa collecte en utilisant la méthode ajouter_source(...) Étape 6 : Création ou mise à jour du sous-thème en utilisant la méthode ajouter_ss_theme(...) Étape 7 : Création ou mise à jour de l'indicateur de SI auto 1 en utilisant la méthode ajouter_indic_si_auto(...) CIGR Université de la Méditerranée 68 tdb-ssi@medecine.univmed.fr

<? //----------------PLUGIN STATS--------------------------// //Plugin qui crée un indicateur de SI à collecte automatique. //collectes de la source 'stats1' Étape 1 require_once("../biblio/commun.php"); session_start(); //------------CONFIGURATION DU PLUGIN---------------------// Étape 2 //ELEMENTS DU PLUGIN A SAISIR DANS L'APPLICATION TDB-SSI DANS LE MENU "AJOUTER UNE EXTENSION" //Code : stats //Libellé : Statistiques //Description : //CONFIGURATION DE L'EXTENSION $code_ext = 'stats'; $version_ext = '1.0'; //CONFIGURATION DE LA SOURCE $num_source = 1; $lib_source = "Statistiques"; $description_source = ''; $perio_collecte = "sem"; $collecte_nocturne = 1; //CONFIGURATION DU SOUS_THEME $num_ss_theme = 1; $lib_ss_theme = "Maintenabilité des moyens"; $num_theme = ''; //CONFIGURATION DE L'INDICATEUR DE SI AUTOMATIQUE 1 $num_indic_si_auto1 = 1; $ind_alarme1 = 2; $code_type_val1 = 'real'; $code_niv1 = "pilo"; $code_graph1 = "cour"; $code_histo1 = "an"; $lib_indic1 = 'Pourcentage des moyens sous contrat de maintenance'; $description_indic1 = ''; CIGR Université de la Méditerranée 69 tdb-ssi@medecine.univmed.fr

$comment_indic1 = "Calcul effectué à partir de la description des moyens enregistrée dans le tableau de bord"; $unite_indic1 ='%'; $valeur_seuil1 = '50'; $operateur_seuil1 = '<'; $valeur_cible1 = ''; $priorite1 = 0; $value_change_saving1 = 0; $ind_conf1 = 0; $envoi_email1 = 0; $generation_rapport1 = 0; //----------------CONTROLES ET CONNEXION----------------------------// Étape 3 //Connexion à la bdd du tdb $tdb_connec = connexion_bdd_tdb(); // Vérification de l'existence des variables de session controle_session_user_si("admin",$tdb_connec); //------------------CREATION DU PLUGIN----------------------------// Étape 4 $mon_plugin = new plugin($code_ext); Étape 5 //Création ou mise à jour de la source $mon_plugin->ajouter_source($num_source,$lib_source,$description_source,$perio_collecte, $collecte_nocturne,$tdb_connec); Étape 6 //Création ou mise à jour du sous-thème $mon_plugin->ajouter_ss_theme($num_ss_theme,$lib_ss_theme,$num_theme,$tdb_connec); Étape 7 //Création ou mise à jour de l'indicateur de SI auto1 $mon_plugin->ajouter_indic_si_auto($num_indic_si_auto1,$ind_alarme1,$code_type_val1, $code_niv1,$code_graph1,$code_histo1,$num_source,$num_ss_theme,$lib_indic1, $description_indic1,$comment_indic1,$unite_indic1,$valeur_seuil1,$operateur_seuil1, $valeur_cible1,$priorite1,$value_change_saving1,$ind_conf1,$envoi_email1, $generation_rapport1,$tdb_connec);?> CIGR Université de la Méditerranée 70 tdb-ssi@medecine.univmed.fr

8.3.2) Le fichier sur le serveur de collecte Script qui exécute la collecte des indicateurs issus de l'extension STATS. Les 5 étapes de l algorithme : Étape 1 : Connexion à la base de données du tableau de bord Étape 2 : Définition et valorisation du code de l extension et le numéro de la source correspondant à ce fichier. Étape 3 : Instanciation d un objet de la classe PLUGIN_COLLECTE Étape 4 : Traitement calculant la valeur de l'indicateur de SI auto 1 de l'extension (traitement spécifique à cette extension). Étape 5 : On insère la valeur obtenue dans l' indicateur en utilisant la méthode insert_valeur_indic_si_auto(...) <? Étape 1 //Connexion a la bdd du tableau de bord $tdb_connec = connexion_bdd_tdb(); Étape 2 $code_ext = 'stats'; $num_source = 1; Étape 3 $ma_collecte = new plugin_collecte($code_ext,$num_source,$tdb_connec); CIGR Université de la Méditerranée 71 tdb-ssi@medecine.univmed.fr

Étape 4 // Calcul de la valeur de l'indicateur auto 1 du plugin stats $query_nb_moy = "SELECT COUNT(num_moy) as NB_MOYENS FROM MOYEN WHERE code_sys like '$si'"; $result_nb_moy = mysql_query($query_nb_moy,$tdb_connec); if(!$result_nb_moy) error_log("$date Collecte $code_ext Erreur: ". "la requete de count du nombre de moyens a echoue \n",3,$log_file); $row_nb_moy= mysql_fetch_row($result_nb_moy); $nb_moyens = $row_nb_moy[0]; $query_nb_contrats = "SELECT COUNT(num_moy) as NB_CONTRATS FROM MOYEN WHERE code_sys like '$si' AND contrat_maintenance = 1"; $result_nb_contrats = mysql_query($query_nb_contrats,$tdb_connec); if(!$result_nb_contrats) error_log("$date Erreur collecte $code_ext: la requete de count du nombre de moyens sous contrat de maintenance a echoue \n",3,$log_file); $row_nb_contrats= mysql_fetch_row($result_nb_contrats); $nb_moyens_sous_contrat = $row_nb_contrats[0]; $pourcent_moyens_sous_contrat = ($nb_moyens_sous_contrat / $nb_moyens) * 100; Étape 5 // Insertion de la valeur de l'indicateur auto 1 $num_indic_auto_maintenance = 1; $rapport = ""; $ma_collecte->insert_valeur_indic_auto($num_indic_auto_maintenance, } $pourcent_moyens_sous_contrat,$rapport,$tdb_connec); mysql_close($tdb_connec);?> CIGR Université de la Méditerranée 72 tdb-ssi@medecine.univmed.fr

8.4) Indicateurs de SI à collecte manuelle et données saisies : l'extension BUDGET Nous allons voir ici une extension qui génère deux données à saisie manuelle ainsi que les indicateurs de SI à collecte manuelle qui les auditent. S'il n'y avait eu que ces indicateurs issus d'une saisie manuelle, aucun fichier n'aurait été créé sur le serveur de collecte. Mais cette extension crée également un indicateur de SI à collecte automatique. Il s'agira d'un indicateur composé qui puisera ses valeurs dans les deux données à saisie manuelle préalablement créées. 8.4.1) Le fichier sur le serveur WEB Les 6 étapes de l algorithme Étape 1 : Appel aux fonctions require_once() et session_start() afin d'intégrer correctement le fichier dans l'application WEB. Étape 2 : Définition et valorisation des variables qui seront les propriétés des différents éléments créés par l extension, c est à dire : - L extension elle-même - La source - Le sous-thème - Les données à saisie manuelle ainsi que les indicateurs manuels qui les auditent - L'indicateur de SI à collecte automatique Remarque: S'il n' y avait eu que des données à saisies manuelle (avec leurs indicateurs), la création d'aucune source n'aurait été nécessaire pour cette extension. Étape 3 : Connexion à la base de données du tableau de bord et vérification des variables de session de l utilisateur connecté à l application WEB. Étape 4 : Instanciation de l objet de la classe plugin Étape 5 : Création ou mise à jour de la source en utilisant la méthode ajouter_source(...) Étape 6 : Création ou mise à jour du sous-thème en utilisant la méthode ajouter_ss_theme(...) Étape 7 : Création ou mise à jour des données à saisie manuelle et des indicateurs qui les auditent en faisant appel à la méthode ajouter_donnee_et_indic_manuel(...) Étape 8 : Création ou mise à jour de l'indicateur de SI à collecte automatique en utilisant la méthode ajouter_indic_si_auto(...) CIGR Université de la Méditerranée 73 tdb-ssi@medecine.univmed.fr

<? //--------------------PLUGIN BUDGET-------------------------------------// //Plugin qui crée une donnée à saise manuelle et l'indicateur qui l'audite. Étape 1 require_once("../biblio/commun.php"); session_start(); //--------------------CONFIGURATION DU PLUGIN-----------------------------// Étape 2 //ELEMENTS DU PLUGIN A SAISIR DANS L'APPLICATION TDB-SSI DANS LE MENU "AJOUTER UNE EXTENSION" //Code : budget //Libellé : Budgets //Description : //CONFIGURATION DE L'EXTENSION $code_ext = 'budget'; $version_ext = '1.0'; //CONFIGURATION DE LA SOURCE // La source et la collecte ne sont utiles que pour l'indicateur de SI à collecte //automatique. Les données à saisie manuelle et les indicateurs qui les auditent //n'ont quant à eux pas besoin de cette source. $num_source = 1; $lib_source = "Statistiques sur les investissements"; $description_source = 'Statistiques effectuées sur les investissements saisis'; $perio_collecte = "sem"; $collecte_nocturne = 1; //CONFIGURATION DU SOUS_THEME $num_ss_theme = 1; $lib_ss_theme = "Investissements"; $num_theme = ''; //CONFIGURATION DE LA DONNEE A SAISIE MANUELLE 1 $num_donnee1 = 1; $lib_donnee1 = "Montant des investissements globaux"; $description_donnee1 = ''; $unite_donnee1 = 'Euros'; $type_val_donnee1 = 'int'; $ind_conf_donnee1 = 3; $perio_donnee1 = 'an'; CIGR Université de la Méditerranée 74 tdb-ssi@medecine.univmed.fr

//CONFIGURATION DE L'INDICATEUR MANUEL 1 $alarme_indic1 = 0; $niv_indic1 = "strat"; $graph_indic1 = "cour"; $lib_indic1 = "Montant des investissements globaux"; $description_indic1 = ''; $comment_indic1 = ''; $valeur_seuil_indic1 = ''; $operateur_seuil_indic1 = ''; $valeur_cible_indic1 = ''; $envoi_email_indic1 = 0; $priorite_indic1 = 0; $ind_conf_indic1 = 3; //Le type de l'indicateur manuel ainsi que son unité sont les mêmes que ceux de la //donnée manuelle qu'il audite //CONFIGURATION DE LA DONNEE A SAISIE MANUELLE 2 $num_donnee2 = 2; $lib_donnee2 = "Montant des investissements liés à la sécurité"; $description_donnee2 = ''; $unite_donnee2 = 'Euros'; $type_val_donnee2 = 'int'; $ind_conf_donnee2 = 4; $perio_donnee2 = 'an'; //CONFIGURATION DE L'INDICATEUR MANUEL 2 $alarme_indic2 = 0; $niv_indic2 = "strat"; $graph_indic2 = "cour"; $lib_indic2 = "Montant des investissements liés à la sécurité"; $description_indic2 = ''; $comment_indic2 = ''; $valeur_seuil_indic2 = ''; $operateur_seuil_indic2 = ''; $valeur_cible_indic2 = ''; $envoi_email_indic2 = 0; $priorite_indic2 = 0; $ind_conf_indic2 = 4; CIGR Université de la Méditerranée 75 tdb-ssi@medecine.univmed.fr

//CONFIGURATION DE L'INDICATEUR DE SI AUTOMATIQUE 1 $num_indic_si_auto1 = 1; $ind_alarme3 = 0; $code_type_val3 = 'real'; $code_niv3 = "strat"; $code_graph3 = "cour"; $code_histo3 = "def"; $lib_indic3 = 'Pourcentage des investissements liés à la sécurité'; $description_indic3 = "Pourcentage des investissements liés à la sécurité par rapport aux investissements globaux"; $comment_indic3 = "Calcul effectué à partir des deux données à saisie manuelle correspondantes"; $unite_indic3 ='%'; $valeur_seuil3 = ''; $operateur_seuil3 = ''; $valeur_cible3 = ''; $priorite3 = 0; $value_change_saving3 = 1; $ind_conf3 = 4; $envoi_email_indic3 = 0; $generation_rapport3 = 0; //------------CONTROLES ET CONNEXION---------------------------// Étape 3 //Connexion à la bdd du tdb $tdb_connec = connexion_bdd_tdb(); // Vérification de l'existence des variables de session controle_session_user_si("admin",$tdb_connec); //---------------------CREATION DU PLUGIN-------------------------------// Étape 4 $mon_plugin = new plugin($code_ext); Étape 5 //Création ou mise à jour de la source $mon_plugin->ajouter_source($num_source,$lib_source,$description_source,$perio_collecte, $collecte_nocturne,$tdb_connec); Étape 6 //Création ou mise à jour du sous-thème $mon_plugin->ajouter_ss_theme($num_ss_theme,$lib_ss_theme,$num_theme,$tdb_connec); CIGR Université de la Méditerranée 76 tdb-ssi@medecine.univmed.fr

Étape 7 //Création ou mise à jour de la donnée à saisie manuelle1 et de l'indicateur qui l'audite $mon_plugin- >ajouter_donnee_et_indic_manuel($num_donnee1,$lib_donnee1,$description_donnee1, $unite_donnee1,$type_val_donnee1,$ind_conf_donnee1,$perio_donnee1,$alarme_indic1, $niv_indic1,$graph_indic1,$lib_indic1,$description_indic1, $comment_indic1, $valeur_seuil_indic1,$operateur_seuil_indic1,$valeur_cible_indic1,$priorite_indic1, $ind_conf_indic1,$num_ss_theme,$envoi_email_indic1,$tdb_connec); //Création ou mise à jour de la donnée à saisie manuelle2 et de l'indicateur qui l'audite $mon_plugin- >ajouter_donnee_et_indic_manuel($num_donnee2,$lib_donnee2,$description_donnee2, $unite_donnee2,$type_val_donnee2,$ind_conf_donnee2,$perio_donnee2,$alarme_indic2, $niv_indic2,$graph_indic2,$lib_indic2,$description_indic2, $comment_indic2, $valeur_seuil_indic2,$operateur_seuil_indic2,$valeur_cible_indic2,$priorite_indic2, $ind_conf_indic2,$num_ss_theme,$envoi_email_indic2,$tdb_connec); Étape 8 //Création ou mise à jour de l'indicateur de SI auto1 $mon_plugin->ajouter_indic_si_auto($num_indic_si_auto1,$ind_alarme3,$code_type_val3, $code_niv3,$code_graph3,$code_histo3,$num_source,$num_ss_theme,$lib_indic3, $description_indic3,$comment_indic3,$unite_indic3,$valeur_seuil3,$operateur_seuil3, $valeur_cible3,$priorite3,$value_change_saving3,$ind_conf3,$envoi_email_indic3, $generation_rapport3,$tdb_connec);?> CIGR Université de la Méditerranée 77 tdb-ssi@medecine.univmed.fr

8.4.2) Le fichier sur le serveur de collecte (cas du traitement d'un indicateur composé) Ce fichier correspond à la source qui effectuera les traitements de collecte de l'indicateur de SI automatique de l'extension Budget. Cet indicateur est un indicateur composé, sa valeur va être calculée à partir des dernières valeurs saisies des données créées par l'extension. Les 5 étapes de l algorithme : Étape 1 : Connexion à la base de données du tableau de bord Étape 2 : Définition et valorisation du code de l extension et le numéro de la source correspondant à ce fichier. Étape 3 : Instanciation d un objet de la classe PLUGIN_COLLECTE Étape 4 : Traitement calculant la valeur de l'indicateur de SI auto1 de l'extension. Puisqu'il s'agit d'un indicateur composé qui puise ses valeurs dans les dernières valeurs de données à saisie manuelle créées par cette extension, nous allons utiliser la méthode get_derniere_valeur_donnee(...) de l'api. Remarque: Dans cet exemple, la variable $si_serveur est utilisée. Il s'agit d'une variable globale existant sur le serveur de collecte dont la valeur est égale au code du SI d'appartenance du serveur. Étape 5 : On insère la valeur obtenue dans l' indicateur en utilisant la méthode insert_valeur_indic_si_auto(...) <? Étape 1 //Connexion a la bdd du tableau de bord $tdb_connec = connexion_bdd_tdb(); Étape 2 $code_ext = 'budget'; $num_source = 1; Étape 3 $ma_collecte = new plugin_collecte($code_ext,$num_source,$tdb_connec); CIGR Université de la Méditerranée 78 tdb-ssi@medecine.univmed.fr

Étape 4 // Calcul de la valeur de l'indicateur de SI auto 1 du plugin budget // Il s'agit d'un indicateur composé, le calcul se fait à partir de la valeur // de deux données saisies dans le TDB. // Donnee 'montant des investissements globaux' $num_donnee = 1; $valeur_investissements_globaux = $ma_collecte->get_derniere_valeur_donnee($si_serveur,$code_ext,$num_donnee,'valeur', $tdb_connec); $date_investissements_globaux = $ma_collecte->get_derniere_valeur_donnee($si_serveur,$code_ext,$num_donnee,'date', $tdb_connec); // Donnee 'montant des investissements securite' $num_donnee = 2; $valeur_investissements_secu = $ma_collecte->get_derniere_valeur_donnee($si_serveur,$code_ext,$num_donnee,'valeur', $tdb_connec); $date_investissements_secu = $ma_collecte->get_derniere_valeur_donnee($si_serveur,$code_ext,$num_donnee,'date', $tdb_connec); // Si les deux données ont bien une valeur d'enregistrée et que leurs dates sont identiques if ( ($valeur_investissements_globaux) && ($valeur_investissements_secu) && ($date_investissements_globaux == $date_investissements_secu) ) { // Calcul du pourcentage du montant securite par rapport au montant total $pourcent_secu = ($valeur_investissements_secu / $valeur_investissements_globaux) * 100; Étape 5 // Insertion de la valeur de l'indicateur de SI auto 1 de ratio $num_indic_si_auto1 = 1; $rapport = ''; //Cet indicateur ne genere pas de rapport } $ma_collecte->insert_valeur_indic_si_auto( $num_indic_si_auto1,$pourcent_secu, $rapport,$tdb_connec); mysql_close($tdb_connec);?> CIGR Université de la Méditerranée 79 tdb-ssi@medecine.univmed.fr