...
|
...
|
@@ -58,8 +58,8 @@ import java.util.List; |
58
|
58
|
public class AlarmController extends BaseController {
|
59
|
59
|
|
60
|
60
|
public static final String ALARM_ID = "alarmId";
|
61
|
|
- private static final String ALARM_SECURITY_CHECK = "If the user has the authority of 'Tenant Administrator', the server checks that the alarm is owned by the same tenant. " +
|
62
|
|
- "If the user has the authority of 'Customer User', the server checks that the alarm belongs to the customer. ";
|
|
61
|
+ private static final String ALARM_SECURITY_CHECK = "If the user has the authority of 'Tenant Administrator', the server checks that the originator of alarm is owned by the same tenant. " +
|
|
62
|
+ "If the user has the authority of 'Customer User', the server checks that the originator of alarm belongs to the customer. ";
|
63
|
63
|
private static final String ALARM_QUERY_SEARCH_STATUS_DESCRIPTION = "A string value representing one of the AlarmSearchStatus enumeration value";
|
64
|
64
|
private static final String ALARM_QUERY_SEARCH_STATUS_ALLOWABLE_VALUES = "ANY, ACTIVE, CLEARED, ACK, UNACK";
|
65
|
65
|
private static final String ALARM_QUERY_STATUS_DESCRIPTION = "A string value representing one of the AlarmStatus enumeration value";
|
...
|
...
|
@@ -104,9 +104,15 @@ public class AlarmController extends BaseController { |
104
|
104
|
}
|
105
|
105
|
|
106
|
106
|
@ApiOperation(value = "Create or update Alarm (saveAlarm)",
|
107
|
|
- notes = "Creates or Updates the Alarm. Platform generates random Alarm Id during alarm creation. " +
|
108
|
|
- "The Alarm Id will be present in the response. Specify the Alarm Id when you would like to update the Alarm. " +
|
109
|
|
- "Referencing non-existing Alarm Id will cause an error.", produces = MediaType.APPLICATION_JSON_VALUE)
|
|
107
|
+ notes = "Creates or Updates the Alarm. " +
|
|
108
|
+ "When creating alarm, platform generates Alarm Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address). " +
|
|
109
|
+ "The newly created Alarm id will be present in the response. Specify existing Alarm id to update the alarm. " +
|
|
110
|
+ "Referencing non-existing Alarm Id will cause 'Not Found' error. " +
|
|
111
|
+ "\n\nPlatform also deduplicate the alarms based on the entity id of originator and alarm 'type'. " +
|
|
112
|
+ "For example, if the user or system component create the alarm with the type 'HighTemperature' for device 'Device A' the new active alarm is created. " +
|
|
113
|
+ "If the user tries to create 'HighTemperature' alarm for the same device again, the previous alarm will be updated (the 'end_ts' will be set to current timestamp). " +
|
|
114
|
+ "If the user clears the alarm (see 'Clear Alarm(clearAlarm)'), than new alarm with the same type and same device may be created. "
|
|
115
|
+ , produces = MediaType.APPLICATION_JSON_VALUE)
|
110
|
116
|
@PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')")
|
111
|
117
|
@RequestMapping(value = "/alarm", method = RequestMethod.POST)
|
112
|
118
|
@ResponseBody
|
...
|
...
|
@@ -157,7 +163,9 @@ public class AlarmController extends BaseController { |
157
|
163
|
}
|
158
|
164
|
|
159
|
165
|
@ApiOperation(value = "Acknowledge Alarm (ackAlarm)",
|
160
|
|
- notes = "Acknowledge the Alarm. Referencing non-existing Alarm Id will cause an error.", produces = MediaType.APPLICATION_JSON_VALUE)
|
|
166
|
+ notes = "Acknowledge the Alarm. " +
|
|
167
|
+ "Once acknowledged, the 'ack_ts' field will be set to current timestamp and special rule chain event 'ALARM_ACK' will be generated. " +
|
|
168
|
+ "Referencing non-existing Alarm Id will cause an error.", produces = MediaType.APPLICATION_JSON_VALUE)
|
161
|
169
|
@PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')")
|
162
|
170
|
@RequestMapping(value = "/alarm/{alarmId}/ack", method = RequestMethod.POST)
|
163
|
171
|
@ResponseStatus(value = HttpStatus.OK)
|
...
|
...
|
@@ -179,7 +187,9 @@ public class AlarmController extends BaseController { |
179
|
187
|
}
|
180
|
188
|
|
181
|
189
|
@ApiOperation(value = "Clear Alarm (clearAlarm)",
|
182
|
|
- notes = "Clear the Alarm. Referencing non-existing Alarm Id will cause an error.", produces = MediaType.APPLICATION_JSON_VALUE)
|
|
190
|
+ notes = "Clear the Alarm. " +
|
|
191
|
+ "Once cleared, the 'clear_ts' field will be set to current timestamp and special rule chain event 'ALARM_CLEAR' will be generated. " +
|
|
192
|
+ "Referencing non-existing Alarm Id will cause an error.", produces = MediaType.APPLICATION_JSON_VALUE)
|
183
|
193
|
@PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')")
|
184
|
194
|
@RequestMapping(value = "/alarm/{alarmId}/clear", method = RequestMethod.POST)
|
185
|
195
|
@ResponseStatus(value = HttpStatus.OK)
|
...
|
...
|
@@ -215,9 +225,9 @@ public class AlarmController extends BaseController { |
215
|
225
|
@RequestParam(required = false) String searchStatus,
|
216
|
226
|
@ApiParam(value = ALARM_QUERY_STATUS_DESCRIPTION, allowableValues = ALARM_QUERY_STATUS_ALLOWABLE_VALUES)
|
217
|
227
|
@RequestParam(required = false) String status,
|
218
|
|
- @ApiParam(value = PAGE_SIZE_DESCRIPTION)
|
|
228
|
+ @ApiParam(value = PAGE_SIZE_DESCRIPTION, required = true)
|
219
|
229
|
@RequestParam int pageSize,
|
220
|
|
- @ApiParam(value = PAGE_NUMBER_DESCRIPTION)
|
|
230
|
+ @ApiParam(value = PAGE_NUMBER_DESCRIPTION, required = true)
|
221
|
231
|
@RequestParam int page,
|
222
|
232
|
@ApiParam(value = ALARM_QUERY_TEXT_SEARCH_DESCRIPTION)
|
223
|
233
|
@RequestParam(required = false) String textSearch,
|
...
|
...
|
@@ -264,9 +274,9 @@ public class AlarmController extends BaseController { |
264
|
274
|
@RequestParam(required = false) String searchStatus,
|
265
|
275
|
@ApiParam(value = ALARM_QUERY_STATUS_DESCRIPTION, allowableValues = ALARM_QUERY_STATUS_ALLOWABLE_VALUES)
|
266
|
276
|
@RequestParam(required = false) String status,
|
267
|
|
- @ApiParam(value = PAGE_SIZE_DESCRIPTION)
|
|
277
|
+ @ApiParam(value = PAGE_SIZE_DESCRIPTION, required = true)
|
268
|
278
|
@RequestParam int pageSize,
|
269
|
|
- @ApiParam(value = PAGE_NUMBER_DESCRIPTION)
|
|
279
|
+ @ApiParam(value = PAGE_NUMBER_DESCRIPTION, required = true)
|
270
|
280
|
@RequestParam int page,
|
271
|
281
|
@ApiParam(value = ALARM_QUERY_TEXT_SEARCH_DESCRIPTION)
|
272
|
282
|
@RequestParam(required = false) String textSearch,
|
...
|
...
|
@@ -301,14 +311,16 @@ public class AlarmController extends BaseController { |
301
|
311
|
}
|
302
|
312
|
|
303
|
313
|
@ApiOperation(value = "Get Highest Alarm Severity (getHighestAlarmSeverity)",
|
304
|
|
- notes = "Returns highest AlarmSeverity object for the selected entity.", produces = MediaType.APPLICATION_JSON_VALUE)
|
|
314
|
+ notes = "Search the alarms by originator ('entityType' and entityId') and optional 'status' or 'searchStatus' filters and returns the highest AlarmSeverity(CRITICAL, MAJOR, MINOR, WARNING or INDETERMINATE). " +
|
|
315
|
+ "Specifying both parameters 'searchStatus' and 'status' at the same time will cause an error."
|
|
316
|
+ , produces = MediaType.APPLICATION_JSON_VALUE)
|
305
|
317
|
@PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')")
|
306
|
318
|
@RequestMapping(value = "/alarm/highestSeverity/{entityType}/{entityId}", method = RequestMethod.GET)
|
307
|
319
|
@ResponseBody
|
308
|
320
|
public AlarmSeverity getHighestAlarmSeverity(
|
309
|
|
- @ApiParam(value = ENTITY_TYPE_DESCRIPTION)
|
|
321
|
+ @ApiParam(value = ENTITY_TYPE_DESCRIPTION, required = true)
|
310
|
322
|
@PathVariable("entityType") String strEntityType,
|
311
|
|
- @ApiParam(value = ENTITY_ID_DESCRIPTION)
|
|
323
|
+ @ApiParam(value = ENTITY_ID_DESCRIPTION, required = true)
|
312
|
324
|
@PathVariable("entityId") String strEntityId,
|
313
|
325
|
@ApiParam(value = ALARM_QUERY_SEARCH_STATUS_DESCRIPTION, allowableValues = ALARM_QUERY_SEARCH_STATUS_ALLOWABLE_VALUES)
|
314
|
326
|
@RequestParam(required = false) String searchStatus,
|
...
|
...
|
|