Bug fix for determining periodicity type.

pull/4/head
Ryan Lea 2011-10-28 11:13:43 +12:00
parent 98a12b70ff
commit 4fe9bb0ca2
1 changed files with 16 additions and 16 deletions

View File

@ -24,7 +24,7 @@ namespace winsw
public void init() public void init()
{ {
this._periodicityType = determinePeriodicityType(); this._periodicityType = determinePeriodicityType();
this._nextRoll = nextTriggeringTime(this._currentRoll); this._nextRoll = nextTriggeringTime(this._currentRoll, this._period);
} }
public enum PeriodicityType public enum PeriodicityType
@ -46,7 +46,7 @@ namespace winsw
string r0 = epoch.ToString(_format); string r0 = epoch.ToString(_format);
periodicRollingCalendar.periodicityType = i; periodicRollingCalendar.periodicityType = i;
DateTime next = periodicRollingCalendar.nextTriggeringTime(epoch); DateTime next = periodicRollingCalendar.nextTriggeringTime(epoch, 1);
string r1 = next.ToString(_format); string r1 = next.ToString(_format);
if (r0 != null && r1 != null && !r0.Equals(r1)) if (r0 != null && r1 != null && !r0.Equals(r1))
@ -57,30 +57,30 @@ namespace winsw
return PeriodicityType.ERRONEOUS; return PeriodicityType.ERRONEOUS;
} }
private DateTime nextTriggeringTime(DateTime input) private DateTime nextTriggeringTime(DateTime input, long increment)
{ {
DateTime output; DateTime output;
switch (_periodicityType) switch (_periodicityType)
{ {
case PeriodicityType.TOP_OF_MILLISECOND: case PeriodicityType.TOP_OF_MILLISECOND:
output = new DateTime(input.Year, input.Month, input.Day, input.Hour, input.Minute, input.Second, input.Millisecond); output = new DateTime(input.Year, input.Month, input.Day, input.Hour, input.Minute, input.Second, input.Millisecond);
output = output.AddMilliseconds(_period); output = output.AddMilliseconds(increment);
return output; return output;
case PeriodicityType.TOP_OF_SECOND: case PeriodicityType.TOP_OF_SECOND:
output = new DateTime(input.Year, input.Month, input.Day, input.Hour, input.Minute, input.Second); output = new DateTime(input.Year, input.Month, input.Day, input.Hour, input.Minute, input.Second);
output = output.AddSeconds(_period); output = output.AddSeconds(increment);
return output; return output;
case PeriodicityType.TOP_OF_MINUTE: case PeriodicityType.TOP_OF_MINUTE:
output = new DateTime(input.Year, input.Month, input.Day, input.Hour, input.Minute, 0); output = new DateTime(input.Year, input.Month, input.Day, input.Hour, input.Minute, 0);
output = output.AddMinutes(_period); output = output.AddMinutes(increment);
return output; return output;
case PeriodicityType.TOP_OF_HOUR: case PeriodicityType.TOP_OF_HOUR:
output = new DateTime(input.Year, input.Month, input.Day, input.Hour, 0, 0); output = new DateTime(input.Year, input.Month, input.Day, input.Hour, 0, 0);
output = output.AddHours(_period); output = output.AddHours(increment);
return output; return output;
case PeriodicityType.TOP_OF_DAY: case PeriodicityType.TOP_OF_DAY:
output = new DateTime(input.Year, input.Month, input.Day); output = new DateTime(input.Year, input.Month, input.Day);
output = output.AddDays(_period); output = output.AddDays(increment);
return output; return output;
default: default:
throw new Exception("invalid periodicity type: " + _periodicityType); throw new Exception("invalid periodicity type: " + _periodicityType);
@ -103,7 +103,7 @@ namespace winsw
if (now > this._nextRoll) if (now > this._nextRoll)
{ {
this._currentRoll = now; this._currentRoll = now;
this._nextRoll = nextTriggeringTime(now); this._nextRoll = nextTriggeringTime(now, this._period);
return true; return true;
} }
return false; return false;