Recherche item dans tableau [Résolu]

cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 19 nov. 2017 à 16:54 - Dernière réponse : cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention
- 19 nov. 2017 à 19:40
Bonjour le Forum,

Je dispose d'un fichier (services.cfg) ayant cette structure
define service{
	host_name				server01
	service_description		/
	...
	use				TPL_OS_UNIX_DISK_NRPE
    ...
}

define service{
	host_name				server03
	service_description		/
	use				TPL_OS_UNIX_DISK_NRPE
    ...
}

define service{
	host_name				server01
	service_description		/boot
    ...		
	use				TPL_OS_UNIX_DISK_NRPE
    ...
}

define service{
	host_name				server03
	service_description		/boot
    ...		
	use				TPL_OS_UNIX_DISK_NRPE
    ...
}

Un host_name peut posséder plusieurs services (service_description).

A partir d'une liste déroulante (ListeHost), je souhaite alimenter une liste déroulante (ListeService) dans laquelle il n'y aura que les services du host sélectionné.

Je bloque pour créer mon tableau de services par host.
Mes derniers essais :
	$lines_service = file($roothost . $fileservices);	
	
	// Tableaux des services
	foreach ($lines_service as $value) {
		if (strpos($value, 'host_name') !== false) {
			$servicehost = return_value($value);
		}
		if (strpos($value, 'service_description') !== false) {
			$servicename = return_value($value);
		}
		if (strpos($value, '	use') !== false) {
			$serviceuse = return_value($value);
			
			// Ajout au tableau multi-dimensionnel
			//$hostservice[]= array('host' =>array($servicehost,'service' =>$servicename,'use' => $serviceuse));
			//$hostservice[]= array('host' => $servicehost, 'service' =>$servicename,'use' => $serviceuse);
		
			$hostservice[][$servicehost] =  array('service' =>$servicename,'use' => $serviceuse);
		}
	}

Le print_r($hostservice) me renvoie :
Array
(
    [0] => Array
        (
            [server01] => Array
                (
                    [service] => /
                    [use] => TPL_OS_UNIX_DISK_NRPE
                )
        )

    [1] => Array
        (
            [server03] => Array
                (
                    [service] => /
                    [use] => TPL_OS_UNIX_DISK_NRPE
                )
        )

    [2] => Array
        (
            [server01] => Array
                (
                    [service] => /boot
                    [use] => TPL_OS_UNIX_DISK_NRPE
                )
        )

    [3] => Array
        (
            [server03] => Array
                (
                    [service] => /boot
                    [use] => TPL_OS_UNIX_DISK_NRPE
                )
        )

A partir de ce tableau, est-il possible de récupérer tous les services d'un host ???

Merci pour vos conseils et suggestions.

jean-marc
Afficher la suite 
1816Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention

4 réponses

Répondre au sujet
jordane45 19206 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 11 décembre 2017 Dernière intervention - 19 nov. 2017 à 17:33
0
Utile
3
Bonjour

<?php
//affichage des erreurs php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);


//ton tableau à traiter :
$arr = Array
(
    '0' => Array
        (
            'server01' => Array
                (
                    'service' => '/'
                    ,'use' => 'TPL_OS_UNIX_DISK_NRPE'
                )
        )

    ,'1' => Array
        (
            'server03' => Array
                (
                    'service' => '/'
                    ,'use' => 'TPL_OS_UNIX_DISK_NRPE'
                )
        )

    ,'2' => Array
        (
            'server01' => Array
                (
                    'service' => '/boot'
                    ,'use' => 'TPL_OS_UNIX_DISK_NRPE'
                )
        )

    ,'3' => Array
        (
            'server03' => Array
                (
                    'service' => '/boot'
                    ,'use' => 'TPL_OS_UNIX_DISK_NRPE'
                )
        )
);

//-----------------------------------------------------------------//
// on créé un nouveau tableau ayant comme clé les "hosts"
//-----------------------------------------------------------------//
$newArr = array();
foreach($arr as $index=>$HostServ){
    foreach($HostServ as $host=>$datas){
        $newArr[$host][$datas['service']] = $datas['use'];
    } 
}

//-----------------------------------------------------------------//
// Affichage
//-----------------------------------------------------------------//
echo "Tableau remis en forme : <br>";
echo "<pre>";
print_r($newArr);
echo "</pre>";



Donne

Tableau remis en forme :

Array
(
[server01] => Array
(
[/] => TPL_OS_UNIX_DISK_NRPE
[/boot] => TPL_OS_UNIX_DISK_NRPE
)

[server03] => Array
(
[/] => TPL_OS_UNIX_DISK_NRPE
[/boot] => TPL_OS_UNIX_DISK_NRPE
)

)


cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 19 nov. 2017 à 18:19
Bonjour Jordane,

Un grand merci, je viens de tester ta proposition. La récupération des services par host s'effectue correctement.
Depuis ce matin je testais en vain avec les deux boucles.
$newArr[$host][$datas['service']] = $datas['service']
était la solution !!!

Bonne soirée,

jean-marc
jordane45 19206 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 11 décembre 2017 Dernière intervention > cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 19 nov. 2017 à 18:54
Si tu ne veux que les services sans les "use" ... tu peux simplement faire comme ça;:
$newArr = array();
foreach($arr as $index=>$HostServ){
    foreach($HostServ as $host=>$datas){
        $newArr[$host][] = $datas['service'];
    } 
}

Ce qui donnera :
Array
(
    [server01] => Array
        (
            [0] => /
            [1] => /boot
        )

    [server03] => Array
        (
            [0] => /
            [1] => /boot
        )

)
cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention > jordane45 19206 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 11 décembre 2017 Dernière intervention - 19 nov. 2017 à 19:40
Merci Jordane,
Testé -> ok
Pour remplir la liste déroulante "ListeService" d'un host, je n'ai besoin que du service. Mais le but est de créer une commande du genre "/usr/lib/nagios/plugins/wrap.pl 'host_name' '/var' '0' '0' /usr/lib/nagios/plugins/check_nrpe -u -t 30 -n -H 'IP site distant' -p 3180 -c disk -a 85 90 /var" où les variables se trouvent dans x fichiers .cfg (host, service, templates, command ...) !!! Donc, je devrais "mémoriser" toutes les variables des différents fichiers de config.
En bref, un shaker sera mon cadeau !!!

jean-marc
Commenter la réponse de jordane45

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.