Tuesday, August 25, 2015

Is My Intranet Web Server Down?

O.K.
Without further delay -  here is a python script that will e-mail you in case a Http server you are monitoring is down (based on failed ping or failed http connection) :

http_ping.py

-------------------------------------------------------------------------------------------------------------------
import smtplib
from email.mime.text import MIMEText
import optparse, subprocess, os, sys
import re, time, datetime
from optparse import OptionParser
from os import stat
from os.path import abspath
from stat import ST_SIZE
import httplib
import sys

SLEEP_TIME = 60
email_from = ""
email_to = ""
smtp_server=""
ssl=False
smtp_user=None
smtp_password=None

def runProcess(exe):
    FNULL = open(os.devnull, 'w')
    p = subprocess.call(exe, stdout=FNULL, stderr=FNULL)

    if p == 0:
        return True
    else:
        return False

def sendAlert(state, host, debug,what):
    subject = ""
    statetext = ""

    if state == 0:
        statetext = "up"
    elif state == 1:
        statetext = "down"

    subject = "Host %s is %s" % (host, statetext)

    ts = time.time()
    f_ts = str(datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S'))

    text = "Host " + host + " went " + statetext + " at " + f_ts + " based on " + what

    msg = MIMEText(text)
    msg[ 'From' ] = email_from
    msg[ 'To' ] = ", " + email_to
    msg[ 'Subject' ] = subject
    try:
       
        #if ssl/tls smtp
        if ssl:
            s = smtplib.SMTP_SSL(smtp_server)
            if debug: print "SSL SERVER:" +  smtp_server
        #if not encrypted
        else:
            s = smtplib.SMTP(smtp_server)
            if debug: print "PLAIN SMTP SERVER:" +  smtp_server
        if debug:
            s.set_debuglevel(True)
        #if authentication required
        if smtp_user!=None and smtp_password!=None:
            if debug: print "user and pass are set"
            s.login(smtp_user,smtp_password)
        s.sendmail(email_from, [email_to], msg.as_string())
        s.quit()
    except Exception as e:
        if debug: print "error sending email:"
        #if debug: print msg
        if debug: print e

def main():
    usage = "usage: %prog [options] arg"
    parser = OptionParser(usage)
    parser.add_option('-d', '--debug', action='store_true', dest='debug', default=False, help='enable debugging')
    parser.add_option('-e', '--encrypted', action='store_true', dest='ssl', default=False, help='ssl/tls smtp')
    parser.add_option('-p', '--ping', action='store', dest='host', default=None, help='specify host to ping')
    parser.add_option('-s', '--smtp', action='store', dest='smtp', default=None, help='Specify Mail Server (SMTP)')
    parser.add_option('-t', '--to', action='store', dest='mail_to', default=None, help='Specify Mail Receiver addresses')
   
   
    parser.add_option('-f', '--from', action='store', dest='mail_from', default='Http Ping', help='Specify Mail Sender address')
   
    parser.add_option('-u', '--smtp_user', action='store', dest='smtp_user', default=None, help='SMTP user (optional)')
    parser.add_option('-w', '--smtp_password', action='store', dest='smtp_password', default=None, help='SMTP password (optional)')
    parser.add_option('-z', '--sleepTime', action='store', dest='sleep', default=60, help='sleep time(optional)')
   

    if len(sys.argv) == 1:
        parser.print_help()
        sys.exit( 1 )
    (options, args) = parser.parse_args()

    if options.host == None:
        parser.print_help()
        sys.exit( 1 )

    if options.smtp == None:
        parser.print_help()
        sys.exit( 1 )

    if options.mail_to == None:
        parser.print_help()
        sys.exit( 1 )
    global  SLEEP_TIME,email_from,email_to,ssl,smtp_server
    SLEEP_TIME = int(options.sleep)
    email_from = options.mail_from
    email_to   = options.mail_to
    smtp_server=options.smtp
    ssl=options.ssl
   
   
    try:
        upflag = True
        while(True):
            if options.debug: print "pinging host: " + str(options.host)
            pingresult = runProcess(["ping", options.host])
            http_ping_result = False
            try:
                conn = httplib.HTTPConnection(options.host)
                conn.request('HEAD', '/')
                url = 'http://{0}/{1}'.format(options.host,"")
                if options.debug: print '    Trying: {0}'.format(url)
                response = conn.getresponse()
                if options.debug: print '    Got: ', response.status, response.reason
                conn.close()
                if response.status == 200:
                    if options.debug: print ("Got Response 200 " +" everything is ok")
                    http_ping_result = True   
            except:
                e = sys.exc_info()[0]
                print ' Problem in connection  ' + str(e)   
                http_ping_result = False
           
            if pingresult == False or http_ping_result==False:
                what=""
                if pingresult == False: what =what + "ping "           
                if http_ping_result == False: what =what + " http"           
                if options.debug: print "ping failed" + str(pingresult)
                if upflag == True:
                    if options.debug: print "send down email"
                    sendAlert(1,options.host,options.debug,what)
                   
                upflag = False
            else:
                if options.debug: print "ping was successful..."
                if upflag == False:
                    if options.debug: print "send up email"
                    sendAlert(0,options.host,options.debug,what)
                upflag = True
           
            if options.debug: print "sleeping for "+str(SLEEP_TIME) +"s"
            time.sleep(SLEEP_TIME)
    except (KeyboardInterrupt, SystemExit):
        #raise
        print "Exiting"
    except Exception as e:
        exc_type, exc_obj, exc_tb = sys.exc_info()
        fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
        print(exc_type, fname, exc_tb.tb_lineno)
        exit ( 1 )
    exit( 1 )

if __name__ == '__main__':
    main()
---------------------------------------------------------------------------------------------------------------------
usage example: 

http_ping.py -d -p my.Server.com -s my.mail.server.com -t my.mail@my.mail.com -z 30

Sunday, July 26, 2015

How to fix windows 7 weather gadget

If you were using weather gadget on windows 7, then probably (to your disappointment) you discovered one day that after some security updates - it stopped working. What a loss! :(

Luckily, it turns out that fixing the problem is not so hard after all.
All you need to do is to change modification date of a config.xml file used by the gadget.

So open your notepad as administrator (right click->run as admin) and navigate to the following path:

C:\Users\[UserName]\AppData\Local\Microsoft\Windows Live\Services\Cache 

and open  config.xml file located there.

*make sure that you replace [UserName] with the user name you are using on your machine.

Now to change the modification date you just tamper a little with your pc's clock and set it say to the year 2019, after that you 'modify' the config.xml (just type space character somewhere and then delete it) and save the changes.
That's it - your file modification date is 2019 way ahead in the future ... and the widget is working again!!

Don't forget to set your clock to correct time again.

Monday, February 2, 2015

 How to Stop Chrome Running in the Background

Well it has been a while since my last post. This time I just want to tell you how to get rid off that Chrome process which is always running in the background eating up your PC's resources. Actually it is quite simple. 

1. Open your chrome browser 

2. Select Settings 

3. Click on the link titled ‘Show advanced settings

4. Under the section headed ‘System‘ untick the box next to “Continue running background apps  when Google Chrome is closed”