You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by gi...@apache.org on 2013/12/07 09:14:59 UTC

git commit: updated refs/heads/4.3 to 8f9d801

Updated Branches:
  refs/heads/4.3 c305e4ec5 -> 8f9d801f5


Added files missed in cafd820e3ee5e0263c1a38a6db5bc132416fb22d


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/8f9d801f
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/8f9d801f
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/8f9d801f

Branch: refs/heads/4.3
Commit: 8f9d801f52b8366ffb20f57db85d4ddf2828c7f8
Parents: c305e4e
Author: Girish Shilamkar <gs...@ddn.com>
Authored: Sat Dec 7 13:43:18 2013 +0530
Committer: Girish Shilamkar <gs...@ddn.com>
Committed: Sat Dec 7 13:44:48 2013 +0530

----------------------------------------------------------------------
 tools/marvin/marvin/marvinInit.py | 159 +++++++++++++++++++++++++++++++++
 tools/marvin/marvin/marvinLog.py  |  72 +++++++++++++++
 2 files changed, 231 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8f9d801f/tools/marvin/marvin/marvinInit.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/marvinInit.py b/tools/marvin/marvin/marvinInit.py
new file mode 100644
index 0000000..d822a2b
--- /dev/null
+++ b/tools/marvin/marvin/marvinInit.py
@@ -0,0 +1,159 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+'''
+@Desc: Initializes the marvin and does required prerequisites
+for starting it.
+1. Parses the configuration file passed to marvin and creates a
+   parsed config
+   2. Initializes the logging required for marvin.All logs are
+   now made available under a single timestamped folder.
+   3. Deploys the Data Center based upon input
+
+'''
+
+from marvin import configGenerator
+from marvin import cloudstackException
+from marvin.marvinLog import MarvinLog
+from marvin.deployDataCenter import deployDataCenters
+from marvin.codes import(
+    YES,
+    NO,
+    SUCCESS,
+    FAILED
+    )
+import sys
+import time
+import os
+import logging
+
+
+class MarvinInit:
+    def __init__(self, config_file, load_flag):
+        self.__configFile = config_file
+        self.__loadFlag = load_flag
+        self.__parsedConfig = None
+        self.__logFolderPath = None
+        self.__tcRunLogger = None
+        self.__testClient = None
+        self.__tcRunDebugFile = None
+
+    def __parseConfig(self):
+        '''
+        @Desc : Parses the configuration file passed and assigns
+        the parsed configuration
+        '''
+        try:
+            self.__parsedConfig = configGenerator.\
+                getSetupConfig(self.__configFile)
+            return SUCCESS
+        except Exception, e:
+            print "\n Exception Occurred Under __parseConfig : %s" % str(e)
+            return None
+
+    def getParsedConfig(self):
+        return self.__parsedConfig
+
+    def getLogFolderPath(self):
+        return self.__logFolderPath
+
+    def getTestClient(self):
+        return self.__testClient
+
+    def getLogger(self):
+        return self.__tcRunLogger
+
+    def getDebugFile(self):
+        return self.__tcRunDebugFile
+
+    def init(self):
+        '''
+        @Desc :Initializes the marvin by
+               1. Parsing the configuration and creating a parsed config
+                  structure
+               2. Creates a timestamped log folder and provides all logs
+                  to be dumped there
+               3. Creates the DataCenter based upon configuration provided
+        '''
+        try:
+            if ((self.__parseConfig() is not None) and
+               (self.__initLogging() is not None) and
+               (self.__deployDC() is not None)):
+                return SUCCESS
+            else:
+                return FAILED
+        except Exception, e:
+            print "\n Exception Occurred Under init %s" % str(e)
+            return FAILED
+
+    def __initLogging(self):
+        try:
+            '''
+            @Desc : 1. Initializes the logging for marvin and so provides
+                    various log features for automation run.
+                    2. Initializes all logs to be available under
+                    given Folder Path,where all test run logs
+                    are available for a given run.
+                    3. All logging like exception log,results, run info etc
+                     for a given test run are available under a given
+                     timestamped folder
+            '''
+            log_config = self.__parsedConfig.logger
+            temp_path = "".join(str(time.time()).split("."))
+            if log_config is not None:
+                if log_config.LogFolderPath is not None:
+                    self.logFolderPath = log_config.LogFolderPath + temp_path
+                else:
+                    self.logFolderPath = temp_path
+            else:
+                self.logFolderPath = temp_path
+            os.makedirs(self.logFolderPath)
+            '''
+            Log File Paths
+            '''
+            tc_failed_exceptionlog = self.logFolderPath + "/failed_" \
+                                                          "plus_" \
+                                                          "exceptions.txt"
+            tc_run_log = self.logFolderPath + "/runinfo.txt"
+            self.__tcRunDebugFile = open(self.logFolderPath +
+                                         "/tcresults.txt", "w")
+
+            log_obj = MarvinLog("CSLog")
+            self.__tcRunLogger = log_obj.setLogHandler(tc_run_log)
+            log_obj.setLogHandler(tc_failed_exceptionlog,
+                                  log_level=logging.FATAL)
+            return SUCCESS
+        except Exception, e:
+            print "\n Exception Occurred Under __initLogging :%s" % str(e)
+            return None
+
+    def __deployDC(self):
+        try:
+            '''
+            Deploy the DataCenter and retrieves test client.
+            '''
+            deploy_obj = deployDataCenters(self.__parsedConfig,
+                                           self.__tcRunLogger)
+            if self.__loadFlag:
+                deploy_obj.loadCfg()
+            else:
+                deploy_obj.deploy()
+
+            self.__testClient = deploy_obj.testClient
+            return SUCCESS
+        except Exception, e:
+            print "\n Exception Occurred Under __deployDC : %s" % str(e)
+            return None

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8f9d801f/tools/marvin/marvin/marvinLog.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/marvinLog.py b/tools/marvin/marvin/marvinLog.py
new file mode 100644
index 0000000..ca4d600
--- /dev/null
+++ b/tools/marvin/marvin/marvinLog.py
@@ -0,0 +1,72 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+'''
+@Desc: Module for providing logging facilities to marvin
+'''
+import logging
+import sys
+from marvin.codes import (NO,
+                          YES
+                          )
+
+
+class MarvinLog:
+    '''
+    @Desc  : provides interface for logging to marvin
+    @Input : logger_name : name for logger
+    '''
+    logFormat = "%(asctime)s - %(levelname)s - %(name)s - %(message)s"
+    _instance = None
+
+    def __new__(cls, logger_name):
+        if not cls._instance:
+            cls._instance = super(MarvinLog, cls).__new__(cls, logger_name)
+            return cls._instance
+
+    def __init__(self, logger_name):
+        self.loggerName = logger_name
+        self.logger = None
+        self.__setLogger()
+
+    def __setLogger(self):
+        self.logger = logging.getLogger(self.loggerName)
+        self.logger.setLevel(logging.DEBUG)
+
+    def setLogHandler(self, log_file_path, log_format=None,
+                      log_level=logging.DEBUG):
+        '''
+        @Desc:
+        @Input: log_file_path: Log File Path as where to store the logs
+               log_format : Format of log messages to be dumped
+               log_level : Determines the level of logging for this logger
+        '''
+        try:
+            if log_file_path is not None:
+                stream = logging.FileHandler(log_file_path)
+            else:
+                stream = logging.StreamHandler(stream=sys.stdout)
+
+            if log_format is None:
+                stream.setFormatter(log_format)
+            else:
+                stream.setFormatter(cls.logFormat)
+            stream.setLevel(log_level)
+            self.logger.addHandler(stream)
+        except Exception, e:
+            print "\n Exception Occurred Under setLogHandler %s" % str(e)
+        finally:
+            return self.logger