7
7
using Microsoft . EnterpriseManagement ;
8
8
using Microsoft . EnterpriseManagement . Common ;
9
9
using Microsoft . EnterpriseManagement . Monitoring ;
10
- using Microsoft . EnterpriseManagement . Monitoring . MaintenanceSchedule ;
11
10
using System . Web ;
11
+ using Microsoft . SystemCenter . OperationsManagerV10 . Commands ;
12
12
using Microsoft . EnterpriseManagement . Configuration ;
13
13
using Newtonsoft . Json ;
14
14
using System . Collections . ObjectModel ;
15
15
using SCOM_API . Models ;
16
16
using System . Configuration ;
17
17
using System . Web . Http . Description ;
18
+ using Microsoft . EnterpriseManagement . Monitoring . MaintenanceSchedule ;
18
19
19
20
namespace SCOM_API . Controllers
20
21
{
@@ -55,7 +56,7 @@ public IHttpActionResult EnableComputerMaintenance(SCOMComputerMaintenanceModel
55
56
IList < ManagementPackClass > monClasses = mg . EntityTypes . GetClasses ( classCriteria ) ;
56
57
MonitoringObjectCriteria criteria = new MonitoringObjectCriteria ( string . Format ( "Name = '{0}'" , Data . DisplayName . ToString ( ) ) , monClasses [ 0 ] ) ;
57
58
List < MonitoringObject > monObjects = new List < MonitoringObject > ( ) ;
58
-
59
+
59
60
List < SCOMComputerMaintenanceModel > MaintenanceComputers = new List < SCOMComputerMaintenanceModel > ( ) ;
60
61
61
62
///travers trough all classes to get monitoring objects
@@ -83,7 +84,7 @@ public IHttpActionResult EnableComputerMaintenance(SCOMComputerMaintenanceModel
83
84
maintenanceComputer . EndTime = schedEndTime ;
84
85
maintenanceComputer . Minutes = Data . Minutes ;
85
86
maintenanceComputer . comment = comment ;
86
-
87
+
87
88
//add computers to list
88
89
MaintenanceComputers . Add ( maintenanceComputer ) ;
89
90
@@ -131,6 +132,14 @@ public IHttpActionResult EnableComputerMaintenance(SCOMComputerMaintenanceModel
131
132
[ Route ( "API/ObjectMaintenance" ) ]
132
133
public IHttpActionResult EnableObjectMaintenance ( SCOMObjectMaintenanceModel Data )
133
134
{
135
+ //Validate input
136
+ if ( ! ModelState . IsValid )
137
+ {
138
+ HttpResponseMessage message = new HttpResponseMessage ( HttpStatusCode . BadRequest ) ;
139
+ message . Content = new StringContent ( "Missing a required parameter?" ) ;
140
+ throw new HttpResponseException ( message ) ;
141
+ }
142
+
134
143
//create a Guid from the json input
135
144
var ObjectId = new Guid ( Data . id ) ;
136
145
//get the monitoring object by Guid
@@ -140,41 +149,41 @@ public IHttpActionResult EnableObjectMaintenance(SCOMObjectMaintenanceModel Data
140
149
141
150
List < SCOMObjectMaintenanceModel > MaintenanceObjects = new List < SCOMObjectMaintenanceModel > ( ) ;
142
151
143
- if ( ! monObject . InMaintenanceMode )
152
+ if ( ! monObject . InMaintenanceMode )
153
+ {
144
154
{
145
- {
146
- //set maintenance properties
147
- DateTime startTime = DateTime . UtcNow ;
148
- DateTime schedEndTime = DateTime . UtcNow . AddMinutes ( Data . Minutes ) ;
149
- MaintenanceModeReason reason = MaintenanceModeReason . PlannedOther ;
150
- string comment = Data . comment ;
155
+ //set maintenance properties
156
+ DateTime startTime = DateTime . UtcNow ;
157
+ DateTime schedEndTime = DateTime . UtcNow . AddMinutes ( Data . Minutes ) ;
158
+ MaintenanceModeReason reason = MaintenanceModeReason . PlannedOther ;
159
+ string comment = Data . comment ;
151
160
152
- monObject . ScheduleMaintenanceMode ( startTime , schedEndTime , reason , comment ) ;
161
+ monObject . ScheduleMaintenanceMode ( startTime , schedEndTime , reason , comment ) ;
153
162
154
- //Add properties to list
155
- SCOMObjectMaintenanceModel maintenanceObject = new SCOMObjectMaintenanceModel ( ) ;
156
- maintenanceObject . displayName = monObject . DisplayName ;
157
- maintenanceObject . id = monObject . Id . ToString ( ) ;
158
- maintenanceObject . EndTime = schedEndTime ;
159
- maintenanceObject . Minutes = Data . Minutes ;
160
- maintenanceObject . comment = comment ;
163
+ //Add properties to list
164
+ SCOMObjectMaintenanceModel maintenanceObject = new SCOMObjectMaintenanceModel ( ) ;
165
+ maintenanceObject . displayName = monObject . DisplayName ;
166
+ maintenanceObject . id = monObject . Id . ToString ( ) ;
167
+ maintenanceObject . EndTime = schedEndTime ;
168
+ maintenanceObject . Minutes = Data . Minutes ;
169
+ maintenanceObject . comment = comment ;
161
170
162
- //add computers to list
163
- MaintenanceObjects . Add ( maintenanceObject ) ;
171
+ //add computers to list
172
+ MaintenanceObjects . Add ( maintenanceObject ) ;
164
173
165
- }
166
174
}
175
+ }
167
176
168
- //If object already in maintenance. Throw conflict message
169
- else
170
- {
171
- MaintenanceWindow MaintenanceWindow = monObject . GetMaintenanceWindow ( ) ;
177
+ //If object already in maintenance. Throw conflict message
178
+ else
179
+ {
180
+ MaintenanceWindow MaintenanceWindow = monObject . GetMaintenanceWindow ( ) ;
172
181
173
- HttpResponseMessage message = new HttpResponseMessage ( HttpStatusCode . Conflict ) ;
174
- message . Content = new StringContent ( "Object already in maintenance until" + MaintenanceWindow . ScheduledEndTime ) ;
175
- throw new HttpResponseException ( message ) ;
182
+ HttpResponseMessage message = new HttpResponseMessage ( HttpStatusCode . Conflict ) ;
183
+ message . Content = new StringContent ( "Object already in maintenance until" + MaintenanceWindow . ScheduledEndTime ) ;
184
+ throw new HttpResponseException ( message ) ;
176
185
177
- }
186
+ }
178
187
179
188
//Return list of computers as Json
180
189
return Json ( MaintenanceObjects ) ;
@@ -188,15 +197,16 @@ public IHttpActionResult EnableObjectMaintenance(SCOMObjectMaintenanceModel Data
188
197
/// <example>
189
198
/// {
190
199
/// "scheduleName": "string",
191
- /// "id": "monitoringObjectId",
200
+ /// "id": "[ monitoringObjectId] ",
192
201
/// "StartTime": "2017-05-22T07:01:00.374Z",
193
202
/// "EndTime": "2017-05-22T08:01:00.374Z",
194
203
/// "comment": "doing maintenance"
195
204
/// }
196
205
/// </example>
197
206
/// <remarks>
198
207
/// ##SCOM 2016 Only##
199
- /// Only non recurring schedules with one object is supported. Maintenance reason is hard coded to 'PlannedOther'
208
+ /// Only non recurring schedules are supported. Maintenance reason will be hard coded to 'PlannedOther'
209
+ /// Use the other endpoints to obtain your MonitoringObjectId
200
210
/// </remarks>
201
211
/// <response code="201">Successfully added maintenance mode for the object</response>
202
212
/// <response code="400">Bad request. Check json input</response>
@@ -206,15 +216,24 @@ public IHttpActionResult EnableObjectMaintenance(SCOMObjectMaintenanceModel Data
206
216
[ Route ( "API/MaintenanceSchedule" ) ]
207
217
public IHttpActionResult ScheduleObjectMaintenance ( SCOMObjectSchedMaintenanceModel Data )
208
218
{
209
-
210
- //create a Guid from the json input
211
- var ObjectId = new Guid ( Data . id ) ;
212
- //get the monitoring object by Guid
213
- var monObject = mg . EntityObjects . GetObject < MonitoringObject > ( ObjectId , ObjectQueryOptions . Default ) ;
219
+ //Validate post
220
+ if ( ! ModelState . IsValid )
221
+ {
222
+ HttpResponseMessage message = new HttpResponseMessage ( HttpStatusCode . BadRequest ) ;
223
+ message . Content = new StringContent ( "Missing a required parameter?" ) ;
224
+ throw new HttpResponseException ( message ) ;
225
+ }
226
+
227
+ //LOOP through the id array and add each GUID to the object list
214
228
System . Collections . Generic . List < System . Guid > ObjectList = new System . Collections . Generic . List < System . Guid > ( ) ;
229
+ string [ ] array = Data . id ;
230
+ foreach ( string s in array )
231
+ {
232
+ var item = new Guid ( s ) ;
215
233
216
- //add the monitoring object guids to list
217
- ObjectList . Add ( monObject . Id ) ;
234
+ ObjectList . Add ( item ) ;
235
+ }
236
+ //
218
237
219
238
//create a recurrencePattern this is 'sourced' from OmCommands.10.dll ( new-scommaintenanceSchedule CMDLET )
220
239
//read more: https://docs.microsoft.com/en-us/powershell/systemcenter/systemcenter2016/operationsmanager/vlatest/new-scommaintenanceschedule
@@ -235,27 +254,26 @@ public IHttpActionResult ScheduleObjectMaintenance(SCOMObjectSchedMaintenanceMod
235
254
int duration = ( int ) span . TotalMinutes ;
236
255
237
256
//Create the Maintenance schedule
238
- MaintenanceSchedule Sched = new MaintenanceSchedule ( mg , displayname , recursive , isEnabled , ObjectList , duration , activeStartTime , activeEndDate , MaintenanceModeReason . PlannedOther , comments , isRecurrence , recurrencePattern ) ;
239
-
257
+ MaintenanceSchedule Sched = new MaintenanceSchedule ( mg , displayname , recursive , isEnabled , ObjectList , duration , activeStartTime , activeEndDate , MaintenanceModeReason . PlannedOther , comments , isRecurrence , recurrencePattern ) ;
240
258
241
259
//Create the maintenance schedule
242
260
System . Guid guid = MaintenanceSchedule . CreateMaintenanceSchedule ( Sched , mg ) ;
243
261
244
- //Add properties to class and return the list as Json
262
+ //Add properties to class
245
263
var shed = MaintenanceSchedule . GetMaintenanceScheduleById ( guid , mg ) ;
246
264
List < SCOMObjectSchedMaintenanceModel > MaintenanceScheduleList = new List < SCOMObjectSchedMaintenanceModel > ( ) ;
247
- SCOMObjectSchedMaintenanceModel mSched = new SCOMObjectSchedMaintenanceModel ( ) ;
248
- mSched . id = shed . ScheduleId . ToString ( ) ;
265
+ SCOMObjectSchedMaintenanceModel mSched = new SCOMObjectSchedMaintenanceModel ( ) ;
266
+ mSched . id = array ;
249
267
mSched . StartTime = shed . ActiveStartTime ;
250
268
mSched . EndTime = shed . ScheduledEndTime ;
251
269
mSched . scheduleName = shed . ScheduleName ;
252
270
mSched . comment = shed . Comments ;
253
271
254
272
MaintenanceScheduleList . Add ( mSched ) ;
255
-
273
+ //return the post/class as Json
256
274
return Json ( MaintenanceScheduleList ) ;
257
275
258
-
276
+
259
277
}
260
278
261
279
}
0 commit comments