Python – Check last file date in a folder and notify if there isn’t a new one after n days
This week we had the need of monitoring a folder, specifically we need to know if after “n” days there isn’t any new file. For this reason I programmed a simple python script that sends us an email if this happen. Let’s do the example.
#! /usr/bin/python # -*- coding: utf-8 -*- import datetime import glob import os import smtplib import string now = datetime.datetime.today() #Get current date list_of_files = glob.glob('c:/tmp/*') # * means all if need specific format then *.csv latest_file = max(list_of_files, key=os.path.getctime) #get latest file created in folder newestFileCreationDate = datetime.datetime.utcfromtimestamp(os.path.getctime(latest_file)) # get creation datetime of last file dif = (now - newestFileCreationDate) #calculating days between actual date and last creation date logFile = "c:/tmp2/log.log" #defining a log file def checkFolder(dif, now, logFile): if dif > datetime.timedelta(days = 5): #Check if difference between today and last created file is greater than 5 days HOST = "192.16.0.1" #This must be your smtp server ip SUBJECT = "Alert! At least 5 days wthout a new file in folder xxxxxxx" TO = "yourmail@yourdomain.com" FROM = "noreply@yourdomain.com" text = "%s - The oldest file in folder it's %s old " %(now, dif) BODY = string.join(( "From: %s" % FROM, "To: %s" % TO, "Subject: %s" % SUBJECT , "", text ), "\r\n") server = smtplib.SMTP(HOST) server.sendmail(FROM, [TO], BODY) server.quit() file = open(logFile,"a") #Open log file in append mode file.write("%s - [WARNING] The oldest file in folder it's %s old \n" %(now, dif)) #Write a log file.close() else : # If difference between today and last creation file is less than 5 days file = open(logFile,"a") #Open log file in append mode file.write("%s - [OK] The oldest file in folder it's %s old \n" %(now, dif)) #write a log file.close() checkFolder(dif,now,logFile) #Call function and pass 3 arguments defined before
Thanks for all
Thanks for sharing.
Is there a potential difference in the timezones between your ‘now’ variable and ‘newestFileCreationDate’?
I’m not sure about your question, but in this case now is the time of host system, and I newestFileCreationDate reads timestamp of the last file in folder. I asume both are in the same host and of course in the same timezone