Recherche item dans tableau [Résolu]

Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
- - Dernière réponse : cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
- 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 

Votre réponse

1 réponse

Messages postés
23647
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 décembre 2018
0
Merci
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
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
-
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
Messages postés
23647
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 décembre 2018
> cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
-
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
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
> jordane45
Messages postés
23647
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 décembre 2018
-
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.