Skip to content

Commit 7b85913

Browse files
committed
Adding logic to support different repeat intervals
1 parent fe2a7f3 commit 7b85913

File tree

3 files changed

+292
-55
lines changed

3 files changed

+292
-55
lines changed

GetScheduledTasksGQI/Arguments.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
public class Arguments
77
{
8-
private readonly GQIStringArgument nameFilter = new GQIStringArgument("Name Filter") { IsRequired = true, DefaultValue = String.Empty };
8+
private readonly GQIStringArgument nameFilter = new GQIStringArgument("Name Filter") { IsRequired = false, DefaultValue = ".*" };
99
private readonly GQIDateTimeArgument start = new GQIDateTimeArgument("Start") { IsRequired = true };
1010
private readonly GQIDateTimeArgument end = new GQIDateTimeArgument("End") { IsRequired = true };
1111
private readonly GQIIntArgument duration = new GQIIntArgument("Duration (s)") { IsRequired = true };
@@ -27,7 +27,7 @@ public void ProcessArguments(OnArgumentsProcessedInputArgs args)
2727
{
2828
NameFilter = args.GetArgumentValue(nameFilter);
2929
Start = args.GetArgumentValue(start);
30-
End = args.GetArgumentValue(end);
30+
End =args.GetArgumentValue(end);
3131
Duration = args.GetArgumentValue(duration);
3232
}
3333
}

GetScheduledTasksGQI/GetScheduledTasksGQI.cs

+57-53
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,7 @@ public GQIArgument[] GetInputArguments()
3737
public OnArgumentsProcessedOutputArgs OnArgumentsProcessed(OnArgumentsProcessedInputArgs args)
3838
{
3939
arguments.ProcessArguments(args);
40-
41-
string userInput = arguments.NameFilter ?? string.Empty;
42-
string regexPattern;
43-
string escapedInput = Regex.Escape(userInput);
44-
45-
regexPattern = escapedInput.Replace("\\*", ".*"); // supporting * as wildcard
46-
var tasks = GetTasks(task => Regex.IsMatch(task.TaskName, regexPattern));
40+
var tasks = GetTasks(task => Regex.IsMatch(task.TaskName, arguments.NameFilter, RegexOptions.IgnoreCase) && task.Enabled && (task.EndTime == DateTime.MinValue || (task.EndTime >= arguments.Start && task.EndTime <= arguments.End)));
4741

4842
scheduledTasks.AddRange(tasks);
4943

@@ -102,77 +96,87 @@ private IEnumerable<SchedulerTask> GetTasks(Func<Skyline.DataMiner.Net.Messages.
10296

10397
private void ProcessScheduledTasks()
10498
{
105-
DateTime rangeStart = arguments.Start;
106-
DateTime rangeEnd = arguments.End;
99+
DateTime rangeStart = DateTime.SpecifyKind(arguments.Start, DateTimeKind.Utc);
100+
DateTime rangeEnd = DateTime.SpecifyKind(arguments.End, DateTimeKind.Utc);
107101

108102
foreach (var task in scheduledTasks)
109103
{
110104
DateTime taskStart = DateTime.SpecifyKind(task.StartTime, DateTimeKind.Utc);
111-
112-
// Handle missing end time (ongoing tasks)
113105
DateTime taskEnd = task.EndTime == DateTime.MinValue ? DateTime.MaxValue : DateTime.SpecifyKind(task.EndTime, DateTimeKind.Utc);
114106

115-
switch (task.RepeatType)
107+
List<DateTime> occurrences = new List<DateTime>();
108+
109+
if (!string.IsNullOrEmpty(task.RepeatInterval))
116110
{
117-
case SchedulerRepeatType.Once:
118-
if (taskStart >= rangeStart && taskStart <= rangeEnd)
119-
{
120-
AddRow(task, taskStart);
121-
}
122-
123-
break;
124-
125-
case SchedulerRepeatType.Daily:
126-
AddRepeatingTasks(task, taskStart, taskEnd, rangeStart, rangeEnd, TimeSpan.FromDays(1));
127-
break;
128-
129-
case SchedulerRepeatType.Weekly:
130-
AddRepeatingTasks(task, taskStart, taskEnd, rangeStart, rangeEnd, TimeSpan.FromDays(7));
131-
break;
132-
133-
case SchedulerRepeatType.Monthly:
134-
AddMonthlyRepeatingTasks(task, taskStart, taskEnd, rangeStart, rangeEnd);
135-
break;
136-
case SchedulerRepeatType.Undefined:
137-
break;
138-
default:
139-
// do nothing
140-
break;
111+
switch (task.RepeatType)
112+
{
113+
case SchedulerRepeatType.Monthly:
114+
occurrences = TimeIntervalParser.ParseMonthlyTask(task.RepeatInterval, task.RepeatIntervalInMinutes, rangeStart, rangeEnd, taskStart);
115+
break;
116+
117+
case SchedulerRepeatType.Weekly:
118+
occurrences = TimeIntervalParser.ParseWeeklyTask(task.RepeatInterval, task.RepeatIntervalInMinutes, rangeStart, rangeEnd, taskStart);
119+
break;
120+
121+
case SchedulerRepeatType.Daily:
122+
occurrences = TimeIntervalParser.ParseDailyTask(task.RepeatInterval, task.RepeatIntervalInMinutes, rangeStart, rangeEnd, taskStart);
123+
break;
124+
case SchedulerRepeatType.Once:
125+
if (taskStart >= rangeStart && taskStart <= rangeEnd)
126+
{
127+
occurrences.Add(taskStart);
128+
}
129+
break;
130+
default:
131+
// do nothing
132+
break;
133+
}
134+
}
135+
136+
if (task.Repeat > 0)
137+
{
138+
occurrences = occurrences.Take(task.Repeat).ToList();
139+
}
140+
141+
foreach (var occurrence in occurrences)
142+
{
143+
AddRow(task, occurrence);
141144
}
142145
}
143146
}
144147

145-
private void AddRepeatingTasks(SchedulerTask task, DateTime taskStart, DateTime taskEnd, DateTime rangeStart, DateTime rangeEnd, TimeSpan interval)
148+
private List<DateTime> GenerateRepeatingOccurrences(DateTime taskStart, DateTime taskEnd, DateTime rangeStart, DateTime rangeEnd, TimeSpan interval)
146149
{
147-
// Find the first valid occurrence in the given range
148-
DateTime occurrence = taskStart;
150+
List<DateTime> occurrences = new List<DateTime>();
149151

150-
while (occurrence < rangeStart)
152+
DateTime occurrence = taskStart;
153+
while (occurrence <= taskEnd && occurrence <= rangeEnd)
151154
{
155+
if (occurrence >= rangeStart && occurrence <= rangeEnd)
156+
{
157+
occurrences.Add(occurrence);
158+
}
152159
occurrence = occurrence.Add(interval);
153160
}
154161

155-
while (occurrence <= rangeEnd && occurrence <= taskEnd)
156-
{
157-
AddRow(task, occurrence);
158-
occurrence = occurrence.Add(interval);
159-
}
162+
return occurrences;
160163
}
161164

162-
private void AddMonthlyRepeatingTasks(SchedulerTask task, DateTime taskStart, DateTime taskEnd, DateTime rangeStart, DateTime rangeEnd)
165+
private List<DateTime> GenerateMonthlyOccurrences(DateTime taskStart, DateTime taskEnd, DateTime rangeStart, DateTime rangeEnd)
163166
{
164-
DateTime occurrence = taskStart;
167+
List<DateTime> occurrences = new List<DateTime>();
165168

166-
while (occurrence < rangeStart)
169+
DateTime occurrence = taskStart;
170+
while (occurrence <= taskEnd && occurrence <= rangeEnd)
167171
{
172+
if (occurrence >= rangeStart && occurrence <= rangeEnd)
173+
{
174+
occurrences.Add(occurrence);
175+
}
168176
occurrence = occurrence.AddMonths(1);
169177
}
170178

171-
while (occurrence <= rangeEnd && occurrence <= taskEnd)
172-
{
173-
AddRow(task, occurrence);
174-
occurrence = occurrence.AddMonths(1);
175-
}
179+
return occurrences;
176180
}
177181

178182
private void AddRow(SchedulerTask task, DateTime occurrenceTime)

0 commit comments

Comments
 (0)