viernes, 31 de julio de 2009

Haciendo respaldos automaticos, parte II

Siguiendo con este post.

como no cacho mucho python , ese lo desarrolle en python 2.5, pero un compañero trato de ejecutarlo en 3.1 y no funciono, al perecen en el cambio de versiones cambio la forma de capturar las exepciones. aqui dejo el programa solucionado para la version 3.1. aun no menejo las excepciones solo muestro un texto "Error Controlado" :( .


import os
import shutil
import datetime

date = datetime.date.today()
dateDelete = date - datetime.timedelta(weeks=2)

sourcePath = r'F:\develop\zeus\trunk'
destRootPath = r'U:\respaldoAutomaticos'
destPath = destRootPath + "\\" + str(date) + " _respaldo"

print ("find old Directories")
try:
print (dateDelete)
for directory in os.listdir(destRootPath):
try:
array = directory.split(" ")[0].split("-")
dateDir = datetime.date(int(array[0]), int(array[1]), int(array[2]))
print (dateDir)
if dateDir < dateDelete:
print ("try drop Directory" + destRootPath + "\\" + directory)
shutil.rmtree(destRootPath + "\\" + directory)
print ('Directory "' + destRootPath + "\\" + directory + '" Deleted')
except Exception:
print ("Error Controlado")
except Exception:
print ("Error Controlado")

for root, dirs, files in os.walk(sourcePath):
dest = destPath + root.replace(sourcePath, '')
if not os.path.isdir(dest):
os.mkdir(dest)
print ('Directory created at: ' + dest)
for f in files:
oldLoc = root + '\\' + f
newLoc = dest + '\\' + f
if not os.path.isfile(newLoc):
try:
shutil.copy2(oldLoc, newLoc)
print ('File ' + f + ' copied.')
except IOError:
print ('file "' + f + '" already exists')






--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

viernes, 24 de julio de 2009

Enviando correo con c# y gmail

Estuve tratando de enviar correos desde c#, es bastante facil, con el framework 3.x. en los frameworks anteriores es muy parecido, solo cambian algunos metodos, por ejemplo el TO es un string donde separamos por coma los destinatarios, en el 3 es una lista. pero no hay mucha diferencias significativas entre un framework y otro.




public void sendMail{
var msg = new MailMessage();
msg.To.Add("vhspiceros@gmail.com");
msg.From = new MailAddress("vhspiceros@gmail.com", "victor hugo Saavedra", Encoding.UTF8);
msg.Subject = "Prueba de correo a GMail";
msg.SubjectEncoding = Encoding.UTF8;
msg.Body = "Cuerpo del mensaje";
msg.BodyEncoding = Encoding.UTF8;
msg.IsBodyHtml = false;
msg.Attachments.Add(new Attachment(@"c:\foo.txt"));
var client = new SmtpClient{
Credentials = new NetworkCredential("vhspiceros@gmail.com", "******"),
Port = 587,
Host = "smtp.gmail.com",
EnableSsl = true,
};
try{
client.Send(msg);
}
catch (SmtpException ex){
Console.WriteLine(ex.Message);
Console.ReadLine();
}
}

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

martes, 21 de julio de 2009

Gandalf??

Hace mucho que no posteo, he estado vuelto loco con la universidad, tratando de salvar todos los ramos, y recuperar los atrasados, para lograr salir este año de la universidad :).

Aquí dejo una foto, que encontré por ahi, esta genial, todavía me rió :D.



--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

viernes, 10 de julio de 2009

Haciendo respaldos automaticos

Buscando y buscando no entre ningun programa que pudiera generar respaldos automaticos en windows. en linux con la linea de comando seria bastante sencillo hacerlo.

Asi que me aburri de buscar y empeze a buscar y desarrollar en python, el resultado de esto fue bastante bueno. Aqui dejo el codigo


import os
import shutil
import datetime

date = datetime.date.today()
dateDelete = date - datetime.timedelta(weeks=4)

sourcePath = r'F:\develop\trunk'
destRootPath = r'U:\respaldoAutomaticos'
destPath = destRootPath + "\\" + str(date) + " _respaldo"

print ("find old Directories")
try:
for directory in os.listdir(destRootPath):
try:
array = directory.split(" ")[0].split("-")
dateDir = datetime.date(int(array[0]), int(array[1]), int(array[2]))
if dateDir < dateDelete:
print ("try drop Directory" + destRootPath + "\\" + directory)
shutil.rmtree(destRootPath + "\\" + directory)
print ('Directory "' + destRootPath + "\\" + directory + '" Deleted')
except Exception, e:
print e
except Exception, e:
print e

for root, dirs, files in os.walk(sourcePath):
dest = destPath + root.replace(sourcePath, '')

if not os.path.isdir(dest):
os.mkdir(dest)
print ('Directory created at: ' + dest)

for f in files:
oldLoc = root + '\\' + f
newLoc = dest + '\\' + f

if not os.path.isfile(newLoc):
try:
shutil.copy2(oldLoc, newLoc)
print ('File ' + f + ' copied.')
except IOError:
print ('file "' + f + '" already exists')

y para automatizar estos respaldos simplemento lo agregamos a las tareas programadas de windows y listo.

Como funciona: Toma una carpeta de origen y la deja en una de destino, en mi caso "U:\respaldoAutomaticos" es una unidad de red :D.

En el destino crea una carpeta con la fecha mas un texto, esto nos sirve para eliminar los respaldos antiguos.

cada vez que se ejecute el programa en dias distinto, genera un respaldo completo en una nueva carpeta.

Ademas borra los respaldos anteriores a 4 semanas. Asi no gastamos mucho espacio en respaldo.

Por Mejorar: Estoy pensando en implementar una variación, que deje en el destino solo un único respaldo, copiando solo los archivos modificados y nuevos, este vendría siendo otro programa, por que personalmente a mi me interesa tener varias respaldos.

En fin tenemos nuestro programa de respaldo automático o backup automáticos que funciona en windows.

por ultimo el tema del performance, anda super bien, por eso no comprimí el archivo, para que mientras respalde podemos seguir usando nuestra estación de trabajo sin problema.




--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com