Utilities.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. using System;
  2. using System.Text;
  3. namespace NetCoreServer
  4. {
  5. /// <summary>
  6. /// Conversion metrics utilities
  7. /// </summary>
  8. public class Utilities
  9. {
  10. /// <summary>
  11. /// Generate data size string. Will return a pretty string of bytes, KiB, MiB, GiB, TiB based on the given bytes.
  12. /// </summary>
  13. /// <param name="b">Data size in bytes</param>
  14. /// <returns>String with data size representation</returns>
  15. public static string GenerateDataSize(double b)
  16. {
  17. var sb = new StringBuilder();
  18. long bytes = (long)b;
  19. long absBytes = Math.Abs(bytes);
  20. if (absBytes >= (1024L * 1024L * 1024L * 1024L))
  21. {
  22. long tb = bytes / (1024L * 1024L * 1024L * 1024L);
  23. long gb = (bytes % (1024L * 1024L * 1024L * 1024L)) / (1024 * 1024 * 1024);
  24. sb.Append(tb);
  25. sb.Append('.');
  26. sb.Append((gb < 100) ? "0" : "");
  27. sb.Append((gb < 10) ? "0" : "");
  28. sb.Append(gb);
  29. sb.Append(" TiB");
  30. }
  31. else if (absBytes >= (1024 * 1024 * 1024))
  32. {
  33. long gb = bytes / (1024 * 1024 * 1024);
  34. long mb = (bytes % (1024 * 1024 * 1024)) / (1024 * 1024);
  35. sb.Append(gb);
  36. sb.Append('.');
  37. sb.Append((mb < 100) ? "0" : "");
  38. sb.Append((mb < 10) ? "0" : "");
  39. sb.Append(mb);
  40. sb.Append(" GiB");
  41. }
  42. else if (absBytes >= (1024 * 1024))
  43. {
  44. long mb = bytes / (1024 * 1024);
  45. long kb = (bytes % (1024 * 1024)) / 1024;
  46. sb.Append(mb);
  47. sb.Append('.');
  48. sb.Append((kb < 100) ? "0" : "");
  49. sb.Append((kb < 10) ? "0" : "");
  50. sb.Append(kb);
  51. sb.Append(" MiB");
  52. }
  53. else if (absBytes >= 1024)
  54. {
  55. long kb = bytes / 1024;
  56. bytes = bytes % 1024;
  57. sb.Append(kb);
  58. sb.Append('.');
  59. sb.Append((bytes < 100) ? "0" : "");
  60. sb.Append((bytes < 10) ? "0" : "");
  61. sb.Append(bytes);
  62. sb.Append(" KiB");
  63. }
  64. else
  65. {
  66. sb.Append(bytes);
  67. sb.Append(" bytes");
  68. }
  69. return sb.ToString();
  70. }
  71. /// <summary>
  72. /// Generate time period string. Will return a pretty string of ns, mcs, ms, s, m, h based on the given nanoseconds.
  73. /// </summary>
  74. /// <param name="ms">Milliseconds</param>
  75. /// <returns>String with time period representation</returns>
  76. public static string GenerateTimePeriod(double ms)
  77. {
  78. var sb = new StringBuilder();
  79. long nanoseconds = (long) (ms * 1000.0 * 1000.0);
  80. long absNanoseconds = Math.Abs(nanoseconds);
  81. if (absNanoseconds >= (60 * 60 * 1000000000L))
  82. {
  83. long hours = nanoseconds / (60 * 60 * 1000000000L);
  84. long minutes = ((nanoseconds % (60 * 60 * 1000000000L)) / 1000000000) / 60;
  85. long seconds = ((nanoseconds % (60 * 60 * 1000000000L)) / 1000000000) % 60;
  86. long milliseconds = ((nanoseconds % (60 * 60 * 1000000000L)) % 1000000000) / 1000000;
  87. sb.Append(hours);
  88. sb.Append(':');
  89. sb.Append((minutes < 10) ? "0" : "");
  90. sb.Append(minutes);
  91. sb.Append(':');
  92. sb.Append((seconds < 10) ? "0" : "");
  93. sb.Append(seconds);
  94. sb.Append('.');
  95. sb.Append((milliseconds < 100) ? "0" : "");
  96. sb.Append((milliseconds < 10) ? "0" : "");
  97. sb.Append(milliseconds);
  98. sb.Append(" h");
  99. }
  100. else if (absNanoseconds >= (60 * 1000000000L))
  101. {
  102. long minutes = nanoseconds / (60 * 1000000000L);
  103. long seconds = (nanoseconds % (60 * 1000000000L)) / 1000000000;
  104. long milliseconds = ((nanoseconds % (60 * 1000000000L)) % 1000000000) / 1000000;
  105. sb.Append(minutes);
  106. sb.Append(':');
  107. sb.Append((seconds < 10) ? "0" : "");
  108. sb.Append(seconds);
  109. sb.Append('.');
  110. sb.Append((milliseconds < 100) ? "0" : "");
  111. sb.Append((milliseconds < 10) ? "0" : "");
  112. sb.Append(milliseconds);
  113. sb.Append(" m");
  114. }
  115. else if (absNanoseconds >= 1000000000)
  116. {
  117. long seconds = nanoseconds / 1000000000;
  118. long milliseconds = (nanoseconds % 1000000000) / 1000000;
  119. sb.Append(seconds);
  120. sb.Append('.');
  121. sb.Append((milliseconds < 100) ? "0" : "");
  122. sb.Append((milliseconds < 10) ? "0" : "");
  123. sb.Append(milliseconds);
  124. sb.Append(" s");
  125. }
  126. else if (absNanoseconds >= 1000000)
  127. {
  128. long milliseconds = nanoseconds / 1000000;
  129. long microseconds = (nanoseconds % 1000000) / 1000;
  130. sb.Append(milliseconds);
  131. sb.Append('.');
  132. sb.Append((microseconds < 100) ? "0" : "");
  133. sb.Append((microseconds < 10) ? "0" : "");
  134. sb.Append(microseconds);
  135. sb.Append(" ms");
  136. }
  137. else if (absNanoseconds >= 1000)
  138. {
  139. long microseconds = nanoseconds / 1000;
  140. nanoseconds = nanoseconds % 1000;
  141. sb.Append(microseconds);
  142. sb.Append('.');
  143. sb.Append((nanoseconds < 100) ? "0" : "");
  144. sb.Append((nanoseconds < 10) ? "0" : "");
  145. sb.Append(nanoseconds);
  146. sb.Append(" mcs");
  147. }
  148. else
  149. {
  150. sb.Append(nanoseconds);
  151. sb.Append(" ns");
  152. }
  153. return sb.ToString();
  154. }
  155. }
  156. }