You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by de...@apache.org on 2016/11/11 15:19:41 UTC
svn commit: r1769299 -
/uima/uima-ducc/trunk/src/main/admin/tools/ducc_watcher
Author: degenaro
Date: Fri Nov 11 15:19:41 2016
New Revision: 1769299
URL: http://svn.apache.org/viewvc?rev=1769299&view=rev
Log:
UIMA-5053 DUCC ducc_watcher optional admin script to determine status and send notifications
- add subject line to ducc_watcher generated e-mail
Modified:
uima/uima-ducc/trunk/src/main/admin/tools/ducc_watcher
Modified: uima/uima-ducc/trunk/src/main/admin/tools/ducc_watcher
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/src/main/admin/tools/ducc_watcher?rev=1769299&r1=1769298&r2=1769299&view=diff
==============================================================================
--- uima/uima-ducc/trunk/src/main/admin/tools/ducc_watcher (original)
+++ uima/uima-ducc/trunk/src/main/admin/tools/ducc_watcher Fri Nov 11 15:19:41 2016
@@ -35,6 +35,7 @@ import logging.handlers
import os
import smtplib
import socket
+import string
import sys
import time
import urllib
@@ -263,7 +264,8 @@ def setup_state_file(options):
def validate_target(options):
global port
global target
- global ducc_url
+ global ducc_url_base
+ global ducc_url_servlet
protocol = 'http://'
servlet = '/ducc-servlet/classic-system-daemons-data'
if(options.target == None):
@@ -274,8 +276,9 @@ def validate_target(options):
target = target+':'+str(port)
if(target.startswith(protocol)):
target = target.replace(protocol,'',1)
- ducc_url = protocol+target+servlet
- debug('target: '+ducc_url)
+ ducc_url_base = protocol+target
+ ducc_url_servlet = protocol+target+servlet
+ debug('target: '+ducc_url_base)
# list of e-mail recipients, if any
def validate_email_list(options):
@@ -395,7 +398,7 @@ def update_state_previous():
def fetch_state_current():
global flag_agents
global state_dict_current
- global ducc_url
+ global ducc_url_servlet
global webserver
state_dict_current = {}
try:
@@ -403,7 +406,7 @@ def fetch_state_current():
opener = urllib2.build_opener()
if(flag_agents):
opener.addheaders.append(('Cookie', 'DUCCagents=show'))
- response = opener.open(ducc_url)
+ response = opener.open(ducc_url_servlet)
data = response.read()
parser = DuccHtmlParser()
parser.feed(data)
@@ -423,7 +426,7 @@ def fetch_state_current():
daemon = webserver
status = 'unreachable'
state_dict_current[daemon] = status
- error('unable to fetch data from '+ducc_url)
+ error('unable to fetch data from '+ducc_url_servlet)
exception(e)
debug('state_current: '+str(state_dict_current))
@@ -449,31 +452,32 @@ def determine_state_changes():
info(key+' '+'from'+' '+state_previous+' '+'to'+' '+state_current)
# send email
-def email(text):
- global name
- global target
- global ducc_url
- global mail_host
- global email_list
- receivers = email_list
+def email(HOST, SUBJECT, TO, FROM, TEXT):
try:
- if(text == None):
- debug('no message?')
- else:
- sender = get_user()+'@'+get_host()
- message = '['+sender+']'+' '+name+' '+'of'+' '+target+' '+'state change:'+' '+text
- if(receivers == None):
- info('nobody to send: '+text)
- else:
- smtpObj = smtplib.SMTP(mail_host)
- smtpObj.sendmail(sender,receivers,message)
- warn('sent: '+str(receivers)+' '+text)
+ 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()
+ info('sent: ['+TO+'] '+TEXT)
except Exception,e:
- error('not sent: '+str(receivers)+' '+text)
+ error('not sent: ['+TO+'] '+TEXT)
exception(e)
- return
-
+# send email
+def email_to_list(HOST, SUBJECT, TO_LIST, FROM, TEXT):
+ if(TO_LIST == None):
+ info('e-mail list empty')
+ error('not sent: ['+TO+'] '+TEXT)
+ else:
+ for TO in TO_LIST:
+ email(HOST, SUBJECT, TO, FROM, TEXT)
+
# check if all head node daemons are reported
def is_all_head_daemons():
global state_dict_current
@@ -515,20 +519,43 @@ def is_reportable():
retVal = True
return retVal
+# e-mail message subject
+def get_subject(status):
+ global ducc_url_base
+ subject = 'DUCC'+' '+'status='+status+' '+ducc_url_base
+ return subject
+
+# e-mail message body
+def get_body(text):
+ global name
+ global ducc_url_base
+ sender = get_user()+'@'+get_host()
+ body = '['+sender+']'+' '+name+' '+'reports'+' '+ducc_url_base+' '+'state change:'+' '+text
+ return body
+
# e-mail state changes, if any
def email_state_changes():
global state_dict_current
global state_dict_previous
global state_dict_not_up
global state_changes_count
+ global mail_host
+ global email_list
if(is_reportable()):
+ sum_prv = summarize(state_dict_previous)
+ sum_cur = summarize(state_dict_current)
+ status = sum_cur
+ subject = get_subject(status)
if(state_changes_count > 0):
info('state_changes(count): '+str(state_changes_count))
- email(str(state_dict_not_up))
+ HOST = mail_host
+ SUBJECT = subject
+ TO_LIST = email_list
+ FROM = get_user()+'@'+get_host()
+ TEXT = get_body(str(state_dict_not_up))
+ email_to_list(HOST, SUBJECT, TO_LIST, FROM, TEXT)
else:
debug('state_changes(count): '+str(state_changes_count))
- sum_cur = summarize(state_dict_current)
- sum_prv = summarize(state_dict_previous)
if(sum_cur == sum_prv):
debug('state_current(summary): '+str(sum_cur))
debug('state_previous(summary): '+str(sum_prv))
@@ -536,20 +563,29 @@ def email_state_changes():
info('state_current(summary): '+str(sum_cur))
info('state_previous(summary): '+str(sum_prv))
if(sum_cur == 'up'):
- email('All daemons up')
+ HOST = mail_host
+ SUBJECT = subject
+ TO_LIST = email_list
+ FROM = get_user()+'@'+get_host()
+ TEXT = get_body('All daemons up')
+ email_to_list(HOST, SUBJECT, TO_LIST, FROM, TEXT)
-# check for newly down DUCC daemons
+# check for DUCC daemon status changes
def main(argv):
global logger
- logger = logging.getLogger('logger')
- handler = logging.StreamHandler(sys.stdout)
- logger.addHandler(handler)
- parse_cmdline()
- read_state_previous()
- fetch_state_current()
- determine_state_changes()
- email_state_changes()
- update_state_previous()
+ try:
+ logger = logging.getLogger('logger')
+ handler = logging.StreamHandler(sys.stdout)
+ logger.addHandler(handler)
+ parse_cmdline()
+ read_state_previous()
+ fetch_state_current()
+ determine_state_changes()
+ email_state_changes()
+ update_state_previous()
+ except Exception,e:
+ error('exception in main')
+ exception(e)
if __name__ == '__main__':
main(sys.argv[1:])