@@ -37,13 +37,7 @@ public GQIArgument[] GetInputArguments()
37
37
public OnArgumentsProcessedOutputArgs OnArgumentsProcessed ( OnArgumentsProcessedInputArgs args )
38
38
{
39
39
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 ) ) ) ;
47
41
48
42
scheduledTasks . AddRange ( tasks ) ;
49
43
@@ -102,77 +96,87 @@ private IEnumerable<SchedulerTask> GetTasks(Func<Skyline.DataMiner.Net.Messages.
102
96
103
97
private void ProcessScheduledTasks ( )
104
98
{
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 ) ;
107
101
108
102
foreach ( var task in scheduledTasks )
109
103
{
110
104
DateTime taskStart = DateTime . SpecifyKind ( task . StartTime , DateTimeKind . Utc ) ;
111
-
112
- // Handle missing end time (ongoing tasks)
113
105
DateTime taskEnd = task . EndTime == DateTime . MinValue ? DateTime . MaxValue : DateTime . SpecifyKind ( task . EndTime , DateTimeKind . Utc ) ;
114
106
115
- switch ( task . RepeatType )
107
+ List < DateTime > occurrences = new List < DateTime > ( ) ;
108
+
109
+ if ( ! string . IsNullOrEmpty ( task . RepeatInterval ) )
116
110
{
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 ) ;
141
144
}
142
145
}
143
146
}
144
147
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 )
146
149
{
147
- // Find the first valid occurrence in the given range
148
- DateTime occurrence = taskStart ;
150
+ List < DateTime > occurrences = new List < DateTime > ( ) ;
149
151
150
- while ( occurrence < rangeStart )
152
+ DateTime occurrence = taskStart ;
153
+ while ( occurrence <= taskEnd && occurrence <= rangeEnd )
151
154
{
155
+ if ( occurrence >= rangeStart && occurrence <= rangeEnd )
156
+ {
157
+ occurrences . Add ( occurrence ) ;
158
+ }
152
159
occurrence = occurrence . Add ( interval ) ;
153
160
}
154
161
155
- while ( occurrence <= rangeEnd && occurrence <= taskEnd )
156
- {
157
- AddRow ( task , occurrence ) ;
158
- occurrence = occurrence . Add ( interval ) ;
159
- }
162
+ return occurrences ;
160
163
}
161
164
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 )
163
166
{
164
- DateTime occurrence = taskStart ;
167
+ List < DateTime > occurrences = new List < DateTime > ( ) ;
165
168
166
- while ( occurrence < rangeStart )
169
+ DateTime occurrence = taskStart ;
170
+ while ( occurrence <= taskEnd && occurrence <= rangeEnd )
167
171
{
172
+ if ( occurrence >= rangeStart && occurrence <= rangeEnd )
173
+ {
174
+ occurrences . Add ( occurrence ) ;
175
+ }
168
176
occurrence = occurrence . AddMonths ( 1 ) ;
169
177
}
170
178
171
- while ( occurrence <= rangeEnd && occurrence <= taskEnd )
172
- {
173
- AddRow ( task , occurrence ) ;
174
- occurrence = occurrence . AddMonths ( 1 ) ;
175
- }
179
+ return occurrences ;
176
180
}
177
181
178
182
private void AddRow ( SchedulerTask task , DateTime occurrenceTime )
0 commit comments