77using Microsoft . EnterpriseManagement ;
88using Microsoft . EnterpriseManagement . Common ;
99using Microsoft . EnterpriseManagement . Monitoring ;
10- using Microsoft . EnterpriseManagement . Monitoring . MaintenanceSchedule ;
1110using System . Web ;
11+ using Microsoft . SystemCenter . OperationsManagerV10 . Commands ;
1212using Microsoft . EnterpriseManagement . Configuration ;
1313using Newtonsoft . Json ;
1414using System . Collections . ObjectModel ;
1515using SCOM_API . Models ;
1616using System . Configuration ;
1717using System . Web . Http . Description ;
18+ using Microsoft . EnterpriseManagement . Monitoring . MaintenanceSchedule ;
1819
1920namespace SCOM_API . Controllers
2021{
@@ -55,7 +56,7 @@ public IHttpActionResult EnableComputerMaintenance(SCOMComputerMaintenanceModel
5556 IList < ManagementPackClass > monClasses = mg . EntityTypes . GetClasses ( classCriteria ) ;
5657 MonitoringObjectCriteria criteria = new MonitoringObjectCriteria ( string . Format ( "Name = '{0}'" , Data . DisplayName . ToString ( ) ) , monClasses [ 0 ] ) ;
5758 List < MonitoringObject > monObjects = new List < MonitoringObject > ( ) ;
58-
59+
5960 List < SCOMComputerMaintenanceModel > MaintenanceComputers = new List < SCOMComputerMaintenanceModel > ( ) ;
6061
6162 ///travers trough all classes to get monitoring objects
@@ -83,7 +84,7 @@ public IHttpActionResult EnableComputerMaintenance(SCOMComputerMaintenanceModel
8384 maintenanceComputer . EndTime = schedEndTime ;
8485 maintenanceComputer . Minutes = Data . Minutes ;
8586 maintenanceComputer . comment = comment ;
86-
87+
8788 //add computers to list
8889 MaintenanceComputers . Add ( maintenanceComputer ) ;
8990
@@ -131,6 +132,14 @@ public IHttpActionResult EnableComputerMaintenance(SCOMComputerMaintenanceModel
131132 [ Route ( "API/ObjectMaintenance" ) ]
132133 public IHttpActionResult EnableObjectMaintenance ( SCOMObjectMaintenanceModel Data )
133134 {
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+
134143 //create a Guid from the json input
135144 var ObjectId = new Guid ( Data . id ) ;
136145 //get the monitoring object by Guid
@@ -140,41 +149,41 @@ public IHttpActionResult EnableObjectMaintenance(SCOMObjectMaintenanceModel Data
140149
141150 List < SCOMObjectMaintenanceModel > MaintenanceObjects = new List < SCOMObjectMaintenanceModel > ( ) ;
142151
143- if ( ! monObject . InMaintenanceMode )
152+ if ( ! monObject . InMaintenanceMode )
153+ {
144154 {
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 ;
151160
152- monObject . ScheduleMaintenanceMode ( startTime , schedEndTime , reason , comment ) ;
161+ monObject . ScheduleMaintenanceMode ( startTime , schedEndTime , reason , comment ) ;
153162
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 ;
161170
162- //add computers to list
163- MaintenanceObjects . Add ( maintenanceObject ) ;
171+ //add computers to list
172+ MaintenanceObjects . Add ( maintenanceObject ) ;
164173
165- }
166174 }
175+ }
167176
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 ( ) ;
172181
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 ) ;
176185
177- }
186+ }
178187
179188 //Return list of computers as Json
180189 return Json ( MaintenanceObjects ) ;
@@ -188,15 +197,16 @@ public IHttpActionResult EnableObjectMaintenance(SCOMObjectMaintenanceModel Data
188197 /// <example>
189198 /// {
190199 /// "scheduleName": "string",
191- /// "id": "monitoringObjectId",
200+ /// "id": "[ monitoringObjectId] ",
192201 /// "StartTime": "2017-05-22T07:01:00.374Z",
193202 /// "EndTime": "2017-05-22T08:01:00.374Z",
194203 /// "comment": "doing maintenance"
195204 /// }
196205 /// </example>
197206 /// <remarks>
198207 /// ##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
200210 /// </remarks>
201211 /// <response code="201">Successfully added maintenance mode for the object</response>
202212 /// <response code="400">Bad request. Check json input</response>
@@ -206,15 +216,24 @@ public IHttpActionResult EnableObjectMaintenance(SCOMObjectMaintenanceModel Data
206216 [ Route ( "API/MaintenanceSchedule" ) ]
207217 public IHttpActionResult ScheduleObjectMaintenance ( SCOMObjectSchedMaintenanceModel Data )
208218 {
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
214228 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 ) ;
215233
216- //add the monitoring object guids to list
217- ObjectList . Add ( monObject . Id ) ;
234+ ObjectList . Add ( item ) ;
235+ }
236+ //
218237
219238 //create a recurrencePattern this is 'sourced' from OmCommands.10.dll ( new-scommaintenanceSchedule CMDLET )
220239 //read more: https://docs.microsoft.com/en-us/powershell/systemcenter/systemcenter2016/operationsmanager/vlatest/new-scommaintenanceschedule
@@ -235,27 +254,26 @@ public IHttpActionResult ScheduleObjectMaintenance(SCOMObjectSchedMaintenanceMod
235254 int duration = ( int ) span . TotalMinutes ;
236255
237256 //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 ) ;
240258
241259 //Create the maintenance schedule
242260 System . Guid guid = MaintenanceSchedule . CreateMaintenanceSchedule ( Sched , mg ) ;
243261
244- //Add properties to class and return the list as Json
262+ //Add properties to class
245263 var shed = MaintenanceSchedule . GetMaintenanceScheduleById ( guid , mg ) ;
246264 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 ;
249267 mSched . StartTime = shed . ActiveStartTime ;
250268 mSched . EndTime = shed . ScheduledEndTime ;
251269 mSched . scheduleName = shed . ScheduleName ;
252270 mSched . comment = shed . Comments ;
253271
254272 MaintenanceScheduleList . Add ( mSched ) ;
255-
273+ //return the post/class as Json
256274 return Json ( MaintenanceScheduleList ) ;
257275
258-
276+
259277 }
260278
261279 }
0 commit comments