Progress reporting during upload changed to occur every second
authorpkanavos <pkanavos@gmail.com>
Thu, 4 Oct 2012 08:56:32 +0000 (11:56 +0300)
committerpkanavos <pkanavos@gmail.com>
Thu, 4 Oct 2012 08:56:32 +0000 (11:56 +0300)
trunk/Pithos.Client.WPF/Diagnostics/log4netForwarder.cs
trunk/Pithos.Network/BlockHashAlgorithms.cs
trunk/Pithos.Network/FileBlockContent.cs

index 615116c..fe76c72 100644 (file)
-using System;
-using System.Diagnostics;
-using System.Text;
-using System.Threading.Tasks;
-using log4net;
-using log4net.Core;
-
-namespace Pithos.Client.WPF.Diagnostics
-{
-    public class Log4NetForwarder : TraceListener
-    {
-        public override void Write(string message)
-        {
-            WriteLine(message);
-        }
-
-        public override void Write(object o)
-        {
-            WriteLine(o);
-        }
-
-        public override void Write(object o, string category)
-        {
-            WriteLine(o, category);
-        }
-
-        public override void Write(string message, string category)
-        {
-            WriteLine(message, category);
-        }
-
-        public override void WriteLine(string message)
-        {
-            Log(message, Level.Debug);
-        }
-
-
-        public override void WriteLine(object o)
-        {
-            Log(o.ToString(), Level.Debug);
-        }
-
-        public override void WriteLine(object o, string category)
-        {
-            using (ThreadContext.Stacks["Category"].Push(category))
-            {
-                Log(o.ToString(), Level.Debug);
-            }
-        }
-
-        public override void WriteLine(string message, string category)
-        {
-            using (ThreadContext.Stacks["Category"].Push(category))
-            {
-                Log(message, Level.Debug);
-            }
-        }
-
-        public override void Fail(string message)
-        {
-            Log(message, Level.Error);
-        }
-
-        public override void Fail(string message, string detailMessage)
-        {
-            Log(String.Format("{0} {1}", message, detailMessage), Level.Error);
-        }
-
-
-
-        public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id)
-        {
-            var message = String.Format("Event ID: [{0}]", id);
-            Log(source, eventType, message);
-        }
-
-        public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string format, params object[] args)
-        {
-            var builder = new StringBuilder();
-            builder.AppendFormat("Event ID: [{0}] ", id);
-            builder.AppendFormat(format, args);
-            var message = builder.ToString();
-
-            Log(source, eventType, message);
-        }
-
-        public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string message)
-        {
-            Log(source, eventType, message);
-        }
-
-        private void Log(string source, TraceEventType eventType, string message)
-        {
-            try
-            {
-                var log = LogManager.GetLogger(source);
-                var level = GetLevel(eventType);
-                TaskEx.Run(()=>log.Logger.Log(GetType(), level, message, null));
-            }
-            catch(Exception ex)
-            {
-                
-            }
-        }
-
-        private void Log(string message, Level level)
-        {
-            try
-            {
-
-            var stack = new StackTrace();
-            var type = stack.GetFrame(0).GetMethod().DeclaringType;
-            var log = LogManager.GetLogger(type);
-            log.Logger.Log(GetType(), level, message, null);
-            }
-            catch (Exception)
-            {
-            }
-        }
-
-
-        private static Level GetLevel(TraceEventType eventType)
-        {
-            var level = Level.Debug;
-            switch (eventType)
-            {
-                case TraceEventType.Information:
-                    level = Level.Info;
-                    break;
-                case TraceEventType.Verbose:
-                    level = Level.Verbose;
-                    break;
-                case TraceEventType.Warning:
-                    level = Level.Info;
-                    break;
-                case TraceEventType.Critical:
-                    level = Level.Info;
-                    break;
-                case TraceEventType.Error:
-                    level = Level.Info;
-                    break;
-            }
-            return level;
-        }
-    }
-
-}
+using System;\r
+using System.Diagnostics;\r
+using System.Text;\r
+using System.Threading.Tasks;\r
+using log4net;\r
+using log4net.Core;\r
+\r
+namespace Pithos.Client.WPF.Diagnostics\r
+{\r
+    public class Log4NetForwarder : TraceListener\r
+    {\r
+        public override void Write(string message)\r
+        {\r
+            WriteLine(message);\r
+        }\r
+\r
+        public override void Write(object o)\r
+        {\r
+            WriteLine(o);\r
+        }\r
+\r
+        public override void Write(object o, string category)\r
+        {\r
+            WriteLine(o, category);\r
+        }\r
+\r
+        public override void Write(string message, string category)\r
+        {\r
+            WriteLine(message, category);\r
+        }\r
+\r
+        public override void WriteLine(string message)\r
+        {\r
+            Log(message, Level.Debug);\r
+        }\r
+\r
+\r
+        public override void WriteLine(object o)\r
+        {\r
+            Log(o.ToString(), Level.Debug);\r
+        }\r
+\r
+        public override void WriteLine(object o, string category)\r
+        {\r
+            using (ThreadContext.Stacks["Category"].Push(category))\r
+            {\r
+                Log(o.ToString(), Level.Debug);\r
+            }\r
+        }\r
+\r
+        public override void WriteLine(string message, string category)\r
+        {\r
+            using (ThreadContext.Stacks["Category"].Push(category))\r
+            {\r
+                Log(message, Level.Debug);\r
+            }\r
+        }\r
+\r
+        public override void Fail(string message)\r
+        {\r
+            Log(message, Level.Error);\r
+        }\r
+\r
+        public override void Fail(string message, string detailMessage)\r
+        {\r
+            Log(String.Format("{0} {1}", message, detailMessage), Level.Error);\r
+        }\r
+\r
+\r
+\r
+        public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id)\r
+        {\r
+            var message = String.Format("Event ID: [{0}]", id);\r
+            Log(source, eventType, message);\r
+        }\r
+\r
+        public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string format, params object[] args)\r
+        {\r
+            var builder = new StringBuilder();\r
+            builder.AppendFormat("Event ID: [{0}] ", id);\r
+            builder.AppendFormat(format, args);\r
+            var message = builder.ToString();\r
+\r
+            Log(source, eventType, message);\r
+        }\r
+\r
+        public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string message)\r
+        {\r
+            Log(source, eventType, message);\r
+        }\r
+\r
+        private void Log(string source, TraceEventType eventType, string message)\r
+        {\r
+            try\r
+            {\r
+                var log = LogManager.GetLogger(source);\r
+                var level = GetLevel(eventType);\r
+                TaskEx.Run(()=>log.Logger.Log(GetType(), level, message, null));\r
+            }\r
+            catch(Exception )\r
+            {\r
+                \r
+            }\r
+        }\r
+\r
+        private void Log(string message, Level level)\r
+        {\r
+            try\r
+            {\r
+\r
+            var stack = new StackTrace();\r
+            var type = stack.GetFrame(0).GetMethod().DeclaringType;\r
+            var log = LogManager.GetLogger(type);\r
+            log.Logger.Log(GetType(), level, message, null);\r
+            }\r
+            catch (Exception)\r
+            {\r
+            }\r
+        }\r
+\r
+\r
+        private static Level GetLevel(TraceEventType eventType)\r
+        {\r
+            var level = Level.Debug;\r
+            switch (eventType)\r
+            {\r
+                case TraceEventType.Information:\r
+                    level = Level.Info;\r
+                    break;\r
+                case TraceEventType.Verbose:\r
+                    level = Level.Verbose;\r
+                    break;\r
+                case TraceEventType.Warning:\r
+                    level = Level.Info;\r
+                    break;\r
+                case TraceEventType.Critical:\r
+                    level = Level.Info;\r
+                    break;\r
+                case TraceEventType.Error:\r
+                    level = Level.Info;\r
+                    break;\r
+            }\r
+            return level;\r
+        }\r
+    }\r
+\r
+}\r
index 2814f79..38dba4f 100644 (file)
@@ -281,7 +281,7 @@ namespace Pithos.Network
                 int bufIdx = 0;\r
                 long index = 0;\r
 \r
-                long block = 0;\r
+                //long block = 0;\r
 \r
                 while ((read = await stream.ReadAsync(buffer[bufIdx], 0, blockSize).ConfigureAwait(false)) > 0)\r
                 {\r
index 194c25d..14034af 100644 (file)
@@ -62,6 +62,8 @@ namespace Pithos.Network
                 //Make sure we read only up to the block size\r
                 var size = buffer_size > remainder ? remainder : buffer_size;\r
 \r
+                int timerTotal = 0;\r
+\r
                 watch.Start();\r
                 while(remainder>0 && 0<(read=await fileStream.ReadAsync(buffer, 0, (int)size).ConfigureAwait(false)))\r
                 {\r
@@ -71,13 +73,23 @@ namespace Pithos.Network
                     total += read;\r
                     remainder -= read;\r
 \r
-                    var speed = 1000 * read / (double)watch.ElapsedMilliseconds;\r
-                    var percentage = Convert.ToInt32(100*total/(double) _blockSize);\r
-                    _progress.Report(new UploadArgs(percentage, null, total, _blockSize, 0, 0,speed));\r
-\r
+                    //Calculate the new size, \r
                     size = buffer_size > remainder ? remainder : buffer_size;\r
+\r
+                    timerTotal += read;\r
+                    //Only report every second\r
+                    if (watch.ElapsedMilliseconds > 1000)\r
+                    {\r
+\r
+                        var speed = 1000*timerTotal/(double) watch.ElapsedMilliseconds;\r
+                        var percentage = Convert.ToInt32(100*total/(double) _blockSize);\r
+                        _progress.Report(new UploadArgs(percentage, null, total, _blockSize, 0, 0, speed));\r
+                        //Reset the counter and total\r
+                        timerTotal = 0;\r
+                        watch.Reset();\r
+                    }\r
                     \r
-                    watch.Restart();\r
+                    watch.Start();\r
                 }\r
             }\r
 \r