<br><div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div><div bgcolor="#ffffff"><div><font face="Arial" size="2">1- Preciso ter em uma tabela Oracle, para consultas
(PL/SQL) eventuais, as informações de uso de memória, uso de cpu e dos
5 processos que estão consumindo mais recursos (no momento da
coleta) de determinado servidor Unix;</font></div></div></div></blockquote><div><br>Perfeito, isso você deve saber melhor que eu :-) <br></div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div bgcolor="#ffffff"><div><font face="Arial" size="2">2- A coleta dessas informações deve acontecer em
períodos de tempo determinados (de 30 em 30 minutos, por exemplo);</font></div></div></div></blockquote><div><br>O cron resolve este problema.<br></div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div bgcolor="#ffffff"><div><font face="Arial" size="2">3- Antes de fazer a coleta das informações é
necessário saber se um processo X está rodando no servidor, caso não esteja, não
é necessário fazer a coleta.</font></div></div></div></blockquote><div><br>Proc::ProcessTable vem a calhar aqui.<br><br>use List::Util;<br>use Proc::ProcessTable;<br><br>my $p = Proc::ProcessTable->new;<br><br>if (first { $_->fname eq 'meuprocesso' } @{$p->table}) {
<br>...<br>}<br></div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div><div bgcolor="#ffffff"><div><font face="Arial" size="2">4- Preciso dispor as informações em colunas
(Coleta, Data_Hora, Cpu, Memória, Processo1, Processo2, Processo3, Processo4,
Processo5) da tabela Oracle. Por exemplo: </font></div>
<div>
<table style="width: 553pt; border-collapse: collapse;" border="0" cellpadding="0" cellspacing="0" width="738">
<colgroup>
<col style="width: 44pt;" width="59">
<col style="width: 76pt;" width="101">
<col style="width: 26pt;" width="34">
<col style="width: 52pt;" width="69">
<col style="width: 71pt;" span="5" width="95">
</colgroup><tbody>
<tr height="17">
<td style="border: medium none rgb(212, 208, 200); width: 44pt; background-color: transparent;" height="17" width="59"><strong><font face="Arial" size="2">COLETA</font></strong></td>
<td style="border: medium none rgb(212, 208, 200); width: 76pt; background-color: transparent;" width="101"><strong><font face="Arial" size="2">DATA_HORA</font></strong></td>
<td style="border: medium none rgb(212, 208, 200); width: 26pt; background-color: transparent;" width="34"><strong><font face="Arial" size="2">CPU</font></strong></td>
<td style="border: medium none rgb(212, 208, 200); width: 52pt; background-color: transparent;" width="69"><strong><font face="Arial" size="2">MEMÓRIA</font></strong></td>
<td style="border: medium none rgb(212, 208, 200); width: 71pt; background-color: transparent;" width="95"><strong><font face="Arial" size="2">PROCESSO_1</font></strong></td>
<td style="border: medium none rgb(212, 208, 200); width: 71pt; background-color: transparent;" width="95"><strong><font face="Arial" size="2">PROCESSO_2</font></strong></td>
<td style="border: medium none rgb(212, 208, 200); width: 71pt; background-color: transparent;" width="95"><strong><font face="Arial" size="2">PROCESSO_3</font></strong></td>
<td style="border: medium none rgb(212, 208, 200); width: 71pt; background-color: transparent;" width="95"><strong><font face="Arial" size="2">PROCESSO_4</font></strong></td>
<td style="border: medium none rgb(212, 208, 200); width: 71pt; background-color: transparent;" width="95"><strong><font face="Arial" size="2">PROCESSO_5</font></strong></td></tr>
<tr height="17">
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;" height="17"><font face="Arial" size="2">coleta1</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">15/8/2006
18:30</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">60%</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">70%</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">x</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">y</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">z</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">a</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">b</font></td></tr>
<tr height="17">
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;" height="17"><font face="Arial" size="2">coleta2</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">15/8/2006
19:00</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">50%</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">80%</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">y</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">a</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">z</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">x</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">b</font></td></tr>
<tr height="17">
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;" height="17"><font face="Arial" size="2">coleta3</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">15/8/2006 19:30</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">70%</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">85%</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">a</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">b</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">z</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">y</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">x</font></td></tr>
<tr height="17">
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;" height="17"><font face="Arial" size="2">coleta4</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">15/8/2006
20:00</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">30%</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">40%</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">b</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">y</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">x</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">a</font></td>
<td style="border: medium none rgb(212, 208, 200); background-color: transparent;"><font face="Arial" size="2">z</font></td></tr></tbody></table></div></div></div></blockquote><div><br>Isso você faz a inserção via DBI (OK, você pode ser mais tosco executando o binário do Oracle, porém tente o DBI antes). 'perldoc DBI' para esse caso.
<br></div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div><div bgcolor="#ffffff"><div><font face="Arial" size="2">5- A cada coleta devo importar os dados resultantes
da mesma, na tabela Oracle (a cada 30 minutos terei uma nova tupla na
tabela). </font></div>
<div><font face="Arial" size="2">coleta1 16/8/2006
20:30 50% 60%
s j f c
k</font></div></div></div></blockquote><div><br>CPU e Memória são o total sendo utilizado no seu servidor no momento ou o total utilizado por este cinco processos? Você tem o nome deste cinco processos já? <br><br># separamos todos os processos cujo nomes sejam aqueles que queremos
<br>my @processos = grep { $_->fname =~ m/^(?:a|b|c|d|e) } @{$p->table};<br><br># somamos a cpu utilizada<br>my $cpu_usada = 0;<br>$cpu_usada += $_->pctcpu for (@processos);<br><br>Caso você não saiba o nome dos processos, você pode verificar o PID do processo que os gera e localizar todos os processos cujo PPID (Parent PID) sejam igual àquele que você coletou.
<br></div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div><div bgcolor="#ffffff"><div><font face="Arial" size="2">O grande X da questão é: Como fazer essas coletas e
importar essas informações para a tabela do Oracle (o Oracle está instalado no
mesmo servidor onde será feita a coleta).</font></div></div></div></blockquote><div><br>No final das contas Proc::ProcessTable e DBI podem fazer exatamente o que você quer. Se você estiver impedido de utilizar DBI por qualquer motivo, você pode substituí-lo por um pipe para o seu comando 'sql':
<br><br><code><br># veja que eu não sei quais são os parâmetros para o seu programa, porém<br># você deve utilizá-lo como na linha de comando.<br>open my $sql, "| /usr/bin/sql -Uusuario -Psenha" or die $!;
<br></div><br>print $sql "INSERT INTO oracle (cpu, memoria, proc1, proc2, proc3, proc4, proc5) VALUES ($cpu_usada, $memoria_usada, "$proc1", "$proc2", "$proc3", "$proc4", "$proc5");\n";
<br><br>close $sql or warn $!;<br></code><br><br>Saiba que este modo de interação com o banco de dados é um 'quick and dirty hack', e não deve ser usado como primeiro recurso.<br><br></div>-- <br>Igor Sutton Lopes<br>
t: +55 51 9627.0779<br>e: <a href="mailto:igor.sutton@gmail.com">igor.sutton@gmail.com</a>