Compare commits

...

25 Commits

Author SHA1 Message Date
Mike Hansen
772beab902 [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-19 19:10:37 -04:00
Mike Hansen
4a764db007 [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-19 18:03:13 -04:00
Mike Hansen
1e277f5650 [WIFI-3165] Keep last stats received timestamp in gateway client session map
Adding API call to gateway controller

Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-19 14:13:19 -04:00
Mike Hansen
716ba7e043 Merge pull request #131 from Telecominfraproject/WIFI-3041
[Wifi 3041] A disconnected Alarm is raised when a disconnected AP is moved out of a Customer Inventory.
2021-07-16 16:28:16 -04:00
Thomas-Leung2021
3d2f4db32a [WIFI-3041] remove unnecessary dependencies 2021-07-16 12:22:23 -04:00
Thomas-Leung2021
c75d44ff03 [WIFI-3041] create a new EquipmentCustomerChangedEvent to handle status and alarm migration 2021-07-16 10:44:23 -04:00
Mike Hansen
f9dbe12c8c Merge pull request #130 from Telecominfraproject/WIFI-3056-event-stats
[WIFI-3056] Add API to get system event statistics
2021-07-16 07:44:06 -04:00
Norm Traxler
910a2cbe0c [WIFI-3056] Add API to get system event statistics 2021-07-15 22:15:01 -04:00
Thomas-Leung2021
799b243cc4 [WIFI-3041] move alarms to new customerId if customerId changed 2021-07-15 16:45:07 -04:00
Mike Hansen
8834c33d90 Merge pull request #129 from Telecominfraproject/WIFI-3042-alarms-by-alarmcode
[WIFI-3042] Add Alarm endpoint for get alarms by AlarmCode
2021-07-15 09:26:20 -04:00
Norm Traxler
e9c54a892b [WIFI-3042] Add Alarm endpoint for get alarms by AlarmCode 2021-07-14 20:18:22 -04:00
Mike Hansen
8353dd375f Control LED off via Equipment AP profile
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-14 18:45:33 -04:00
Mike Hansen
46de84b28b Add NULL check in EquipmentController
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-14 18:00:10 -04:00
Mike Hansen
9edca1fd9d CloudBackend:
Control LED off via Equipment AP profile

Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-14 17:30:06 -04:00
Mike Hansen
5714c9bf32 CloudBackend:
Control LED off via Equipment AP profile and Show LED status in EQUIPMENT_ADMIN status

Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-14 16:03:39 -04:00
Mike Hansen
2b2e34a064 Merge pull request #128 from Telecominfraproject/WIFI-2987
[WIFI-2987] add protocol status when switching customer
2021-07-13 14:09:02 -04:00
Thomas-Leung2021
d7a75faf4c check when status is null 2021-07-13 12:10:04 -04:00
Thomas-Leung2021
5fd977f064 [WIFI-2987] add protocol status when switching customer 2021-07-12 14:47:36 -04:00
Mike Hansen
bafec1fdd8 Merge pull request #127 from Telecominfraproject/hotfix/wifi-2970
[WIFI-2970] add equipment admin status when switching customer
2021-07-09 10:52:49 -04:00
Thomas-Leung2021
6b046e0a7a [WIFI-2970] remove unnecessary comments 2021-07-09 10:48:40 -04:00
Thomas-Leung2021
fb6604cdf5 add required dependencies in tests for new changes in EquipmentController 2021-07-08 17:48:20 -04:00
Thomas-Leung2021
2c1c60344e add equipment admin status when switching customer 2021-07-08 17:47:26 -04:00
Mike Hansen
9e959e258f Merge pull request #126 from Telecominfraproject/WIFI-2932-Client-ip-event
[WIFI-2932] Change IP event ipAddress from byte[] to InetAddress
2021-07-06 10:21:04 -04:00
Norm Traxler
2410233046 [WIFI-2932] Change IP event ipAddress from byte[] to InetAddress 2021-07-05 17:58:01 -04:00
norm-traxler
a7f91a29f8 Merge pull request #125 from Telecominfraproject/updateAPI
Update APIs to reflect new map in EquipmentChannelStatusData
2021-06-28 16:23:39 -04:00
70 changed files with 1315 additions and 900 deletions

View File

@@ -121,6 +121,10 @@ public class AlarmDatastoreCassandra implements AlarmDatastore {
" from " + TABLE_NAME + " " + " from " + TABLE_NAME + " " +
" where customerId = ? "; " where customerId = ? ";
private static final String CQL_GET_ALL =
"select " + ALL_COLUMNS +
" from " + TABLE_NAME + " ";
private static final String CQL_GET_LASTMOD_BY_ID = private static final String CQL_GET_LASTMOD_BY_ID =
"select lastModifiedTimestamp " + "select lastModifiedTimestamp " +
" from "+TABLE_NAME+" " + " from "+TABLE_NAME+" " +
@@ -922,4 +926,51 @@ public class AlarmDatastoreCassandra implements AlarmDatastore {
return alarmCounts; return alarmCounts;
} }
@Override
public List<Alarm> get(Set<AlarmCode> alarmCodes, long createdAfterTimestamp) {
if (alarmCodes == null || alarmCodes.isEmpty()) {
throw new IllegalArgumentException("alarmCodes must be provided");
}
LOG.debug("Looking up Alarms for alarmCodes {} createdAfter {}", alarmCodes, createdAfterTimestamp);
String query = CQL_GET_ALL;
// add filters for the query
ArrayList<Object> queryArgs = new ArrayList<>();
// add alarmCodes filters
alarmCodes.forEach(ac -> queryArgs.add(ac.getId()));
StringBuilder strb = new StringBuilder(100);
strb.append("where alarmCode in (");
for (int i = 0; i < alarmCodes.size(); i++) {
strb.append("?");
if (i < alarmCodes.size() - 1) {
strb.append(",");
}
}
strb.append(") ");
if (createdAfterTimestamp > 0) {
strb.append(" and createdTimestamp > ?");
queryArgs.add(createdAfterTimestamp);
}
strb.append(" allow filtering");
query += strb.toString();
List<Alarm> ret = new ArrayList<>();
PreparedStatement preparedStmt_getListForCustomer = cqlSession.prepare(query);
ResultSet rs = cqlSession.execute(preparedStmt_getListForCustomer.bind(queryArgs.toArray()));
rs.forEach(row -> ret.add(alarmRowMapper.mapRow(row)));
LOG.debug("Found {} Alarms for alarmCodes {} createdAfter {}", ret.size(), alarmCodes, createdAfterTimestamp);
return ret;
}
} }

View File

@@ -356,4 +356,25 @@ public class AlarmDatastoreInMemory extends BaseInMemoryDatastore implements Ala
return alarmCounts; return alarmCounts;
} }
@Override
public List<Alarm> get(Set<AlarmCode> alarmCodeSet, long createdAfterTimestamp) {
if (alarmCodeSet == null || alarmCodeSet.isEmpty()) {
throw new IllegalArgumentException("alarmCodeSet must be provided");
}
List<Alarm> ret = new ArrayList<>();
idToAlarmMap.values().forEach(a -> {
if (alarmCodeSet.contains(a.getAlarmCode()) && a.getCreatedTimestamp() > createdAfterTimestamp) {
ret.add(a.clone());
}
});
LOG.debug("Found Alarms {}", ret);
return ret;
}
} }

View File

@@ -71,4 +71,14 @@ public interface AlarmDatastore {
*/ */
AlarmCounts getAlarmCounts(int customerId, Set<Long> equipmentIdSet, Set<AlarmCode> alarmCodeSet, Boolean acknowledged); AlarmCounts getAlarmCounts(int customerId, Set<Long> equipmentIdSet, Set<AlarmCode> alarmCodeSet, Boolean acknowledged);
/**
* Retrieves a list of Alarms for the given alarm codes.
*
* @param alarmCodeSet - null or empty means include all alarm codes
* @param createdAfterTimestamp
* @return list of matching Alarm objects.
* @throws IllegalArgumentException if supplied alarmCodeSet is null or empty
*/
List<Alarm> get(Set<AlarmCode> alarmCodeSet, long createdAfterTimestamp);
} }

View File

@@ -113,5 +113,16 @@ public interface AlarmServiceInterface {
* @return alarm counts for the given filters * @return alarm counts for the given filters
*/ */
AlarmCounts getAlarmCounts(int customerId, Set<Long> equipmentIdSet, Set<AlarmCode> alarmCodeSet, Boolean acknowledged); AlarmCounts getAlarmCounts(int customerId, Set<Long> equipmentIdSet, Set<AlarmCode> alarmCodeSet, Boolean acknowledged);
/**
* Retrieves a list of Alarms for the given alarm codes.
*
* @param alarmCodeSet - null or empty means include all alarm codes
* @param createdAfterTimestamp
* @return list of matching Alarm objects.
* @throws IllegalArgumentException if supplied alarmCodeSet is null or empty
*/
List<Alarm> get(Set<AlarmCode> alarmCodeSet, long createdAfterTimestamp);
} }

View File

@@ -47,6 +47,10 @@ public class AlarmServiceLocal implements AlarmServiceInterface {
return alarmController.getAllForEquipment(customerId, equipmentIdSet, alarmCodeSet, createdAfterTimestamp); return alarmController.getAllForEquipment(customerId, equipmentIdSet, alarmCodeSet, createdAfterTimestamp);
} }
@Override
public List<Alarm> get(Set<AlarmCode> alarmCodeSet, long createdAfterTimestamp) {
return alarmController.getAllForAlarmCode(alarmCodeSet, createdAfterTimestamp);
}
@Override @Override
public Alarm update(Alarm alarm) { public Alarm update(Alarm alarm) {

View File

@@ -64,6 +64,5 @@
<version>1.2.0-SNAPSHOT</version> <version>1.2.0-SNAPSHOT</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -241,14 +241,45 @@ public class AlarmServiceRemote extends BaseRemoteClient implements AlarmService
return ret; return ret;
} }
@Override
public List<Alarm> get(Set<AlarmCode> alarmCodeSet, long createdAfterTimestamp) {
LOG.debug("get({},{})", alarmCodeSet, createdAfterTimestamp);
if (alarmCodeSet == null || alarmCodeSet.isEmpty()) {
throw new IllegalArgumentException("alarmCodeSet must be provided");
}
String alarmCodeSetStr = alarmCodeSet.toString();
// remove [] around the string, otherwise will get:
// Failed to convert value of type 'java.lang.String' to required
// type 'java.util.Set'; nested exception is
// java.lang.NumberFormatException: For input string: "[690]"
alarmCodeSetStr = alarmCodeSetStr.substring(1, alarmCodeSetStr.length() - 1);
try {
ResponseEntity<List<Alarm>> responseEntity =
restTemplate.exchange(getBaseUrl() + "/forAlarmCode?alarmCodeSet={alarmCodeSetStr}&createdAfterTimestamp={createdAfterTimestamp}",
HttpMethod.GET, null, Alarm_LIST_CLASS_TOKEN, alarmCodeSetStr, createdAfterTimestamp);
List<Alarm> result = responseEntity.getBody();
if (null == result) {
result = Collections.emptyList();
}
LOG.debug("get({},{}) return {} entries", alarmCodeSet, createdAfterTimestamp, result.size());
return result;
} catch (Exception exp) {
LOG.error("getAllInSet({},{}) exception ", alarmCodeSet, createdAfterTimestamp, exp);
throw exp;
}
}
public String getBaseUrl() { public String getBaseUrl() {
if(baseUrl==null) { if(baseUrl==null) {
baseUrl = environment.getProperty("tip.wlan.alarmServiceBaseUrl").trim()+"/api/alarm"; baseUrl = environment.getProperty("tip.wlan.alarmServiceBaseUrl").trim()+"/api/alarm";
} }
return baseUrl; return baseUrl;
} }
} }

View File

@@ -1,70 +1,70 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <project xmlns="http://maven.apache.org/POM/4.0.0"
<modelVersion>4.0.0</modelVersion> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<parent> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<groupId>com.telecominfraproject.wlan</groupId> <modelVersion>4.0.0</modelVersion>
<artifactId>tip-wlan-cloud-root-pom</artifactId> <parent>
<version>1.2.0-SNAPSHOT</version> <groupId>com.telecominfraproject.wlan</groupId>
<relativePath>../../wlan-cloud-root</relativePath> <artifactId>tip-wlan-cloud-root-pom</artifactId>
</parent> <version>1.2.0-SNAPSHOT</version>
<relativePath>../../wlan-cloud-root</relativePath>
</parent>
<artifactId>alarm-service</artifactId> <artifactId>alarm-service</artifactId>
<name>alarm-service</name> <name>alarm-service</name>
<description>Server side implementation of the service.</description> <description>Server side implementation of the service.</description>
<dependencies>
<dependency>
<artifactId>base-container</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>cloud-event-dispatcher-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>alarm-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>alarm-datastore-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>equipment-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>alarm-datastore-inmemory</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<artifactId>equipment-service-local</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<artifactId>equipment-datastore-inmemory</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependencies>
<dependency>
<artifactId>base-container</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<artifactId>cloud-event-dispatcher-empty</artifactId> <artifactId>cloud-event-dispatcher-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.2.0-SNAPSHOT</version>
<scope>test</scope> </dependency>
</dependency>
</dependencies> <dependency>
<artifactId>alarm-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>alarm-datastore-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>equipment-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>alarm-datastore-inmemory</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<artifactId>equipment-service-local</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<artifactId>equipment-datastore-inmemory</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<artifactId>cloud-event-dispatcher-empty</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
</dependencies>
</project> </project>

View File

@@ -129,6 +129,24 @@ public class AlarmController {
throw exp; throw exp;
} }
} }
@RequestMapping(value = "/forAlarmCode", method = RequestMethod.GET)
public ListOfAlarms getAllForAlarmCode(
@RequestParam Set<AlarmCode> alarmCode,
@RequestParam long createdAfterTimestamp) {
LOG.debug("getAllForAlarmCode({}, {})", alarmCode, createdAfterTimestamp);
try {
List<Alarm> result = alarmDatastore.get(alarmCode, createdAfterTimestamp);
LOG.debug("getAllForAlarmCode({},{}) return {} entries", alarmCode, createdAfterTimestamp, result.size());
ListOfAlarms ret = new ListOfAlarms();
ret.addAll(result);
return ret;
} catch (Exception exp) {
LOG.error("getAllForAlarmCode({},{}) exception ", alarmCode, createdAfterTimestamp, exp);
throw exp;
}
}
@RequestMapping(value = "/forCustomer", method = RequestMethod.GET) @RequestMapping(value = "/forCustomer", method = RequestMethod.GET)
public PaginationResponse<Alarm> getForCustomer(@RequestParam int customerId, public PaginationResponse<Alarm> getForCustomer(@RequestParam int customerId,

View File

@@ -811,10 +811,10 @@ public class AllInOneWithGatewayStartListener implements ApplicationRunner {
sessionDetails.setRadioType(radioType); sessionDetails.setRadioType(radioType);
sessionDetails.setSecurityType(SecurityType.PSK); sessionDetails.setSecurityType(SecurityType.PSK);
sessionDetails.setSsid(ssidConfig.getSsid()); sessionDetails.setSsid(ssidConfig.getSsid());
sessionDetails.setSessionId(System.currentTimeMillis()); sessionDetails.setSessionId(Long.toUnsignedString(System.currentTimeMillis()));
sessionDetails.setAssocTimestamp(System.currentTimeMillis() - getRandomLong(10000, 1000000)); sessionDetails.setAssocTimestamp(System.currentTimeMillis() - getRandomLong(10000, 1000000));
ClientDhcpDetails dhcpDetails = new ClientDhcpDetails(System.currentTimeMillis()); ClientDhcpDetails dhcpDetails = new ClientDhcpDetails(Long.toUnsignedString(System.currentTimeMillis()));
dhcpDetails.setLeaseStartTimestamp(System.currentTimeMillis() - getRandomLong(0, TimeUnit.HOURS.toMillis(4))); dhcpDetails.setLeaseStartTimestamp(System.currentTimeMillis() - getRandomLong(0, TimeUnit.HOURS.toMillis(4)));
dhcpDetails.setLeaseTimeInSeconds((int)TimeUnit.HOURS.toSeconds(4)); dhcpDetails.setLeaseTimeInSeconds((int)TimeUnit.HOURS.toSeconds(4));
try { try {

View File

@@ -1238,7 +1238,7 @@ public class AllInOneStartListener implements ApplicationRunner {
clientMetrics.setNumRxBytes(getRandomLong(3000000, 7000000)); clientMetrics.setNumRxBytes(getRandomLong(3000000, 7000000));
clientMetrics.setNumTxBytes(getRandomLong(3000000, 7000000)); clientMetrics.setNumTxBytes(getRandomLong(3000000, 7000000));
clientMetrics.setSessionId(getRandomLong(3000000, 7000000)); clientMetrics.setSessionId(Long.toUnsignedString(getRandomLong(3000000, 7000000)));
clientMetrics.setTxRetries(getRandomInt(30, 70)); clientMetrics.setTxRetries(getRandomInt(30, 70));
clientMetrics.setRxDuplicatePackets(getRandomInt(30, 70)); clientMetrics.setRxDuplicatePackets(getRandomInt(30, 70));
@@ -1265,7 +1265,7 @@ public class AllInOneStartListener implements ApplicationRunner {
clientMetrics.setNumRxBytes(getRandomLong(3000000, 7000000)); clientMetrics.setNumRxBytes(getRandomLong(3000000, 7000000));
clientMetrics.setNumTxBytes(getRandomLong(3000000, 7000000)); clientMetrics.setNumTxBytes(getRandomLong(3000000, 7000000));
clientMetrics.setSessionId(getRandomLong(3000000, 7000000)); clientMetrics.setSessionId(Long.toUnsignedString(getRandomLong(3000000, 7000000)));
clientMetrics.setTxRetries(getRandomInt(30, 70)); clientMetrics.setTxRetries(getRandomInt(30, 70));
clientMetrics.setRxDuplicatePackets(getRandomInt(30, 70)); clientMetrics.setRxDuplicatePackets(getRandomInt(30, 70));
@@ -1292,7 +1292,7 @@ public class AllInOneStartListener implements ApplicationRunner {
clientMetrics.setNumRxBytes(getRandomLong(3000000, 7000000)); clientMetrics.setNumRxBytes(getRandomLong(3000000, 7000000));
clientMetrics.setNumTxBytes(getRandomLong(3000000, 7000000)); clientMetrics.setNumTxBytes(getRandomLong(3000000, 7000000));
clientMetrics.setSessionId(getRandomLong(3000000, 7000000)); clientMetrics.setSessionId(Long.toUnsignedString(getRandomLong(3000000, 7000000)));
clientMetrics.setTxRetries(getRandomInt(30, 70)); clientMetrics.setTxRetries(getRandomInt(30, 70));
clientMetrics.setRxDuplicatePackets(getRandomInt(30, 70)); clientMetrics.setRxDuplicatePackets(getRandomInt(30, 70));
@@ -1361,10 +1361,10 @@ public class AllInOneStartListener implements ApplicationRunner {
sessionDetails.setRadioType(radioType); sessionDetails.setRadioType(radioType);
sessionDetails.setSecurityType(SecurityType.PSK); sessionDetails.setSecurityType(SecurityType.PSK);
sessionDetails.setSsid(ssidConfig.getSsid()); sessionDetails.setSsid(ssidConfig.getSsid());
sessionDetails.setSessionId(System.currentTimeMillis()); sessionDetails.setSessionId(Long.toUnsignedString(System.currentTimeMillis()));
sessionDetails.setAssocTimestamp(System.currentTimeMillis() - getRandomLong(10000, 1000000)); sessionDetails.setAssocTimestamp(System.currentTimeMillis() - getRandomLong(10000, 1000000));
ClientDhcpDetails dhcpDetails = new ClientDhcpDetails(System.currentTimeMillis()); ClientDhcpDetails dhcpDetails = new ClientDhcpDetails(Long.toUnsignedString(System.currentTimeMillis()));
dhcpDetails dhcpDetails
.setLeaseStartTimestamp(System.currentTimeMillis() - getRandomLong(0, TimeUnit.HOURS.toMillis(4))); .setLeaseStartTimestamp(System.currentTimeMillis() - getRandomLong(0, TimeUnit.HOURS.toMillis(4)));
dhcpDetails.setLeaseTimeInSeconds((int) TimeUnit.HOURS.toSeconds(4)); dhcpDetails.setLeaseTimeInSeconds((int) TimeUnit.HOURS.toSeconds(4));

View File

@@ -12,7 +12,7 @@ import com.telecominfraproject.wlan.systemevent.equipment.realtime.RealTimeEvent
public class ClientAssocEvent extends RealTimeEvent implements HasClientMac { public class ClientAssocEvent extends RealTimeEvent implements HasClientMac {
private static final long serialVersionUID = 7015822981315570338L; private static final long serialVersionUID = 7015822981315570338L;
private long sessionId; private String sessionId;
private String ssid; private String ssid;
private MacAddress clientMacAddress; private MacAddress clientMacAddress;
private RadioType radioType; private RadioType radioType;
@@ -29,7 +29,7 @@ public class ClientAssocEvent extends RealTimeEvent implements HasClientMac {
} }
public ClientAssocEvent(int customerId, long locationId, long equipmentId, long timestamp, long sessionId, String ssid, public ClientAssocEvent(int customerId, long locationId, long equipmentId, long timestamp, String sessionId, String ssid,
MacAddress clientMacAddress, RadioType radioType, boolean isReassociation, WlanStatusCode status, MacAddress clientMacAddress, RadioType radioType, boolean isReassociation, WlanStatusCode status,
Integer internalSC, Integer rssi) { Integer internalSC, Integer rssi) {
super(RealTimeEventType.STA_Client_Assoc, customerId, locationId, equipmentId, timestamp); super(RealTimeEventType.STA_Client_Assoc, customerId, locationId, equipmentId, timestamp);
@@ -50,7 +50,7 @@ public class ClientAssocEvent extends RealTimeEvent implements HasClientMac {
/** /**
* @return the sessionId * @return the sessionId
*/ */
public long getSessionId() { public String getSessionId() {
return sessionId; return sessionId;
} }
@@ -58,7 +58,7 @@ public class ClientAssocEvent extends RealTimeEvent implements HasClientMac {
* @param sessionId * @param sessionId
* the sessionId to set * the sessionId to set
*/ */
public void setSessionId(long sessionId) { public void setSessionId(String sessionId) {
this.sessionId = sessionId; this.sessionId = sessionId;
} }

View File

@@ -13,7 +13,7 @@ public class ClientAuthEvent extends RealTimeEvent implements HasClientMac {
private static final long serialVersionUID = 1221389696911864515L; private static final long serialVersionUID = 1221389696911864515L;
private long sessionId; private String sessionId;
private String ssid; private String ssid;
private MacAddress clientMacAddress; private MacAddress clientMacAddress;
private WlanStatusCode authStatus; private WlanStatusCode authStatus;
@@ -32,11 +32,11 @@ public class ClientAuthEvent extends RealTimeEvent implements HasClientMac {
super(eventType, timestamp); super(eventType, timestamp);
} }
public long getSessionId() { public String getSessionId() {
return sessionId; return sessionId;
} }
public void setSessionId(long sessionId) { public void setSessionId(String sessionId) {
this.sessionId = sessionId; this.sessionId = sessionId;
} }

View File

@@ -14,7 +14,7 @@ public class ClientConnectSuccessEvent extends RealTimeEvent implements HasClien
private static final long serialVersionUID = -6082134146801575193L; private static final long serialVersionUID = -6082134146801575193L;
private MacAddress clientMacAddress; private MacAddress clientMacAddress;
private long sessionId; private String sessionId;
private RadioType radioType; private RadioType radioType;
private boolean isReassociation; private boolean isReassociation;
private String ssid; private String ssid;
@@ -61,7 +61,7 @@ public class ClientConnectSuccessEvent extends RealTimeEvent implements HasClien
/** /**
* @return the sessionId * @return the sessionId
*/ */
public long getSessionId() { public String getSessionId() {
return sessionId; return sessionId;
} }
@@ -69,7 +69,7 @@ public class ClientConnectSuccessEvent extends RealTimeEvent implements HasClien
* @param sessionId * @param sessionId
* the sessionId to set * the sessionId to set
*/ */
public void setSessionId(long sessionId) { public void setSessionId(String sessionId) {
this.sessionId = sessionId; this.sessionId = sessionId;
} }

View File

@@ -45,7 +45,7 @@ public class ClientDisconnectEvent extends RealTimeEvent implements HasClientMac
} }
private static final long serialVersionUID = -7674230178565760938L; private static final long serialVersionUID = -7674230178565760938L;
private long sessionId; private String sessionId;
private byte[] macAddressBytes; private byte[] macAddressBytes;
private MacAddress clientMacAddress; private MacAddress clientMacAddress;
private long lastRecvTime; private long lastRecvTime;
@@ -104,7 +104,7 @@ public class ClientDisconnectEvent extends RealTimeEvent implements HasClientMac
return rssi; return rssi;
} }
public long getSessionId() { public String getSessionId() {
return sessionId; return sessionId;
} }
@@ -148,7 +148,7 @@ public class ClientDisconnectEvent extends RealTimeEvent implements HasClientMac
this.rssi = rssi; this.rssi = rssi;
} }
public void setSessionId(long sessionId) { public void setSessionId(String sessionId) {
this.sessionId = sessionId; this.sessionId = sessionId;
} }

View File

@@ -14,7 +14,7 @@ import com.telecominfraproject.wlan.systemevent.equipment.realtime.RealTimeEvent
public class ClientFailureEvent extends RealTimeEvent implements HasClientMac { public class ClientFailureEvent extends RealTimeEvent implements HasClientMac {
private static final long serialVersionUID = -16021752050335131L; private static final long serialVersionUID = -16021752050335131L;
private long sessionId; private String sessionId;
private String ssid; private String ssid;
private MacAddress clientMacAddress; private MacAddress clientMacAddress;
private WlanReasonCode reasonCode; private WlanReasonCode reasonCode;
@@ -38,11 +38,11 @@ public class ClientFailureEvent extends RealTimeEvent implements HasClientMac {
this.clientMacAddress = clientMacAddress; this.clientMacAddress = clientMacAddress;
} }
public long getSessionId() { public String getSessionId() {
return sessionId; return sessionId;
} }
public void setSessionId(long sessionId) { public void setSessionId(String sessionId) {
this.sessionId = sessionId; this.sessionId = sessionId;
} }

View File

@@ -10,7 +10,7 @@ import com.telecominfraproject.wlan.systemevent.equipment.realtime.RealTimeEvent
public class ClientFirstDataEvent extends RealTimeEvent implements HasClientMac { public class ClientFirstDataEvent extends RealTimeEvent implements HasClientMac {
private static final long serialVersionUID = 298223061973506469L; private static final long serialVersionUID = 298223061973506469L;
private long sessionId; private String sessionId;
private MacAddress clientMacAddress; private MacAddress clientMacAddress;
private long firstDataRcvdTs; private long firstDataRcvdTs;
private long firstDataSentTs; private long firstDataSentTs;
@@ -28,11 +28,11 @@ public class ClientFirstDataEvent extends RealTimeEvent implements HasClientMac
super(eventType, timestamp); super(eventType, timestamp);
} }
public long getSessionId() { public String getSessionId() {
return sessionId; return sessionId;
} }
public void setSessionId(long sessionId) { public void setSessionId(String sessionId) {
this.sessionId = sessionId; this.sessionId = sessionId;
} }

View File

@@ -1,6 +1,7 @@
package com.telecominfraproject.wlan.client.models.events.realtime; package com.telecominfraproject.wlan.client.models.events.realtime;
import java.util.Arrays; import java.util.Arrays;
import java.util.Objects;
import com.telecominfraproject.wlan.core.model.equipment.MacAddress; import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
import com.telecominfraproject.wlan.core.model.json.interfaces.HasClientMac; import com.telecominfraproject.wlan.core.model.json.interfaces.HasClientMac;
@@ -10,7 +11,7 @@ import com.telecominfraproject.wlan.systemevent.equipment.realtime.RealTimeEvent
public class ClientIdEvent extends RealTimeEvent implements HasClientMac { public class ClientIdEvent extends RealTimeEvent implements HasClientMac {
private static final long serialVersionUID = 298223061973506469L; private static final long serialVersionUID = 298223061973506469L;
private long sessionId; private String sessionId;
private byte[] macAddressBytes; private byte[] macAddressBytes;
private MacAddress clientMacAddress; private MacAddress clientMacAddress;
private String userId; private String userId;
@@ -27,7 +28,7 @@ public class ClientIdEvent extends RealTimeEvent implements HasClientMac {
/** /**
* @return the sessionId * @return the sessionId
*/ */
public long getSessionId() { public String getSessionId() {
return sessionId; return sessionId;
} }
@@ -35,7 +36,7 @@ public class ClientIdEvent extends RealTimeEvent implements HasClientMac {
* @param sessionId * @param sessionId
* the sessionId to set * the sessionId to set
*/ */
public void setSessionId(long sessionId) { public void setSessionId(String sessionId) {
this.sessionId = sessionId; this.sessionId = sessionId;
} }
@@ -65,58 +66,28 @@ public class ClientIdEvent extends RealTimeEvent implements HasClientMac {
this.userId = userId; this.userId = userId;
} }
/*
* (non-Javadoc)
*
* @see java.lang.Object#hashCode()
*/
@Override @Override
public int hashCode() { public int hashCode() {
final int prime = 31; final int prime = 31;
int result = 1; int result = super.hashCode();
result = prime * result + Arrays.hashCode(macAddressBytes); result = prime * result + Arrays.hashCode(macAddressBytes);
result = prime * result + (int) (sessionId ^ (sessionId >>> 32)); result = prime * result + Objects.hash(clientMacAddress, sessionId, userId);
result = prime * result + ((userId == null) ? 0 : userId.hashCode());
result = prime * result + ((clientMacAddress == null) ? 0 : clientMacAddress.hashCode());
return result; return result;
} }
/*
* (non-Javadoc)
*
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if (this == obj) { if (this == obj)
return true; return true;
} if (!super.equals(obj))
if (obj == null) {
return false; return false;
} if (getClass() != obj.getClass())
if (!super.equals(obj)) {
return false; return false;
}
if (!(obj instanceof ClientIdEvent)) {
return false;
}
ClientIdEvent other = (ClientIdEvent) obj; ClientIdEvent other = (ClientIdEvent) obj;
if (!Arrays.equals(macAddressBytes, other.macAddressBytes)) return Objects.equals(clientMacAddress, other.clientMacAddress) && Arrays.equals(macAddressBytes, other.macAddressBytes)
return false; && Objects.equals(sessionId, other.sessionId) && Objects.equals(userId, other.userId);
if (sessionId != other.sessionId)
return false;
if (userId == null) {
if (other.userId != null)
return false;
} else if (!userId.equals(other.userId))
return false;
if (clientMacAddress == null) {
if (other.clientMacAddress != null)
return false;
} else if (!clientMacAddress.equals(other.clientMacAddress))
return false;
return true;
} }
@Override @Override

View File

@@ -1,6 +1,6 @@
package com.telecominfraproject.wlan.client.models.events.realtime; package com.telecominfraproject.wlan.client.models.events.realtime;
import java.util.Arrays; import java.net.InetAddress;
import java.util.Objects; import java.util.Objects;
import com.telecominfraproject.wlan.core.model.equipment.MacAddress; import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
@@ -12,9 +12,9 @@ public class ClientIpAddressEvent extends RealTimeEvent implements HasClientMac
private static final long serialVersionUID = -5332534925768685589L; private static final long serialVersionUID = -5332534925768685589L;
private long sessionId; private String sessionId;
private MacAddress clientMacAddress; private MacAddress clientMacAddress;
private byte[] ipAddr; private InetAddress ipAddr;
public ClientIpAddressEvent() { public ClientIpAddressEvent() {
// serialization // serialization
@@ -29,11 +29,11 @@ public class ClientIpAddressEvent extends RealTimeEvent implements HasClientMac
super(eventType, timestamp); super(eventType, timestamp);
} }
public long getSessionId() { public String getSessionId() {
return sessionId; return sessionId;
} }
public void setSessionId(long sessionId) { public void setSessionId(String sessionId) {
this.sessionId = sessionId; this.sessionId = sessionId;
} }
@@ -45,11 +45,11 @@ public class ClientIpAddressEvent extends RealTimeEvent implements HasClientMac
this.clientMacAddress = clientMacAddress; this.clientMacAddress = clientMacAddress;
} }
public byte[] getIpAddr() { public InetAddress getIpAddr() {
return ipAddr; return ipAddr;
} }
public void setIpAddr(byte[] ipAddr) { public void setIpAddr(InetAddress ipAddr) {
this.ipAddr = ipAddr; this.ipAddr = ipAddr;
} }
@@ -57,8 +57,7 @@ public class ClientIpAddressEvent extends RealTimeEvent implements HasClientMac
public int hashCode() { public int hashCode() {
final int prime = 31; final int prime = 31;
int result = super.hashCode(); int result = super.hashCode();
result = prime * result + Arrays.hashCode(this.ipAddr); result = prime * result + Objects.hash(ipAddr, clientMacAddress, sessionId);
result = prime * result + Objects.hash(clientMacAddress, sessionId);
return result; return result;
} }
@@ -74,7 +73,7 @@ public class ClientIpAddressEvent extends RealTimeEvent implements HasClientMac
return false; return false;
} }
ClientIpAddressEvent other = (ClientIpAddressEvent) obj; ClientIpAddressEvent other = (ClientIpAddressEvent) obj;
return Objects.equals(clientMacAddress, other.clientMacAddress) && Arrays.equals(ipAddr, other.ipAddr) return Objects.equals(clientMacAddress, other.clientMacAddress) && Objects.equals(ipAddr, other.ipAddr)
&& this.sessionId == other.sessionId; && this.sessionId == other.sessionId;
} }

View File

@@ -26,7 +26,7 @@ public class ClientTimeoutEvent extends RealTimeEvent implements HasClientMac {
} }
} }
private long sessionId; private String sessionId;
private MacAddress clientMacAddress; private MacAddress clientMacAddress;
private long lastRecvTime; private long lastRecvTime;
private long lastSentTime; private long lastSentTime;
@@ -45,11 +45,11 @@ public class ClientTimeoutEvent extends RealTimeEvent implements HasClientMac {
super(eventType, timestamp); super(eventType, timestamp);
} }
public long getSessionId() { public String getSessionId() {
return sessionId; return sessionId;
} }
public void setSessionId(long sessionId) { public void setSessionId(String sessionId) {
this.sessionId = sessionId; this.sessionId = sessionId;
} }

View File

@@ -1,6 +1,7 @@
package com.telecominfraproject.wlan.client.session.models; package com.telecominfraproject.wlan.client.session.models;
import java.net.InetAddress; import java.net.InetAddress;
import java.util.Objects;
import com.telecominfraproject.wlan.core.model.equipment.WiFiSessionUtility; import com.telecominfraproject.wlan.core.model.equipment.WiFiSessionUtility;
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel; import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
@@ -29,10 +30,9 @@ public class ClientDhcpDetails extends BaseJsonModel {
/** /**
* Identifies the association where DHCP last occurred. * Identifies the association where DHCP last occurred.
*/ */
private long associationId; private String associationId;
public ClientDhcpDetails(String sessionId) {
public ClientDhcpDetails(long sessionId) {
this.associationId = sessionId; this.associationId = sessionId;
} }
@@ -101,10 +101,10 @@ public class ClientDhcpDetails extends BaseJsonModel {
this.firstDiscoverTimestamp = firstDiscoverTimestamp; this.firstDiscoverTimestamp = firstDiscoverTimestamp;
} }
public long getAssociationId() { public String getAssociationId() {
return associationId; return associationId;
} }
public void setAssociationId(Long associationId) { public void setAssociationId(String associationId) {
this.associationId = associationId; this.associationId = associationId;
} }
@@ -116,123 +116,6 @@ public class ClientDhcpDetails extends BaseJsonModel {
this.nakTimestamp = nakTimestamp; this.nakTimestamp = nakTimestamp;
} }
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (int) (associationId ^ (associationId >>> 32));
result = prime * result + ((dhcpServerIp == null) ? 0 : dhcpServerIp.hashCode());
result = prime * result + ((firstDiscoverTimestamp == null) ? 0 : firstDiscoverTimestamp.hashCode());
result = prime * result + ((firstOfferTimestamp == null) ? 0 : firstOfferTimestamp.hashCode());
result = prime * result + ((firstRequestTimestamp == null) ? 0 : firstRequestTimestamp.hashCode());
result = prime * result + (fromInternal ? 1231 : 1237);
result = prime * result + ((gatewayIp == null) ? 0 : gatewayIp.hashCode());
result = prime * result + ((leaseStartTimestamp == null) ? 0 : leaseStartTimestamp.hashCode());
result = prime * result + ((leaseTimeInSeconds == null) ? 0 : leaseTimeInSeconds.hashCode());
result = prime * result + ((nakTimestamp == null) ? 0 : nakTimestamp.hashCode());
result = prime * result + ((primaryDns == null) ? 0 : primaryDns.hashCode());
result = prime * result + ((secondaryDns == null) ? 0 : secondaryDns.hashCode());
result = prime * result + ((subnetMask == null) ? 0 : subnetMask.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof ClientDhcpDetails)) {
return false;
}
ClientDhcpDetails other = (ClientDhcpDetails) obj;
if (associationId != other.associationId) {
return false;
}
if (dhcpServerIp == null) {
if (other.dhcpServerIp != null) {
return false;
}
} else if (!dhcpServerIp.equals(other.dhcpServerIp)) {
return false;
}
if (firstDiscoverTimestamp == null) {
if (other.firstDiscoverTimestamp != null) {
return false;
}
} else if (!firstDiscoverTimestamp.equals(other.firstDiscoverTimestamp)) {
return false;
}
if (firstOfferTimestamp == null) {
if (other.firstOfferTimestamp != null) {
return false;
}
} else if (!firstOfferTimestamp.equals(other.firstOfferTimestamp)) {
return false;
}
if (firstRequestTimestamp == null) {
if (other.firstRequestTimestamp != null) {
return false;
}
} else if (!firstRequestTimestamp.equals(other.firstRequestTimestamp)) {
return false;
}
if (fromInternal != other.fromInternal) {
return false;
}
if (gatewayIp == null) {
if (other.gatewayIp != null) {
return false;
}
} else if (!gatewayIp.equals(other.gatewayIp)) {
return false;
}
if (leaseStartTimestamp == null) {
if (other.leaseStartTimestamp != null) {
return false;
}
} else if (!leaseStartTimestamp.equals(other.leaseStartTimestamp)) {
return false;
}
if (leaseTimeInSeconds == null) {
if (other.leaseTimeInSeconds != null) {
return false;
}
} else if (!leaseTimeInSeconds.equals(other.leaseTimeInSeconds)) {
return false;
}
if (nakTimestamp == null) {
if (other.nakTimestamp != null) {
return false;
}
} else if (!nakTimestamp.equals(other.nakTimestamp)) {
return false;
}
if (primaryDns == null) {
if (other.primaryDns != null) {
return false;
}
} else if (!primaryDns.equals(other.primaryDns)) {
return false;
}
if (secondaryDns == null) {
if (other.secondaryDns != null) {
return false;
}
} else if (!secondaryDns.equals(other.secondaryDns)) {
return false;
}
if (subnetMask == null) {
if (other.subnetMask != null) {
return false;
}
} else if (!subnetMask.equals(other.subnetMask)) {
return false;
}
return true;
}
@Override @Override
public ClientDhcpDetails clone() { public ClientDhcpDetails clone() {
ClientDhcpDetails ret = (ClientDhcpDetails) super.clone(); ClientDhcpDetails ret = (ClientDhcpDetails) super.clone();
@@ -241,8 +124,7 @@ public class ClientDhcpDetails extends BaseJsonModel {
public void mergeDetails(ClientDhcpDetails other) { public void mergeDetails(ClientDhcpDetails other) {
if(other == null) return; if(other == null) return;
if(WiFiSessionUtility.decodeWiFiAssociationId(Long.parseUnsignedLong(other.associationId))>WiFiSessionUtility.decodeWiFiAssociationId(Long.parseUnsignedLong(associationId))) {
if(WiFiSessionUtility.decodeWiFiAssociationId(other.associationId)>WiFiSessionUtility.decodeWiFiAssociationId(associationId)) {
// The other dhcp details are from a newer session and so everything must be reset. // The other dhcp details are from a newer session and so everything must be reset.
this.dhcpServerIp = null; this.dhcpServerIp = null;
this.firstDiscoverTimestamp = null; this.firstDiscoverTimestamp = null;
@@ -258,8 +140,7 @@ public class ClientDhcpDetails extends BaseJsonModel {
this.associationId = other.associationId; this.associationId = other.associationId;
this.fromInternal = false; this.fromInternal = false;
} }
else if(other.associationId != associationId) { if(!Objects.equals(this.associationId, other.associationId)) {
// other is older, ignore it
return; return;
} }
dhcpServerIp = (InetAddress) assignOtherIfOtherNotNull(dhcpServerIp, other.dhcpServerIp); dhcpServerIp = (InetAddress) assignOtherIfOtherNotNull(dhcpServerIp, other.dhcpServerIp);
@@ -305,4 +186,28 @@ public class ClientDhcpDetails extends BaseJsonModel {
this.fromInternal = fromInternal; this.fromInternal = fromInternal;
} }
@Override
public int hashCode() {
return Objects.hash(associationId, dhcpServerIp, firstDiscoverTimestamp, firstOfferTimestamp, firstRequestTimestamp, fromInternal, gatewayIp,
leaseStartTimestamp, leaseTimeInSeconds, nakTimestamp, primaryDns, secondaryDns, subnetMask);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ClientDhcpDetails other = (ClientDhcpDetails) obj;
return Objects.equals(associationId, other.associationId) && Objects.equals(dhcpServerIp, other.dhcpServerIp)
&& Objects.equals(firstDiscoverTimestamp, other.firstDiscoverTimestamp) && Objects.equals(firstOfferTimestamp, other.firstOfferTimestamp)
&& Objects.equals(firstRequestTimestamp, other.firstRequestTimestamp) && fromInternal == other.fromInternal
&& Objects.equals(gatewayIp, other.gatewayIp) && Objects.equals(leaseStartTimestamp, other.leaseStartTimestamp)
&& Objects.equals(leaseTimeInSeconds, other.leaseTimeInSeconds) && Objects.equals(nakTimestamp, other.nakTimestamp)
&& Objects.equals(primaryDns, other.primaryDns) && Objects.equals(secondaryDns, other.secondaryDns)
&& Objects.equals(subnetMask, other.subnetMask);
}
} }

View File

@@ -19,7 +19,7 @@ public class ClientSessionDetails extends BaseJsonModel {
private static final long serialVersionUID = -7714023056859882994L; private static final long serialVersionUID = -7714023056859882994L;
private long sessionId; private String sessionId;
private Long authTimestamp; private Long authTimestamp;
private Long assocTimestamp; private Long assocTimestamp;
private Integer assocInternalSC; private Integer assocInternalSC;
@@ -60,16 +60,16 @@ public class ClientSessionDetails extends BaseJsonModel {
private Integer associationStatus; private Integer associationStatus;
private Integer dynamicVlan; private Integer dynamicVlan;
private Integer assocRssi; private Integer assocRssi;
private Long priorSessionId; private String priorSessionId;
private Long priorEquipmentId; private Long priorEquipmentId;
private String classificationName; private String classificationName;
private AssociationState associationState; private AssociationState associationState;
public long getSessionId() { public String getSessionId() {
return sessionId; return sessionId;
} }
public void setSessionId(long sessionId) { public void setSessionId(String sessionId) {
this.sessionId = sessionId; this.sessionId = sessionId;
} }
@@ -821,11 +821,11 @@ public class ClientSessionDetails extends BaseJsonModel {
this.assocRssi = assocRssi; this.assocRssi = assocRssi;
} }
public Long getPriorSessionId() { public String getPriorSessionId() {
return priorSessionId; return priorSessionId;
} }
public void setPriorSessionId(Long priorSessionId) { public void setPriorSessionId(String priorSessionId) {
this.priorSessionId = priorSessionId; this.priorSessionId = priorSessionId;
} }

View File

@@ -147,8 +147,7 @@ components:
type: object type: object
properties: properties:
sessionId: sessionId:
type: integer type: string
format: int64
authTimestamp: authTimestamp:
type: integer type: integer
format: int64 format: int64

View File

@@ -59,8 +59,7 @@
<version>1.2.0-SNAPSHOT</version> <version>1.2.0-SNAPSHOT</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>base-stream-interface</artifactId> <artifactId>base-stream-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>

View File

@@ -662,8 +662,7 @@ components:
clientMacAddress: clientMacAddress:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
sessionId: sessionId:
type: integer type: string
format: int64
customerId: customerId:
type: integer type: integer
format: int32 format: int32
@@ -759,8 +758,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
ssid: ssid:
type: string type: string
clientMacAddress: clientMacAddress:
@@ -791,8 +789,7 @@ components:
clientMacAddress: clientMacAddress:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
sessionId: sessionId:
type: integer type: string
format: int64
radioType: radioType:
$ref: '#/components/schemas/RadioType' $ref: '#/components/schemas/RadioType'
isReassociation: isReassociation:
@@ -844,8 +841,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
ssid: ssid:
type: string type: string
clientMacAddress: clientMacAddress:
@@ -860,8 +856,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
macAddressBytes: macAddressBytes:
type: array type: array
items: items:
@@ -884,8 +879,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
clientMacAddress: clientMacAddress:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
lastRecvTime: lastRecvTime:
@@ -902,8 +896,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
ssid: ssid:
type: string type: string
clientMacAddress: clientMacAddress:
@@ -934,8 +927,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
ssid: ssid:
type: string type: string
clientMacAddress: clientMacAddress:
@@ -971,8 +963,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
clientMacAddress: clientMacAddress:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
firstDataRcvdTs: firstDataRcvdTs:
@@ -987,8 +978,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
clientMacAddress: clientMacAddress:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
ipAddr: ipAddr:
@@ -1061,8 +1051,7 @@ components:
type: integer type: integer
format: int64 format: int64
associationId: associationId:
type: integer type: string
format: int64
clientMacAddress: clientMacAddress:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
radioType: radioType:
@@ -1104,8 +1093,7 @@ components:
type: integer type: integer
format: int64 format: int64
associationId: associationId:
type: integer type: string
format: int64
macAddress: macAddress:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
radioType: radioType:
@@ -1147,8 +1135,7 @@ components:
type: integer type: integer
format: int64 format: int64
sessionId: sessionId:
type: integer type: string
format: int64
clientMac: clientMac:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
serverIp: serverIp:
@@ -1167,8 +1154,7 @@ components:
type: integer type: integer
format: int64 format: int64
sessionId: sessionId:
type: integer type: string
format: int64
clientMac: clientMac:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
serverIp: serverIp:
@@ -1185,8 +1171,7 @@ components:
type: integer type: integer
format: int64 format: int64
sessionId: sessionId:
type: integer type: string
format: int64
clientMac: clientMac:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
serverIp: serverIp:
@@ -1555,8 +1540,7 @@ components:
type: object type: object
properties: properties:
sessionId: sessionId:
type: integer type: string
format: int64
authTimestamp: authTimestamp:
type: integer type: integer
format: int64 format: int64
@@ -3464,7 +3448,16 @@ components:
$ref: '#/components/schemas/StatusCode' $ref: '#/components/schemas/StatusCode'
statusMessage: statusMessage:
type: string type: string
ledStatus:
$ref: '#/components/schemas/LedStatus'
LedStatus:
type: string
enum:
- led_blink
- led_off
- UNKNOWN
StatusCode: StatusCode:
type: string type: string
enum: enum:
@@ -4509,6 +4502,8 @@ components:
type: boolean type: boolean
forwardMode: forwardMode:
$ref: '#/components/schemas/NetworkForwardMode' $ref: '#/components/schemas/NetworkForwardMode'
blinkAllLEDs:
type: boolean
radioMap: radioMap:
$ref: '#/components/schemas/RadioMap' $ref: '#/components/schemas/RadioMap'
advancedRadioMap: advancedRadioMap:
@@ -5053,9 +5048,8 @@ components:
format: int32 format: int32
sessionId: sessionId:
type: integer type: string
format: int64
classificationName: classificationName:
type: string type: string

View File

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

View File

@@ -0,0 +1,13 @@
package com.telecominfraproject.wlan.equipmentgateway.models;
public class CEGWMostRecentStatsTimestamp extends CEGatewayCommand {
private static final long serialVersionUID = -9087897865195978158L;
public CEGWMostRecentStatsTimestamp() {
}
public CEGWMostRecentStatsTimestamp(CEGWCommandType commandType, String inventoryId, long equipmentId) {
super(commandType,inventoryId,equipmentId);
}
}

View File

@@ -37,6 +37,7 @@ public abstract class CommonElementConfiguration extends EquipmentDetails implem
private AntennaType antennaType; private AntennaType antennaType;
private Boolean costSavingEventsEnabled; private Boolean costSavingEventsEnabled;
private NetworkForwardMode forwardMode; private NetworkForwardMode forwardMode;
private boolean blinkAllLEDs;
/** /**
* this constructor is used for CAMI only * this constructor is used for CAMI only
@@ -69,37 +70,33 @@ public abstract class CommonElementConfiguration extends EquipmentDetails implem
} }
@Override @Override
public boolean equals(Object obj) { public int hashCode() {
if (this == obj) { final int prime = 31;
return true; int result = super.hashCode();
} result = prime * result + Objects.hash(antennaType, blinkAllLEDs, costSavingEventsEnabled, deploymentType, deviceMode, deviceName, elementConfigVersion,
if (obj == null) { equipmentType, forwardMode, frameReportThrottleEnabled, gettingDNS, gettingIP, locallyConfigured, locallyConfiguredMgmtVlan, locationData,
return false; peerInfoList, staticDnsIp1, staticDnsIp2, staticIP, staticIpGw, staticIpMaskCidr, syntheticClientEnabled);
} return result;
}
if (!super.equals(obj)) { @Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false; return false;
} if (getClass() != obj.getClass())
if (!(obj instanceof CommonElementConfiguration)) {
return false; return false;
}
CommonElementConfiguration other = (CommonElementConfiguration) obj; CommonElementConfiguration other = (CommonElementConfiguration) obj;
return this.antennaType == other.antennaType return antennaType == other.antennaType && blinkAllLEDs == other.blinkAllLEDs && Objects.equals(costSavingEventsEnabled, other.costSavingEventsEnabled)
&& Objects.equals(costSavingEventsEnabled, other.costSavingEventsEnabled) && deploymentType == other.deploymentType && deviceMode == other.deviceMode && Objects.equals(deviceName, other.deviceName)
&& this.deploymentType == other.deploymentType && this.deviceMode == other.deviceMode && Objects.equals(elementConfigVersion, other.elementConfigVersion) && Objects.equals(equipmentType, other.equipmentType)
&& Objects.equals(deviceName, other.deviceName) && forwardMode == other.forwardMode && Objects.equals(frameReportThrottleEnabled, other.frameReportThrottleEnabled)
&& Objects.equals(elementConfigVersion, other.elementConfigVersion) && gettingDNS == other.gettingDNS && gettingIP == other.gettingIP && locallyConfigured == other.locallyConfigured
&& this.equipmentType == other.equipmentType && this.forwardMode == other.forwardMode && locallyConfiguredMgmtVlan == other.locallyConfiguredMgmtVlan && Objects.equals(locationData, other.locationData)
&& Objects.equals(frameReportThrottleEnabled, other.frameReportThrottleEnabled) && Objects.equals(peerInfoList, other.peerInfoList) && Objects.equals(staticDnsIp1, other.staticDnsIp1)
&& this.gettingDNS == other.gettingDNS && this.gettingIP == other.gettingIP && Objects.equals(staticDnsIp2, other.staticDnsIp2) && Objects.equals(staticIP, other.staticIP) && Objects.equals(staticIpGw, other.staticIpGw)
&& this.locallyConfigured == other.locallyConfigured && Objects.equals(staticIpMaskCidr, other.staticIpMaskCidr) && Objects.equals(syntheticClientEnabled, other.syntheticClientEnabled);
&& this.locallyConfiguredMgmtVlan == other.locallyConfiguredMgmtVlan
&& Objects.equals(locationData, other.locationData) && Objects.equals(peerInfoList, other.peerInfoList)
&& Objects.equals(staticDnsIp1, other.staticDnsIp1) && Objects.equals(staticDnsIp2, other.staticDnsIp2)
&& Objects.equals(staticIP, other.staticIP) && Objects.equals(staticIpGw, other.staticIpGw)
&& Objects.equals(staticIpMaskCidr, other.staticIpMaskCidr)
&& Objects.equals(syntheticClientEnabled, other.syntheticClientEnabled);
} }
public AntennaType getAntennaType() { public AntennaType getAntennaType() {
@@ -189,14 +186,6 @@ public abstract class CommonElementConfiguration extends EquipmentDetails implem
return syntheticClientEnabled; return syntheticClientEnabled;
} }
@Override
public int hashCode() {
return Objects.hash(antennaType, costSavingEventsEnabled, deploymentType, deviceMode, deviceName,
elementConfigVersion, equipmentType, forwardMode, frameReportThrottleEnabled, gettingDNS, gettingIP,
locallyConfigured, locallyConfiguredMgmtVlan, locationData, peerInfoList, staticDnsIp1, staticDnsIp2,
staticIP, staticIpGw, staticIpMaskCidr, syntheticClientEnabled);
}
@Override @Override
public boolean hasUnsupportedValue() { public boolean hasUnsupportedValue() {
if (super.hasUnsupportedValue()) { if (super.hasUnsupportedValue()) {
@@ -311,4 +300,14 @@ public abstract class CommonElementConfiguration extends EquipmentDetails implem
public void setSyntheticClientEnabled(Boolean syntheticClientEnabled) { public void setSyntheticClientEnabled(Boolean syntheticClientEnabled) {
this.syntheticClientEnabled = syntheticClientEnabled; this.syntheticClientEnabled = syntheticClientEnabled;
} }
public boolean isBlinkAllLEDs() {
return blinkAllLEDs;
}
public void setBlinkAllLEDs(boolean blinkAllLEDs) {
this.blinkAllLEDs = blinkAllLEDs;
}
} }

View File

@@ -0,0 +1,18 @@
package com.telecominfraproject.wlan.equipment.models.events;
import com.telecominfraproject.wlan.equipment.models.Equipment;
public class EquipmentBlinkLEDsEvent extends EquipmentChangedEvent {
private static final long serialVersionUID = 5222048279956123654L;
public EquipmentBlinkLEDsEvent(Equipment equipment){
super(equipment);
setEquipmentChangeType(EquipmentChangeType.blinkLEDs);
}
/**
* Constructor used by JSON
*/
private EquipmentBlinkLEDsEvent() {
super();
}
}

View File

@@ -10,11 +10,11 @@ import com.telecominfraproject.wlan.core.model.json.JsonDeserializationUtils;
public enum EquipmentChangeType { public enum EquipmentChangeType {
All(0), ChannelsOnly(1), CellSizeAttributesOnly(2), ApImpacting(3), UNSUPPORTED(-1); All(0), ChannelsOnly(1), CellSizeAttributesOnly(2), ApImpacting(3), blinkLEDs(4), CustomerOnly(5), UNSUPPORTED(-1);
private final int id; private final int id;
private static final Map<Integer, EquipmentChangeType> ELEMENTS = new HashMap<>(); private static final Map<Integer, EquipmentChangeType> ELEMENTS = new HashMap<>();
private static final EquipmentChangeType validValues[] = { All, ChannelsOnly, CellSizeAttributesOnly, ApImpacting}; private static final EquipmentChangeType validValues[] = { All, ChannelsOnly, CellSizeAttributesOnly, ApImpacting,blinkLEDs};
private EquipmentChangeType(int id) { private EquipmentChangeType(int id) {
this.id = id; this.id = id;

View File

@@ -0,0 +1,41 @@
package com.telecominfraproject.wlan.equipment.models.events;
import com.telecominfraproject.wlan.equipment.models.Equipment;
public class EquipmentCustomerChangedEvent extends EquipmentChangedEvent {
private static final long serialVersionUID = 4650302079238674307L;
private Equipment existingEquipment; // old equipment
private Equipment equipment; // new configured equipment
public EquipmentCustomerChangedEvent(Equipment existingEquipment, Equipment equipment) {
super(equipment);
setEquipmentChangeType(EquipmentChangeType.CustomerOnly);
this.setExistingEquipment(existingEquipment);
this.setEquipment(equipment);
}
/**
* Constructor used by JSON
*/
@SuppressWarnings("unused")
private EquipmentCustomerChangedEvent() {
super();
}
public Equipment getExistingEquipment() {
return existingEquipment;
}
public void setExistingEquipment(Equipment existingEquipment) {
this.existingEquipment = existingEquipment;
}
public Equipment getEquipment() {
return equipment;
}
public void setEquipment(Equipment equipment) {
this.equipment = equipment;
}
}

View File

@@ -1,57 +1,58 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <project xmlns="http://maven.apache.org/POM/4.0.0"
<modelVersion>4.0.0</modelVersion> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<parent> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<groupId>com.telecominfraproject.wlan</groupId> <modelVersion>4.0.0</modelVersion>
<artifactId>tip-wlan-cloud-root-pom</artifactId> <parent>
<version>1.2.0-SNAPSHOT</version> <groupId>com.telecominfraproject.wlan</groupId>
<relativePath>../../wlan-cloud-root</relativePath> <artifactId>tip-wlan-cloud-root-pom</artifactId>
</parent> <version>1.2.0-SNAPSHOT</version>
<relativePath>../../wlan-cloud-root</relativePath>
</parent>
<artifactId>equipment-service-remote</artifactId> <artifactId>equipment-service-remote</artifactId>
<name>equipment-service-remote</name> <name>equipment-service-remote</name>
<description>Remote client for accessing the service, uses REST API calls.</description> <description>Remote client for accessing the service, uses REST API calls.</description>
<dependencies>
<dependency>
<artifactId>equipment-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>base-client</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<!-- Dependencies for the unit tests --> <dependencies>
<dependency> <dependency>
<artifactId>base-remote-tests</artifactId> <artifactId>equipment-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.2.0-SNAPSHOT</version>
<scope>test</scope> </dependency>
</dependency>
<dependency>
<artifactId>equipment-service</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency> <dependency>
<artifactId>equipment-datastore-inmemory</artifactId> <artifactId>base-client</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.2.0-SNAPSHOT</version>
<scope>test</scope> </dependency>
</dependency>
<dependency> <!-- Dependencies for the unit tests -->
<artifactId>cloud-event-dispatcher-empty</artifactId> <dependency>
<groupId>com.telecominfraproject.wlan</groupId> <artifactId>base-remote-tests</artifactId>
<version>1.2.0-SNAPSHOT</version> <groupId>com.telecominfraproject.wlan</groupId>
<scope>test</scope> <version>1.2.0-SNAPSHOT</version>
</dependency> <scope>test</scope>
</dependency>
</dependencies> <dependency>
<artifactId>equipment-service</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<artifactId>equipment-datastore-inmemory</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<artifactId>cloud-event-dispatcher-empty</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
</dependencies>
</project> </project>

View File

@@ -1,53 +1,59 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <project xmlns="http://maven.apache.org/POM/4.0.0"
<modelVersion>4.0.0</modelVersion> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<parent> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<groupId>com.telecominfraproject.wlan</groupId> <modelVersion>4.0.0</modelVersion>
<artifactId>tip-wlan-cloud-root-pom</artifactId> <parent>
<version>1.2.0-SNAPSHOT</version> <groupId>com.telecominfraproject.wlan</groupId>
<relativePath>../../wlan-cloud-root</relativePath> <artifactId>tip-wlan-cloud-root-pom</artifactId>
</parent> <version>1.2.0-SNAPSHOT</version>
<relativePath>../../wlan-cloud-root</relativePath>
</parent>
<artifactId>equipment-service</artifactId> <artifactId>equipment-service</artifactId>
<name>equipment-service</name> <name>equipment-service</name>
<description>Server side implementation of the service.</description> <description>Server side implementation of the service.</description>
<dependencies>
<dependency>
<artifactId>base-container</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>cloud-event-dispatcher-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>equipment-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>equipment-datastore-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>equipment-datastore-inmemory</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependencies>
<dependency>
<artifactId>alarm-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<artifactId>cloud-event-dispatcher-empty</artifactId> <artifactId>base-container</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.2.0-SNAPSHOT</version>
<scope>test</scope> </dependency>
</dependency>
</dependencies> <dependency>
<artifactId>cloud-event-dispatcher-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>equipment-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>equipment-datastore-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>equipment-datastore-inmemory</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<artifactId>cloud-event-dispatcher-empty</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
</dependencies>
</project> </project>

View File

@@ -47,14 +47,15 @@ import com.telecominfraproject.wlan.equipment.models.SourceSelectionMulticast;
import com.telecominfraproject.wlan.equipment.models.bulkupdate.rrm.EquipmentRrmBulkUpdateRequest; import com.telecominfraproject.wlan.equipment.models.bulkupdate.rrm.EquipmentRrmBulkUpdateRequest;
import com.telecominfraproject.wlan.equipment.models.events.EquipmentAddedEvent; import com.telecominfraproject.wlan.equipment.models.events.EquipmentAddedEvent;
import com.telecominfraproject.wlan.equipment.models.events.EquipmentApImpactingChangedEvent; import com.telecominfraproject.wlan.equipment.models.events.EquipmentApImpactingChangedEvent;
import com.telecominfraproject.wlan.equipment.models.events.EquipmentBlinkLEDsEvent;
import com.telecominfraproject.wlan.equipment.models.events.EquipmentCellSizeAttributesChangedEvent; import com.telecominfraproject.wlan.equipment.models.events.EquipmentCellSizeAttributesChangedEvent;
import com.telecominfraproject.wlan.equipment.models.events.EquipmentChangedEvent; import com.telecominfraproject.wlan.equipment.models.events.EquipmentChangedEvent;
import com.telecominfraproject.wlan.equipment.models.events.EquipmentChannelsChangedEvent; import com.telecominfraproject.wlan.equipment.models.events.EquipmentChannelsChangedEvent;
import com.telecominfraproject.wlan.equipment.models.events.EquipmentCustomerChangedEvent;
import com.telecominfraproject.wlan.equipment.models.events.EquipmentRemovedEvent; import com.telecominfraproject.wlan.equipment.models.events.EquipmentRemovedEvent;
import com.telecominfraproject.wlan.server.exceptions.ConfigurationException; import com.telecominfraproject.wlan.server.exceptions.ConfigurationException;
import com.telecominfraproject.wlan.systemevent.models.SystemEvent; import com.telecominfraproject.wlan.systemevent.models.SystemEvent;
/** /**
* @author dtoptygin * @author dtoptygin
* *
@@ -73,7 +74,6 @@ public class EquipmentController {
@Autowired private EquipmentDatastore equipmentDatastore; @Autowired private EquipmentDatastore equipmentDatastore;
@Autowired private CloudEventDispatcherInterface cloudEventDispatcher; @Autowired private CloudEventDispatcherInterface cloudEventDispatcher;
/** /**
* Creates new Equipment. * Creates new Equipment.
* *
@@ -283,11 +283,16 @@ public class EquipmentController {
if ((equipment.getProfileId() != existingEquipment.getProfileId()) || (existingApElementConfig != null && updatedApElementConfig != null && if ((equipment.getProfileId() != existingEquipment.getProfileId()) || (existingApElementConfig != null && updatedApElementConfig != null &&
updatedApElementConfig.needsToBeUpdatedOnDevice(existingApElementConfig))) { updatedApElementConfig.needsToBeUpdatedOnDevice(existingApElementConfig))) {
event = new EquipmentApImpactingChangedEvent(ret); 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 { } else {
event = new EquipmentChangedEvent(ret); event = new EquipmentChangedEvent(ret);
} }
publishEvent(event); publishEvent(event);
return ret; return ret;
} }

View File

@@ -220,6 +220,8 @@ components:
type: boolean type: boolean
forwardMode: forwardMode:
$ref: '#/components/schemas/NetworkForwardMode' $ref: '#/components/schemas/NetworkForwardMode'
blinkAllLEDs:
type: boolean
radioMap: radioMap:
$ref: '#/components/schemas/RadioMap' $ref: '#/components/schemas/RadioMap'
advancedRadioMap: advancedRadioMap:

View File

@@ -34,7 +34,7 @@ import com.telecominfraproject.wlan.equipment.models.Equipment;
EquipmentController.class, EquipmentController.class,
CloudEventDispatcherEmpty.class, CloudEventDispatcherEmpty.class,
EquipmentDatastoreInMemory.class, EquipmentDatastoreInMemory.class,
EquipmentControllerTest.Config.class, EquipmentControllerTest.Config.class
}) })
public class EquipmentControllerTest { public class EquipmentControllerTest {

View File

@@ -161,8 +161,6 @@
<version>1.2.0-SNAPSHOT</version> <version>1.2.0-SNAPSHOT</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -16,9 +16,12 @@ import com.telecominfraproject.wlan.equipment.models.Equipment;
import com.telecominfraproject.wlan.equipment.models.RadioChannelChangeSettings; import com.telecominfraproject.wlan.equipment.models.RadioChannelChangeSettings;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWBlinkRequest; import com.telecominfraproject.wlan.equipmentgateway.models.CEGWBlinkRequest;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWCommandResultCode; 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.CEGWFirmwareDownloadRequest;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWMostRecentStatsTimestamp;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWNewChannelRequest; import com.telecominfraproject.wlan.equipmentgateway.models.CEGWNewChannelRequest;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWRebootRequest; 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.models.EquipmentCommandResponse;
import com.telecominfraproject.wlan.equipmentgateway.service.EquipmentGatewayServiceInterface; import com.telecominfraproject.wlan.equipmentgateway.service.EquipmentGatewayServiceInterface;
import com.telecominfraproject.wlan.firmware.FirmwareServiceInterface; import com.telecominfraproject.wlan.firmware.FirmwareServiceInterface;
@@ -137,11 +140,12 @@ public class EquipmentGatewayPortalController {
return new GenericResponse(false, "Failed to trigger AP factory reset: " + response.getResultCode() + " " + response.getResultDetail()); return new GenericResponse(false, "Failed to trigger AP factory reset: " + response.getResultCode() + " " + response.getResultDetail());
} }
} }
@RequestMapping(value = "/equipmentGateway/requestApBlinkLEDs", method = RequestMethod.POST) @RequestMapping(value = "/equipmentGateway/requestApBlinkLEDs", method = RequestMethod.POST)
public GenericResponse requestApBlinkLEDs(@RequestParam long equipmentId, @RequestParam boolean blinkAllLEDs) { public GenericResponse requestApBlinkLEDs(@RequestParam long equipmentId, @RequestParam boolean blinkAllLEDs) {
String action = "stop blinking LEDs on AP "; String action = "stop blinking LEDs on AP ";
if (blinkAllLEDs) action = "start blinking LEDs on AP "; if (blinkAllLEDs)
action = "start blinking LEDs on AP ";
Equipment equipment = equipmentServiceInterface.get(equipmentId); Equipment equipment = equipmentServiceInterface.get(equipmentId);
LOG.debug("Request {} for AP {}", action, equipment.getInventoryId()); LOG.debug("Request {} for AP {}", action, equipment.getInventoryId());
@@ -150,8 +154,7 @@ public class EquipmentGatewayPortalController {
apBlinkLEDs.setBlinkAllLEDs(blinkAllLEDs); apBlinkLEDs.setBlinkAllLEDs(blinkAllLEDs);
EquipmentCommandResponse response = equipmentGatewayServiceInterface.sendCommand(apBlinkLEDs); EquipmentCommandResponse response = equipmentGatewayServiceInterface.sendCommand(apBlinkLEDs);
LOG.debug("{} response {}", action,response); LOG.debug("{} response {}", action, response);
if (response.getResultCode() == CEGWCommandResultCode.Success) { if (response.getResultCode() == CEGWCommandResultCode.Success) {
return new GenericResponse(true, ""); return new GenericResponse(true, "");
@@ -160,4 +163,17 @@ 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

@@ -1043,6 +1043,8 @@ components:
type: boolean type: boolean
forwardMode: forwardMode:
$ref: '#/components/schemas/NetworkForwardMode' $ref: '#/components/schemas/NetworkForwardMode'
blinkAllLEDs:
type: boolean
radioMap: radioMap:
$ref: '#/components/schemas/RadioMap' $ref: '#/components/schemas/RadioMap'
advancedRadioMap: advancedRadioMap:
@@ -3331,8 +3333,6 @@ components:
EquipmentAdminStatusData: EquipmentAdminStatusData:
type: object type: object
required:
- model_type
properties: properties:
model_type: model_type:
type: string type: string
@@ -3346,6 +3346,15 @@ components:
$ref: '#/components/schemas/StatusCode' $ref: '#/components/schemas/StatusCode'
statusMessage: statusMessage:
type: string type: string
ledStatus:
$ref: '#/components/schemas/LedStatus'
LedStatus:
type: string
enum:
- led_blink
- led_off
- UNKNOWN
StatusCode: StatusCode:
type: string type: string
@@ -4338,8 +4347,7 @@ components:
type: object type: object
properties: properties:
sessionId: sessionId:
type: integer type: string
format: int64
authTimestamp: authTimestamp:
type: integer type: integer
format: int64 format: int64
@@ -5225,9 +5233,8 @@ components:
format: int32 format: int32
sessionId: sessionId:
type: integer type: string
format: int64
classificationName: classificationName:
type: string type: string
@@ -9089,6 +9096,7 @@ components:
- EquipmentChangedEvent - EquipmentChangedEvent
- EquipmentApImpactingChangedEvent - EquipmentApImpactingChangedEvent
- EquipmentChannelsChangedEvent - EquipmentChannelsChangedEvent
- EquipmentBlinkLEDsEvent
- EquipmentCellSizeAttributesChangedEvent - EquipmentCellSizeAttributesChangedEvent
- EquipmentRemovedEvent - EquipmentRemovedEvent
- StatusChangedEvent - StatusChangedEvent
@@ -9182,6 +9190,7 @@ components:
- $ref: '#/components/schemas/EquipmentChangedEvent' - $ref: '#/components/schemas/EquipmentChangedEvent'
- $ref: '#/components/schemas/EquipmentApImpactingChangedEvent' - $ref: '#/components/schemas/EquipmentApImpactingChangedEvent'
- $ref: '#/components/schemas/EquipmentChannelsChangedEvent' - $ref: '#/components/schemas/EquipmentChannelsChangedEvent'
- $ref: '#/components/schemas/EquipmentBlinkLEDsEvent'
- $ref: '#/components/schemas/EquipmentCellSizeAttributesChangedEvent' - $ref: '#/components/schemas/EquipmentCellSizeAttributesChangedEvent'
- $ref: '#/components/schemas/EquipmentRemovedEvent' - $ref: '#/components/schemas/EquipmentRemovedEvent'
- $ref: '#/components/schemas/StatusChangedEvent' - $ref: '#/components/schemas/StatusChangedEvent'
@@ -9535,7 +9544,12 @@ components:
$ref: '#/components/schemas/IntegerPerRadioTypeMap' $ref: '#/components/schemas/IntegerPerRadioTypeMap'
newBackupChannels: newBackupChannels:
$ref: '#/components/schemas/IntegerPerRadioTypeMap' $ref: '#/components/schemas/IntegerPerRadioTypeMap'
EquipmentBlinkLEDsEvent:
properties:
allOf:
$ref: '#/components/schemas/EquipmentChangedEvent'
EquipmentCellSizeAttributesChangedEvent: EquipmentCellSizeAttributesChangedEvent:
properties: properties:
allOf: allOf:
@@ -9767,8 +9781,7 @@ components:
clientMacAddress: clientMacAddress:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
sessionId: sessionId:
type: integer type: string
format: int64
customerId: customerId:
type: integer type: integer
format: int32 format: int32
@@ -9900,8 +9913,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
ssid: ssid:
type: string type: string
clientMacAddress: clientMacAddress:
@@ -9936,8 +9948,7 @@ components:
clientMacAddress: clientMacAddress:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
sessionId: sessionId:
type: integer type: string
format: int64
radioType: radioType:
$ref: '#/components/schemas/RadioType' $ref: '#/components/schemas/RadioType'
isReassociation: isReassociation:
@@ -9993,8 +10004,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
ssid: ssid:
type: string type: string
clientMacAddress: clientMacAddress:
@@ -10013,8 +10023,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
macAddressBytes: macAddressBytes:
type: array type: array
items: items:
@@ -10041,8 +10050,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
clientMacAddress: clientMacAddress:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
lastRecvTime: lastRecvTime:
@@ -10063,8 +10071,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
ssid: ssid:
type: string type: string
clientMacAddress: clientMacAddress:
@@ -10099,8 +10106,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
ssid: ssid:
type: string type: string
clientMacAddress: clientMacAddress:
@@ -10140,8 +10146,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
clientMacAddress: clientMacAddress:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
firstDataRcvdTs: firstDataRcvdTs:
@@ -10160,8 +10165,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
clientMacAddress: clientMacAddress:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
ipAddr: ipAddr:
@@ -10243,8 +10247,7 @@ components:
type: integer type: integer
format: int64 format: int64
associationId: associationId:
type: integer type: string
format: int64
clientMacAddress: clientMacAddress:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
radioType: radioType:
@@ -10286,8 +10289,7 @@ components:
type: integer type: integer
format: int64 format: int64
associationId: associationId:
type: integer type: string
format: int64
macAddress: macAddress:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
radioType: radioType:
@@ -10337,8 +10339,7 @@ components:
type: integer type: integer
format: int64 format: int64
sessionId: sessionId:
type: integer type: string
format: int64
clientMac: clientMac:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
serverIp: serverIp:
@@ -10361,8 +10362,7 @@ components:
type: integer type: integer
format: int64 format: int64
sessionId: sessionId:
type: integer type: string
format: int64
clientMac: clientMac:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
serverIp: serverIp:
@@ -10383,8 +10383,7 @@ components:
type: integer type: integer
format: int64 format: int64
sessionId: sessionId:
type: integer type: string
format: int64
clientMac: clientMac:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
serverIp: serverIp:
@@ -14274,6 +14273,31 @@ paths:
$ref: '#/components/schemas/GenericResponse' $ref: '#/components/schemas/GenericResponse'
500: 500:
$ref: '#/components/responses/GenericApiError' $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: /portal/equipmentGateway/requestChannelChange:
post: post:

View File

@@ -35,7 +35,6 @@ import com.telecominfraproject.wlan.profile.models.Profile;
import com.telecominfraproject.wlan.profile.models.ProfileByCustomerRequestFactory; import com.telecominfraproject.wlan.profile.models.ProfileByCustomerRequestFactory;
import com.telecominfraproject.wlan.profile.models.ProfileType; import com.telecominfraproject.wlan.profile.models.ProfileType;
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
@ActiveProfiles(profiles = { @ActiveProfiles(profiles = {
"integration_test", "integration_test",

View File

@@ -1,97 +1,111 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <project xmlns="http://maven.apache.org/POM/4.0.0"
<modelVersion>4.0.0</modelVersion> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<parent> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<groupId>com.telecominfraproject.wlan</groupId> <modelVersion>4.0.0</modelVersion>
<artifactId>tip-wlan-cloud-root-pom</artifactId> <parent>
<version>1.2.0-SNAPSHOT</version> <groupId>com.telecominfraproject.wlan</groupId>
<relativePath>../../wlan-cloud-root</relativePath> <artifactId>tip-wlan-cloud-root-pom</artifactId>
</parent> <version>1.2.0-SNAPSHOT</version>
<relativePath>../../wlan-cloud-root</relativePath>
</parent>
<artifactId>provisioning-sp</artifactId> <artifactId>provisioning-sp</artifactId>
<name>provisioning-sp</name> <name>provisioning-sp</name>
<description>Stream Processors for provisioning events.</description> <description>Stream Processors for provisioning events.</description>
<dependencies>
<dependency>
<artifactId>base-stream-consumer</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency> <dependencies>
<artifactId>service-metric-models</artifactId> <dependency>
<groupId>com.telecominfraproject.wlan</groupId> <artifactId>base-stream-consumer</artifactId>
<version>1.2.0-SNAPSHOT</version> <groupId>com.telecominfraproject.wlan</groupId>
</dependency> <version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<artifactId>system-event-models</artifactId> <artifactId>service-metric-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.2.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>base-models</artifactId> <artifactId>system-event-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.2.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency>
<artifactId>routing-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>equipment-gateway-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<artifactId>equipment-service-interface</artifactId> <artifactId>base-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.2.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>location-service-interface</artifactId> <artifactId>routing-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.2.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>profile-service-interface</artifactId> <artifactId>equipment-gateway-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.2.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency>
<artifactId>client-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<!-- models used by the application logic of the stream processor -->
<dependency>
<artifactId>equipment-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>profile-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<artifactId>location-models</artifactId> <artifactId>equipment-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.2.0-SNAPSHOT</version>
</dependency> </dependency>
</dependencies> <dependency>
<artifactId>location-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>profile-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>client-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>alarm-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>status-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<!-- models used by the application logic of the stream processor -->
<dependency>
<artifactId>equipment-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>profile-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>location-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project> </project>

View File

@@ -1,3 +1,4 @@
package com.telecominfraproject.wlan.streams.provisioning; package com.telecominfraproject.wlan.streams.provisioning;
import java.util.ArrayList; import java.util.ArrayList;
@@ -12,18 +13,24 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import com.telecominfraproject.wlan.alarm.AlarmServiceInterface;
import com.telecominfraproject.wlan.alarm.models.Alarm;
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel; import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
import com.telecominfraproject.wlan.core.model.pagination.PaginationContext; import com.telecominfraproject.wlan.core.model.pagination.PaginationContext;
import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse; import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse;
import com.telecominfraproject.wlan.core.model.pair.PairLongLong; import com.telecominfraproject.wlan.core.model.pair.PairLongLong;
import com.telecominfraproject.wlan.core.model.streams.QueuedStreamMessage; import com.telecominfraproject.wlan.core.model.streams.QueuedStreamMessage;
import com.telecominfraproject.wlan.equipment.EquipmentServiceInterface; import com.telecominfraproject.wlan.equipment.EquipmentServiceInterface;
import com.telecominfraproject.wlan.equipment.models.ApElementConfiguration;
import com.telecominfraproject.wlan.equipment.models.Equipment; import com.telecominfraproject.wlan.equipment.models.Equipment;
import com.telecominfraproject.wlan.equipment.models.events.EquipmentApImpactingChangedEvent; import com.telecominfraproject.wlan.equipment.models.events.EquipmentApImpactingChangedEvent;
import com.telecominfraproject.wlan.equipment.models.events.EquipmentBlinkLEDsEvent;
import com.telecominfraproject.wlan.equipment.models.events.EquipmentCellSizeAttributesChangedEvent; import com.telecominfraproject.wlan.equipment.models.events.EquipmentCellSizeAttributesChangedEvent;
import com.telecominfraproject.wlan.equipment.models.events.EquipmentChannelsChangedEvent; import com.telecominfraproject.wlan.equipment.models.events.EquipmentChannelsChangedEvent;
import com.telecominfraproject.wlan.equipment.models.events.EquipmentCustomerChangedEvent;
import com.telecominfraproject.wlan.equipment.models.events.EquipmentRemovedEvent; import com.telecominfraproject.wlan.equipment.models.events.EquipmentRemovedEvent;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWBaseCommand; import com.telecominfraproject.wlan.equipmentgateway.models.CEGWBaseCommand;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWBlinkRequest;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWCloseSessionRequest; import com.telecominfraproject.wlan.equipmentgateway.models.CEGWCloseSessionRequest;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWConfigChangeNotification; import com.telecominfraproject.wlan.equipmentgateway.models.CEGWConfigChangeNotification;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWNewChannelRequest; import com.telecominfraproject.wlan.equipmentgateway.models.CEGWNewChannelRequest;
@@ -35,13 +42,16 @@ import com.telecominfraproject.wlan.profile.models.Profile;
import com.telecominfraproject.wlan.profile.models.events.ProfileAddedEvent; import com.telecominfraproject.wlan.profile.models.events.ProfileAddedEvent;
import com.telecominfraproject.wlan.profile.models.events.ProfileChangedEvent; import com.telecominfraproject.wlan.profile.models.events.ProfileChangedEvent;
import com.telecominfraproject.wlan.profile.models.events.ProfileRemovedEvent; import com.telecominfraproject.wlan.profile.models.events.ProfileRemovedEvent;
import com.telecominfraproject.wlan.status.StatusServiceInterface;
import com.telecominfraproject.wlan.status.models.Status;
import com.telecominfraproject.wlan.status.models.StatusDataType;
import com.telecominfraproject.wlan.stream.StreamProcessor; import com.telecominfraproject.wlan.stream.StreamProcessor;
import com.telecominfraproject.wlan.systemevent.models.SystemEvent; import com.telecominfraproject.wlan.systemevent.models.SystemEvent;
import com.telecominfraproject.wlan.systemevent.models.SystemEventRecord; import com.telecominfraproject.wlan.systemevent.models.SystemEventRecord;
/** /**
* @author dtop * @author dtop
* This stream processor is listening for events related to changes * This stream processor is listening for events related to changes
* in Equipment, Location, and Profile objects. If a change is detected, * in Equipment, Location, and Profile objects. If a change is detected,
* it uses Routing service to find affected equipment and delivers * it uses Routing service to find affected equipment and delivers
* CEGWConfigChangeNotification command to the equipment, which results * CEGWConfigChangeNotification command to the equipment, which results
@@ -50,187 +60,225 @@ import com.telecominfraproject.wlan.systemevent.models.SystemEventRecord;
@Component @Component
public class EquipmentConfigPushTrigger extends StreamProcessor { public class EquipmentConfigPushTrigger extends StreamProcessor {
private static final Logger LOG = LoggerFactory.getLogger(EquipmentConfigPushTrigger.class); private static final Logger LOG = LoggerFactory.getLogger(EquipmentConfigPushTrigger.class);
@Value("${tip.wlan.systemEventsTopic:system_events}")
private String systemEventsTopic;
@Autowired
private EquipmentGatewayServiceInterface equipmentGatewayInterface;
@Autowired
private ProfileServiceInterface profileServiceInterface;
@Autowired
private EquipmentServiceInterface equipmentServiceInterface;
@Override @Value("${tip.wlan.systemEventsTopic:system_events}")
protected boolean acceptMessage(QueuedStreamMessage message) { private String systemEventsTopic;
boolean ret = message.getTopic().equals(systemEventsTopic);
if(ret && ( message.getModel() instanceof SystemEventRecord) ) { @Autowired
private EquipmentGatewayServiceInterface equipmentGatewayInterface;
SystemEventRecord ser = (SystemEventRecord) message.getModel(); @Autowired
ret = ret && private ProfileServiceInterface profileServiceInterface;
( @Autowired
ser.getDetails() instanceof EquipmentApImpactingChangedEvent || private EquipmentServiceInterface equipmentServiceInterface;
ser.getDetails() instanceof EquipmentChannelsChangedEvent || @Autowired
ser.getDetails() instanceof EquipmentCellSizeAttributesChangedEvent || private StatusServiceInterface statusServiceInterface;
ser.getDetails() instanceof EquipmentRemovedEvent || @Autowired
ser.getDetails() instanceof ProfileAddedEvent || private AlarmServiceInterface alarmServiceInterface;
ser.getDetails() instanceof ProfileChangedEvent ||
ser.getDetails() instanceof ProfileRemovedEvent || @Override
ser.getDetails() instanceof LocationChangedApImpactingEvent protected boolean acceptMessage(QueuedStreamMessage message) {
); boolean ret = message.getTopic().equals(systemEventsTopic);
} else {
ret = false; if (ret && (message.getModel() instanceof SystemEventRecord)) {
}
SystemEventRecord ser = (SystemEventRecord) message.getModel();
LOG.trace("acceptMessage {}", ret); ret = ret && (ser.getDetails() instanceof EquipmentApImpactingChangedEvent || ser.getDetails() instanceof EquipmentBlinkLEDsEvent
|| ser.getDetails() instanceof EquipmentChannelsChangedEvent || ser.getDetails() instanceof EquipmentCellSizeAttributesChangedEvent
return ret; || ser.getDetails() instanceof EquipmentRemovedEvent || ser.getDetails() instanceof ProfileAddedEvent
} || ser.getDetails() instanceof ProfileChangedEvent || ser.getDetails() instanceof ProfileRemovedEvent
|| ser.getDetails() instanceof LocationChangedApImpactingEvent || ser.getDetails() instanceof EquipmentCustomerChangedEvent);
@Override } else {
protected void processMessage(QueuedStreamMessage message) { ret = false;
SystemEventRecord mdl = (SystemEventRecord) message.getModel(); }
SystemEvent se = mdl.getDetails();
LOG.debug("Processing {}", mdl); LOG.trace("acceptMessage {}", ret);
switch ( se.getClass().getSimpleName() ) { return ret;
case "EquipmentApImpactingChangedEvent": }
process((EquipmentApImpactingChangedEvent) se);
break; @Override
case "EquipmentChannelsChangedEvent": protected void processMessage(QueuedStreamMessage message) {
SystemEventRecord mdl = (SystemEventRecord) message.getModel();
SystemEvent se = mdl.getDetails();
LOG.debug("Processing {}", mdl);
switch (se.getClass().getSimpleName()) {
case "EquipmentApImpactingChangedEvent":
process((EquipmentApImpactingChangedEvent) se);
break;
case "EquipmentChannelsChangedEvent":
process((EquipmentChannelsChangedEvent) se); process((EquipmentChannelsChangedEvent) se);
break; break;
case "EquipmentCellSizeAttributesChangedEvent": case "EquipmentCellSizeAttributesChangedEvent":
process((EquipmentCellSizeAttributesChangedEvent) se); process((EquipmentCellSizeAttributesChangedEvent) se);
break; break;
case "EquipmentRemovedEvent": case "EquipmentBlinkLEDsEvent":
process((EquipmentBlinkLEDsEvent) se);
break;
case "EquipmentRemovedEvent":
process((EquipmentRemovedEvent) se); process((EquipmentRemovedEvent) se);
break; break;
case "ProfileAddedEvent": case "ProfileAddedEvent":
process((ProfileAddedEvent) se); process((ProfileAddedEvent) se);
break; break;
case "ProfileChangedEvent": case "ProfileChangedEvent":
process((ProfileChangedEvent) se); process((ProfileChangedEvent) se);
break; break;
case "ProfileRemovedEvent": case "ProfileRemovedEvent":
process((ProfileRemovedEvent) se); process((ProfileRemovedEvent) se);
break; break;
case "LocationChangedApImpactingEvent": case "LocationChangedApImpactingEvent":
process((LocationChangedApImpactingEvent) se); process((LocationChangedApImpactingEvent) se);
break; break;
default: case "EquipmentCustomerChangedEvent":
process(mdl); process((EquipmentCustomerChangedEvent) se);
} default:
process(mdl);
}
private void process(EquipmentApImpactingChangedEvent model) {
LOG.debug("Processing EquipmentChangedEvent");
equipmentGatewayInterface.sendCommand(new CEGWConfigChangeNotification(model.getPayload().getInventoryId(),
model.getEquipmentId()));
} }
}
private void process(EquipmentApImpactingChangedEvent model) {
LOG.debug("Processing EquipmentChangedEvent");
equipmentGatewayInterface.sendCommand(new CEGWConfigChangeNotification(model.getPayload().getInventoryId(), model.getEquipmentId()));
}
private void process(EquipmentChannelsChangedEvent model) {
LOG.debug("Processing EquipmentChannelsChangedEvent for equipmentId {}", model.getEquipmentId());
equipmentGatewayInterface.sendCommand(new CEGWNewChannelRequest(model.getPayload().getInventoryId(), model.getEquipmentId(),
model.getNewBackupChannels(), model.getNewPrimaryChannels()));
}
private void process(EquipmentCellSizeAttributesChangedEvent model) {
LOG.debug("Processing EquipmentCellSizeAttributesChangedEvent for equipmentId {}", model.getEquipmentId());
equipmentGatewayInterface
.sendCommand(new CEGWCellSizeAttributesRequest(model.getPayload().getInventoryId(), model.getEquipmentId(), model.getCellSizeAttributesMap()));
}
private void process(EquipmentBlinkLEDsEvent model) {
LOG.debug("Processing EquipmentBlinkLEDsEvent for equipmentId {}", model.getEquipmentId());
CEGWBlinkRequest br = new CEGWBlinkRequest(model.getPayload().getInventoryId(), model.getEquipmentId());
br.setBlinkAllLEDs(((ApElementConfiguration) model.getPayload().getDetails()).isBlinkAllLEDs());
equipmentGatewayInterface.sendCommand(br);
}
private void process(EquipmentRemovedEvent model) {
LOG.debug("Processing EquipmentRemovedEvent");
equipmentGatewayInterface.sendCommand(new CEGWCloseSessionRequest(model.getPayload().getInventoryId(), model.getEquipmentId()));
}
private void process(ProfileAddedEvent model) {
LOG.debug("Processing ProfileAddedEvent {}", model.getPayload().getId());
processProfile(model.getPayload());
}
private void process(ProfileChangedEvent model) {
LOG.debug("Processing ProfileChangedEvent {}", model.getPayload().getId());
processProfile(model.getPayload());
}
private void process(ProfileRemovedEvent model) {
LOG.debug("Processing ProfileRemovedEvent {}", model.getPayload().getId());
processProfile(model.getPayload());
}
private void processProfile(Profile profile) {
List<PairLongLong> ret = profileServiceInterface.getTopLevelProfiles(new HashSet<>(Arrays.asList(profile.getId())));
if (ret == null || ret.isEmpty()) {
// nothing to do here
return;
}
Set<Long> parentProfileIds = new HashSet<>();
ret.forEach(p -> parentProfileIds.add(p.getValue2()));
// go through all equipmentIds that refer to parent profiles and trigger change config notification on them
PaginationContext<PairLongLong> context = new PaginationContext<>(100);
while (!context.isLastPage()) {
PaginationResponse<PairLongLong> page = equipmentServiceInterface.getEquipmentIdsByProfileIds(parentProfileIds, context);
context = page.getContext();
Set<Long> equipmentIds = new HashSet<>();
page.getItems().forEach(p -> equipmentIds.add(p.getValue2()));
// retrieve full equipment objects to get the inventory id
List<Equipment> equipmentForPage = equipmentServiceInterface.get(equipmentIds);
List<CEGWBaseCommand> commands = new ArrayList<>(equipmentForPage.size());
equipmentForPage.forEach(eq -> commands.add(new CEGWConfigChangeNotification(eq.getInventoryId(), eq.getId())));
equipmentGatewayInterface.sendCommands(commands);
LOG.debug("Page {} - sent {} commands to equipment gateway", context.getLastReturnedPageNumber(), commands.size());
}
LOG.debug("Finished processing profile {}", profile.getId());
}
private void process(LocationChangedApImpactingEvent model) {
LOG.debug("Processing LocationChangedApImpactingEvent {}", model.getPayload().getId());
Set<Long> locationIds = new HashSet<>(Arrays.asList(model.getPayload().getId()));
// go through all equipmentIds that reside in the specified location and trigger change config notification on
// them
PaginationContext<PairLongLong> context = new PaginationContext<>(100);
while (!context.isLastPage()) {
PaginationResponse<PairLongLong> page = equipmentServiceInterface.getEquipmentIdsByLocationIds(locationIds, context);
context = page.getContext();
Set<Long> equipmentIds = new HashSet<>();
page.getItems().forEach(p -> equipmentIds.add(p.getValue2()));
// retrieve full equipment objects to get the inventory id
List<Equipment> equipmentForPage = equipmentServiceInterface.get(equipmentIds);
List<CEGWBaseCommand> commands = new ArrayList<>(equipmentForPage.size());
equipmentForPage.forEach(eq -> commands.add(new CEGWConfigChangeNotification(eq.getInventoryId(), eq.getId())));
equipmentGatewayInterface.sendCommands(commands);
LOG.debug("Page {} - sent {} commands to equipment gateway", context.getLastReturnedPageNumber(), commands.size());
}
LOG.debug("Finished processing LocationChangedApImpactingEvent {}", model.getPayload().getId());
}
private void process(EquipmentCustomerChangedEvent model) {
LOG.info("Processing EquipmentCustomerChangedEvent {}", model.getPayload().getId());
private void process(EquipmentChannelsChangedEvent model) { Equipment existingEquipment = model.getExistingEquipment();
LOG.debug("Processing EquipmentChannelsChangedEvent for equipmentId {}", model.getEquipmentId()); Equipment equipment = model.getEquipment();
equipmentGatewayInterface.sendCommand(new CEGWNewChannelRequest(model.getPayload().getInventoryId(),
model.getEquipmentId(), model.getNewBackupChannels(), model.getNewPrimaryChannels())); // when customerId changes, we keep the EQUIPMENT_ADMIN and PROTOCOL status of the AP
Status status = statusServiceInterface.getOrNull(existingEquipment.getCustomerId(), existingEquipment.getId(), StatusDataType.EQUIPMENT_ADMIN);
if (status != null) {
status.setCustomerId(equipment.getCustomerId());
statusServiceInterface.update(status);
} }
status = statusServiceInterface.getOrNull(existingEquipment.getCustomerId(), existingEquipment.getId(), StatusDataType.PROTOCOL);
private void process(EquipmentCellSizeAttributesChangedEvent model) { if (status != null) {
LOG.debug("Processing EquipmentCellSizeAttributesChangedEvent for equipmentId {}", model.getEquipmentId()); status.setCustomerId(equipment.getCustomerId());
equipmentGatewayInterface.sendCommand(new CEGWCellSizeAttributesRequest(model.getPayload().getInventoryId(), statusServiceInterface.update(status);
model.getEquipmentId(), model.getCellSizeAttributesMap()));
} }
private void process(EquipmentRemovedEvent model) { // Alarms has to move to new customerId as well
LOG.debug("Processing EquipmentRemovedEvent"); List<Alarm> oldCustomerAlarms = alarmServiceInterface.get(existingEquipment.getCustomerId(), Set.of(existingEquipment.getId()), null);
equipmentGatewayInterface.sendCommand(new CEGWCloseSessionRequest(model.getPayload().getInventoryId(), model.getEquipmentId())); if (!oldCustomerAlarms.isEmpty()) {
oldCustomerAlarms.stream().forEach(a -> {
a.setCustomerId(equipment.getCustomerId());
Alarm alarm = alarmServiceInterface.create(a);
LOG.debug("Move an alarm to new customer {}", alarm);
});
} }
alarmServiceInterface.delete(existingEquipment.getCustomerId(), existingEquipment.getId());
private void process(ProfileAddedEvent model) { }
LOG.debug("Processing ProfileAddedEvent {}", model.getPayload().getId());
processProfile(model.getPayload());
}
private void process(ProfileChangedEvent model) { private void process(BaseJsonModel model) {
LOG.debug("Processing ProfileChangedEvent {}", model.getPayload().getId()); LOG.warn("Unprocessed model: {}", model);
processProfile(model.getPayload()); }
}
private void process(ProfileRemovedEvent model) {
LOG.debug("Processing ProfileRemovedEvent {}", model.getPayload().getId());
processProfile(model.getPayload());
}
private void processProfile(Profile profile) {
List<PairLongLong> ret = profileServiceInterface.getTopLevelProfiles(new HashSet<>(Arrays.asList(profile.getId())));
if(ret == null || ret.isEmpty()) {
//nothing to do here
return;
}
Set<Long> parentProfileIds = new HashSet<>();
ret.forEach(p -> parentProfileIds.add(p.getValue2()));
//go through all equipmentIds that refer to parent profiles and trigger change config notification on them
PaginationContext<PairLongLong> context = new PaginationContext<>(100);
while(!context.isLastPage()) {
PaginationResponse<PairLongLong> page = equipmentServiceInterface.getEquipmentIdsByProfileIds(parentProfileIds, context );
context = page.getContext();
Set<Long> equipmentIds = new HashSet<>();
page.getItems().forEach(p -> equipmentIds.add(p.getValue2()));
//retrieve full equipment objects to get the inventory id
List<Equipment> equipmentForPage = equipmentServiceInterface.get(equipmentIds);
List<CEGWBaseCommand> commands = new ArrayList<>(equipmentForPage.size());
equipmentForPage.forEach(eq -> commands.add(new CEGWConfigChangeNotification(eq.getInventoryId(), eq.getId())));
equipmentGatewayInterface.sendCommands(commands);
LOG.debug("Page {} - sent {} commands to equipment gateway", context.getLastReturnedPageNumber(), commands.size());
}
LOG.debug("Finished processing profile {}", profile.getId());
}
private void process(LocationChangedApImpactingEvent model) {
LOG.debug("Processing LocationChangedApImpactingEvent {}", model.getPayload().getId());
Set<Long> locationIds = new HashSet<>(Arrays.asList(model.getPayload().getId()));
//go through all equipmentIds that reside in the specified location and trigger change config notification on them
PaginationContext<PairLongLong> context = new PaginationContext<>(100);
while(!context.isLastPage()) {
PaginationResponse<PairLongLong> page = equipmentServiceInterface.getEquipmentIdsByLocationIds(locationIds, context );
context = page.getContext();
Set<Long> equipmentIds = new HashSet<>();
page.getItems().forEach(p -> equipmentIds.add(p.getValue2()));
//retrieve full equipment objects to get the inventory id
List<Equipment> equipmentForPage = equipmentServiceInterface.get(equipmentIds);
List<CEGWBaseCommand> commands = new ArrayList<>(equipmentForPage.size());
equipmentForPage.forEach(eq -> commands.add(new CEGWConfigChangeNotification(eq.getInventoryId(), eq.getId())));
equipmentGatewayInterface.sendCommands(commands);
LOG.debug("Page {} - sent {} commands to equipment gateway", context.getLastReturnedPageNumber(), commands.size());
}
LOG.debug("Finished processing LocationChangedApImpactingEvent {}", model.getPayload().getId());
}
private void process(BaseJsonModel model) {
LOG.warn("Unprocessed model: {}", model);
}
} }

View File

@@ -42,7 +42,7 @@ public class ClientMetrics extends ServiceMetricDetails {
private Integer vhtMcs; private Integer vhtMcs;
private Integer snr; private Integer snr;
private Integer rssi; private Integer rssi;
private Long sessionId; private String sessionId;
private String classificationName; private String classificationName;
ChannelBandwidth channelBandWidth; ChannelBandwidth channelBandWidth;
GuardInterval guardInterval; GuardInterval guardInterval;
@@ -1191,7 +1191,7 @@ public class ClientMetrics extends ServiceMetricDetails {
return rxLastRssi; return rxLastRssi;
} }
public Long getSessionId() { public String getSessionId() {
return sessionId; return sessionId;
} }
@@ -1537,7 +1537,7 @@ public class ClientMetrics extends ServiceMetricDetails {
this.rxLastRssi = rxLastRssi; this.rxLastRssi = rxLastRssi;
} }
public void setSessionId(Long sessionId) { public void setSessionId(String sessionId) {
this.sessionId = sessionId; this.sessionId = sessionId;
} }

View File

@@ -270,8 +270,7 @@ components:
format: int32 format: int32
sessionId: sessionId:
type: integer type: string
format: int64
classificationName: classificationName:
type: string type: string

View File

@@ -1,7 +1,9 @@
package com.telecominfraproject.wlan.status.equipment.models; package com.telecominfraproject.wlan.status.equipment.models;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import com.telecominfraproject.wlan.status.models.StatusCode; import com.telecominfraproject.wlan.status.models.StatusCode;
import com.telecominfraproject.wlan.status.models.StatusDataType; import com.telecominfraproject.wlan.status.models.StatusDataType;
@@ -29,70 +31,29 @@ public class EquipmentAdminStatusData extends StatusDetails {
*/ */
private String statusMessage; private String statusMessage;
private Map<String, Long> alarmTimestamps;
private LedStatus ledStatus;
private Map<String,Long> alarmTimestamps;
public EquipmentAdminStatusData() { public EquipmentAdminStatusData() {
} }
@Override @Override
public StatusDataType getStatusDataType() { public StatusDataType getStatusDataType() {
return StatusDataType.EQUIPMENT_ADMIN; return StatusDataType.EQUIPMENT_ADMIN;
} }
public EquipmentAdminStatusData(EquipmentAdminStatusData data) { public EquipmentAdminStatusData(EquipmentAdminStatusData data) {
this.statusCode = data.statusCode; this.statusCode = data.statusCode;
this.statusMessage = data.statusMessage; this.statusMessage = data.statusMessage;
this.alarmTimestamps = data.alarmTimestamps==null?null:new HashMap<>(data.alarmTimestamps); this.alarmTimestamps = data.alarmTimestamps == null ? null : new HashMap<>(data.alarmTimestamps);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((alarmTimestamps == null) ? 0 : alarmTimestamps.hashCode());
result = prime * result + ((statusCode == null) ? 0 : statusCode.hashCode());
result = prime * result + ((statusMessage == null) ? 0 : statusMessage.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof EquipmentAdminStatusData)) {
return false;
}
EquipmentAdminStatusData other = (EquipmentAdminStatusData) obj;
if (alarmTimestamps == null) {
if (other.alarmTimestamps != null) {
return false;
}
} else if (!alarmTimestamps.equals(other.alarmTimestamps)) {
return false;
}
if (statusCode != other.statusCode) {
return false;
}
if (statusMessage == null) {
if (other.statusMessage != null) {
return false;
}
} else if (!statusMessage.equals(other.statusMessage)) {
return false;
}
return true;
} }
@Override @Override
public EquipmentAdminStatusData clone() { public EquipmentAdminStatusData clone() {
EquipmentAdminStatusData res = (EquipmentAdminStatusData) super.clone(); EquipmentAdminStatusData res = (EquipmentAdminStatusData) super.clone();
if(this.alarmTimestamps != null) { if (this.alarmTimestamps != null) {
res.setAlarmTimestamps(new HashMap<>(this.alarmTimestamps)); res.setAlarmTimestamps(new HashMap<>(this.alarmTimestamps));
} }
return res; return res;
@@ -121,26 +82,54 @@ public class EquipmentAdminStatusData extends StatusDetails {
public void setAlarmTimestamps(Map<String, Long> alarmTimestamps) { public void setAlarmTimestamps(Map<String, Long> alarmTimestamps) {
this.alarmTimestamps = alarmTimestamps; this.alarmTimestamps = alarmTimestamps;
} }
public long findAlarmTimeOrZero(String alarmKey) { public long findAlarmTimeOrZero(String alarmKey) {
return alarmTimestamps==null?0:alarmTimestamps.getOrDefault(alarmKey, 0l); return alarmTimestamps == null ? 0 : alarmTimestamps.getOrDefault(alarmKey, 0l);
} }
public void putAlarmTimestamp(String alarmKey, long value) { public void putAlarmTimestamp(String alarmKey, long value) {
if(alarmTimestamps == null) { if (alarmTimestamps == null) {
alarmTimestamps = new HashMap<>(); alarmTimestamps = new HashMap<>();
} }
alarmTimestamps.put(alarmKey, value); alarmTimestamps.put(alarmKey, value);
} }
@Override @Override
public boolean hasUnsupportedValue() { public boolean hasUnsupportedValue() {
if (super.hasUnsupportedValue()) { if (super.hasUnsupportedValue()) {
return true; return true;
} }
if (StatusCode.isUnsupported(statusCode) ) { if (StatusCode.isUnsupported(statusCode)) {
return true; return true;
} }
return false; return false;
} }
public LedStatus getLedStatus() {
return ledStatus;
}
public void setLedStatus(LedStatus ledStatus) {
this.ledStatus = ledStatus;
}
@Override
public int hashCode() {
return Objects.hash(alarmTimestamps, ledStatus, statusCode, statusMessage);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
EquipmentAdminStatusData other = (EquipmentAdminStatusData) obj;
return Objects.equals(alarmTimestamps, other.alarmTimestamps) && ledStatus == other.ledStatus && statusCode == other.statusCode
&& Objects.equals(statusMessage, other.statusMessage);
}
} }

View File

@@ -0,0 +1,6 @@
package com.telecominfraproject.wlan.status.equipment.models;
public enum LedStatus {
led_blink, led_off, UNKNOWN,
}

View File

@@ -197,6 +197,15 @@ components:
$ref: '#/components/schemas/StatusCode' $ref: '#/components/schemas/StatusCode'
statusMessage: statusMessage:
type: string type: string
ledStatus:
$ref: '#/components/schemas/LedStatus'
LedStatus:
type: string
enum:
- led_blink
- led_off
- UNKNOWN
StatusCode: StatusCode:
type: string type: string

View File

@@ -33,6 +33,7 @@ import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse;
import com.telecominfraproject.wlan.core.server.cassandra.RowMapper; import com.telecominfraproject.wlan.core.server.cassandra.RowMapper;
import com.telecominfraproject.wlan.systemevent.datastore.SystemEventDatastore; import com.telecominfraproject.wlan.systemevent.datastore.SystemEventDatastore;
import com.telecominfraproject.wlan.systemevent.models.SystemEventRecord; import com.telecominfraproject.wlan.systemevent.models.SystemEventRecord;
import com.telecominfraproject.wlan.systemevent.models.SystemEventStats;
/** /**
@@ -1031,4 +1032,9 @@ public class SystemEventDatastoreCassandra implements SystemEventDatastore {
return nextPagingState; return nextPagingState;
} }
@Override
public SystemEventStats getSystemEventStats(String filterAttributeName, String filterAttributeValue, long fromTime, long toTime) {
return new SystemEventStats();
}
} }

View File

@@ -3,6 +3,7 @@ package com.telecominfraproject.wlan.systemevent.datastore.inmemory;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -20,8 +21,10 @@ import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse;
import com.telecominfraproject.wlan.core.model.pagination.SortOrder; import com.telecominfraproject.wlan.core.model.pagination.SortOrder;
import com.telecominfraproject.wlan.datastore.inmemory.BaseInMemoryDatastore; import com.telecominfraproject.wlan.datastore.inmemory.BaseInMemoryDatastore;
import com.telecominfraproject.wlan.systemevent.datastore.SystemEventDatastore; import com.telecominfraproject.wlan.systemevent.datastore.SystemEventDatastore;
import com.telecominfraproject.wlan.systemevent.models.EquipmentEventStats;
import com.telecominfraproject.wlan.systemevent.models.SystemEventRecord; import com.telecominfraproject.wlan.systemevent.models.SystemEventRecord;
import com.telecominfraproject.wlan.systemevent.models.SystemEventRecordKey; import com.telecominfraproject.wlan.systemevent.models.SystemEventRecordKey;
import com.telecominfraproject.wlan.systemevent.models.SystemEventStats;
/** /**
* @author dtoptygin * @author dtoptygin
@@ -228,4 +231,38 @@ public class SystemEventDatastoreInMemory extends BaseInMemoryDatastore implemen
return clientMacAddresses.contains(macAddress); return clientMacAddresses.contains(macAddress);
} }
@Override
public SystemEventStats getSystemEventStats(String filterAttributeName, String filterAttributeValue, long fromTime, long toTime) {
List<SystemEventRecord> items = new LinkedList<>();
// apply filters and build the full result list first - inefficient, but ok for testing
for (SystemEventRecord mdl : idToSystemEventRecordMap.values()) {
if (mdl.getEventTimestamp() >= fromTime && mdl.getEventTimestamp() <= toTime) {
items.add(mdl);
}
}
SystemEventStats stats = new SystemEventStats();
stats.setTotalCount(items.size());
Map<String, EquipmentEventStats> eqptStatsMap = new HashMap<>();
for (SystemEventRecord mdl : items) {
EquipmentEventStats eqptStats = eqptStatsMap.get(Long.toString(mdl.getEquipmentId()));
if (eqptStats == null) {
eqptStats = new EquipmentEventStats();
eqptStats.setEquipmentId(mdl.getEquipmentId());
eqptStatsMap.put(Long.toString(mdl.getEquipmentId()), eqptStats);
}
eqptStats.setTotalCount(eqptStats.getTotalCount() + 1);
if (mdl.getEventTimestamp() > eqptStats.getLastEventTime()) {
eqptStats.setLastEventTime(mdl.getEventTimestamp());
}
items.add(mdl);
}
List<EquipmentEventStats> equipmentStats = new ArrayList<>();
stats.setEquipmentStats(equipmentStats);
return stats;
}
} }

View File

@@ -8,6 +8,7 @@ import com.telecominfraproject.wlan.core.model.pagination.ColumnAndSort;
import com.telecominfraproject.wlan.core.model.pagination.PaginationContext; import com.telecominfraproject.wlan.core.model.pagination.PaginationContext;
import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse; import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse;
import com.telecominfraproject.wlan.systemevent.models.SystemEventRecord; import com.telecominfraproject.wlan.systemevent.models.SystemEventRecord;
import com.telecominfraproject.wlan.systemevent.models.SystemEventStats;
/** /**
* @author dtoptygin * @author dtoptygin
@@ -60,4 +61,13 @@ public interface SystemEventDatastore {
List<ColumnAndSort> sortBy, List<ColumnAndSort> sortBy,
PaginationContext<SystemEventRecord> context); PaginationContext<SystemEventRecord> context);
/**
* @param filterAttributeName
* @param filterAttributeValue
* @param fromTime
* @param toTime
* @return Returns system event statistics for the given time range.
*/
SystemEventStats getSystemEventStats(String filterAttributeName, String filterAttributeValue, long fromTime, long toTime);
} }

View File

@@ -20,12 +20,12 @@ public abstract class BaseDhcpEvent extends SystemEvent implements HasClientMac,
private InetAddress clientIp; private InetAddress clientIp;
private InetAddress relayIp; private InetAddress relayIp;
private MacAddress clientMacAddress; private MacAddress clientMacAddress;
private long sessionId; // association sessionid private String sessionId; // association sessionid
private int customerId; private int customerId;
private long equipmentId; private long equipmentId;
private long locationId; private long locationId;
public BaseDhcpEvent(int customerId, long locationId, long equipmentId, long eventTimestamp, long sessionId) { public BaseDhcpEvent(int customerId, long locationId, long equipmentId, long eventTimestamp, String sessionId) {
super(eventTimestamp); super(eventTimestamp);
this.customerId = customerId; this.customerId = customerId;
this.locationId = locationId; this.locationId = locationId;
@@ -113,11 +113,11 @@ public abstract class BaseDhcpEvent extends SystemEvent implements HasClientMac,
this.relayIp = relayIp; this.relayIp = relayIp;
} }
public long getSessionId() { public String getSessionId() {
return sessionId; return sessionId;
} }
public void setSessionId(long sessionId) { public void setSessionId(String sessionId) {
this.sessionId = sessionId; this.sessionId = sessionId;
} }

View File

@@ -22,12 +22,12 @@ public class DhcpAckEvent extends BaseDhcpEvent {
*/ */
private boolean fromInternal = false; private boolean fromInternal = false;
public DhcpAckEvent(int customerId, long locationId, long equipmentId, long eventTimestamp, long sessionId) { public DhcpAckEvent(int customerId, long locationId, long equipmentId, long eventTimestamp, String sessionId) {
super(customerId, locationId, equipmentId, eventTimestamp, sessionId); super(customerId, locationId, equipmentId, eventTimestamp, sessionId);
} }
public DhcpAckEvent() { public DhcpAckEvent() {
super(0, 0L,0L,0L,0L); super(0, 0L,0L,0L,"0");
} }
public InetAddress getGatewayIp() { public InetAddress getGatewayIp() {

View File

@@ -10,12 +10,12 @@ package com.telecominfraproject.wlan.systemevent.equipment;
public class DhcpDeclineEvent extends BaseDhcpEvent { public class DhcpDeclineEvent extends BaseDhcpEvent {
private static final long serialVersionUID = -7745659083975485467L; private static final long serialVersionUID = -7745659083975485467L;
public DhcpDeclineEvent(int customerId, long locationId, long equipmentId, long eventTimestamp, long sessionId){ public DhcpDeclineEvent(int customerId, long locationId, long equipmentId, long eventTimestamp, String sessionId){
super(customerId, locationId, equipmentId,eventTimestamp, sessionId); super(customerId, locationId, equipmentId,eventTimestamp, sessionId);
} }
public DhcpDeclineEvent() { public DhcpDeclineEvent() {
super(0,0L, 0L,0L,0L); super(0,0L, 0L,0L,"0");
} }
@Override @Override

View File

@@ -9,12 +9,12 @@ public class DhcpDiscoverEvent extends BaseDhcpEvent {
private static final long serialVersionUID = -8290687227649478971L; private static final long serialVersionUID = -8290687227649478971L;
private String hostName; private String hostName;
public DhcpDiscoverEvent(int customerId, long locationId, long equipmentId, long eventTimestamp, long sessionId){ public DhcpDiscoverEvent(int customerId, long locationId, long equipmentId, long eventTimestamp, String sessionId){
super(customerId, locationId,equipmentId,eventTimestamp,sessionId); super(customerId, locationId,equipmentId,eventTimestamp,sessionId);
} }
public DhcpDiscoverEvent() { public DhcpDiscoverEvent() {
super(0, 0L,0L,0L,0L); super(0, 0L,0L,0L,"0");
} }
/** /**

View File

@@ -10,12 +10,12 @@ package com.telecominfraproject.wlan.systemevent.equipment;
public class DhcpInformEvent extends BaseDhcpEvent { public class DhcpInformEvent extends BaseDhcpEvent {
private static final long serialVersionUID = 7053813308222200205L; private static final long serialVersionUID = 7053813308222200205L;
public DhcpInformEvent(int customerId, long locationId, long equipmentId, long eventTimestamp, long sessionId){ public DhcpInformEvent(int customerId, long locationId, long equipmentId, long eventTimestamp, String sessionId){
super(customerId, locationId,equipmentId,eventTimestamp, sessionId); super(customerId, locationId,equipmentId,eventTimestamp, sessionId);
} }
public DhcpInformEvent() { public DhcpInformEvent() {
super(0, 0L,0L,0L,0L); super(0, 0L,0L,0L,"0");
} }
@Override @Override

View File

@@ -9,12 +9,12 @@ public class DhcpNakEvent extends BaseDhcpEvent {
private static final long serialVersionUID = -8648265834227002667L; private static final long serialVersionUID = -8648265834227002667L;
private boolean fromInternal = false; private boolean fromInternal = false;
public DhcpNakEvent(int customerId, long locationId, long equipmentId, long eventTimestamp, long sessionId) { public DhcpNakEvent(int customerId, long locationId, long equipmentId, long eventTimestamp, String sessionId) {
super(customerId, locationId, equipmentId, eventTimestamp, sessionId); super(customerId, locationId, equipmentId, eventTimestamp, sessionId);
} }
public DhcpNakEvent() { public DhcpNakEvent() {
super(0, 0L,0L,0L,0L); super(0, 0L,0L,0L,"0");
} }
/** /**

View File

@@ -10,12 +10,12 @@ public class DhcpOfferEvent extends BaseDhcpEvent {
*/ */
private boolean fromInternal = false; private boolean fromInternal = false;
public DhcpOfferEvent(int customerId, long locationId, long equipmentId, long eventTimestamp, long sessionId) { public DhcpOfferEvent(int customerId, long locationId, long equipmentId, long eventTimestamp, String sessionId) {
super(customerId, locationId, equipmentId, eventTimestamp, sessionId); super(customerId, locationId, equipmentId, eventTimestamp, sessionId);
} }
public DhcpOfferEvent() { public DhcpOfferEvent() {
super(0, 0L,0L,0L,0L); super(0, 0L,0L,0L,"0");
} }
/** /**

View File

@@ -9,12 +9,12 @@ public class DhcpRequestEvent extends BaseDhcpEvent {
private static final long serialVersionUID = 906425685437156761L; private static final long serialVersionUID = 906425685437156761L;
private String hostName; private String hostName;
public DhcpRequestEvent(int customerId, long locationId, long equipmentId, long eventTimestamp, long sessionId){ public DhcpRequestEvent(int customerId, long locationId, long equipmentId, long eventTimestamp, String sessionId){
super(customerId, locationId,equipmentId,eventTimestamp, sessionId); super(customerId, locationId,equipmentId,eventTimestamp, sessionId);
} }
public DhcpRequestEvent() { public DhcpRequestEvent() {
super(0, 0L,0L,0L,0L); super(0, 0L,0L,0L,"0");
} }
/** /**

View File

@@ -28,7 +28,7 @@ public abstract class RealTimeSipCallEventWithStats extends RealTimeEvent
private static final long serialVersionUID = -8908272967317508366L; private static final long serialVersionUID = -8908272967317508366L;
private Long sipCallId; private Long sipCallId;
private Long associationId; private String associationId;
private MacAddress clientMacAddress; private MacAddress clientMacAddress;
private List<RtpFlowStats> statuses; private List<RtpFlowStats> statuses;
private int channel; private int channel;
@@ -49,12 +49,12 @@ public abstract class RealTimeSipCallEventWithStats extends RealTimeEvent
this.sipCallId = sipCallId; this.sipCallId = sipCallId;
} }
public Long getAssociationId() { public String getAssociationId() {
return associationId; return associationId;
} }
public void setAssociationId(Long associationId) { public void setAssociationId(String string) {
this.associationId = associationId; this.associationId = string;
} }
@Override @Override
@@ -79,7 +79,7 @@ public abstract class RealTimeSipCallEventWithStats extends RealTimeEvent
} }
public boolean hasValidAssociationId() { public boolean hasValidAssociationId() {
return (associationId != null) && (associationId != 0); return (associationId != null) && (!associationId.equals("0"));
} }
public int getChannel() { public int getChannel() {

View File

@@ -18,7 +18,7 @@ public class RealTimeSipCallStartEvent extends RealTimeEvent
*/ */
private static final long serialVersionUID = -7289926906539107435L; private static final long serialVersionUID = -7289926906539107435L;
private Long sipCallId; private Long sipCallId;
private Long associationId; private String associationId;
private MacAddress macAddress; private MacAddress macAddress;
private List<String> codecs; private List<String> codecs;
private String providerDomain; private String providerDomain;
@@ -52,7 +52,7 @@ public class RealTimeSipCallStartEvent extends RealTimeEvent
&& Objects.equals(channel, other.channel) && Objects.equals(radioType, other.radioType); && Objects.equals(channel, other.channel) && Objects.equals(radioType, other.radioType);
} }
public Long getAssociationId() { public String getAssociationId() {
return associationId; return associationId;
} }
@@ -92,7 +92,7 @@ public class RealTimeSipCallStartEvent extends RealTimeEvent
return result; return result;
} }
public void setAssociationId(Long associationId) { public void setAssociationId(String associationId) {
this.associationId = associationId; this.associationId = associationId;
} }
@@ -131,7 +131,7 @@ public class RealTimeSipCallStartEvent extends RealTimeEvent
} }
public boolean hasValidAssociationId() { public boolean hasValidAssociationId() {
return (associationId != null) && (associationId != 0); return (associationId != null) && (!associationId.equals("0"));
} }
public int getChannel() { public int getChannel() {

View File

@@ -13,8 +13,8 @@ public class RealTimeStreamingStartEvent extends RealTimeEvent
implements HasCustomerId, HasEquipmentId, HasClientMac, HasProducedTimestamp { implements HasCustomerId, HasEquipmentId, HasClientMac, HasProducedTimestamp {
private static final long serialVersionUID = -591221857158333271L; private static final long serialVersionUID = -591221857158333271L;
private Long videoSessionId; private String videoSessionId;
private Long sessionId; private String sessionId;
private MacAddress clientMac; private MacAddress clientMac;
private InetAddress serverIp; private InetAddress serverIp;
private String serverDnsName; private String serverDnsName;
@@ -40,19 +40,19 @@ public class RealTimeStreamingStartEvent extends RealTimeEvent
this.serverDnsName = serverDnsName; this.serverDnsName = serverDnsName;
} }
public Long getVideoSessionId() { public String getVideoSessionId() {
return videoSessionId; return videoSessionId;
} }
public void setVideoSessionId(Long videoSessionId) { public void setVideoSessionId(String videoSessionId) {
this.videoSessionId = videoSessionId; this.videoSessionId = videoSessionId;
} }
public Long getSessionId() { public String getSessionId() {
return sessionId; return sessionId;
} }
public void setSessionId(Long sessionId) { public void setSessionId(String sessionId) {
this.sessionId = sessionId; this.sessionId = sessionId;
} }

View File

@@ -13,8 +13,8 @@ public class RealTimeStreamingStartSessionEvent extends RealTimeEvent
implements HasCustomerId, HasEquipmentId, HasClientMac, HasProducedTimestamp { implements HasCustomerId, HasEquipmentId, HasClientMac, HasProducedTimestamp {
private static final long serialVersionUID = 4395850344272425198L; private static final long serialVersionUID = 4395850344272425198L;
private Long videoSessionId; private String videoSessionId;
private Long sessionId; private String sessionId;
private MacAddress clientMac; private MacAddress clientMac;
private InetAddress serverIp; private InetAddress serverIp;
private StreamingVideoType type; private StreamingVideoType type;
@@ -31,19 +31,19 @@ public class RealTimeStreamingStartSessionEvent extends RealTimeEvent
super(RealTimeEventType.VideoStreamDebugStart, customerId, locationId, equipmentId, eventTimestamp); super(RealTimeEventType.VideoStreamDebugStart, customerId, locationId, equipmentId, eventTimestamp);
} }
public Long getVideoSessionId() { public String getVideoSessionId() {
return videoSessionId; return videoSessionId;
} }
public void setVideoSessionId(Long videoSessionId) { public void setVideoSessionId(String videoSessionId) {
this.videoSessionId = videoSessionId; this.videoSessionId = videoSessionId;
} }
public Long getSessionId() { public String getSessionId() {
return sessionId; return sessionId;
} }
public void setSessionId(Long sessionId) { public void setSessionId(String sessionId) {
this.sessionId = sessionId; this.sessionId = sessionId;
} }

View File

@@ -13,8 +13,8 @@ public class RealTimeStreamingStopEvent extends RealTimeEvent
implements HasCustomerId, HasEquipmentId, HasClientMac, HasProducedTimestamp { implements HasCustomerId, HasEquipmentId, HasClientMac, HasProducedTimestamp {
private static final long serialVersionUID = 6433913573274597688L; private static final long serialVersionUID = 6433913573274597688L;
private Long videoSessionId; private String videoSessionId;
private Long sessionId; private String sessionId;
private MacAddress clientMac; private MacAddress clientMac;
private InetAddress serverIp; private InetAddress serverIp;
private Long totalBytes; private Long totalBytes;
@@ -33,19 +33,19 @@ public class RealTimeStreamingStopEvent extends RealTimeEvent
super(RealTimeEventType.VideoStreamStop, customerId, locationId, equipmentId, eventTimestamp); super(RealTimeEventType.VideoStreamStop, customerId, locationId, equipmentId, eventTimestamp);
} }
public Long getVideoSessionId() { public String getVideoSessionId() {
return videoSessionId; return videoSessionId;
} }
public void setVideoSessionId(Long videoSessionId) { public void setVideoSessionId(String videoSessionId) {
this.videoSessionId = videoSessionId; this.videoSessionId = videoSessionId;
} }
public Long getSessionId() { public String getSessionId() {
return sessionId; return sessionId;
} }
public void setSessionId(Long sessionId) { public void setSessionId(String sessionId) {
this.sessionId = sessionId; this.sessionId = sessionId;
} }

View File

@@ -0,0 +1,58 @@
package com.telecominfraproject.wlan.systemevent.models;
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
/**
* Total and per-oui/equipment/radio counts of the Client Sessions
*/
public class EquipmentEventStats extends BaseJsonModel {
private static final long serialVersionUID = 6630012772286577077L;
/**
* The equipment ID.
*/
private long equipmentId;
/**
* Count of system events for the equipment.
*/
private long totalCount;
/**
* Last event time.
*/
private long lastEventTime;
public long getEquipmentId() {
return equipmentId;
}
public void setEquipmentId(long equipmentId) {
this.equipmentId = equipmentId;
}
public long getTotalCount() {
return totalCount;
}
public void setTotalCount(long totalCount) {
this.totalCount = totalCount;
}
public long getLastEventTime() {
return lastEventTime;
}
public void setLastEventTime(long lastEventTime) {
this.lastEventTime = lastEventTime;
}
@Override
public EquipmentEventStats clone() {
EquipmentEventStats ret = (EquipmentEventStats) super.clone();
return ret;
}
}

View File

@@ -0,0 +1,51 @@
package com.telecominfraproject.wlan.systemevent.models;
import java.util.ArrayList;
import java.util.List;
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
/**
* Total and per equipment counts of the System Events
*/
public class SystemEventStats extends BaseJsonModel {
private static final long serialVersionUID = 6630012772286577077L;
/**
* Total count of all system events.
*/
private long totalCount;
/**
* Counts of system events per equipment Id.
*/
private List<EquipmentEventStats> equipmentStats = new ArrayList<>();
public long getTotalCount() {
return totalCount;
}
public void setTotalCount(long totalCount) {
this.totalCount = totalCount;
}
public List<EquipmentEventStats> getEquipmentStats() {
return equipmentStats;
}
public void setEquipmentStats(List<EquipmentEventStats> equipmentStats) {
this.equipmentStats = equipmentStats;
}
@Override
public SystemEventStats clone() {
SystemEventStats ret = (SystemEventStats) super.clone();
if (equipmentStats != null) {
ret.equipmentStats = new ArrayList<>(equipmentStats);
}
return ret;
}
}

View File

@@ -9,6 +9,7 @@ import com.telecominfraproject.wlan.core.model.pagination.ColumnAndSort;
import com.telecominfraproject.wlan.core.model.pagination.PaginationContext; import com.telecominfraproject.wlan.core.model.pagination.PaginationContext;
import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse; import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse;
import com.telecominfraproject.wlan.systemevent.models.SystemEventRecord; import com.telecominfraproject.wlan.systemevent.models.SystemEventRecord;
import com.telecominfraproject.wlan.systemevent.models.SystemEventStats;
/** /**
@@ -70,4 +71,13 @@ public interface SystemEventServiceInterface {
return getForCustomer(fromTime, toTime, customerId, null, equipmentIds, null, dataTypes, sortBy, context); return getForCustomer(fromTime, toTime, customerId, null, equipmentIds, null, dataTypes, sortBy, context);
} }
/**
* @param filterAttributeName
* @param filterAttributeValue
* @param fromTime
* @param toTime
* @return Returns system event statistics for the given time range.
*/
SystemEventStats getSystemEventStats(String filterAttributeName, String filterAttributeValue, long fromTime, long toTime);
} }

View File

@@ -15,6 +15,7 @@ import com.telecominfraproject.wlan.core.model.pagination.PaginationContext;
import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse; import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse;
import com.telecominfraproject.wlan.systemevent.controller.SystemEventController; import com.telecominfraproject.wlan.systemevent.controller.SystemEventController;
import com.telecominfraproject.wlan.systemevent.models.SystemEventRecord; import com.telecominfraproject.wlan.systemevent.models.SystemEventRecord;
import com.telecominfraproject.wlan.systemevent.models.SystemEventStats;
/** /**
* @author dtoptygin * @author dtoptygin
@@ -56,11 +57,17 @@ public class SystemEventServiceLocal implements SystemEventServiceInterface {
Set<Long> locationIds, Set<Long> equipmentIds, Set<MacAddress> clientMacAdresses, Set<String> dataTypes, List<ColumnAndSort> sortBy, Set<Long> locationIds, Set<Long> equipmentIds, Set<MacAddress> clientMacAdresses, Set<String> dataTypes, List<ColumnAndSort> sortBy,
PaginationContext<SystemEventRecord> context) { PaginationContext<SystemEventRecord> context) {
LOG.debug("calling serviceMetricController.getForCustomer {} {} {} ", fromTime, toTime, customerId); LOG.debug("calling systemEventController.getForCustomer {} {} {} ", fromTime, toTime, customerId);
return systemEventController.getForCustomer(fromTime, toTime, customerId, return systemEventController.getForCustomer(fromTime, toTime, customerId,
locationIds, equipmentIds, clientMacAdresses, dataTypes, sortBy, context); locationIds, equipmentIds, clientMacAdresses, dataTypes, sortBy, context);
} }
@Override
public SystemEventStats getSystemEventStats(String filterAttributeName, String filterAttributeValue, long fromTime, long toTime) {
LOG.debug("calling systemEventController.getSystemEventStats {} {} {} {}", filterAttributeName, filterAttributeValue, fromTime, toTime);
return systemEventController.getSystemEventStats(filterAttributeName, filterAttributeValue, fromTime, toTime);
}
} }

View File

@@ -20,6 +20,7 @@ import com.telecominfraproject.wlan.core.model.pagination.PaginationContext;
import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse; import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse;
import com.telecominfraproject.wlan.datastore.exceptions.DsDataValidationException; import com.telecominfraproject.wlan.datastore.exceptions.DsDataValidationException;
import com.telecominfraproject.wlan.systemevent.models.SystemEventRecord; import com.telecominfraproject.wlan.systemevent.models.SystemEventRecord;
import com.telecominfraproject.wlan.systemevent.models.SystemEventStats;
/** /**
* @author dtoptygin * @author dtoptygin
@@ -175,5 +176,22 @@ public class SystemEventServiceRemote extends BaseRemoteClient implements System
return baseUrl; return baseUrl;
} }
@Override
public SystemEventStats getSystemEventStats(String filterAttributeName, String filterAttributeValue, long fromTime, long toTime) {
LOG.debug("calling getSystemEventStats( {}, {}, {}, {} )", filterAttributeName, filterAttributeValue, fromTime, toTime);
try {
ResponseEntity<SystemEventStats> responseEntity = restTemplate.exchange(getBaseUrl() +
"/stats?filterAttributeName={filterAttributeName}&filterAttributeValue={filterAttributeValue}&fromTime={fromTime}&toTime={toTime}",
HttpMethod.GET, null, SystemEventStats.class, filterAttributeName, filterAttributeValue, fromTime, toTime);
SystemEventStats result = responseEntity.getBody();
LOG.debug("getSessionCounts({}, {}, {}, {}) returns {} ", filterAttributeName, filterAttributeValue, fromTime, toTime, result);
return result;
} catch (Exception exp) {
LOG.error("getSessionCounts({}, {}, {}, {}) exception ", filterAttributeName, filterAttributeValue, fromTime, toTime, exp);
throw exp;
}
}
} }

View File

@@ -7,6 +7,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
@@ -22,6 +23,7 @@ import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse;
import com.telecominfraproject.wlan.datastore.exceptions.DsDataValidationException; import com.telecominfraproject.wlan.datastore.exceptions.DsDataValidationException;
import com.telecominfraproject.wlan.systemevent.datastore.SystemEventDatastore; import com.telecominfraproject.wlan.systemevent.datastore.SystemEventDatastore;
import com.telecominfraproject.wlan.systemevent.models.SystemEventRecord; import com.telecominfraproject.wlan.systemevent.models.SystemEventRecord;
import com.telecominfraproject.wlan.systemevent.models.SystemEventStats;
/** /**
@@ -141,7 +143,6 @@ public class SystemEventController {
return ret; return ret;
} }
/** /**
* Deletes SystemEventRecord records * Deletes SystemEventRecord records
* *
@@ -173,5 +174,23 @@ public class SystemEventController {
return new GenericResponse(true, ""); return new GenericResponse(true, "");
} }
/**
* @param filterAttributeName
* @param filterAttributeValue
* @param fromTime
* @param toTime
* @return Returns system event statistics for the given time range.
*/
@GetMapping("/stats")
public SystemEventStats getSystemEventStats(
@RequestParam String filterAttributeName,
@RequestParam String filterAttributeValue,
@RequestParam long fromTime,
@RequestParam long toTime) {
SystemEventStats ret = systemEventDatastore.getSystemEventStats(filterAttributeName, filterAttributeValue, fromTime, toTime);
LOG.debug("getSystemEventStats({},{},{},{}) {}", filterAttributeName, filterAttributeName, fromTime, toTime, ret);
return ret;
}
} }

View File

@@ -679,8 +679,7 @@ components:
clientMacAddress: clientMacAddress:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
sessionId: sessionId:
type: integer type: string
format: int64
customerId: customerId:
type: integer type: integer
format: int32 format: int32
@@ -776,8 +775,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
ssid: ssid:
type: string type: string
clientMacAddress: clientMacAddress:
@@ -808,8 +806,7 @@ components:
clientMacAddress: clientMacAddress:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
sessionId: sessionId:
type: integer type: string
format: int64
radioType: radioType:
$ref: '#/components/schemas/RadioType' $ref: '#/components/schemas/RadioType'
isReassociation: isReassociation:
@@ -861,8 +858,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
ssid: ssid:
type: string type: string
clientMacAddress: clientMacAddress:
@@ -877,8 +873,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
macAddressBytes: macAddressBytes:
type: array type: array
items: items:
@@ -901,8 +896,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
clientMacAddress: clientMacAddress:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
lastRecvTime: lastRecvTime:
@@ -919,8 +913,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
ssid: ssid:
type: string type: string
clientMacAddress: clientMacAddress:
@@ -951,8 +944,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
ssid: ssid:
type: string type: string
clientMacAddress: clientMacAddress:
@@ -988,8 +980,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
clientMacAddress: clientMacAddress:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
firstDataRcvdTs: firstDataRcvdTs:
@@ -1004,8 +995,7 @@ components:
allOf: allOf:
$ref: '#/components/schemas/RealTimeEvent' $ref: '#/components/schemas/RealTimeEvent'
sessionId: sessionId:
type: integer type: string
format: int64
clientMacAddress: clientMacAddress:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
ipAddr: ipAddr:
@@ -1078,8 +1068,7 @@ components:
type: integer type: integer
format: int64 format: int64
associationId: associationId:
type: integer type: string
format: int64
clientMacAddress: clientMacAddress:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
radioType: radioType:
@@ -1121,8 +1110,7 @@ components:
type: integer type: integer
format: int64 format: int64
associationId: associationId:
type: integer type: string
format: int64
macAddress: macAddress:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
radioType: radioType:
@@ -1164,8 +1152,7 @@ components:
type: integer type: integer
format: int64 format: int64
sessionId: sessionId:
type: integer type: string
format: int64
clientMac: clientMac:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
serverIp: serverIp:
@@ -1184,8 +1171,7 @@ components:
type: integer type: integer
format: int64 format: int64
sessionId: sessionId:
type: integer type: string
format: int64
clientMac: clientMac:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
serverIp: serverIp:
@@ -1202,8 +1188,7 @@ components:
type: integer type: integer
format: int64 format: int64
sessionId: sessionId:
type: integer type: string
format: int64
clientMac: clientMac:
$ref: '#/components/schemas/MacAddress' $ref: '#/components/schemas/MacAddress'
serverIp: serverIp:
@@ -1569,8 +1554,7 @@ components:
type: object type: object
properties: properties:
sessionId: sessionId:
type: integer type: string
format: int64
authTimestamp: authTimestamp:
type: integer type: integer
format: int64 format: int64
@@ -3474,6 +3458,15 @@ components:
$ref: '#/components/schemas/StatusCode' $ref: '#/components/schemas/StatusCode'
statusMessage: statusMessage:
type: string type: string
ledStatus:
$ref: '#/components/schemas/LedStatus'
LedStatus:
type: string
enum:
- led_blink
- led_off
- UNKNOWN
StatusCode: StatusCode:
type: string type: string
@@ -4520,6 +4513,8 @@ components:
type: boolean type: boolean
forwardMode: forwardMode:
$ref: '#/components/schemas/NetworkForwardMode' $ref: '#/components/schemas/NetworkForwardMode'
blinkAllLEDs:
type: boolean
radioMap: radioMap:
$ref: '#/components/schemas/RadioMap' $ref: '#/components/schemas/RadioMap'
advancedRadioMap: advancedRadioMap: