diff --git a/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/controller/OpensyncCloudGatewayController.java b/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/controller/OpensyncCloudGatewayController.java index 8d1caa5..9ca1acc 100644 --- a/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/controller/OpensyncCloudGatewayController.java +++ b/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/controller/OpensyncCloudGatewayController.java @@ -1,3 +1,4 @@ + package com.telecominfraproject.wlan.opensync.external.integration.controller; import java.util.ArrayList; @@ -149,19 +150,16 @@ public class OpensyncCloudGatewayController { String inventoryId = command.getInventoryId(); if (com.telecominfraproject.wlan.core.model.json.BaseJsonModel.hasUnsupportedValue(command)) { - LOG.error("[{}] Failed to deliver command {}, command contains unsupported value", inventoryId, - command); - ret.add(new EquipmentCommandResponse(CEGWCommandResultCode.UnsupportedCommand, - "Unsupported value in command for " + inventoryId, command, registeredGateway == null ? null : registeredGateway.getHostname(), - registeredGateway == null ? -1 : registeredGateway.getPort())); + LOG.error("[{}] Failed to deliver command {}, command contains unsupported value", inventoryId, command); + ret.add(new EquipmentCommandResponse(CEGWCommandResultCode.UnsupportedCommand, "Unsupported value in command for " + inventoryId, command, + registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort())); return; } OvsdbSession session = ovsdbSessionMapInterface.getSession(inventoryId); if (session == null) { LOG.warn("[{}] Failed to deliver command {}, equipment session not found", inventoryId, command); - ret.add(new EquipmentCommandResponse(CEGWCommandResultCode.NoRouteToCE, - "No session found for " + inventoryId, command, registeredGateway == null ? null : registeredGateway.getHostname(), - registeredGateway == null ? -1 : registeredGateway.getPort())); + ret.add(new EquipmentCommandResponse(CEGWCommandResultCode.NoRouteToCE, "No session found for " + inventoryId, command, + registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort())); return; } @@ -201,8 +199,7 @@ public class OpensyncCloudGatewayController { ret.add(processRadioReboot(session, (CEGWRebootRequest) command)); break; case ClientBlocklistChangeNotification: - ret.add(sendClientBlocklistChangeNotification(session, - (CEGWClientBlocklistChangeNotification) command)); + ret.add(sendClientBlocklistChangeNotification(session, (CEGWClientBlocklistChangeNotification) command)); break; case NewChannelRequest: ret.add(sendNewChannelRequest(session, (CEGWNewChannelRequest) command)); @@ -212,22 +209,20 @@ public class OpensyncCloudGatewayController { break; default: LOG.warn("[{}] Failed to deliver command {}, unsupported command type", inventoryId, command); - ret.add(new EquipmentCommandResponse( - CEGWCommandResultCode.UnsupportedCommand, "Invalid command type (" - + command.getCommandType() + ") for equipment (" + inventoryId + ")", - command, registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort())); + ret.add(new EquipmentCommandResponse(CEGWCommandResultCode.UnsupportedCommand, + "Invalid command type (" + command.getCommandType() + ") for equipment (" + inventoryId + ")", command, + registeredGateway == null ? null : registeredGateway.getHostname(), + registeredGateway == null ? -1 : registeredGateway.getPort())); } } - }); return ret; } - private EquipmentCommandResponse processFirmwareDownload(OvsdbSession session, - CEGWFirmwareDownloadRequest command) { + private EquipmentCommandResponse processFirmwareDownload(OvsdbSession session, CEGWFirmwareDownloadRequest command) { return sendMessage(session, command.getInventoryId(), command); } @@ -259,19 +254,18 @@ public class OpensyncCloudGatewayController { if (null != command.getRoutingId()) { if (!command.getRoutingId().equals(session.getRoutingId())) { - LOG.info("[C:{} E:{} R:{}] Stale routing entry ({}) detected", session.getCustomerId(), - command.getInventoryId(), session.getRoutingId(), command.getRoutingId()); + LOG.info("[C:{} E:{} R:{}] Stale routing entry ({}) detected", session.getCustomerId(), command.getInventoryId(), session.getRoutingId(), + command.getRoutingId()); - return new EquipmentCommandResponse(CEGWCommandResultCode.NoRouteToCE, "Inactive Route Identifer", - command, registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort()); + return new EquipmentCommandResponse(CEGWCommandResultCode.NoRouteToCE, "Inactive Route Identifer", command, + registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort()); } } return new EquipmentCommandResponse(CEGWCommandResultCode.Success, "Route active", command, registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort()); } - private EquipmentCommandResponse sendConfigChangeNotification(OvsdbSession session, - CEGWConfigChangeNotification command) { + private EquipmentCommandResponse sendConfigChangeNotification(OvsdbSession session, CEGWConfigChangeNotification command) { return sendMessage(session, command.getInventoryId(), command); } @@ -281,27 +275,24 @@ public class OpensyncCloudGatewayController { session.getOvsdbClient().shutdown(); } catch (Exception e) { LOG.error("[{}] Failed to close session on CE: {}", command.getInventoryId(), e.getLocalizedMessage()); - return new EquipmentCommandResponse( - CEGWCommandResultCode.FailedToSend, "Failed to send command " + command.getCommandType() + " to " - + command.getInventoryId() + ": " + e.getMessage(), - command, registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort()); + return new EquipmentCommandResponse(CEGWCommandResultCode.FailedToSend, + "Failed to send command " + command.getCommandType() + " to " + command.getInventoryId() + ": " + e.getMessage(), command, + registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort()); } LOG.debug("[{}] Closed session to CE", command.getInventoryId()); - return new EquipmentCommandResponse(CEGWCommandResultCode.Success, - "Closed session to " + command.getInventoryId(), command, registeredGateway == null ? null : registeredGateway.getHostname(), - registeredGateway == null ? -1 : registeredGateway.getPort()); + return new EquipmentCommandResponse(CEGWCommandResultCode.Success, "Closed session to " + command.getInventoryId(), command, + registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort()); } - private EquipmentCommandResponse sendClientBlocklistChangeNotification(OvsdbSession session, - CEGWClientBlocklistChangeNotification command) { + private EquipmentCommandResponse sendClientBlocklistChangeNotification(OvsdbSession session, CEGWClientBlocklistChangeNotification command) { return sendMessage(session, command.getInventoryId(), command); } private EquipmentCommandResponse sendNewChannelRequest(OvsdbSession session, CEGWNewChannelRequest command) { return sendMessage(session, command.getInventoryId(), command); } - + private EquipmentCommandResponse sendCellSizeRequest(OvsdbSession session, CEGWCellSizeAttributesRequest command) { return sendMessage(session, command.getInventoryId(), command); } @@ -317,15 +308,17 @@ public class OpensyncCloudGatewayController { private EquipmentCommandResponse sendMessage(OvsdbSession session, String inventoryId, EquipmentCommand command) { LOG.debug("Received command {} for {}", command.getCommandType(), inventoryId); - EquipmentCommandResponse response = new EquipmentCommandResponse(CEGWCommandResultCode.Success, - "Received Command " + command.getCommandType() + " for " + inventoryId, command, - registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort()); + EquipmentCommandResponse response = + new EquipmentCommandResponse(CEGWCommandResultCode.Success, "Received Command " + command.getCommandType() + " for " + inventoryId, command, + registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort()); - if (command instanceof CEGWConfigChangeNotification) { + if (command instanceof CEGWBlinkRequest) { + String resultDetails = tipwlanOvsdbClient.processBlinkRequest(inventoryId, ((CEGWBlinkRequest)command).getBlinkAllLEDs()); + response.setResultDetail(resultDetails); + } else if (command instanceof CEGWConfigChangeNotification) { tipwlanOvsdbClient.processConfigChanged(inventoryId); } else if (command instanceof CEGWClientBlocklistChangeNotification) { - tipwlanOvsdbClient.processClientBlocklistChange(inventoryId, - ((CEGWClientBlocklistChangeNotification) command).getBlockList()); + tipwlanOvsdbClient.processClientBlocklistChange(inventoryId, ((CEGWClientBlocklistChangeNotification) command).getBlockList()); } else if (command instanceof CEGWChangeRedirectorHost) { String newRedirectorAddress = ((CEGWChangeRedirectorHost) command).getRedirectorHost(); tipwlanOvsdbClient.changeRedirectorHost(inventoryId, newRedirectorAddress); @@ -340,7 +333,7 @@ public class OpensyncCloudGatewayController { Map newBackupChannels = request.getNewBackupChannels(); Map newPrimaryChannels = request.getNewPrimaryChannels(); - String resultDetails = tipwlanOvsdbClient.processNewChannelsRequest(inventoryId, newBackupChannels,newPrimaryChannels); + String resultDetails = tipwlanOvsdbClient.processNewChannelsRequest(inventoryId, newBackupChannels, newPrimaryChannels); response.setResultDetail(resultDetails); } else if (command instanceof CEGWCellSizeAttributesRequest) { CEGWCellSizeAttributesRequest request = (CEGWCellSizeAttributesRequest) command; @@ -357,8 +350,7 @@ public class OpensyncCloudGatewayController { String firmwareVersion = dlRequest.getFirmwareVersion(); String username = dlRequest.getUsername(); - String resultDetails = tipwlanOvsdbClient.processFirmwareDownload(inventoryId, filepath, firmwareVersion, - username); + String resultDetails = tipwlanOvsdbClient.processFirmwareDownload(inventoryId, filepath, firmwareVersion, username); response.setResultDetail(resultDetails); @@ -370,8 +362,8 @@ public class OpensyncCloudGatewayController { flashRequest.getInventoryId(); flashRequest.getUsername(); - String resultDetails = tipwlanOvsdbClient.processFirmwareFlash(flashRequest.getInventoryId(), - flashRequest.getFirmwareVersion(), flashRequest.getUsername()); + String resultDetails = + tipwlanOvsdbClient.processFirmwareFlash(flashRequest.getInventoryId(), flashRequest.getFirmwareVersion(), flashRequest.getUsername()); response.setResultDetail(resultDetails); @@ -405,7 +397,6 @@ public class OpensyncCloudGatewayController { registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort()); } - } return response; @@ -423,15 +414,14 @@ public class OpensyncCloudGatewayController { return sendMessage(session, command.getInventoryId(), command); } - private EquipmentCommandResponse processBlinkRequest(OvsdbSession session, CEGWBlinkRequest command) { return sendMessage(session, command.getInventoryId(), command); } @RequestMapping(value = "/commandWithUser", method = RequestMethod.POST) - public EquipmentCommandResponse sendCommandWithAuthUser(@RequestBody EquipmentCommand command, - @AuthenticationPrincipal Object requestUser, HttpServletRequest httpServletRequest) { + public EquipmentCommandResponse sendCommandWithAuthUser(@RequestBody EquipmentCommand command, @AuthenticationPrincipal Object requestUser, + HttpServletRequest httpServletRequest) { // use these properties to get address and port where request has // arrived @@ -464,8 +454,7 @@ public class OpensyncCloudGatewayController { } if (eqRoutingSvc == null) { - throw new ConfigurationException( - "Unable to register gateway with routing service: routing service interface not initialized"); + throw new ConfigurationException("Unable to register gateway with routing service: routing service interface not initialized"); } cleanupStaleGwRecord(); @@ -481,13 +470,11 @@ public class OpensyncCloudGatewayController { EquipmentGatewayRecord result = eqRoutingSvc.registerGateway(gwRecord); registeredGwId = result.getId(); registeredGateway = result; - LOG.info("Successfully registered (name={}, id={}) with Routing Service", result.getHostname(), - registeredGwId); + LOG.info("Successfully registered (name={}, id={}) with Routing Service", result.getHostname(), registeredGwId); registeredWithRoutingService = true; } catch (RuntimeException e) { // failed - LOG.error("Failed to register Customer Equipment Gateway (name={}) with Routing Service : {}", - getGatewayName(), e.getLocalizedMessage()); + LOG.error("Failed to register Customer Equipment Gateway (name={}) with Routing Service : {}", getGatewayName(), e.getLocalizedMessage()); } } } @@ -512,8 +499,7 @@ public class OpensyncCloudGatewayController { eqRoutingSvc.deleteGateway(eqpRec.getId()); } catch (RuntimeException e) { // failed - LOG.error("Failed to delete Equipment Gateway (name={}) from Routing Service: {}", - eqpRec.getHostname(), e.getLocalizedMessage()); + LOG.error("Failed to delete Equipment Gateway (name={}) from Routing Service: {}", eqpRec.getHostname(), e.getLocalizedMessage()); } } else { LOG.debug("Gateway {} is reachable.", eqpRec.getHostname()); @@ -524,9 +510,8 @@ public class OpensyncCloudGatewayController { } } catch (Exception ex) { // Catching Exception to prevent crashing the // register thread - LOG.debug("Generic Exception encountered when trying to cleanup " - + "the stale not-reachable GateWays. Continuing to register the new Gateway." + " Error: {} ", - ex.getMessage()); + LOG.debug("Generic Exception encountered when trying to cleanup " + "the stale not-reachable GateWays. Continuing to register the new Gateway." + + " Error: {} ", ex.getMessage()); } } @@ -550,14 +535,13 @@ public class OpensyncCloudGatewayController { if (registeredWithRoutingService) { try { eqRoutingSvc.deleteGateway(registeredGwId); - LOG.info("Deregistered Customer Equipment Gateway (name={},id={}) with Routing Service", - getGatewayName(), registeredGwId); + LOG.info("Deregistered Customer Equipment Gateway (name={},id={}) with Routing Service", getGatewayName(), registeredGwId); registeredGwId = -1; registeredGateway = null; } catch (Exception e) { // failed - LOG.error("Failed to deregister Customer Equipment Gateway (name={},id={}) with Routing Service: {}", - getGatewayName(), registeredGwId, e.getLocalizedMessage()); + LOG.error("Failed to deregister Customer Equipment Gateway (name={},id={}) with Routing Service: {}", getGatewayName(), registeredGwId, + e.getLocalizedMessage()); } registeredWithRoutingService = false; } @@ -575,12 +559,10 @@ public class OpensyncCloudGatewayController { * @param equipmentId * @return associationId */ - public EquipmentRoutingRecord registerCustomerEquipment(String equipmentName, Integer customerId, - Long equipmentId) { + public EquipmentRoutingRecord registerCustomerEquipment(String equipmentName, Integer customerId, Long equipmentId) { registerWithRoutingService(); if (!registeredWithRoutingService) { - LOG.error("Unable to register customer equipement (name={},id={}): gateway not registered.", equipmentName, - equipmentId); + LOG.error("Unable to register customer equipement (name={},id={}): gateway not registered.", equipmentName, equipmentId); return null; } // Clean up stale records @@ -592,13 +574,11 @@ public class OpensyncCloudGatewayController { try { routingRecord = eqRoutingSvc.create(routingRecord); - LOG.debug("Registered customer equipment (name={},id={}) with route id={}", equipmentName, equipmentId, - routingRecord.getId()); + LOG.debug("Registered customer equipment (name={},id={}) with route id={}", equipmentName, equipmentId, routingRecord.getId()); return routingRecord; } catch (Exception e) { - LOG.error("Failed to register customer equipement (name={},id={}): {}", equipmentName, equipmentId, - e.getLocalizedMessage()); + LOG.error("Failed to register customer equipement (name={},id={}): {}", equipmentName, equipmentId, e.getLocalizedMessage()); } return null; } @@ -611,7 +591,7 @@ public class OpensyncCloudGatewayController { * Gateway does not exist, delete the equipmentRouting entry. * * @param equipmentId: - * Equipment's ID + * Equipment's ID */ protected void cleanupStaleEqptRoutingRecord(Long equipmentId) { LOG.debug("In Clean Up stale Equipment Routing record for Equipment ID {}", equipmentId); @@ -624,20 +604,17 @@ public class OpensyncCloudGatewayController { if (gwRec != null) { if (!isGwReachable(gwRec.getIpAddr(), gwRec.getPort())) { // GW isn't reachable --> invoke unregister - LOG.debug("Gateway {} is not-reachable... Deleting the equipment routing entry", - gwRec.getHostname()); + LOG.debug("Gateway {} is not-reachable... Deleting the equipment routing entry", gwRec.getHostname()); deleteUnresponiveGwRoutingRecord(eqRouting.getId(), equipmentId); } else { LOG.debug("Gateway {} is reachable.", gwRec.getHostname()); } } else { - LOG.debug("Gateway with ID {} not found. Deleting the equipment routing entry ", - eqRouting.getGatewayId()); + LOG.debug("Gateway with ID {} not found. Deleting the equipment routing entry ", eqRouting.getGatewayId()); deleteUnresponiveGwRoutingRecord(eqRouting.getId(), equipmentId); } } catch (DsEntityNotFoundException entityNotFoundException) { - LOG.debug("Gateway ID: {} not found... Deleting the equipment routing entry", - eqRouting.getGatewayId()); + LOG.debug("Gateway ID: {} not found... Deleting the equipment routing entry", eqRouting.getGatewayId()); deleteUnresponiveGwRoutingRecord(eqRouting.getId(), equipmentId); } } @@ -646,9 +623,10 @@ public class OpensyncCloudGatewayController { } } catch (Exception genericException) { // Catching Exception to prevent // crashing the register thread - LOG.debug("Generic Exception encountered when trying to cleanup " - + "the stale routing records for equipment ID: {}. Continuing to register the new RoutingRecord." - + " Error: {} ", equipmentId, genericException.getMessage()); + LOG.debug( + "Generic Exception encountered when trying to cleanup " + + "the stale routing records for equipment ID: {}. Continuing to register the new RoutingRecord." + " Error: {} ", + equipmentId, genericException.getMessage()); } } @@ -657,8 +635,7 @@ public class OpensyncCloudGatewayController { eqRoutingSvc.delete(routingId); } catch (RuntimeException e) { // failed - LOG.error("Failed to delete Equipment routing record (ID={}) from Routing Service: {}", eqptId, - e.getLocalizedMessage()); + LOG.error("Failed to delete Equipment routing record (ID={}) from Routing Service: {}", eqptId, e.getLocalizedMessage()); return false; } return true; @@ -666,18 +643,16 @@ public class OpensyncCloudGatewayController { public void deregisterCustomerEquipment(Long routingId, String equipmentName, Long equipmentId) { if (!registeredWithRoutingService) { - LOG.error("Unable to deregister customer equipement (name={},id={}): gateway not registered", equipmentName, - equipmentId); + LOG.error("Unable to deregister customer equipement (name={},id={}): gateway not registered", equipmentName, equipmentId); return; } try { - LOG.debug("Deregistering customer equipment (name={},id={}) with route id={}", equipmentName, equipmentId, - routingId); + LOG.debug("Deregistering customer equipment (name={},id={}) with route id={}", equipmentName, equipmentId, routingId); eqRoutingSvc.delete(routingId); } catch (Exception e) { - LOG.error("Failed to deregister customer equipement (name={},id={}) with route id={}: {}", equipmentName, - equipmentId, routingId, e.getLocalizedMessage()); + LOG.error("Failed to deregister customer equipement (name={},id={}) with route id={}: {}", equipmentName, equipmentId, routingId, + e.getLocalizedMessage()); } } diff --git a/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OvsdbClientInterface.java b/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OvsdbClientInterface.java index c13eed0..5229c48 100644 --- a/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OvsdbClientInterface.java +++ b/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OvsdbClientInterface.java @@ -17,6 +17,8 @@ public interface OvsdbClientInterface { String startDebugEngine(String apId, String gatewayHostname, Integer gatewayPort); String stopDebugEngine(String apId); + + String processBlinkRequest(String apId, boolean blinkAllLEDs); void processConfigChanged(String apId); diff --git a/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/TipWlanOvsdbClient.java b/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/TipWlanOvsdbClient.java index b2d8115..29aba3e 100644 --- a/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/TipWlanOvsdbClient.java +++ b/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/TipWlanOvsdbClient.java @@ -287,6 +287,15 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { return ovsdbDao.changeRedirectorAddress(ovsdbSession.getOvsdbClient(), apId, newRedirectorAddress); } + + public String processBlinkRequest(String apId, boolean blinkAllLEDs) { + OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId); + if (ovsdbSession == null) { + throw new IllegalStateException("AP with id " + apId + " is not connected"); + } + + return ovsdbDao.processBlinkRequest(ovsdbSession.getOvsdbClient(), apId, blinkAllLEDs); + } @Override public void processConfigChanged(String apId) { diff --git a/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbDao.java b/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbDao.java index 7b8901d..937da1a 100644 --- a/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbDao.java +++ b/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbDao.java @@ -237,4 +237,8 @@ public class OvsdbDao extends OvsdbDaoBase { ovsdbStats.updateEventReportingInterval(ovsdbClient, collectionIntervalSecEvent); } + public String processBlinkRequest(OvsdbClient ovsdbClient, String apId, boolean blinkAllLEDs) { + return ovsdbNodeConfig.processBlinkRequest(ovsdbClient,apId,blinkAllLEDs); + } + } diff --git a/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbNodeConfig.java b/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbNodeConfig.java index 7b85c06..0338f39 100644 --- a/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbNodeConfig.java +++ b/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbNodeConfig.java @@ -25,6 +25,7 @@ import com.vmware.ovsdb.protocol.operation.notation.Condition; import com.vmware.ovsdb.protocol.operation.notation.Function; import com.vmware.ovsdb.protocol.operation.notation.Row; import com.vmware.ovsdb.protocol.operation.notation.Value; +import com.vmware.ovsdb.protocol.operation.result.InsertResult; import com.vmware.ovsdb.protocol.operation.result.OperationResult; import com.vmware.ovsdb.protocol.operation.result.UpdateResult; import com.vmware.ovsdb.service.OvsdbClient; @@ -59,18 +60,17 @@ public class OvsdbNodeConfig extends OvsdbDaoBase { public void configureSyslog(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) { // /usr/opensync/tools/ovsh insert Node_Config module:="syslog" key:="remote" value:="udp:192.168.178.9:1000:4" - // The format is a colon delimited list. log_proto:log_ip:log_port:log_priority + // The format is a colon delimited list. log_proto:log_ip:log_port:log_priority try { ApNetworkConfiguration apNetworkConfig = (ApNetworkConfiguration) opensyncAPConfig.getApProfile().getDetails(); - if (apNetworkConfig.getSyslogRelay() == null ) { + if (apNetworkConfig.getSyslogRelay() == null) { LOG.info("Cannot configure syslog to null value. {}", apNetworkConfig); return; } - + if (apNetworkConfig.getSyslogRelay().isEnabled()) { - - if (apNetworkConfig.getSyslogRelay().getSrvHostIp() == null - || apNetworkConfig.getSyslogRelay().getSeverity() == null) { + + if (apNetworkConfig.getSyslogRelay().getSrvHostIp() == null || apNetworkConfig.getSyslogRelay().getSeverity() == null) { LOG.info("Cannot configure syslog remote_logging without SrvHostIp and Severity values. {}", apNetworkConfig); return; } @@ -78,8 +78,8 @@ public class OvsdbNodeConfig extends OvsdbDaoBase { Map columns = new HashMap<>(); columns.put("key", new Atom<>("remote")); columns.put("module", new Atom<>("syslog")); - String delimitedValue = "udp:" + apNetworkConfig.getSyslogRelay().getSrvHostIp().getHostAddress() + ":" + String - .valueOf(apNetworkConfig.getSyslogRelay().getSrvHostPort() + ":" +String.valueOf(apNetworkConfig.getSyslogRelay().getSeverity().getId())); + String delimitedValue = "udp:" + apNetworkConfig.getSyslogRelay().getSrvHostIp().getHostAddress() + ":" + String.valueOf( + apNetworkConfig.getSyslogRelay().getSrvHostPort() + ":" + String.valueOf(apNetworkConfig.getSyslogRelay().getSeverity().getId())); columns.put("value", new Atom<>(delimitedValue)); List operations = new ArrayList<>(); operations.add(new Update(nodeConfigTable, List.of(new Condition("module", Function.EQUALS, new Atom<>("syslog"))), new Row(columns))); @@ -119,4 +119,52 @@ public class OvsdbNodeConfig extends OvsdbDaoBase { } } + + public String processBlinkRequest(OvsdbClient ovsdbClient, String apId, boolean blinkAllLEDs) { + + String ret = null; + try { + + LOG.debug("processBlinkRequest set BlinkLEDs to {}", blinkAllLEDs); + Map columns = new HashMap<>(); + if (blinkAllLEDs) { + columns.put("module", new Atom<>("led")); + columns.put("key", new Atom<>("led_blink")); + columns.put("value", new Atom<>("on")); + } else { + columns.put("module", new Atom<>("led")); + columns.put("key", new Atom<>("led_off")); + columns.put("value", new Atom<>("off")); + } + List operations = new ArrayList<>(); + operations.add(new Update(nodeConfigTable, List.of(new Condition("module", Function.EQUALS, new Atom<>("led"))), new Row(columns))); + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + long numUpdates = 0; + for (OperationResult res : result) { + if (res instanceof UpdateResult) { + numUpdates += ((UpdateResult) res).getCount(); + LOG.debug("processBlinkRequest update result {}", res); + ret = "processBlinkRequest update result " + res; + } + } + if (numUpdates == 0) { + // no records existed, insert the row instead + operations.clear(); + operations.add(new Insert(nodeConfigTable, new Row(columns))); + fResult = ovsdbClient.transact(ovsdbName, operations); + result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + for (OperationResult res : result) { + if (res instanceof InsertResult) { + LOG.debug("processBlinkRequest insert result {}", res); + ret = "processBlinkRequest insert result " + res; + } + } + } + + return ret; + } catch (OvsdbClientException | InterruptedException | ExecutionException | TimeoutException e) { + throw new RuntimeException(e); + } + } }