Browse Source

Improving file transfer logging (including new progress logging)

Source commit: 76db2f2074ec4189aeedad821929e962f50e8163
Martin Prikryl 9 years ago
parent
commit
c1eb59f265

+ 13 - 0
source/core/Common.cpp

@@ -2722,6 +2722,19 @@ UnicodeString __fastcall FormatSize(__int64 Size)
   return FormatNumber(Size);
 }
 //---------------------------------------------------------------------------
+UnicodeString __fastcall FormatDateTimeSpan(const UnicodeString TimeFormat, TDateTime DateTime)
+{
+  UnicodeString Result;
+  if (int(DateTime) > 0)
+  {
+    Result = IntToStr(int(DateTime)) + L", ";
+  }
+  // days are decremented, because when there are to many of them,
+  // "integer overflow" error occurs
+  Result += FormatDateTime(TimeFormat, DateTime - int(DateTime));
+  return Result;
+}
+//---------------------------------------------------------------------------
 UnicodeString __fastcall ExtractFileBaseName(const UnicodeString & Path)
 {
   return ChangeFileExt(ExtractFileName(Path), L"");

+ 1 - 0
source/core/Common.h

@@ -210,6 +210,7 @@ int __fastcall CompareFileTime(TDateTime T1, TDateTime T2);
 int __fastcall TimeToMSec(TDateTime T);
 int __fastcall TimeToSeconds(TDateTime T);
 int __fastcall TimeToMinutes(TDateTime T);
+UnicodeString __fastcall FormatDateTimeSpan(const UnicodeString TimeFormat, TDateTime DateTime);
 //---------------------------------------------------------------------------
 template<class MethodT>
 MethodT __fastcall MakeMethod(void * Data, void * Code)

+ 16 - 0
source/core/FileOperationProgress.cpp

@@ -851,3 +851,19 @@ void __fastcall TFileOperationProgressType::UnlockUserSelections()
     FUserSelectionsSection->Leave();
   }
 }
+//---------------------------------------------------------------------------
+UnicodeString __fastcall TFileOperationProgressType::GetLogStr()
+{
+  UnicodeString Transferred = FormatSize(TotalTransferred);
+  UnicodeString Left;
+  if (TotalSizeSet)
+  {
+    Left = FormatDateTimeSpan(Configuration->TimeFormat, TotalTimeLeft());
+  }
+  else
+  {
+    Left = L"n/a";
+  }
+  UnicodeString CPSStr = FormatSize(CPS());
+  return FORMAT(L"Transfer progress: Transferred: %s, Left: %s, CPS: %s/s", (Transferred, Left, CPSStr));
+}

+ 2 - 0
source/core/FileOperationProgress.h

@@ -92,6 +92,7 @@ public:
   __property TFileOperation Operation = { read = FOperation };
   // on what side if operation being processed (local/remote), source of copy
   __property TOperationSide Side = { read = FSide };
+  __property int Count =  { read = FCount };
   __property UnicodeString FileName =  { read = FFileName };
   __property UnicodeString FullFileName = { read = FFullFileName };
   __property UnicodeString Directory = { read = FDirectory };
@@ -184,6 +185,7 @@ public:
   void __fastcall SetCPSLimit(unsigned long ACPSLimit);
   void __fastcall SetBatchOverwrite(TBatchOverwrite ABatchOverwrite);
   void __fastcall SetSkipToAll();
+  UnicodeString __fastcall GetLogStr();
 };
 //---------------------------------------------------------------------------
 class TSuspendFileOperationProgress

+ 44 - 13
source/core/Terminal.cpp

@@ -1212,6 +1212,7 @@ void __fastcall TTerminal::ResetConnection()
   }
 
   FFiles->Directory = L"";
+  FLastProgressLogged = GetTickCount();
   // note that we cannot clear contained files
   // as they can still be referenced in the GUI atm
 }
@@ -1932,6 +1933,17 @@ void __fastcall TTerminal::Information(const UnicodeString & Str, bool Status)
 //---------------------------------------------------------------------------
 void __fastcall TTerminal::DoProgress(TFileOperationProgressType & ProgressData)
 {
+
+  if (Configuration->ActualLogProtocol >= 1)
+  {
+    DWORD Now = GetTickCount();
+    if (FLastProgressLogged - Now >= 1000)
+    {
+      LogEvent(ProgressData.GetLogStr());
+      FLastProgressLogged = Now;
+    }
+  }
+
   if (OnProgress != NULL)
   {
     TCallbackGuard Guard(this);
@@ -6334,6 +6346,36 @@ void __fastcall TTerminal::CopyParallel(TParallelOperation * ParallelOperation,
   }
 }
 //---------------------------------------------------------------------------
+void __fastcall TTerminal::LogTotalTransferDetails(
+  const UnicodeString TargetDir, const TCopyParamType * CopyParam,
+  TFileOperationProgressType * OperationProgress, bool Parallel, TStrings * Files)
+{
+  if (Log->Logging)
+  {
+    UnicodeString TargetSide = ((OperationProgress->Side == osLocal) ? L"remote" : L"local");
+    UnicodeString S =
+      FORMAT(
+        L"Copying %d files/directories to %s directory \"%s\"",
+        (OperationProgress->Count, TargetSide, TargetDir));
+    if (Parallel && DebugAlwaysTrue(Files != NULL))
+    {
+      int Count = 0;
+      for (int Index = 0; Index < Files->Count; Index++)
+      {
+        TCollectedFileList * FileList = dynamic_cast<TCollectedFileList *>(Files->Objects[Index]);
+        Count += FileList->Count();
+      }
+      S += FORMAT(L" - in parallel, with %d total files", (Count));
+    }
+    if (OperationProgress->TotalSizeSet)
+    {
+      S += FORMAT(L" - total size: %s", (FormatSize(OperationProgress->TotalSize)));
+    }
+    LogEvent(S);
+    LogEvent(CopyParam->LogStr);
+  }
+}
+//---------------------------------------------------------------------------
 bool __fastcall TTerminal::CopyToRemote(TStrings * FilesToCopy,
   const UnicodeString TargetDir, const TCopyParamType * CopyParam, int Params, TParallelOperation * ParallelOperation)
 {
@@ -6388,12 +6430,7 @@ bool __fastcall TTerminal::CopyToRemote(TStrings * FilesToCopy,
       try
       {
         bool Parallel = CalculatedSize && (Files.get() != NULL);
-        if (Log->Logging)
-        {
-          LogEvent(FORMAT(L"Copying %d files/directories to remote directory "
-            "\"%s\"%s", (FilesToCopy->Count, TargetDir, (Parallel ? L" in parallel" : L""))));
-          LogEvent(CopyParam->LogStr);
-        }
+        LogTotalTransferDetails(TargetDir, CopyParam, &OperationProgress, Parallel, Files.get());
 
         if (Parallel)
         {
@@ -6518,13 +6555,7 @@ bool __fastcall TTerminal::CopyToLocal(TStrings * FilesToCopy,
         try
         {
           bool Parallel = TotalSizeKnown && (Files.get() != NULL);
-          if (Log->Logging)
-          {
-            LogEvent(FORMAT(
-              L"Copying %d files/directories to local directory \"%s\"%s",
-              (FilesToCopy->Count, TargetDir, (Parallel ? L" in parallel" : L""))));
-            LogEvent(CopyParam->LogStr);
-          }
+          LogTotalTransferDetails(TargetDir, CopyParam, &OperationProgress, Parallel, Files.get());
 
           if (Parallel)
           {

+ 4 - 0
source/core/Terminal.h

@@ -213,6 +213,7 @@ private:
   bool FRememberedTunnelPasswordTried;
   int FNesting;
   UnicodeString FFingerprintScanned;
+  DWORD FLastProgressLogged;
 
   void __fastcall CommandError(Exception * E, const UnicodeString Msg);
   unsigned int __fastcall CommandError(Exception * E, const UnicodeString Msg,
@@ -385,6 +386,9 @@ protected:
   UnicodeString __fastcall FormatFileDetailsForLog(const UnicodeString & FileName, TDateTime Modification, __int64 Size);
   void __fastcall LogFileDetails(const UnicodeString & FileName, TDateTime Modification, __int64 Size);
   void __fastcall LogFileDone(TFileOperationProgressType * OperationProgress);
+  void __fastcall LogTotalTransferDetails(
+    const UnicodeString TargetDir, const TCopyParamType * CopyParam,
+    TFileOperationProgressType * OperationProgress, bool Parallel, TStrings * Files);
   virtual TTerminal * __fastcall GetPasswordSource();
   void __fastcall DoEndTransaction(bool Inform);
   bool  __fastcall VerifyCertificate(

+ 0 - 13
source/windows/GUITools.cpp

@@ -428,19 +428,6 @@ bool __fastcall DeleteDirectory(const UnicodeString DirName)
   return retval;
 }
 //---------------------------------------------------------------------------
-UnicodeString __fastcall FormatDateTimeSpan(const UnicodeString TimeFormat, TDateTime DateTime)
-{
-  UnicodeString Result;
-  if (int(DateTime) > 0)
-  {
-    Result = IntToStr(int(DateTime)) + L", ";
-  }
-  // days are decremented, because when there are to many of them,
-  // "integer overflow" error occurs
-  Result += FormatDateTime(TimeFormat, DateTime - int(DateTime));
-  return Result;
-}
-//---------------------------------------------------------------------------
 void __fastcall AddSessionColorImage(
   TCustomImageList * ImageList, TColor Color, int MaskIndex)
 {

+ 0 - 1
source/windows/GUITools.h

@@ -35,7 +35,6 @@ UnicodeString __fastcall GetDesktopFolder();
 UnicodeString __fastcall UniqTempDir(const UnicodeString BaseDir,
   const UnicodeString Identity, bool Mask = false);
 bool __fastcall DeleteDirectory(const UnicodeString DirName);
-UnicodeString __fastcall FormatDateTimeSpan(const UnicodeString TimeFormat, TDateTime DateTime);
 void __fastcall AddSessionColorImage(TCustomImageList * ImageList, TColor Color, int MaskIndex);
 void __fastcall SetSubmenu(TTBXCustomItem * Item);
 typedef int __fastcall (*TCalculateWidth)(UnicodeString Text, void * Arg);