quarta-feira, 27 de outubro de 2010

Monitorando uso do disco no windows com python

Precisei monitorar o uso do disco em um servidor onde não podia instalar nenhum software. Apesar do meu python-fu estar enferrujado utilizei o ActiveState Python 2.4.1 que já estava instalado para executar a tarefa.

Segue o script monitordiskspace.py



import os
import win32api
import datetime

CSV_FILE = 'diskspace.csv' # csv file to collect data
DISKS = ['C:\\', 'D:\\', 'E:\\', 'G:\\', 'H:\\', 'I:\\'] # disks you want to monitor

def writeheader(f):
f.write('Date')
for d in DISKS:
f.write(',' + d + ' Used')
f.write(',' + d + ' Free')
f.write('\n')

exist = os.path.exists(CSV_FILE)

csv = file(CSV_FILE, 'a')
try:

if not exist:
writeheader(csv)

today = datetime.date.today()

csv.write(str(today.day)+'/'+str(today.month)+'/'+str(today.year)) # date in day/month/year format

for d in DISKS:
info = win32api.GetDiskFreeSpaceEx(d)
csv.write(',' + str(info[1] - info[2]) ) # used space (total - free)
csv.write(',' + str(info[2]) ) # free space

csv.write('\n')

finally:
csv.close




Ao executar python monitordiskspace.py, o script cria um arquivo diskspace.csv e vai acumulando o número de bytes utilizados e livres dos discos que foram configurados na variável DISKS. Cada chamada gera uma linha com os dados daquele momento. É só agendar a execução no windows, e depois de um tempo tratar os dados com Excel ou BrOffice.

quinta-feira, 21 de outubro de 2010

Ruby 1.9.2 + RedHat + Oracle

Gosto bastante da linguagem Ruby para tarefas de administração de sistema.
Segue abaixo passos para compilar o ruby 1.9.2 no sistema operacional RedHat ou compatível
juntamente com a biblioteca de acesso ao banco de dados Oracle. A instalação será feita em Linux com Oracle 10g previamente instalado.

Instalando o Ruby

yum install zlib-devel openssl-devel readline-devel

cd /root
wget ftp://ftp.ruby-lang.org//pub/ruby/1.9/ruby-1.9.2-p0.tar.gz
tar -xvf ruby-1.9.2-p0.tar.gz
cd /ruby-1.9.2-p0
./configure
make
make install

O ruby será instalado em /usr/local/lib/ruby. Os executáveis importantes
como ruby, irb, ri, rake, gem etc.ficarão em /usr/local/bin

Instalando o OCI para que o Ruby acesse o Oracle

cd /root

wget http://rubyforge.org/frs/download.php/69454/ruby-oci8-2.0.4.tar.gz

tar -xvf ruby-oci8-2.0.4.tar.gz

cd ruby-oci8-2.0.4

Seto as variáveis do oracle como root mesmo para que o processo de compilação do OCI possa achar as bibliotecas do Oracle. Ajuste-as ao seu ambiente.
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
ORACLE_SID=orcl
LD_LIBRARY_PATH=$ORACLE_HOME/lib
export ORACLE_BASE ORACLE_HOME
export LD_LIBRARY_PATH


ruby setup.rb config
ruby setup.rb setup
ruby setup.rb install

Para ver se o acesso oci está funcionando digite os comandos abaixo no irb que é o shell interativo do ruby

su oracle -

Defina as variáveis novamente como fizemos acima quando estávamos logados como root. Não se esqueça do ORACLE_SID. Na verdade no passo acima ele não era importante, mas neste é pois é por ele que o oci vai identificar qual instância do bd nos conectaremos.

irb
require 'rubygems'
require 'oci8'

O teste consiste em :
  • Invocar o ruby interativo
  • Carregar a biblioteca rubygems que é o padrão de bibliotecas oficial do ruby. Isto é necessário pois a biblioteca oci8 segue este padrão. Neste ponto vai aparecer true
  • Carregar a oci8. Se tudo correu bem vai aparecer true
Para tirar a teima e cutucar o Oracle com o ruby você pode:
irb
> require 'rubygems'
=> true
> require 'oci8'
=> true
> conexao = OCI8.new(nil,nil,nil,:SYSDBA)
=> #
> cursor = conexao.exec('select sysdate from dual')
=> #
> registro = cursor.fetch
=> [2010-10-21 23:05:43 -0200]
> registro[0]
=> 2010-10-21 23:05:43 -0200

Conectamos ao Oracle via usuário de sistema operacional como SYSDBA.

Para mais informações a respeito :
Ruby: http://www.ruby-lang.org/pt/
OCI: http://ruby-oci8.rubyforge.org/en/
Quilos de bibliotecas ruby: http://rubyforge.org/