diff -r 000000000000 -r 83f4b4db085c bldsystemtools/commonbldutils/GenResult/send_xml_to_diamonds.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bldsystemtools/commonbldutils/GenResult/send_xml_to_diamonds.py Tue Feb 02 01:39:43 2010 +0200 @@ -0,0 +1,178 @@ +# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# Script to send xml data to diamonds +# +# +command_help = """ +Send XML data from file to Diamonds. v.1.23 +Use: + send_xml_to_diamonds.py options + + Mandatory options: + -s Server address + -u Url + -f path of XML file + + Optional options: + -m Send only mail, without POST connection. Recommend only, + when direct POST connection is not available. + -o mail server. Not needed inside Nokia intranet. + -h help + + Examples: + Sending only by mail, without POST. (not recommended) + send_xml_to_diamonds.py -s diamonds.nmp.nokia.com -u /diamonds/builds/ -f c:\\build.xml -m buildtoolsautomation@nokia.com + + Sending a new build to release instance of Diamonds + send_xml_to_diamonds.py -s diamonds.nmp.nokia.com -u /diamonds/builds/ -f c:\\build.xml + + Updating test results to existing build + send_xml_to_diamonds.py -s diamonds.nmp.nokia.com -u /diamonds/builds/123/ -f c:\\test.xml + + Sending data for Relative Change in SW Asset metrics + send_xml_to_diamonds.py -s diamonds.nmp.nokia.com -u /diamonds/metrics/ -f c:\\relative.xml + + Sending data for Function Coverage + send_xml_to_diamonds.py -s diamonds.nmp.nokia.com -u /diamonds/tests/coverage/ -f c:\\coverage.xml + + Note: If you want to send XML to development version of Diamonds in testing purposes, use + address: trdeli02.nmp.nokia.com:9001 in the server address: + send_xml_to_diamonds.py -s trdeli02.nmp.nokia.com:9001 -u /diamonds/builds/ -f c:\\build.xml +""" + +from httplib import * +import os, sys, time, re + + +def send_email(subject, body, sender, receivers, encoding, mail_server): + """ + Create an email message as MIMEText instance. + """ + from email.Header import Header + from email.MIMEText import MIMEText + from email.Utils import parseaddr, formataddr + import smtplib + + msg = MIMEText(body, "plain", encoding) + msg["To"] = Header(u", ".join(receivers), encoding) + msg["Subject"] = Header(subject, encoding) + + smtp = smtplib.SMTP() + smtp.connect(mail_server) + smtp.sendmail(sender, receivers, msg.as_string()) + smtp.close() + +def get_username(): + platform = sys.platform + if platform == "win32": + return os.getenv("USERNAME") + else: + return os.getlogin() + +def get_mail_subject(sender, server, url): + return "[DIAMONDS_DATA] %s>>>%s>>>%s" % (sender, server, url) + +def get_response_message(response): + return "Response status:%s \ + \nResponse reason:%s\n" \ + % (response.status, response.reason) + +def get_process_time(total_time): + if total_time<=60: + return "%s seconds" % round(total_time, 1) + else: + return "%s minutes and %s seconds" % (int(total_time/60), round((total_time%60), 1)) + +def main(): + start_time = time.time() + server_valid = False + url_valid = False + sfile_valid = False + mail_address = None + mail_server_address = "smtp.nokia.com" + _ = sys.argv.pop(0) + + while sys.argv: + parameter = sys.argv.pop(0) + if re.search('^-', parameter): + if parameter == '-s': + server = sys.argv.pop(0) + server_valid = True + elif parameter == '-u': + url = sys.argv.pop(0) + url_valid = True + elif parameter == '-f': + source_file = sys.argv.pop(0) + sfile_valid = True + try: + xml = open(source_file).read() + except: + sys.exit("Can not open the file %s" % source_file) + elif parameter == '-m': + mail_address = sys.argv.pop(0) + elif parameter == '-o': + mail_server_address = sys.argv.pop(0) + elif parameter == '-h': + sys.exit("HELP:\n %s" % (command_help)) + else: + sys.exit("Incorrect parameter! %s" % (parameter) + command_help ) + else: + sys.exit("Incorrect parameter! %s" % (parameter) + command_help) + if not server_valid or not url_valid or not sfile_valid: + sys.exit("Too few parameters: Use -h for help") + + diamonds_mail_box = "diamonds@diamonds.nmp.nokia.com" + import_failed_message = "XML was not sent successfully to Diamonds via REST interface!\n" + import_succeed_message = "XML was sent successfully to Diamonds via REST interface.\n" + mail_sent_message = "XML was sent to Diamonds by mail. Scheduled script will try to import it to Diamonds. If you can not see data soon in Diamonds, please contact to Diamonds developers.\n" + + if not mail_address: + connection = HTTPConnection(server) + + try: + connection.request("POST", url, xml) + except: + print "Can not connect to the server %s\n" % server + sender = get_username() + #send_email(get_mail_subject(sender, server, url), xml, sender, [diamonds_mail_box], "latin-1", mail_server_address) + sys.exit(mail_sent_message) + + response = connection.getresponse() + + # More info about httplib + # http://docs.python.org/lib/module-httplib.html + if response.status == 200: + print import_succeed_message + print get_response_message(response) + print "Server response:%s\n" % response.read() + else: + print import_failed_message + print get_response_message(response) + sender = get_username() + #send_email(get_mail_subject(sender, server, url), xml, sender, [diamonds_mail_box], "latin-1", mail_server_address) + print mail_sent_message + + connection.close() + + else: + print 'Sending only mail' + sender = get_username() + #send_email(get_mail_subject(sender, server, url), xml, sender, [mail_address], "latin-1", mail_server_address) + + print "------------------------" + print "Processed in %s" % get_process_time(time.time()-start_time) + print "------------------------" + +if __name__ == "__main__": + main()