Monitoramento de processos - TOP

Publicado por Carpegieri Torezani (última atualização em 19/02/2019)

[ Hits: 1.974 ]

Homepage: www.carpegieri.com.br

Download top.php




O presente script faz o monitoramento dos processos executados no sistema, através da saída do programa "top", sendo possível ordenar processos por vários critérios e estipular tempo para atualização.

Obs.: permitir ao PHP acesso a execução de comandos no shell.

  



Esconder código-fonte

<?php
// Este Script foi desenvolvido por Carpegieri Torezani
//Você pode usa-lo modifica-lo desde que mantenha os devidos créditos
// Contato: carpegieri@gmail.com
// Telefone: (27)3729-1986

// Procedimento para tempo de atualização
if($tempo_atualizar==""){$tempo_atualizar=$_POST["tempo"];}
if($tempo_atualizar==""){$tempo_atualizar=$_GET["tempo"];}
if($tempo_atualizar==""){$tempo_atualizar=60;}

// Procedimento para Ordenar
if($Ordem==""){$Ordem=$_POST["id_Ordenar"];}
if($Ordem==""){$Ordem=$_GET["Ordem"];}
if($Ordem==""){$Ordem=17;}

// Cor do principal do Sistema
$Cor_Estilo="#01725e";


// Função formatar número para GB
function memo ($memoria_ini)
{
    $memoria=(($memoria_ini)/1024)/1024;
    $memoria= number_format($memoria, 2, ',', ' ');
    echo $memoria;
}

// Função formatar número para MB
function memo2 ($memoria_ini)
{
    $memoria=($memoria_ini)/1024;
    $memoria= number_format($memoria, 2, ',', '.');
    echo $memoria;
}

// Formatar data e hora
date_default_timezone_set("Brazil/East");
$dataHora = date("d/m/Y H:i:s");

// Formatar Saída comando TOP
$temp=shell_exec("sudo top -b -n 1");
$temp = str_replace("            ", "|", $temp);
$temp = str_replace("           ", "|", $temp);
$temp = str_replace("          ", "|", $temp);
$temp = str_replace("         ", "|", $temp);
$temp = str_replace("        ", "|", $temp);
$temp = str_replace("       ", "|", $temp);
$temp = str_replace("      ", "|", $temp);
$temp = str_replace("     ", "|", $temp);
$temp = str_replace("    ", "|", $temp);
$temp = str_replace("   ", "|", $temp);
$temp = str_replace("  ", "|", $temp);
$temp = str_replace(" ", "|", $temp);
$temp = str_replace("\n ", "\n", $temp);
$temp = str_replace("\n", "\n|", $temp);
$temp = str_replace("||", "|", $temp);
$temp = str_replace("\n|", "\n", $temp);

// Separando a saída por linha
$Dados= explode("\n", $temp);

// Contar quantas linhas tem o vetor
$NumeroLinhas = count($Dados);

// Formatando os dados de saída / pegar informações sobre horas em funcionamento
$quebrado= explode("|", $Dados[0]);
$quebrado = str_replace(",", "", $quebrado);
$hora=explode(":", $quebrado[2]);

// Buscar informações sobre o processador
$inf_processador=shell_exec("sudo cat /proc/cpuinfo | grep \"model name\" | uniq");
$inf_processador= str_replace("model name   : ", "", $inf_processador);


//Validade de números de usuários, pois pode alterar a localização dependendo da execução
if ($quebrado[7]!="users"){$user_ativos=$quebrado[7];} else {$user_ativos=$quebrado[6];}

echo '
<html>
<link rel="shortcut icon" href="../imagem/sc.ico">
<META HTTP-EQUIV=\'REFRESH\' CONTENT=\''.$tempo_atualizar.';URL=top.php?Ordem='.$Ordem.'&tempo='.$tempo_atualizar.'\'>

<style>
#textovertical {writing-mode: vertical-rl;}
</style>


<body><center>
<table border=5 cellspacing=10 bordercolor='.$Cor_Estilo.'>
<tr><td height="40" bgcolor='.$Cor_Estilo.' colspan=12><center><b><font color=white>Informações do Sistema<br>Atualizado em '.$dataHora.'</td></tr>
<tr>
<td colspan=6><font color=red><b><center>Tempo Ligado </td>
<td colspan=6><font color=red><b><center>Usuários Ativos</td>
</tr>
<tr>
<td colspan=6><center><font color='.$Cor_Estilo.'><b>'.$quebrado[4].' dias, '.$hora[0].' horas e '.$hora[1].' minutos</td>
<td colspan=6><center><font color='.$Cor_Estilo.'><b>'.$user_ativos.'</td>
</tr>';

// Processando informações da segunda linha
$quebrado= explode("|", $Dados[1]);
$quebrado = str_replace(",", "", $quebrado);


echo '
<tr>
<td colspan=2><center><font color=red><b>Processos</td>
<td colspan=2><center><font color=red><b>Executando</td>
<td colspan=2><center><font color=red><b>Dormindo</td>
<td colspan=2><center><font color=red><b>Parado</td>
<td colspan=2><center><font color=red><b>Modo Zumbi</td>
<td colspan=2><center><font color=red><b>Processador</td>
<tr>
<td colspan=2><center><font color='.$Cor_Estilo.'><b>'.$quebrado[1].'</td>
<td colspan=2><center><font color='.$Cor_Estilo.'><b>'.$quebrado[3].'</td>
<td colspan=2><center><font color='.$Cor_Estilo.'><b>'.$quebrado[5].'</td>
<td colspan=2><center><font color='.$Cor_Estilo.'><b>'.$quebrado[7].'</td>
<td colspan=2><center><font color='.$Cor_Estilo.'><b>'.$quebrado[9].'</td>
<td colspan=2><center><font color='.$Cor_Estilo.'><b>'.$inf_processador.'</td>
</tr>';

// Processando informações da quarta linha
$quebrado= explode("|", $Dados[3]);
$quebrado = str_replace(",", "", $quebrado);

// Processando informações da quinta linha
$quebrado1= explode("|", $Dados[4]);
$quebrado1= str_replace(",", "", $quebrado1);

// Formatando informações da memória em GB / Limitar em duas casas decimais
$memoriap=(($quebrado[2])/1024)/1024;
$memoriap= number_format($memoriap, 2, ',', ' ');

echo '
<tr>
<td colspan=2><center><font color=red><b>Memória Principal</td>
<td colspan=2><center><font color=red><b>Usada</td>
<td colspan=2><center><font color=red><b>Livre</td>
<td colspan=2><center><font color=red><b>Memória Swap</td>
<td colspan=2><center><font color=red><b>Usada</td>
<td colspan=2><center><font color=red><b>Livre</td>
<tr>
<td colspan=2><center><font color='.$Cor_Estilo.'><b>';

// Chamada função memo
memo($quebrado[2]);

echo' GB</td>
<td colspan=2><center><font color='.$Cor_Estilo.'><b>';

// Chamada função memo
memo($quebrado[4]);

echo' GB</td>
<td colspan=2><center><font color='.$Cor_Estilo.'><b>';

// Chamada função memo
memo($quebrado[6]);

echo' GB</td>
<td colspan=2><center><font color='.$Cor_Estilo.'><b>';

// Chamada função memo
memo($quebrado1[2]);

echo' GB</td>
<td colspan=2><center><font color='.$Cor_Estilo.'><b>';

// Chamada função memo
memo($quebrado1[4]);

echo' GB</td>
<td colspan=2><center><font color='.$Cor_Estilo.'><b>';

// Chamada função memo
memo($quebrado1[6]);

echo' GB</td>
</tr>';




$NumeroLinhas=$NumeroLinhas-2;


// Salvar Informações em Arquivo
$arquivo_Ordenado = fopen("processos.txt", "w");
for ($i=7; $i<=$NumeroLinhas; $i++){
$quebrado=explode("|", $Dados[$i]);

// Formata saída atribuindo Palavras no lugar das letras
switch ($quebrado[7]) {
    case "D":
        $quebrado[7]="Ininterrupto";
        break;
    case "R":
        $quebrado[7]="Executando";
        break;
    case "S":
        $quebrado[7]="Dormindo";
        break;
    case "T":
        $quebrado[7]="Parado";
        break;
    case "Z":
        $quebrado[7]="Zumbi";
        break;
}


//Escreve informações no arquivo
fwrite($arquivo_Ordenado, "$quebrado[0]|$quebrado[1]|$quebrado[2]|$quebrado[3]|$quebrado[4]|$quebrado[5]|$quebrado[6]|$quebrado[7]|$quebrado[8]|$quebrado[9]|$quebrado[10]|$quebrado[11]\n");
}

//Fecha o arquivo e altera permissão
fclose($arquivo_Ordenado);
shell_exec("sudo chmod 777 processos.txt");


// Manipular Arquivo passando valorer para vetor
$linhas = file ("processos.txt");
        //variável armazena o total de linhas importadas
        $total_linhas_importadas = 0;
foreach($linhas as $valor) {
  list($ID[],$User[],$Prio[],$IDPrio[],$MV[],$MU[],$MC[],$Estado[],$PorCPU[],$PorMem[],$Tempo[],$Comando[]) = explode("|", $valor); // Separa o valores baseado na '|' barra
  $total_linhas_importadas++;}


// Escolha com opções de ordenar
switch ($Ordem) {
    case 0:
        array_multisort($ID,$User,$Prio,$IDPrio,$MV,$MU,$MC,$Estado,$PorCPU,$PorMem,$Tempo,$Comando);$nome_ordem="ID Menor";
        break;
    case 1:
        array_multisort($ID,SORT_DESC,$User,$Prio,$IDPrio,$MV,$MU,$MC,$Estado,$PorCPU,$PorMem,$Tempo,$Comando);$nome_ordem="ID Maior";
        break;
    case 2:
        array_multisort($User,$ID,$Prio,$IDPrio,$MV,$MU,$MC,$Estado,$PorCPU,$PorMem,$Tempo,$Comando);$nome_ordem="Usuário Crescente";
        break;
    case 3:
        array_multisort($User,SORT_DESC,$ID,$Prio,$IDPrio,$MV,$MU,$MC,$Estado,$PorCPU,$PorMem,$Tempo,$Comando);$nome_ordem="Usuário Decrescente";
        break;
    case 4:
        array_multisort($Prio,$ID,$User,$IDPrio,$MV,$MU,$MC,$Estado,$PorCPU,$PorMem,$Tempo,$Comando);$nome_ordem="Prioridade Menor";
        break;
    case 5:
        array_multisort($Prio,SORT_DESC,$ID,$User,$IDPrio,$MV,$MU,$MC,$Estado,$PorCPU,$PorMem,$Tempo,$Comando);$nome_ordem="Prioridade Maior";
        break;
    case 6:
        array_multisort($IDPrio,$ID,$User,$Prio,$MV,$MU,$MC,$Estado,$PorCPU,$PorMem,$Tempo,$Comando);$nome_ordem="ID Prioridade Menor";
        break;
    case 7:
        array_multisort($IDPrio,SORT_DESC,$ID,$User,$Prio,$MV,$MU,$MC,$Estado,$PorCPU,$PorMem,$Tempo,$Comando);$nome_ordem="ID Prioridade Maior";
        break;
    case 8:
        array_multisort($MV,$ID,$User,$Prio,$IDPrio,$MU,$MC,$Estado,$PorCPU,$PorMem,$Tempo,$Comando);$nome_ordem="Memória Virtual Menor";
        break;
    case 9:
        array_multisort($MV,SORT_DESC,$ID,$User,$Prio,$IDPrio,$MU,$MC,$Estado,$PorCPU,$PorMem,$Tempo,$Comando);$nome_ordem="Memória Virtual Maior";
        break;
    case 10:
        array_multisort($MU,$ID,$User,$Prio,$IDPrio,$MV,$MC,$Estado,$PorCPU,$PorMem,$Tempo,$Comando);$nome_ordem="Memória Usada Menor";
        break;
    case 11:
        array_multisort($MU,SORT_DESC,$ID,$User,$Prio,$IDPrio,$MV,$MC,$Estado,$PorCPU,$PorMem,$Tempo,$Comando);$nome_ordem="Memória Usada Maior";
        break;
    case 12:
        array_multisort($MC,$ID,$User,$Prio,$IDPrio,$MV,$MU,$Estado,$PorCPU,$PorMem,$Tempo,$Comando);$nome_ordem="Memória Compartilhada Menor";
        break;
    case 13:
        array_multisort($MC,SORT_DESC,$ID,$User,$Prio,$IDPrio,$MV,$MU,$Estado,$PorCPU,$PorMem,$Tempo,$Comando);$nome_ordem="Memória Compartilhada Maior";
        break;
    case 14:
        array_multisort($Estado,$ID,$User,$Prio,$IDPrio,$MV,$MU,$MC,$PorCPU,$PorMem,$Tempo,$Comando);$nome_ordem="Estado Crescente";
        break;
    case 15:
        array_multisort($Estado,SORT_DESC,$ID,$User,$Prio,$IDPrio,$MV,$MU,$MC,$PorCPU,$PorMem,$Tempo,$Comando);$nome_ordem="Estado Decrescente";
        break;
    case 16:
        array_multisort($PorCPU,$ID,$User,$Prio,$IDPrio,$MV,$MU,$MC,$Estado,$PorMem,$Tempo,$Comando);$nome_ordem="Porcentagem CPU Menor";
        break;
    case 17:
        array_multisort($PorCPU,SORT_DESC,$ID,$User,$Prio,$IDPrio,$MV,$MU,$MC,$Estado,$PorMem,$Tempo,$Comando);$nome_ordem="Porcentagem CPU Maior";
        break;
    case 18:
        array_multisort($PorMem,$ID,$User,$Prio,$IDPrio,$MV,$MU,$MC,$Estado,$PorCPU,$Tempo,$Comando);$nome_ordem="Porcentagem Memória Menor";
        break;
    case 19:
        array_multisort($PorMem,SORT_DESC,$ID,$User,$Prio,$IDPrio,$MV,$MU,$MC,$Estado,$PorCPU,$Tempo,$Comando);$nome_ordem="Porcentagem Memória Maior";
        break;
    case 20:
        array_multisort($Tempo,$ID,$User,$Prio,$IDPrio,$MV,$MU,$MC,$Estado,$PorCPU,$PorMem,$Comando);$nome_ordem="Tempo Menor";
        break;
    case 21:
        array_multisort($Tempo,SORT_DESC,$ID,$User,$Prio,$IDPrio,$MV,$MU,$MC,$Estado,$PorCPU,$PorMem,$Comando);$nome_ordem="Tempo Maior";
        break;
    case 22:
        array_multisort($Comando,$ID,$User,$Prio,$IDPrio,$MV,$MU,$MC,$Estado,$PorCPU,$PorMem,$Tempo);$nome_ordem="Comando Crescente";
        break;
    case 23:
        array_multisort($Comando,SORT_DESC,$ID,$User,$Prio,$IDPrio,$MV,$MU,$MC,$Estado,$PorCPU,$PorMem,$Tempo);$nome_ordem="Comando Decrescente";
        break;
}




echo '
<tr><td height="40" bgcolor='.$Cor_Estilo.' colspan=12><center><b><font color=white>Informações sobre os Processos</td></tr>

<tr>
<td height="40" bgcolor='.$Cor_Estilo.' colspan=6><center><b><font color=white>Processos Ordenados por: '.$nome_ordem.'</td>
<form name="atualizar" method="POST" enctype="utf-8" accept-charset="UTF-8" action="top.php">
<td height="40" bgcolor='.$Cor_Estilo.' colspan=6><center><center><b><font color=white>
<center><font color=white>Atualizar a cada <input name=tempo value='.$tempo_atualizar.' type="text" style="width:40px;font-size: 13px"> <b>Segundos<br>
Selecione uma opção: 
<select name="id_Ordenar">
  <option value="">Selecione uma Opção</option>
  <option value="0" >ID Menor</option>
  <option value="1" >ID Maior</option>
  <option value="2" >Usuário Crescente</option>
  <option value="3" >Usuário Decrescente</option>
  <option value="4" >Prioridade Menor</option>
  <option value="5" >Prioridade Maior</option>
  <option value="6" >ID Prioridade Menor</option>
  <option value="7" >ID Prioridade Maior</option>
  <option value="8" >Memória Virtual Menor</option>
  <option value="9" >Memória Virtual Maior</option>
  <option value="10" >Memória Usada Menor</option>
  <option value="11" >Memória Usada Maior</option>
  <option value="12" >Memória Compartilhada Menor</option>
  <option value="13" >Memória Compartilhada Maior</option>
  <option value="14" >Estado Crescente</option>
  <option value="15" >Estado Decrescente</option>
  <option value="16" >Porcentagem CPU Menor</option>
  <option value="17" >Porcentagem CPU Maior</option>
  <option value="18" >Porcentagem Memória Menor</option>
  <option value="19" >Porcentagem Memória Maior</option>
  <option value="20" >Tempo Menor</option>
  <option value="21" >Tempo Maior</option>
  <option value="22" >Comando Crescente</option>
  <option value="23" >Comando Decrescente</option>
</select>
<input type="submit" value="Aplicar">
</td></form>
</tr>

<tr>
<td><center><font color=red id=textovertical><b>ID</td>
<td><center><font color=red id=textovertical><b>Usuário</td>
<td><center><font color=red id=textovertical><b>Prioridade</td>
<td><center><font color=red id=textovertical><b>ID Prioridade</td>
<td><center><font color=red id=textovertical><b>Memória Virtual</td>
<td><center><font color=red id=textovertical><b>Memória Usada</td>
<td><center><font color=red id=textovertical><b>Memória Compartilhada</td>
<td><center><font color=red id=textovertical><b>Estado</td>
<td><center><font color=red id=textovertical><b>Porcentagem CPU</td>
<td><center><font color=red id=textovertical><b>Porcentagem Memória</td>
<td><center><font color=red id=textovertical><b>Tempo</td>
<td><center><font color=red id=textovertical><b>Comando</td>
</tr>
';

for ($i=0; $i<$total_linhas_importadas; $i++){

echo '<tr>
<td><center><font color='.$Cor_Estilo.'><b>'.$ID[$i].'</td>
<td><center><font color='.$Cor_Estilo.'><b>'.$User[$i].'</td>
<td><center><font color='.$Cor_Estilo.'><b>'.$Prio[$i].'</td>
<td><center><font color='.$Cor_Estilo.'><b>'.$IDPrio[$i].'</td>
<td><center><font color='.$Cor_Estilo.'><b>';

// Chamada função memo2
memo2($MV[$i]);

echo ' MB</td>
<td><center><font color='.$Cor_Estilo.'><b>';

// Chamada função memo2
memo2($MU[$i]);

echo ' MB</td>
<td><center><font color='.$Cor_Estilo.'><b>';

// Chamada função memo2
memo2($MC[$i]);

echo ' MB</td>
<td><center><font color='.$Cor_Estilo.'><b>'.$Estado[$i].'</td>
<td><center><font color='.$Cor_Estilo.'><b>'.$PorCPU[$i].'</td>
<td><center><font color='.$Cor_Estilo.'><b>'.$PorMem[$i].'</td>
<td><center><font color='.$Cor_Estilo.'><b>'.$Tempo[$i].'</td>
<td><center><font color='.$Cor_Estilo.'><b>'.$Comando[$i].'</td>
</tr>';}


echo '</table>
</body>
</html>';
?>

Scripts recomendados

Monitoramento simples de servidores [versão 1.0]

Aula 01 PHP Orientado Objeto

WebUI: framework para criação de interfaces para Web

FormConstructor: Formulário Construído por Variável

Formularios Atomatic Esse vcs vao adorar


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts