Compare commits

..

18 Commits

Author SHA1 Message Date
Lynn Shi
3f3e40d2dd WIFI-3285 Use base channel as default value on 5G for backupChannelNumber and manualBackupChannelNumber in Equipment Config 2021-08-03 14:08:29 -04:00
Mike Hansen
91877f5305 Merge pull request #139 from Telecominfraproject/WIFI-3259-portal-user-event-payload-fix
[WIFI-3259] Adding default constructor to PortalUserEventPayload for …
2021-07-29 10:10:39 -04:00
ralphlee
11314e3395 [WIFI-3259] Adding default constructor to PortalUserEventPayload for serialization, updated yamls 2021-07-28 12:58:46 -04:00
Mike Hansen
fa6795369c Merge pull request #138 from Telecominfraproject/NETEXP-1632-temp
fix missing RADIO_CHANNEL status
2021-07-27 08:41:07 -04:00
Thomas-Leung2021
e6e06d7b70 fix missing RADIO_CHANNEL status 2021-07-26 17:29:49 -04:00
Mike Hansen
1e15e3cd94 Merge pull request #137 from Telecominfraproject/WIFI-3218-add-null-checks-to-rrm-bulk-update
[WIFI-3218] Adding null checks to RrmBulkUpdateItem
2021-07-22 17:25:38 -04:00
ralphlee
02e03780db [WIFI-3218] Adding null checks to RrmBulkUpdateItem 2021-07-22 17:19:03 -04:00
Mike Hansen
aac34150b2 APs running into Backoff shows as connected
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-22 15:31:58 -04:00
Mike Hansen
3085c34cde Merge pull request #135 from Telecominfraproject/WIFI-3180-portal-user-search-case-insensitive
[WIFI-3180] Adding case insensitivity to Portal User API Search
2021-07-20 11:53:47 -04:00
Mike Hansen
35fd038113 [WIFI-3166] Session ID is a -ve number in opensyncgw logs and on UI logs
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-20 11:31:07 -04:00
ralphlee
7c387f1940 [WIFI-3180] Adding case insensitivity to Portal User API Search 2021-07-20 10:38:04 -04:00
Mike Hansen
abb9b59659 Gateway pushes the threshholds as empty which causes AP not to connect any client
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-20 10:02:59 -04:00
norm-traxler
7f0497754c Merge pull request #134 from Telecominfraproject/WIFI-3042-alarm-remote-fix
[WIFI-3042] Fix alarmCode get url parameter
2021-07-20 08:30:40 -04:00
Norm Traxler
82095510f7 [WIFI-3042] Fix alarmCode get url parameter 2021-07-20 08:23:58 -04:00
Mike Hansen
0afd414870 Merge pull request #133 from Telecominfraproject/change_sessionId_to_String
[WIFI-3166] Session ID is a -ve number in opensyncgw logs and on UI logs
2021-07-19 19:30:42 -04:00
Mike Hansen
41add1922b Merge pull request #132 from Telecominfraproject/WIFI-3041
[WIFI-3041] move if statusment for custmerId check to a different location
2021-07-19 17:54:58 -04:00
Thomas-Leung2021
90ac57b988 [WIFI-3041] move if statement to make it more logical 2021-07-19 17:52:49 -04:00
Thomas-Leung2021
0cc90764c6 [WIFI-3041] move if statusment for custmerId check to a different location 2021-07-19 17:00:54 -04:00
16 changed files with 69 additions and 126 deletions

View File

@@ -259,7 +259,7 @@ public class AlarmServiceRemote extends BaseRemoteClient implements AlarmService
try {
ResponseEntity<List<Alarm>> responseEntity =
restTemplate.exchange(getBaseUrl() + "/forAlarmCode?alarmCodeSet={alarmCodeSetStr}&createdAfterTimestamp={createdAfterTimestamp}",
restTemplate.exchange(getBaseUrl() + "/forAlarmCode?alarmCode={alarmCodeSetStr}&createdAfterTimestamp={createdAfterTimestamp}",
HttpMethod.GET, null, Alarm_LIST_CLASS_TOKEN, alarmCodeSetStr, createdAfterTimestamp);
List<Alarm> result = responseEntity.getBody();

View File

@@ -54,7 +54,7 @@ public class ClientSessionDetails extends BaseJsonModel {
private Boolean is11VUsed;
private SecurityType securityType;
private SteerType steerType;
private Long previousValidSessionId;
private String previousValidSessionId;
private ClientFailureDetails lastFailureDetails;
private ClientFailureDetails firstFailureDetails;
private Integer associationStatus;
@@ -413,11 +413,11 @@ public class ClientSessionDetails extends BaseJsonModel {
this.steerType = steerType;
}
public Long getPreviousValidSessionId() {
public String getPreviousValidSessionId() {
return previousValidSessionId;
}
public void setPreviousValidSessionId(Long previousValidSessionId) {
public void setPreviousValidSessionId(String previousValidSessionId) {
this.previousValidSessionId = previousValidSessionId;
}

View File

@@ -234,8 +234,7 @@ components:
steerType:
$ref: '#/components/schemas/SteerType'
previousValidSessionId:
type: integer
format: int64
type: string
lastFailureDetails:
$ref: '#/components/schemas/ClientFailureDetails'
firstFailureDetails:
@@ -250,8 +249,7 @@ components:
type: integer
format: int32
priorSessionId:
type: integer
format: int64
type: string
priorEquipmentId:
type: integer
format: int64

View File

@@ -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:
@@ -1132,8 +1132,7 @@ components:
allOf:
$ref: '#/components/schemas/RealTimeEvent'
videoSessionId:
type: integer
format: int64
type: string
sessionId:
type: string
clientMac:
@@ -1151,8 +1150,7 @@ components:
allOf:
$ref: '#/components/schemas/RealTimeEvent'
videoSessionId:
type: integer
format: int64
type: string
sessionId:
type: string
clientMac:
@@ -1627,8 +1625,7 @@ components:
steerType:
$ref: '#/components/schemas/SteerType'
previousValidSessionId:
type: integer
format: int64
type: string
lastFailureDetails:
$ref: '#/components/schemas/ClientFailureDetails'
firstFailureDetails:
@@ -1643,8 +1640,7 @@ components:
type: integer
format: int32
priorSessionId:
type: integer
format: int64
type: string
priorEquipmentId:
type: integer
format: int64
@@ -2386,7 +2382,7 @@ components:
# Portal User data models
#
PortalUser:
PortalUserEventPayload:
type: object
properties:
id:
@@ -2397,10 +2393,6 @@ components:
format: int32
username:
type: string
password:
type: string
role:
$ref: '#/components/schemas/PortalUserRole'
createdTimestamp:
type: integer
format: int64
@@ -2411,8 +2403,6 @@ components:
example:
customerId: 2
username: new_user
password: pwd
role: CustomerIT
PortalUserRole:
type: string

View File

@@ -59,11 +59,6 @@ public enum CEGWCommandType {
WdsRequest,
ClientBlocklistChangeNotification,
/**
* Most recent timestamp for receipt of stats data from this AP.
*/
MostRecentStatsTimestamp,
UNSUPPORTED;

View File

@@ -62,7 +62,7 @@ public class ElementRadioConfiguration extends BaseJsonModel
if (radioType == RadioType.is5GHz) {
returnValue.setChannelNumber(36);
returnValue.setBackupChannelNumber(153);
returnValue.setBackupChannelNumber(149);
} else if (radioType == RadioType.is5GHzL) {
returnValue.setChannelNumber(36);
returnValue.setBackupChannelNumber(44);

View File

@@ -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);
}
}

View File

@@ -932,9 +932,9 @@ public class EquipmentServiceRemoteTest extends BaseRemoteTest {
assertEquals(11, radioMap.get(RadioType.is2dot4GHz).getManualBackupChannelNumber().intValue());
assertEquals(36, radioMap.get(RadioType.is5GHz).getChannelNumber().intValue());
assertEquals(153, radioMap.get(RadioType.is5GHz).getBackupChannelNumber().intValue());
assertEquals(149, radioMap.get(RadioType.is5GHz).getBackupChannelNumber().intValue());
assertEquals(36, radioMap.get(RadioType.is5GHz).getManualChannelNumber().intValue());
assertEquals(153, radioMap.get(RadioType.is5GHz).getManualBackupChannelNumber().intValue());
assertEquals(149, radioMap.get(RadioType.is5GHz).getManualBackupChannelNumber().intValue());
Map<RadioType, Integer> primaryChannels = new EnumMap<>(RadioType.class);
Map<RadioType, Integer> backupChannels = new EnumMap<>(RadioType.class);
@@ -970,7 +970,7 @@ public class EquipmentServiceRemoteTest extends BaseRemoteTest {
assertEquals(6, radioMap.get(RadioType.is2dot4GHz).getManualBackupChannelNumber().intValue());
assertEquals(36, radioMap.get(RadioType.is5GHz).getChannelNumber().intValue());
assertEquals(153, radioMap.get(RadioType.is5GHz).getBackupChannelNumber().intValue());
assertEquals(149, radioMap.get(RadioType.is5GHz).getBackupChannelNumber().intValue());
assertEquals(40, radioMap.get(RadioType.is5GHz).getManualChannelNumber().intValue());
assertEquals(48, radioMap.get(RadioType.is5GHz).getManualBackupChannelNumber().intValue());

View File

@@ -280,14 +280,15 @@ public class EquipmentController {
LOG.debug("Updated Equipment {}", ret);
EquipmentChangedEvent event;
if ((equipment.getProfileId() != existingEquipment.getProfileId()) || (existingApElementConfig != null && updatedApElementConfig != null &&
if (ret.getCustomerId() != existingEquipment.getCustomerId()) {
publishEvent(new EquipmentCustomerChangedEvent(existingEquipment, ret));
}
if ((ret.getProfileId() != existingEquipment.getProfileId()) || (existingApElementConfig != null && updatedApElementConfig != null &&
updatedApElementConfig.needsToBeUpdatedOnDevice(existingApElementConfig))) {
event = new EquipmentApImpactingChangedEvent(ret);
} else if (existingApElementConfig != null && existingApElementConfig.isBlinkAllLEDs() != updatedApElementConfig.isBlinkAllLEDs()) {
LOG.debug("Updated BlinkingLEDs {}", ret);
event = new EquipmentBlinkLEDsEvent(ret);
} else if (equipment.getCustomerId() != existingEquipment.getCustomerId()) {
event = new EquipmentCustomerChangedEvent(existingEquipment, ret);
} else {
event = new EquipmentChangedEvent(ret);
}
@@ -296,7 +297,6 @@ public class EquipmentController {
return ret;
}
private void validateChannelNum(Equipment equipment) {
if (equipment.getDetails() instanceof ApElementConfiguration) {
ApElementConfiguration apElementConfiguration = (ApElementConfiguration) equipment.getDetails();

View File

@@ -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);
}
}
}

View File

@@ -4434,8 +4434,7 @@ components:
steerType:
$ref: '#/components/schemas/SteerType'
previousValidSessionId:
type: integer
format: int64
type: string
lastFailureDetails:
$ref: '#/components/schemas/ClientFailureDetails'
firstFailureDetails:
@@ -4450,8 +4449,7 @@ components:
type: integer
format: int32
priorSessionId:
type: integer
format: int64
type: string
priorEquipmentId:
type: integer
format: int64
@@ -10336,8 +10334,7 @@ components:
allOf:
$ref: '#/components/schemas/RealTimeEvent'
videoSessionId:
type: integer
format: int64
type: string
sessionId:
type: string
clientMac:
@@ -10359,8 +10356,7 @@ components:
allOf:
$ref: '#/components/schemas/RealTimeEvent'
videoSessionId:
type: integer
format: int64
type: string
sessionId:
type: string
clientMac:
@@ -10380,8 +10376,7 @@ components:
allOf:
$ref: '#/components/schemas/RealTimeEvent'
videoSessionId:
type: integer
format: int64
type: string
sessionId:
type: string
clientMac:
@@ -14273,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:

View File

@@ -148,7 +148,7 @@ public class PortalUserDatastoreInMemory extends BaseInMemoryDatastore implement
PortalUser ret = null;
for (PortalUser mdl : idToPortalUserMap.values()) {
if(mdl.getCustomerId() == customerId && mdl.getUsername().equals(username)) {
if(mdl.getCustomerId() == customerId && mdl.getUsername().toLowerCase().equals(username.toLowerCase())) {
ret = mdl.clone();
}
}
@@ -161,7 +161,7 @@ public class PortalUserDatastoreInMemory extends BaseInMemoryDatastore implement
List<PortalUser> listOfPortalUsers = new ArrayList<>();
for (PortalUser portalUser : idToPortalUserMap.values()) {
if (portalUser.getUsername().equals(username)) {
if (portalUser.getUsername().toLowerCase().equals(username.toLowerCase())) {
listOfPortalUsers.add(portalUser);
}
}

View File

@@ -75,7 +75,6 @@ public class PortalUserDAO extends BaseJdbcDao {
public static final Set<String> ALL_COLUMNS_LOWERCASE = new HashSet<>();
@SuppressWarnings("unused")
//use this for queries where multiple tables are involved
public static final String ALL_COLUMNS_WITH_PREFIX;
@@ -135,10 +134,10 @@ public class PortalUserDAO extends BaseJdbcDao {
private static final String SQL_GET_BY_USERNAME =
"select " + ALL_COLUMNS +
" from " + TABLE_NAME + " " +
" where username = ? ";
" where lower(username) = ? ";
private static final String SQL_GET_BY_CUSTOMERID_AND_USERNAME = SQL_GET_BY_CUSTOMER_ID +
" and username = ?";
" and lower(username) = ?";
private static final String SQL_GET_LASTMOD_BY_ID =
"select lastModifiedTimestamp " +
@@ -463,7 +462,7 @@ public class PortalUserDAO extends BaseJdbcDao {
try{
PortalUser portalUser = this.jdbcTemplate.queryForObject(
SQL_GET_BY_CUSTOMERID_AND_USERNAME,
portalUserRowMapper, customerId, username);
portalUserRowMapper, customerId, username.toLowerCase());
LOG.debug("Found PortalUser {}", portalUser);
@@ -478,7 +477,7 @@ public class PortalUserDAO extends BaseJdbcDao {
LOG.debug("Looking up PortalUsers for username {} {}", username);
List<PortalUser> ret = this.jdbcTemplate.query(SQL_GET_BY_USERNAME,
portalUserRowMapper, username);
portalUserRowMapper, username.toLowerCase());
LOG.debug("Found List of Portal Users {}", ret);

View File

@@ -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());

View File

@@ -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);

View File

@@ -1149,8 +1149,7 @@ components:
allOf:
$ref: '#/components/schemas/RealTimeEvent'
videoSessionId:
type: integer
format: int64
type: string
sessionId:
type: string
clientMac:
@@ -1168,8 +1167,7 @@ components:
allOf:
$ref: '#/components/schemas/RealTimeEvent'
videoSessionId:
type: integer
format: int64
type: string
sessionId:
type: string
clientMac:
@@ -1185,8 +1183,7 @@ components:
allOf:
$ref: '#/components/schemas/RealTimeEvent'
videoSessionId:
type: integer
format: int64
type: string
sessionId:
type: string
clientMac:
@@ -1641,8 +1638,7 @@ components:
steerType:
$ref: '#/components/schemas/SteerType'
previousValidSessionId:
type: integer
format: int64
type: string
lastFailureDetails:
$ref: '#/components/schemas/ClientFailureDetails'
firstFailureDetails:
@@ -1657,8 +1653,7 @@ components:
type: integer
format: int32
priorSessionId:
type: integer
format: int64
type: string
priorEquipmentId:
type: integer
format: int64
@@ -2420,8 +2415,6 @@ components:
example:
customerId: 2
username: new_user
password: pwd
role: CustomerIT
PortalUserRole:
type: string