600f50344af5bbeaf3eff08345e46340f3eac2db
[oam/nf-oam-adopter.git] / ves-nf-oam-adopter / ves-nf-oam-adopter-snmp-manager / src / main / java / org / o / ran / oam / nf / oam / adopter / snmp / manager / mapper / FaultFieldsHandler.java
1 /*
2  *  ============LICENSE_START=======================================================
3  *  O-RAN-SC
4  *  ================================================================================
5  *  Copyright © 2021 AT&T Intellectual Property. All rights reserved.
6  *  ================================================================================
7  *  Licensed under the Apache License, Version 2.0 (the "License");
8  *  you may not use this file except in compliance with the License.
9  *  You may obtain a copy of the License at
10  *        http://www.apache.org/licenses/LICENSE-2.0
11  *
12  *  Unless required by applicable law or agreed to in writing, software
13  *  distributed under the License is distributed on an "AS IS" BASIS,
14  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  *  See the License for the specific language governing permissions and
16  *  limitations under the License.
17  *  ============LICENSE_END=========================================================
18  */
19
20 package org.o.ran.oam.nf.oam.adopter.snmp.manager.mapper;
21
22 import static org.o.ran.oam.nf.oam.adopter.snmp.manager.mapper.SnmpMapperImpl.DEFAULT;
23
24 import java.util.List;
25 import java.util.Map;
26 import java.util.Optional;
27 import java.util.stream.Collectors;
28 import lombok.AccessLevel;
29 import lombok.NoArgsConstructor;
30 import org.o.ran.oam.nf.oam.adopter.api.FaultFields;
31 import org.o.ran.oam.nf.oam.adopter.snmp.manager.pojos.TrapsMappingConfiguration;
32 import org.snmp4j.PDU;
33 import org.snmp4j.smi.OID;
34 import org.snmp4j.smi.Variable;
35 import org.snmp4j.smi.VariableBinding;
36
37 @NoArgsConstructor(access = AccessLevel.PRIVATE)
38 final class FaultFieldsHandler {
39     private static final String SNMP_FAULT = "SNMP_Fault";
40     private static final String SNMP_UNKNOWN = "Unknown";
41
42     public static FaultFields toFaultFields(final TrapsMappingConfiguration trapsDescription, final PDU pdu) {
43         final FaultFields faultFields = new FaultFields();
44         setMandatoryFields(faultFields, trapsDescription, pdu);
45         setOptionalFields(faultFields, trapsDescription, pdu);
46         return faultFields;
47     }
48
49     private static void setMandatoryFields(final FaultFields faultFields,
50             final TrapsMappingConfiguration trapsDescription, final PDU pdu) {
51         faultFields.setAlarmCondition(trapsDescription.getName());
52         faultFields.setEventSeverity(FaultFields.EventSeverity.fromValue(trapsDescription.getOidEventSeverity()));
53         faultFields.setEventSourceType(Optional.ofNullable(trapsDescription.getEventSourceType()).orElse(SNMP_UNKNOWN));
54         faultFields.setFaultFieldsVersion(FaultFields.FaultFieldsVersion._4_0);
55         final String descOid = trapsDescription.getOidSpecificProblemDesc();
56         faultFields.setSpecificProblem(SNMP_FAULT);
57         if (descOid != null && !DEFAULT.equals(descOid)) {
58             final Variable desc = pdu.getVariable(new OID(descOid));
59             faultFields.setSpecificProblem(desc == null ? SNMP_FAULT : desc.toString());
60         }
61         faultFields.setVfStatus(FaultFields.VfStatus.ACTIVE);
62     }
63
64     private static void setOptionalFields(final FaultFields faultFields,
65             final TrapsMappingConfiguration trapsDescription, final PDU pdu) {
66         final List<? extends VariableBinding> variables = pdu.getVariableBindings();
67         final Map<String, String> map = variables.stream()
68                 .collect(Collectors.toMap(x -> x.getOid().toString(), x -> x.getVariable().toString()));
69
70         faultFields.setAlarmAdditionalInformation(map.isEmpty() ? null : map);
71         final String interfaceOid = trapsDescription.getOidAlarmInterfaceName();
72         if (interfaceOid != null) {
73             final Variable desc = pdu.getVariable(new OID(interfaceOid));
74             faultFields.setAlarmInterfaceA(desc == null ? SNMP_FAULT : desc.toString());
75         }
76         final String eCategory = trapsDescription.getEventCategory();
77         faultFields.setEventCategory(eCategory);
78     }
79 }