mirror of
https://github.com/Telecominfraproject/wlan-cloud-services.git
synced 2026-03-20 21:39:21 +00:00
Compare commits
8 Commits
WIFI-3201
...
NETEXP-267
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
daabf38510 | ||
|
|
91877f5305 | ||
|
|
11314e3395 | ||
|
|
fa6795369c | ||
|
|
e6e06d7b70 | ||
|
|
1e15e3cd94 | ||
|
|
02e03780db | ||
|
|
aac34150b2 |
@@ -555,7 +555,7 @@ components:
|
||||
type: integer
|
||||
format: int32
|
||||
payload:
|
||||
$ref: '#/components/schemas/PortalUser'
|
||||
$ref: '#/components/schemas/PortalUserEventPayload'
|
||||
|
||||
PortalUserChangedEvent:
|
||||
properties:
|
||||
@@ -566,7 +566,7 @@ components:
|
||||
type: integer
|
||||
format: int32
|
||||
payload:
|
||||
$ref: '#/components/schemas/PortalUser'
|
||||
$ref: '#/components/schemas/PortalUserEventPayload'
|
||||
|
||||
PortalUserRemovedEvent:
|
||||
properties:
|
||||
@@ -577,7 +577,7 @@ components:
|
||||
type: integer
|
||||
format: int32
|
||||
payload:
|
||||
$ref: '#/components/schemas/PortalUser'
|
||||
$ref: '#/components/schemas/PortalUserEventPayload'
|
||||
|
||||
ProfileAddedEvent:
|
||||
properties:
|
||||
@@ -2382,7 +2382,7 @@ components:
|
||||
# Portal User data models
|
||||
#
|
||||
|
||||
PortalUser:
|
||||
PortalUserEventPayload:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
@@ -2393,10 +2393,6 @@ components:
|
||||
format: int32
|
||||
username:
|
||||
type: string
|
||||
password:
|
||||
type: string
|
||||
role:
|
||||
$ref: '#/components/schemas/PortalUserRole'
|
||||
createdTimestamp:
|
||||
type: integer
|
||||
format: int64
|
||||
@@ -2407,8 +2403,6 @@ components:
|
||||
example:
|
||||
customerId: 2
|
||||
username: new_user
|
||||
password: pwd
|
||||
role: CustomerIT
|
||||
|
||||
PortalUserRole:
|
||||
type: string
|
||||
|
||||
@@ -59,11 +59,6 @@ public enum CEGWCommandType {
|
||||
WdsRequest,
|
||||
|
||||
ClientBlocklistChangeNotification,
|
||||
|
||||
/**
|
||||
* Most recent timestamp for receipt of stats data from this AP.
|
||||
*/
|
||||
MostRecentStatsTimestamp,
|
||||
|
||||
UNSUPPORTED;
|
||||
|
||||
|
||||
@@ -118,33 +118,40 @@ public class EquipmentRrmBulkUpdateItem extends BaseJsonModel {
|
||||
finalDetails.getRadioMap().put(rt, erc);
|
||||
}
|
||||
|
||||
if(erc.getManualChannelNumber()== null || erc.getManualChannelNumber().intValue() != updateDetails.getChannelNumber()) {
|
||||
if(erc.getManualChannelNumber() == null
|
||||
|| erc.getManualChannelNumber().intValue() != updateDetails.getChannelNumber()) {
|
||||
erc.setManualChannelNumber(updateDetails.getChannelNumber());
|
||||
modelChanged.set(true);
|
||||
}
|
||||
|
||||
if(erc.getManualBackupChannelNumber()== null ||
|
||||
erc.getManualBackupChannelNumber().intValue() != updateDetails.getBackupChannelNumber()) {
|
||||
if(erc.getManualBackupChannelNumber() == null
|
||||
|| erc.getManualBackupChannelNumber().intValue() != updateDetails.getBackupChannelNumber()) {
|
||||
erc.setManualBackupChannelNumber(updateDetails.getBackupChannelNumber());
|
||||
modelChanged.set(true);
|
||||
}
|
||||
|
||||
if ((erc.getClientDisconnectThresholdDb() == null && updateDetails.getClientDisconnectThresholdDb() != null)
|
||||
|| !erc.getClientDisconnectThresholdDb().equals(updateDetails.getClientDisconnectThresholdDb())) {
|
||||
erc.setClientDisconnectThresholdDb(updateDetails.getClientDisconnectThresholdDb());
|
||||
modelChanged.set(true);
|
||||
if (updateDetails.getClientDisconnectThresholdDb() != null) {
|
||||
if ((erc.getClientDisconnectThresholdDb() == null && updateDetails.getClientDisconnectThresholdDb() != null)
|
||||
|| !erc.getClientDisconnectThresholdDb().equals(updateDetails.getClientDisconnectThresholdDb())) {
|
||||
erc.setClientDisconnectThresholdDb(updateDetails.getClientDisconnectThresholdDb());
|
||||
modelChanged.set(true);
|
||||
}
|
||||
}
|
||||
|
||||
if ((erc.getProbeResponseThresholdDb() == null && updateDetails.getProbeResponseThresholdDb() != null)
|
||||
|| !erc.getProbeResponseThresholdDb().equals(updateDetails.getProbeResponseThresholdDb())) {
|
||||
erc.setProbeResponseThresholdDb(updateDetails.getProbeResponseThresholdDb());
|
||||
modelChanged.set(true);
|
||||
if (updateDetails.getProbeResponseThresholdDb() != null) {
|
||||
if ((erc.getProbeResponseThresholdDb() == null && updateDetails.getProbeResponseThresholdDb() != null)
|
||||
|| !erc.getProbeResponseThresholdDb().equals(updateDetails.getProbeResponseThresholdDb())) {
|
||||
erc.setProbeResponseThresholdDb(updateDetails.getProbeResponseThresholdDb());
|
||||
modelChanged.set(true);
|
||||
}
|
||||
}
|
||||
|
||||
if ((erc.getRxCellSizeDb() == null && updateDetails.getRxCellSizeDb() != null)
|
||||
|| !erc.getRxCellSizeDb().equals(updateDetails.getRxCellSizeDb())) {
|
||||
erc.setRxCellSizeDb(updateDetails.getRxCellSizeDb());
|
||||
modelChanged.set(true);
|
||||
if (updateDetails.getRxCellSizeDb() != null) {
|
||||
if ((erc.getRxCellSizeDb() == null && updateDetails.getRxCellSizeDb() != null)
|
||||
|| !erc.getRxCellSizeDb().equals(updateDetails.getRxCellSizeDb())) {
|
||||
erc.setRxCellSizeDb(updateDetails.getRxCellSizeDb());
|
||||
modelChanged.set(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -83,10 +83,7 @@ public class EquipmentServiceRemoteTest extends BaseRemoteTest {
|
||||
equipment.setName("testName-"+getNextEquipmentId());
|
||||
equipment.setInventoryId("test-inv-"+getNextEquipmentId());
|
||||
equipment.setEquipmentType(EquipmentType.AP);
|
||||
equipment.setLocationId(1);
|
||||
equipment.setProfileId(1);
|
||||
equipment.setCustomerId(1);
|
||||
|
||||
|
||||
Equipment ret = remoteInterface.create(equipment);
|
||||
assertNotNull(ret);
|
||||
|
||||
@@ -634,9 +631,6 @@ public class EquipmentServiceRemoteTest extends BaseRemoteTest {
|
||||
equipment.setName("testName-"+getNextEquipmentId());
|
||||
equipment.setInventoryId("test-inv-"+getNextEquipmentId());
|
||||
equipment.setEquipmentType(EquipmentType.AP);
|
||||
equipment.setCustomerId(1);
|
||||
equipment.setLocationId(1);
|
||||
equipment.setProfileId(1);
|
||||
equipment.setDetails(ApElementConfiguration.createWithDefaults());
|
||||
|
||||
ElementRadioConfiguration element2dot4RadioConfig = ((ApElementConfiguration)equipment.getDetails()).getRadioMap().get(RadioType.is2dot4GHz);
|
||||
|
||||
@@ -258,10 +258,7 @@ public class EquipmentController {
|
||||
|
||||
LOG.debug("Updating Equipment {}", equipment);
|
||||
|
||||
if (BaseJsonModel.hasUnsupportedValue(equipment)
|
||||
|| equipment.getCustomerId() == 0
|
||||
|| equipment.getLocationId() == 0
|
||||
|| equipment.getProfileId() == 0) {
|
||||
if (BaseJsonModel.hasUnsupportedValue(equipment)) {
|
||||
LOG.error("Failed to update Equipment, request contains unsupported value: {}", equipment);
|
||||
throw new DsDataValidationException("Equipment contains unsupported value");
|
||||
}
|
||||
|
||||
@@ -16,12 +16,9 @@ import com.telecominfraproject.wlan.equipment.models.Equipment;
|
||||
import com.telecominfraproject.wlan.equipment.models.RadioChannelChangeSettings;
|
||||
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWBlinkRequest;
|
||||
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWCommandResultCode;
|
||||
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWCommandType;
|
||||
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWFirmwareDownloadRequest;
|
||||
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWMostRecentStatsTimestamp;
|
||||
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWNewChannelRequest;
|
||||
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWRebootRequest;
|
||||
import com.telecominfraproject.wlan.equipmentgateway.models.CEGatewayCommand;
|
||||
import com.telecominfraproject.wlan.equipmentgateway.models.EquipmentCommandResponse;
|
||||
import com.telecominfraproject.wlan.equipmentgateway.service.EquipmentGatewayServiceInterface;
|
||||
import com.telecominfraproject.wlan.firmware.FirmwareServiceInterface;
|
||||
@@ -163,17 +160,4 @@ public class EquipmentGatewayPortalController {
|
||||
}
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/equipmentGateway/lastReceivedStatsTimestamp", method = RequestMethod.GET)
|
||||
public GenericResponse lastReceivedStatsTimestamp(@RequestParam long equipmentId) {
|
||||
Equipment equipment = equipmentServiceInterface.get(equipmentId);
|
||||
String apId = equipment.getInventoryId();
|
||||
CEGWMostRecentStatsTimestamp mostRecentStatsTimestamp = new CEGWMostRecentStatsTimestamp(CEGWCommandType.MostRecentStatsTimestamp, apId, equipmentId);
|
||||
EquipmentCommandResponse response = equipmentGatewayServiceInterface.sendCommand(mostRecentStatsTimestamp);
|
||||
LOG.debug("lastReceivedStatsTimestamp response {}", response);
|
||||
if (response.getResultCode() == CEGWCommandResultCode.Success) {
|
||||
return new GenericResponse(true, response.getResultDetail());
|
||||
} else {
|
||||
return new GenericResponse(false, response.getResultCode() + " - Failed to get last received stats timestamp for " + apId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14268,31 +14268,6 @@ paths:
|
||||
$ref: '#/components/schemas/GenericResponse'
|
||||
500:
|
||||
$ref: '#/components/responses/GenericApiError'
|
||||
|
||||
/portal/equipmentGateway/lastReceivedStatsTimestamp:
|
||||
get:
|
||||
tags:
|
||||
- Equipment Gateway
|
||||
summary: Request to get the last received (most recent) stats received timestamp for the APs session with the gateway controller
|
||||
operationId: lastReceivedStatsTimestamp
|
||||
parameters:
|
||||
- name: equipmentId
|
||||
in: query
|
||||
description: Equipment id for AP for which last received stats timestamp is being requested.
|
||||
required: true
|
||||
schema:
|
||||
type: integer
|
||||
format: int64
|
||||
responses:
|
||||
200:
|
||||
description: successful operation
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/GenericResponse'
|
||||
500:
|
||||
$ref: '#/components/responses/GenericApiError'
|
||||
|
||||
|
||||
/portal/equipmentGateway/requestChannelChange:
|
||||
post:
|
||||
|
||||
@@ -20,6 +20,8 @@ public class PortalUserEventPayload extends BaseJsonModel implements HasCustomer
|
||||
private long createdTimestamp;
|
||||
private long lastModifiedTimestamp;
|
||||
|
||||
public PortalUserEventPayload() {}
|
||||
|
||||
public PortalUserEventPayload(PortalUser portalUser) {
|
||||
this.setId(portalUser.getId());
|
||||
this.setCustomerId(portalUser.getCustomerId());
|
||||
|
||||
@@ -15,6 +15,9 @@ import org.springframework.stereotype.Component;
|
||||
|
||||
import com.telecominfraproject.wlan.alarm.AlarmServiceInterface;
|
||||
import com.telecominfraproject.wlan.alarm.models.Alarm;
|
||||
import com.telecominfraproject.wlan.client.ClientServiceInterface;
|
||||
import com.telecominfraproject.wlan.client.session.models.AssociationState;
|
||||
import com.telecominfraproject.wlan.client.session.models.ClientSession;
|
||||
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
|
||||
import com.telecominfraproject.wlan.core.model.pagination.PaginationContext;
|
||||
import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse;
|
||||
@@ -75,6 +78,8 @@ public class EquipmentConfigPushTrigger extends StreamProcessor {
|
||||
private StatusServiceInterface statusServiceInterface;
|
||||
@Autowired
|
||||
private AlarmServiceInterface alarmServiceInterface;
|
||||
@Autowired
|
||||
private ClientServiceInterface clientServiceInterface;
|
||||
|
||||
@Override
|
||||
protected boolean acceptMessage(QueuedStreamMessage message) {
|
||||
@@ -275,10 +280,49 @@ public class EquipmentConfigPushTrigger extends StreamProcessor {
|
||||
});
|
||||
}
|
||||
alarmServiceInterface.delete(existingEquipment.getCustomerId(), existingEquipment.getId());
|
||||
|
||||
// Disconnect all associated client devices from existing equipment
|
||||
disconnectClients(existingEquipment);
|
||||
|
||||
}
|
||||
|
||||
private void process(BaseJsonModel model) {
|
||||
LOG.warn("Unprocessed model: {}", model);
|
||||
}
|
||||
|
||||
private void disconnectClients(Equipment ce) {
|
||||
|
||||
LOG.info("EquipmentConfigPushTrigger::disconnectClients for Equipment {}", ce);
|
||||
PaginationResponse<ClientSession> clientSessions = clientServiceInterface.getSessionsForCustomer(
|
||||
ce.getCustomerId(), Set.of(ce.getId()), Set.of(ce.getLocationId()), null, null,
|
||||
new PaginationContext<ClientSession>(100));
|
||||
|
||||
if (clientSessions == null) {
|
||||
LOG.info("There are no existing client sessions to disconnect.");
|
||||
return;
|
||||
}
|
||||
|
||||
List<ClientSession> toBeDisconnected = new ArrayList<>();
|
||||
|
||||
clientSessions.getItems().stream().forEach(c -> {
|
||||
if (c.getDetails().getAssociationState() != null
|
||||
&& !c.getDetails().getAssociationState().equals(AssociationState.Disconnected)) {
|
||||
LOG.info("Change association state for client {} from {} to {}", c.getMacAddress(),
|
||||
c.getDetails().getAssociationState(), AssociationState.Disconnected);
|
||||
|
||||
c.getDetails().setAssociationState(AssociationState.Disconnected);
|
||||
toBeDisconnected.add(c);
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
if (!toBeDisconnected.isEmpty()) {
|
||||
LOG.info("Sending disconnect for client sessions {}", toBeDisconnected);
|
||||
List<ClientSession> disconnectedSessions = clientServiceInterface.updateSessions(toBeDisconnected);
|
||||
LOG.info("Result of client disconnect {}", disconnectedSessions);
|
||||
} else {
|
||||
LOG.info("There are no existing client sessions that are not already in Disconnected state.");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,8 +56,7 @@ public class StatusDatastoreCassandra implements StatusDatastore {
|
||||
private static final Set<String> columnsToSkipForUpdate = new HashSet<>(Arrays.asList(
|
||||
"customerId",
|
||||
"equipmentId",
|
||||
"statusDataType",
|
||||
"createdTimestamp"));
|
||||
"statusDataType"));
|
||||
|
||||
private static final String TABLE_NAME = "status";
|
||||
private static final String ALL_COLUMNS;
|
||||
@@ -230,11 +229,14 @@ public class StatusDatastoreCassandra implements StatusDatastore {
|
||||
//This DAO does not enforce check for concurrent updates. Last one always wins.
|
||||
|
||||
long newLastModifiedTs = System.currentTimeMillis();
|
||||
boolean isCreateNotSet = status.getCreatedTimestamp() == 0;
|
||||
|
||||
|
||||
cqlSession.execute(preparedStmt_update.bind(
|
||||
|
||||
//TODO: add remaining properties from Status here
|
||||
(status.getDetails()!=null) ? ByteBuffer.wrap(status.getDetails().toZippedBytes()) : null ,
|
||||
isCreateNotSet ? newLastModifiedTs : status.getCreatedTimestamp(),
|
||||
|
||||
newLastModifiedTs,
|
||||
|
||||
@@ -253,6 +255,9 @@ public class StatusDatastoreCassandra implements StatusDatastore {
|
||||
|
||||
//make a copy so that we don't accidentally update caller's version by reference
|
||||
Status statusCopy = status.clone();
|
||||
if(isCreateNotSet) {
|
||||
statusCopy.setCreatedTimestamp(newLastModifiedTs);
|
||||
}
|
||||
statusCopy.setLastModifiedTimestamp(newLastModifiedTs);
|
||||
|
||||
LOG.debug("Updated Status {}", statusCopy);
|
||||
|
||||
@@ -2415,8 +2415,6 @@ components:
|
||||
example:
|
||||
customerId: 2
|
||||
username: new_user
|
||||
password: pwd
|
||||
role: CustomerIT
|
||||
|
||||
PortalUserRole:
|
||||
type: string
|
||||
|
||||
Reference in New Issue
Block a user