From 2f2e472cdbe4cbea48af3e148d63b9f2caab4faf Mon Sep 17 00:00:00 2001
From: Sinisa Veseli <sveseli@aps.anl.gov>
Date: Fri, 27 May 2016 20:48:55 +0000
Subject: [PATCH] corrected daq issues with sftp

---
 src/python/dm/__init__.py                              |  2 +-
 .../processing/plugins/gridftpFileTransferPlugin.py    | 10 ++++++----
 .../processing/plugins/mongoDbFileCatalogPlugin.py     |  8 ++++++++
 src/python/dm/common/utility/sftpUtility.py            | 10 +++++++++-
 4 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/src/python/dm/__init__.py b/src/python/dm/__init__.py
index 16317eac..f024d30e 100644
--- a/src/python/dm/__init__.py
+++ b/src/python/dm/__init__.py
@@ -1 +1 @@
-__version__ = "0.11 (2016.04.28)"
+__version__ = "0.13 (2016.05.27)"
diff --git a/src/python/dm/common/processing/plugins/gridftpFileTransferPlugin.py b/src/python/dm/common/processing/plugins/gridftpFileTransferPlugin.py
index 9b5aa797..7d3981be 100755
--- a/src/python/dm/common/processing/plugins/gridftpFileTransferPlugin.py
+++ b/src/python/dm/common/processing/plugins/gridftpFileTransferPlugin.py
@@ -100,12 +100,14 @@ class GridftpFileTransferPlugin(FileTransferPlugin):
         srcUrl = self.getSrcUrl(filePath, dataDirectory)
 
         # Calculate checksum
-        (scheme, host, port, dirPath) = FtpUtility.parseFtpUrl(dataDirectory, defaultPort=self.DEFAULT_PORT)
-        ftpUtility = FtpUtility(host, port)
+        statUtility = self.statUtility
+        if not statUtility:
+            (scheme, host, port, dirPath) = FtpUtility.parseFtpUrl(dataDirectory, defaultPort=self.DEFAULT_PORT)
+            statUtility = FtpUtility(host, port)
         if not fileInfo.get('fileSize'):
-            ftpUtility.statFile(filePath, fileInfo)
+            statUtility.statFile(filePath, fileInfo)
         if self.localMd5Sum:
-            ftpUtility.getMd5Sum(filePath, fileInfo)
+            statUtility.getMd5Sum(filePath, fileInfo)
 
         # Transfer file
         self.logger.debug('Starting transfer: %s -> %s' % (srcUrl, destUrl))
diff --git a/src/python/dm/common/processing/plugins/mongoDbFileCatalogPlugin.py b/src/python/dm/common/processing/plugins/mongoDbFileCatalogPlugin.py
index 92afba0b..f6b61069 100755
--- a/src/python/dm/common/processing/plugins/mongoDbFileCatalogPlugin.py
+++ b/src/python/dm/common/processing/plugins/mongoDbFileCatalogPlugin.py
@@ -20,6 +20,13 @@ class MongoDbFileCatalogPlugin(FileProcessor):
         self.md5Sum = md5Sum
         self.logger = LoggingManager.getInstance().getLogger(self.__class__.__name__)
 
+    def processStat(self, filePath, fileInfo={}):
+        if not self.statUtility:
+            return fileInfo
+        if not fileInfo.has_key('fileSize'):
+            self.statUtility.statFile(filePath)
+        return fileInfo
+
     def processMd5Sum(self, filePath, fileInfo={}):
         if not self.md5Sum or not self.statUtility:
             return fileInfo
@@ -93,6 +100,7 @@ class MongoDbFileCatalogPlugin(FileProcessor):
             if fileInfo2.has_key(key):
                 del fileInfo2[key]
 
+        self.processStat(filePath, fileInfo2)
         self.processHdf5Metadata(filePath, fileInfo2)
         self.processMd5Sum(filePath, fileInfo2)
         self.logger.debug('File "%s" catalog entry: %s' % (experimentFilePath, str(fileInfo2)))
diff --git a/src/python/dm/common/utility/sftpUtility.py b/src/python/dm/common/utility/sftpUtility.py
index 64d9881c..2b4ef868 100755
--- a/src/python/dm/common/utility/sftpUtility.py
+++ b/src/python/dm/common/utility/sftpUtility.py
@@ -69,7 +69,6 @@ class SftpUtility:
                 filePath = '%s/%s' % (replacementDirPath, fileName)
                 fileInfo = {'fileSize' : attr.st_size, 
                     'fileModificationTime' : attr.st_mtime }
-                fileInfo['fileModificationTimestamp'] = TimeUtility.formatLocalTimestamp(attr.st_mtime)
                 fileDict[filePath] = fileInfo
         return fileDict
 
@@ -80,6 +79,14 @@ class SftpUtility:
         fileInfo['md5Sum'] = md5Sum
         return md5Sum
 
+    def statFile(self, filePath, fileInfo={}):
+        if not self.sftpClient:
+            self.sftpClient = self.getSftpClient(self.host, self.port, self.username, self.password, self.privateKey)
+        attr = self.sftpClient.stat(filePath)
+        fileInfo['fileSize'] = attr.st_size 
+        fileInfo['fileModificationTime'] = attr.st_mtime
+        return fileInfo
+
 #######################################################################
 # Testing.
 
@@ -89,3 +96,4 @@ if __name__ == '__main__':
     files = sftpUtility.getFiles('/export/dm/test')
     print files
     print sftpUtility.getMd5Sum('/export/dm/test/testfile01')
+    print sftpUtility.statFile('/export/dm/test/testfile01')
-- 
GitLab