0
ICMP (Ping) to server, open a support ticket if down.
Eu criei uma página ICMP.php via API ela abre um ticket baseado em um ping para um determinado servidor via IP . Gostaria que validasse esta função, para melhorar e acrescentar no GLPI assim não preciso integrar o zabbix no GLPI.


CÓDIGO UTILIZADO COMO FONTE EU ADAPTEI O MEU ATE CHEGAR NO PONTO AI DO CHAMADO JÁ CRIADO AO GLPI.
?php
// --- PARTE 1: Configurações e Função de Ping ---
// Configurações do GLPI
$glpi_url = 'http://<seu-servidor-glpi>/apirest.php/'; // Ex: http://localhost/glpi/apirest.php/
$app_token = '<SEU_APP_TOKEN>';
$user_token = '<SEU_USER_TOKEN>';
$entidade_id = 0; // ID da entidade (0 para entidade raiz ou o ID específico)
$categoria_id = 0; // ID da categoria do chamado (ex: 9 para Problema de Rede )
$user_id = 1; // **[NOVO]** ID do usuário solicitante (substitua pelo ID real do usuário no GLPI)
// Endereço IP ou hostname a ser pingado
$target_host = '8.8.8.8'; // Ex: IP do servidor ou Google DNS
// Função para verificar se o host está online (simples ICMP ping)
function is_host_online($host) {
// Comando ping para sistemas Linux. Ajuste para Windows se necessário.
$command = 'ping -c 3 ' . escapeshellarg($host);
exec($command, $output, $status);
return ($status === 0);
}
// --- PARTE 2: Lógica Principal ---
if (!is_host_online($target_host)) {
echo "Falha no ping para {$target_host}. Abrindo chamado no GLPI...\n";
// **[MODIFICADO]** Passando o novo user_id para a função
create_glpi_ticket($glpi_url, $app_token, $user_token, $entidade_id, $categoria_id, $target_host, $user_id);
} else {
echo "O host {$target_host} está online. Nenhum chamado foi aberto.\n";
}
// --- PARTE 3: Função para Criar Chamado no GLPI via API ---
// **[MODIFICADO]** Adicionando $user_id como parâmetro
function create_glpi_ticket($url, $app_token, $user_token, $entity_id, $category_id, $host, $user_id) {
// 1. Iniciar sessão para obter o Session Token
$session_token = get_glpi_session_token($url, $app_token, $user_token);
if (!$session_token) {
echo "Erro: Não foi possível obter o Session Token.\n";
return;
}
// 2. Criar o chamado (Ticket)
$ticket_data = json_encode([
'input' => [
'name' => "FALHA DE PING: Host {$host} inacessível", // Título do chamado
'content' => "O monitoramento automático detectou que o host {$host} não responde ao ping.\nFavor verificar a conectividade.", // Descrição
'status' => 1, // Status: Novo
'urgency' => 3, // Urgência: Média
'priority' => 3, // Prioridade: Média
'entities_id' => $entity_id,
'itilcategories_id' => $category_id,
'requesttypes_id' => 1, // Tipo de requisição (1 para Incidente, ajuste se necessário)
'users_id' => $user_id // **[NOVO]** Define o usuário solicitante pelo ID
]
]);
$ch = curl_init("{$url}Ticket");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $ticket_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'App-Token: ' . $app_token,
'Session-Token: ' . $session_token
));
$result = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpcode == 201) {
echo "Chamado criado com sucesso! Código de status: {$httpcode}\n";
} else {
echo "Erro ao criar chamado. Código de status: {$httpcode}. Resposta: {$result}\n";
}
// Opcional: Finalizar sessão
// logout_glpi_session($url, $app_token, $session_token);
}
function get_glpi_session_token($url, $app_token, $user_token) {
$ch = curl_init("{$url}initSession");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'App-Token: ' . $app_token,
'Authorization: user_token ' . $user_token
));
$result = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpcode == 200) {
$response = json_decode($result, true);
return $response['session_token'];
}
return false;
}
// Função de logout opcional
function logout_glpi_session($url, $app_token, $session_token) {
$ch = curl_init("{$url}killSession");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'App-Token: ' . $app_token,
'Session-Token: ' . $session_token
));
curl_exec($ch);
curl_close($ch);
}
?>
Сервис поддержки клиентов работает на платформе UserEcho