public DataTransferTracker(long minutes, LogHandler logHandler) { if (minutes < 1) { throw new System.ArgumentOutOfRangeException("The number of minutes ago the track starts cannot be less than 1"); } minutesIntoPast = minutes; // find the data transfer over the period setStartInstantValues(logHandler); DataTransferInstant currentInstant = logHandler.getDataInstant(DateTime.UtcNow.Ticks); bytesIn = currentInstant.bytesIn - startInstant.bytesIn; bytesOut = currentInstant.bytesOut - startInstant.bytesOut; // initialise the seconds second = 0; for (byte s = 0; s < 60; s++) seconds[s] = new DataTransferLump(0, 0); }
/// <summary> /// Loads the values regarding the start instant for the tracker /// </summary> /// <param name="logHandler"></param> private void setStartInstantValues(LogHandler logHandler) { startInstant = logHandler.getDataInstant(ticksAtStartPoint()); // try looking slightly after a minute ahead to account for any delays in saving minuteAfterStartInstant = logHandler.getDataInstant(ticksAtStartPoint() + (long)(TimeSpan.TicksPerMinute * 0.98)); // work out how many bytes change should be made each second so there's no sudden jump when the minute changes long inDiff = minuteAfterStartInstant.bytesIn - startInstant.bytesIn; long outDiff = minuteAfterStartInstant.bytesOut - startInstant.bytesOut; if (inDiff < 0) { inDiff = -inDiff; } if (outDiff < 0) { outDiff = -outDiff; } bytesStartPerSecond.bytesIn = inDiff / 60; bytesStartPerSecond.bytesOut = outDiff / 60; bytesStartLeftover.bytesIn = inDiff - bytesStartPerSecond.bytesIn * 60; bytesStartLeftover.bytesOut = outDiff - bytesStartPerSecond.bytesOut * 60; }