bldsystemtools/commonbldutils/GenResult/send_xml_to_diamonds.py
changeset 0 83f4b4db085c
child 1 d4b442d23379
--- /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()