blob: f92f8d0db535ae60569949f82fc44de370af314b [file] [log] [blame]
/*
* Copyright 2018-present Open Networking Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.faultmanagement.alarms.cli;
import org.apache.karaf.shell.api.action.Argument;
import org.apache.karaf.shell.api.action.Command;
import org.apache.karaf.shell.api.action.lifecycle.Service;
import org.onosproject.cli.AbstractShellCommand;
import org.onosproject.faultmanagement.api.AlarmStore;
import org.onosproject.incubator.net.faultmanagement.alarm.Alarm;
import org.onosproject.incubator.net.faultmanagement.alarm.AlarmEntityId;
import org.onosproject.incubator.net.faultmanagement.alarm.AlarmId;
import org.onosproject.incubator.net.faultmanagement.alarm.DefaultAlarm;
import java.time.Instant;
/**
* Updates an existing alarm.
*/
@Command(scope = "onos", name = "alarm-update",
description = "Updates an alarm")
@Service
public class UpdateAlarm extends AbstractShellCommand {
@Argument(index = 0, name = "alarmId", description = "Unique alarm id",
required = true, multiValued = false)
String alarmId = null;
@Argument(index = 1, name = "desc", description = "Alarm field",
required = true, multiValued = false)
String alarmField = null;
@Argument(index = 2, name = "value", description = "The new value of the chosen Alarm field.",
required = true, multiValued = false)
String alarmFieldValue = null;
private AlarmStore alarmStore = AbstractShellCommand.get(AlarmStore.class);
@Override
protected void doExecute() {
Alarm existing = alarmStore.getAlarm(AlarmId.alarmId(alarmId));
DefaultAlarm.Builder newAlarmBuilder = new DefaultAlarm.Builder(existing);
UpdateAlarm.AlarmField field = UpdateAlarm.AlarmField.valueOf(alarmField);
switch (field) {
case SOURCE:
AlarmEntityId sourceId = AlarmEntityId.alarmEntityId(alarmFieldValue);
newAlarmBuilder.forSource(sourceId);
break;
case ASSIGNED_USER:
newAlarmBuilder.withAssignedUser(alarmFieldValue);
break;
case ACKNOWLEDGED:
newAlarmBuilder.withAcknowledged("TRUE".equalsIgnoreCase(alarmFieldValue));
break;
case MANUALLY_CLEARABLE:
newAlarmBuilder.withManuallyClearable("TRUE".equalsIgnoreCase(alarmFieldValue));
break;
case SERVICE_AFFECTING:
newAlarmBuilder.withServiceAffecting("TRUE".equalsIgnoreCase(alarmFieldValue));
break;
case TIME_CLEARED:
newAlarmBuilder.clear();
newAlarmBuilder.withTimeCleared(Instant.parse(alarmFieldValue).toEpochMilli());
break;
case TIME_UPDATED:
default:
newAlarmBuilder.withTimeUpdated(Instant.parse(alarmFieldValue).toEpochMilli());
break;
}
alarmStore.createOrUpdateAlarm(newAlarmBuilder.build());
}
public enum AlarmField {
SOURCE,
ASSIGNED_USER,
ACKNOWLEDGED,
MANUALLY_CLEARABLE,
SERVICE_AFFECTING,
TIME_CLEARED,
TIME_UPDATED
}
}