mirror of
https://github.com/Telecominfraproject/wlan-cloud-services.git
synced 2026-03-20 19:39:19 +00:00
Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1f6996abb2 | ||
|
|
1ebaa4a539 | ||
|
|
f1e1bdffd7 | ||
|
|
37f5872552 | ||
|
|
367b9ec428 | ||
|
|
87ca619ad5 | ||
|
|
622f78f681 | ||
|
|
faeb65d8d6 | ||
|
|
34841a3a04 | ||
|
|
4fc8bc4018 | ||
|
|
cce36019fe | ||
|
|
4596280090 | ||
|
|
caaa8fb4e3 | ||
|
|
b957c8bf72 | ||
|
|
b797cc392f | ||
|
|
5fc9715649 | ||
|
|
0a66897e48 | ||
|
|
8d77fcb090 | ||
|
|
256d9fbd16 | ||
|
|
39e14da2e6 | ||
|
|
996c60adf6 | ||
|
|
879abe3beb | ||
|
|
796d657952 |
@@ -53,7 +53,7 @@ public class AlarmCode implements EnumWithId {
|
||||
public static final AlarmCode
|
||||
LimitedCloudConnectivity = new AlarmCode(3, "LimitedCloudConnectivity", "Equipment is connected, however it's not reporting status or metrics", StatusCode.error, "Service AP and verify networking path to cloud"),
|
||||
AccessPointIsUnreachable = new AlarmCode(4, "AccessPointIsUnreachable", "Equipment is not reachable from cloud", StatusCode.error, "Service AP and verify networking path to cloud"),
|
||||
NoMetricsReceived = new AlarmCode(6, "NoMetricsReceived", "Equipment is not report metrics"),
|
||||
NoMetricsReceived = new AlarmCode(6, "NoMetricsReceived", "Metrics are not received from the equipment"),
|
||||
NoiseFloor2G = new AlarmCode(7, "NoiseFloor2G", "Noise floor is too high on 2G radio", StatusCode.requiresAttention, "Investigate interference sources"),
|
||||
ChannelUtilization2G = new AlarmCode(8, "ChannelUtilization2G", "Channel utilization is too high on 2G radio", StatusCode.requiresAttention, "Consider adding more APs"),
|
||||
NoiseFloor5G = new AlarmCode(9, "NoiseFloor5G", "Noise floor is too high on 5G radio", StatusCode.requiresAttention, "Investigate interference sources"),
|
||||
|
||||
@@ -52,6 +52,18 @@
|
||||
<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>
|
||||
</project>
|
||||
|
||||
@@ -19,6 +19,7 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
@@ -26,12 +27,17 @@ import com.telecominfraproject.wlan.alarm.models.Alarm;
|
||||
import com.telecominfraproject.wlan.alarm.models.AlarmCode;
|
||||
import com.telecominfraproject.wlan.alarm.models.AlarmCounts;
|
||||
import com.telecominfraproject.wlan.alarm.models.AlarmDetails;
|
||||
import com.telecominfraproject.wlan.cloudeventdispatcher.CloudEventDispatcherEmpty;
|
||||
import com.telecominfraproject.wlan.core.model.equipment.EquipmentType;
|
||||
import com.telecominfraproject.wlan.core.model.pagination.ColumnAndSort;
|
||||
import com.telecominfraproject.wlan.core.model.pagination.PaginationContext;
|
||||
import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse;
|
||||
import com.telecominfraproject.wlan.core.model.pagination.SortOrder;
|
||||
import com.telecominfraproject.wlan.datastore.exceptions.DsConcurrentModificationException;
|
||||
import com.telecominfraproject.wlan.datastore.exceptions.DsEntityNotFoundException;
|
||||
import com.telecominfraproject.wlan.equipment.EquipmentServiceLocal;
|
||||
import com.telecominfraproject.wlan.equipment.datastore.inmemory.EquipmentDatastoreInMemory;
|
||||
import com.telecominfraproject.wlan.equipment.models.Equipment;
|
||||
import com.telecominfraproject.wlan.remote.tests.BaseRemoteTest;
|
||||
import com.telecominfraproject.wlan.status.models.StatusCode;
|
||||
|
||||
@@ -44,10 +50,16 @@ import com.telecominfraproject.wlan.status.models.StatusCode;
|
||||
"integration_test",
|
||||
"no_ssl","http_digest_auth","rest-template-single-user-per-service-digest-auth",
|
||||
}) //NOTE: these profiles will be ADDED to the list of active profiles
|
||||
@Import(value = {
|
||||
EquipmentServiceLocal.class,
|
||||
EquipmentDatastoreInMemory.class,
|
||||
CloudEventDispatcherEmpty.class
|
||||
})
|
||||
public class AlarmServiceRemoteTest extends BaseRemoteTest {
|
||||
|
||||
|
||||
@Autowired AlarmServiceRemote remoteInterface;
|
||||
@Autowired EquipmentServiceLocal equipmentServicelocal;
|
||||
|
||||
@Before public void urlSetup(){
|
||||
configureBaseUrl("tip.wlan.alarmServiceBaseUrl");
|
||||
@@ -505,8 +517,10 @@ public class AlarmServiceRemoteTest extends BaseRemoteTest {
|
||||
public void testAlarmCountsRetrieval() {
|
||||
//create some Alarms
|
||||
Alarm mdl;
|
||||
int customerId_1 = getNextCustomerId();
|
||||
int customerId_2 = getNextCustomerId();
|
||||
final int customerId_1 = getNextCustomerId();
|
||||
final int customerId_2 = getNextCustomerId();
|
||||
final long equipmentId_1 = createEquipmentObject(customerId_1).getId();
|
||||
|
||||
|
||||
int apNameIdx = 0;
|
||||
Set<Long> equipmentIds = new HashSet<>();
|
||||
@@ -514,8 +528,8 @@ public class AlarmServiceRemoteTest extends BaseRemoteTest {
|
||||
Set<Long> equipmentIds_AccessPointIsUnreachable = new HashSet<>();
|
||||
|
||||
for(int i = 0; i< 50; i++){
|
||||
mdl = createAlarmObject();
|
||||
mdl.setCustomerId(customerId_1);
|
||||
mdl = createAlarmObject(customerId_1, createEquipmentObject(customerId_1).getId());
|
||||
mdl.setEquipmentId(createEquipmentObject(customerId_1).getId());
|
||||
mdl.setScopeId("qr_"+apNameIdx);
|
||||
if((i%2) == 0) {
|
||||
mdl.setAlarmCode(AlarmCode.CPUUtilization);
|
||||
@@ -530,16 +544,14 @@ public class AlarmServiceRemoteTest extends BaseRemoteTest {
|
||||
remoteInterface.create(mdl);
|
||||
}
|
||||
|
||||
mdl = createAlarmObject();
|
||||
mdl = createAlarmObject(customerId_1, equipmentId_1);
|
||||
mdl.setCustomerId(customerId_1);
|
||||
mdl.setEquipmentId(0);
|
||||
mdl.setAlarmCode(AlarmCode.GenericError);
|
||||
|
||||
remoteInterface.create(mdl);
|
||||
|
||||
for(int i = 0; i< 50; i++){
|
||||
mdl = createAlarmObject();
|
||||
mdl.setCustomerId(customerId_2);
|
||||
mdl = createAlarmObject(customerId_2, createEquipmentObject(customerId_2).getId());
|
||||
mdl.setScopeId("qr_"+apNameIdx);
|
||||
mdl.setAcknowledged(false);
|
||||
mdl.setAlarmCode(AlarmCode.GenericError);
|
||||
@@ -651,18 +663,33 @@ public class AlarmServiceRemoteTest extends BaseRemoteTest {
|
||||
}
|
||||
|
||||
private Alarm createAlarmObject() {
|
||||
Alarm result = new Alarm();
|
||||
result.setCustomerId(getNextCustomerId());
|
||||
result.setEquipmentId(getNextEquipmentId());
|
||||
int customerId = getNextCustomerId();
|
||||
return createAlarmObject(customerId, createEquipmentObject(customerId).getId());
|
||||
}
|
||||
|
||||
private Alarm createAlarmObject(int customerId, long equipmentId) {
|
||||
Alarm result = new Alarm();
|
||||
result.setCustomerId(customerId);
|
||||
result.setAlarmCode(AlarmCode.AccessPointIsUnreachable);
|
||||
result.setCreatedTimestamp(System.currentTimeMillis());
|
||||
result.setEquipmentId(equipmentId);
|
||||
|
||||
result.setScopeId("test-scope-" + result.getEquipmentId());
|
||||
|
||||
AlarmDetails details = new AlarmDetails();
|
||||
details.setMessage("test-details-" + result.getEquipmentId());
|
||||
result.setDetails(details );
|
||||
result.setDetails(details );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
private Equipment createEquipmentObject(int customerId)
|
||||
{
|
||||
Equipment equipment = new Equipment();
|
||||
equipment.setName("testName");
|
||||
equipment.setInventoryId("test-inv");
|
||||
equipment.setEquipmentType(EquipmentType.AP);
|
||||
equipment.setCustomerId(customerId);
|
||||
return equipmentServicelocal.create(equipment);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,12 +34,29 @@
|
||||
<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>
|
||||
|
||||
@@ -20,6 +20,7 @@ import com.telecominfraproject.wlan.core.model.pagination.ColumnAndSort;
|
||||
import com.telecominfraproject.wlan.core.model.pagination.PaginationContext;
|
||||
import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse;
|
||||
import com.telecominfraproject.wlan.datastore.exceptions.DsDataValidationException;
|
||||
import com.telecominfraproject.wlan.equipment.EquipmentServiceInterface;
|
||||
import com.telecominfraproject.wlan.systemevent.models.SystemEvent;
|
||||
|
||||
import com.telecominfraproject.wlan.alarm.datastore.AlarmDatastore;
|
||||
@@ -48,6 +49,7 @@ public class AlarmController {
|
||||
|
||||
@Autowired private AlarmDatastore alarmDatastore;
|
||||
@Autowired private CloudEventDispatcherInterface cloudEventDispatcher;
|
||||
@Autowired private EquipmentServiceInterface equipmentServiceInterface;
|
||||
|
||||
|
||||
/**
|
||||
@@ -66,6 +68,14 @@ public class AlarmController {
|
||||
LOG.error("Failed to create Alarm, request contains unsupported value: {}", alarm);
|
||||
throw new DsDataValidationException("Alarm contains unsupported value");
|
||||
}
|
||||
|
||||
if (alarm.getEquipmentId() != 0)
|
||||
{
|
||||
if (equipmentServiceInterface.getOrNull(alarm.getEquipmentId()) == null)
|
||||
{
|
||||
throw new DsDataValidationException(String.format("Unable to create alarm for non-existant equipment ID: %d", alarm.getEquipmentId()));
|
||||
}
|
||||
}
|
||||
|
||||
long ts = alarm.getCreatedTimestamp();
|
||||
if (ts == 0) {
|
||||
|
||||
@@ -17,7 +17,11 @@ import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
import com.telecominfraproject.wlan.cloudeventdispatcher.CloudEventDispatcherEmpty;
|
||||
|
||||
import com.telecominfraproject.wlan.core.model.equipment.EquipmentType;
|
||||
import com.telecominfraproject.wlan.equipment.EquipmentServiceLocal;
|
||||
import com.telecominfraproject.wlan.equipment.controller.EquipmentController;
|
||||
import com.telecominfraproject.wlan.equipment.datastore.inmemory.EquipmentDatastoreInMemory;
|
||||
import com.telecominfraproject.wlan.equipment.models.Equipment;
|
||||
import com.telecominfraproject.wlan.alarm.datastore.inmemory.AlarmDatastoreInMemory;
|
||||
import com.telecominfraproject.wlan.alarm.models.Alarm;
|
||||
import com.telecominfraproject.wlan.alarm.models.AlarmCode;
|
||||
@@ -39,10 +43,14 @@ import com.telecominfraproject.wlan.alarm.models.AlarmDetails;
|
||||
CloudEventDispatcherEmpty.class,
|
||||
AlarmDatastoreInMemory.class,
|
||||
AlarmControllerTest.Config.class,
|
||||
EquipmentServiceLocal.class,
|
||||
EquipmentController.class,
|
||||
EquipmentDatastoreInMemory.class
|
||||
})
|
||||
public class AlarmControllerTest {
|
||||
|
||||
@Autowired private AlarmController alarmController;
|
||||
@Autowired EquipmentServiceLocal equipmentServicelocal;
|
||||
|
||||
|
||||
@Configuration
|
||||
@@ -59,8 +67,9 @@ public class AlarmControllerTest {
|
||||
|
||||
//Create new Alarm - success
|
||||
Alarm alarm = new Alarm();
|
||||
alarm.setCustomerId((int) testSequence.getAndIncrement());
|
||||
alarm.setEquipmentId(testSequence.getAndIncrement());
|
||||
int customerId = (int) testSequence.getAndIncrement();
|
||||
alarm.setCustomerId(customerId);
|
||||
alarm.setEquipmentId(createEquipmentObject(customerId).getId());
|
||||
alarm.setAlarmCode(AlarmCode.AccessPointIsUnreachable);
|
||||
alarm.setCreatedTimestamp(System.currentTimeMillis());
|
||||
|
||||
@@ -91,5 +100,14 @@ public class AlarmControllerTest {
|
||||
assertEquals(expected.getDetails(), actual.getDetails());
|
||||
//TODO: add more fields to check here
|
||||
}
|
||||
|
||||
|
||||
private Equipment createEquipmentObject(int customerId)
|
||||
{
|
||||
Equipment equipment = new Equipment();
|
||||
equipment.setName("testName");
|
||||
equipment.setInventoryId("test-inv");
|
||||
equipment.setEquipmentType(EquipmentType.AP);
|
||||
equipment.setCustomerId(customerId);
|
||||
return equipmentServicelocal.create(equipment);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.telecominfraproject.wlan.core.model.pagination.PaginationContext;
|
||||
import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse;
|
||||
|
||||
import com.telecominfraproject.wlan.client.datastore.ClientDatastore;
|
||||
import com.telecominfraproject.wlan.client.info.models.ClientSessionCounts;
|
||||
import com.telecominfraproject.wlan.client.models.Client;
|
||||
import com.telecominfraproject.wlan.client.session.models.ClientSession;
|
||||
|
||||
@@ -108,6 +109,13 @@ public class ClientDatastoreCassandra implements ClientDatastore {
|
||||
|
||||
return clientSessionDAO.getSessionsForCustomer(customerId, equipmentIds, locationIds, macSubstring, sortBy, context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ClientSessionCounts getSessionCounts(int customerId) {
|
||||
// Not yet supported.
|
||||
ClientSessionCounts counts = new ClientSessionCounts();
|
||||
return counts;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.telecominfraproject.wlan.client.datastore.inmemory;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -15,6 +16,7 @@ import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import com.telecominfraproject.wlan.client.datastore.ClientDatastore;
|
||||
import com.telecominfraproject.wlan.client.info.models.ClientInfoDetails;
|
||||
import com.telecominfraproject.wlan.client.info.models.ClientSessionCounts;
|
||||
import com.telecominfraproject.wlan.client.models.Client;
|
||||
import com.telecominfraproject.wlan.client.session.models.ClientSession;
|
||||
import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
|
||||
@@ -512,4 +514,30 @@ public class ClientDatastoreInMemory extends BaseInMemoryDatastore implements Cl
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ClientSessionCounts getSessionCounts(int customerId) {
|
||||
ClientSessionCounts counts = new ClientSessionCounts();
|
||||
int totalCount = 0;
|
||||
Map<String, Integer> perOuiMap = new HashMap<>();
|
||||
|
||||
for (ClientSession session : idToClientSessionMap.values()) {
|
||||
if (session.getCustomerId() == customerId) {
|
||||
totalCount++;
|
||||
if (session.getOui() != null) {
|
||||
Integer cnt = perOuiMap.get(session.getOui());
|
||||
if (cnt == null) {
|
||||
cnt = 0;
|
||||
} else {
|
||||
cnt++;
|
||||
}
|
||||
perOuiMap.put(session.getOui(), cnt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
counts.setTotalCount(totalCount);
|
||||
counts.setOuiCounts(perOuiMap);
|
||||
return counts;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import com.telecominfraproject.wlan.client.info.models.ClientSessionCounts;
|
||||
import com.telecominfraproject.wlan.client.models.Client;
|
||||
import com.telecominfraproject.wlan.client.session.models.ClientSession;
|
||||
import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
|
||||
@@ -105,5 +106,12 @@ public interface ClientDatastore {
|
||||
*/
|
||||
PaginationResponse<ClientSession> getSessionsForCustomer(int customerId, Set<Long> equipmentIds, Set<Long> locationIds, String macSubstring, List<ColumnAndSort> sortBy, PaginationContext<ClientSession> context);
|
||||
|
||||
/**
|
||||
* Get Client Session counts for the given customerId.
|
||||
*
|
||||
* @param customerId
|
||||
* @return
|
||||
*/
|
||||
ClientSessionCounts getSessionCounts(int customerId);
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
|
||||
package com.telecominfraproject.wlan.client.info.models;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
|
||||
|
||||
/**
|
||||
* Total and per-oui counts of the Client Sessions
|
||||
*/
|
||||
public class ClientSessionCounts extends BaseJsonModel {
|
||||
|
||||
private static final long serialVersionUID = 7697349699510565184L;
|
||||
|
||||
private int totalCount;
|
||||
private Map<String, Integer> ouiCounts = new HashMap<>();
|
||||
|
||||
public Map<String, Integer> getOuiCounts() {
|
||||
return ouiCounts;
|
||||
}
|
||||
|
||||
public void setOuiCounts(Map<String, Integer> ouiCounts) {
|
||||
this.ouiCounts = ouiCounts;
|
||||
}
|
||||
|
||||
public int getTotalCount() {
|
||||
return totalCount;
|
||||
}
|
||||
|
||||
public void setTotalCount(int totalCount) {
|
||||
this.totalCount = totalCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ClientSessionCounts clone() {
|
||||
ClientSessionCounts ret = (ClientSessionCounts) super.clone();
|
||||
if (ouiCounts != null) {
|
||||
ret.ouiCounts = new HashMap<>(ouiCounts);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,8 @@ import com.telecominfraproject.wlan.core.model.json.interfaces.HasCustomerId;
|
||||
|
||||
public class ClientSession extends BaseJsonModel implements HasCustomerId {
|
||||
|
||||
private static final String UNKNOWN_OUI = "ffffff";
|
||||
|
||||
private static final long serialVersionUID = -7714023056859882994L;
|
||||
|
||||
private MacAddress macAddress;
|
||||
@@ -16,6 +18,7 @@ public class ClientSession extends BaseJsonModel implements HasCustomerId {
|
||||
private long locationId;
|
||||
private ClientSessionDetails details;
|
||||
private long lastModifiedTimestamp;
|
||||
private String oui;
|
||||
|
||||
public long getEquipmentId() {
|
||||
return equipmentId;
|
||||
@@ -47,6 +50,12 @@ public class ClientSession extends BaseJsonModel implements HasCustomerId {
|
||||
|
||||
public void setMacAddress(MacAddress macAddress) {
|
||||
this.macAddress = macAddress;
|
||||
if (macAddress != null && macAddress.isGlobalAddress()) {
|
||||
this.oui = macAddress.toOuiString();
|
||||
}
|
||||
else {
|
||||
this.oui = UNKNOWN_OUI;
|
||||
}
|
||||
}
|
||||
|
||||
public long getLastModifiedTimestamp() {
|
||||
@@ -65,6 +74,14 @@ public class ClientSession extends BaseJsonModel implements HasCustomerId {
|
||||
this.details = details;
|
||||
}
|
||||
|
||||
public String getOui() {
|
||||
return oui;
|
||||
}
|
||||
|
||||
public void setOui(String oui) {
|
||||
this.oui = oui;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ClientSession clone() {
|
||||
ClientSession ret = (ClientSession) super.clone();
|
||||
@@ -79,7 +96,7 @@ public class ClientSession extends BaseJsonModel implements HasCustomerId {
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(customerId, details, equipmentId, locationId, lastModifiedTimestamp, macAddress);
|
||||
return Objects.hash(customerId, details, equipmentId, locationId, lastModifiedTimestamp, macAddress, oui);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -95,7 +112,8 @@ public class ClientSession extends BaseJsonModel implements HasCustomerId {
|
||||
&& equipmentId == other.equipmentId
|
||||
&& locationId == other.locationId
|
||||
&& lastModifiedTimestamp == other.lastModifiedTimestamp
|
||||
&& Objects.equals(macAddress, other.macAddress);
|
||||
&& Objects.equals(macAddress, other.macAddress)
|
||||
&& Objects.equals(oui, other.oui);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -8,7 +8,7 @@ import com.telecominfraproject.wlan.core.model.json.GenericResponse;
|
||||
import com.telecominfraproject.wlan.core.model.pagination.ColumnAndSort;
|
||||
import com.telecominfraproject.wlan.core.model.pagination.PaginationContext;
|
||||
import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse;
|
||||
|
||||
import com.telecominfraproject.wlan.client.info.models.ClientSessionCounts;
|
||||
import com.telecominfraproject.wlan.client.models.Client;
|
||||
import com.telecominfraproject.wlan.client.session.models.ClientSession;
|
||||
|
||||
@@ -144,4 +144,12 @@ public interface ClientServiceInterface {
|
||||
*/
|
||||
PaginationResponse<ClientSession> getSessionsForCustomer(int customerId, Set<Long> equipmentIds, Set<Long> locationIds, String macSubstring, List<ColumnAndSort> sortBy, PaginationContext<ClientSession> context);
|
||||
|
||||
/**
|
||||
* Get Client Session counts for the given customerId.
|
||||
*
|
||||
* @param customerId
|
||||
* @return
|
||||
*/
|
||||
ClientSessionCounts getSessionCounts(int customerId);
|
||||
|
||||
}
|
||||
|
||||
@@ -3,13 +3,12 @@ package com.telecominfraproject.wlan.client;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.telecominfraproject.wlan.client.controller.ClientController;
|
||||
import com.telecominfraproject.wlan.client.controller.ClientController.ListOfClientSessions;
|
||||
import com.telecominfraproject.wlan.client.info.models.ClientSessionCounts;
|
||||
import com.telecominfraproject.wlan.client.models.Client;
|
||||
import com.telecominfraproject.wlan.client.session.models.ClientSession;
|
||||
import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
|
||||
@@ -26,7 +25,6 @@ import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse;
|
||||
public class ClientServiceLocal implements ClientServiceInterface {
|
||||
|
||||
@Autowired private ClientController clientController;
|
||||
private static final Logger LOG = LoggerFactory.getLogger(ClientServiceLocal.class);
|
||||
|
||||
@Override
|
||||
public Client create(Client client) {
|
||||
@@ -109,5 +107,10 @@ public class ClientServiceLocal implements ClientServiceInterface {
|
||||
public GenericResponse deleteSessions(long createdBeforeTimestamp) {
|
||||
return clientController.deleteSessions(createdBeforeTimestamp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ClientSessionCounts getSessionCounts(int customerId) {
|
||||
return clientController.getSessionCounts(customerId);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.telecominfraproject.wlan.client.info.models.ClientSessionCounts;
|
||||
import com.telecominfraproject.wlan.client.models.Client;
|
||||
import com.telecominfraproject.wlan.client.session.models.ClientSession;
|
||||
import com.telecominfraproject.wlan.core.client.BaseRemoteClient;
|
||||
@@ -365,5 +366,21 @@ public class ClientServiceRemote extends BaseRemoteClient implements ClientServi
|
||||
return baseUrl;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ClientSessionCounts getSessionCounts(int customerId) {
|
||||
LOG.debug("calling getSessionCounts( {} )", customerId);
|
||||
|
||||
try {
|
||||
ResponseEntity<ClientSessionCounts> responseEntity = restTemplate.exchange(getBaseUrl() + "/session/countsForCustomer?customerId={customerId}",
|
||||
HttpMethod.GET, null, ClientSessionCounts.class, customerId);
|
||||
|
||||
ClientSessionCounts result = responseEntity.getBody();
|
||||
LOG.debug("getSessionCounts({}) returns {} ", customerId, result);
|
||||
return result;
|
||||
} catch (Exception exp) {
|
||||
LOG.error("getSessionCounts({}) exception ", customerId, exp);
|
||||
throw exp;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
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.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
@@ -15,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import com.telecominfraproject.wlan.client.datastore.ClientDatastore;
|
||||
import com.telecominfraproject.wlan.client.info.models.ClientSessionCounts;
|
||||
import com.telecominfraproject.wlan.client.models.Client;
|
||||
import com.telecominfraproject.wlan.client.models.events.ClientAddedEvent;
|
||||
import com.telecominfraproject.wlan.client.models.events.ClientBlockListChangedEvent;
|
||||
@@ -430,6 +432,13 @@ public class ClientController {
|
||||
|
||||
return new GenericResponse(true, "");
|
||||
}
|
||||
|
||||
@GetMapping("/session/countsForCustomer")
|
||||
public ClientSessionCounts getSessionCounts(@RequestParam int customerId) {
|
||||
ClientSessionCounts ret = clientDatastore.getSessionCounts(customerId);
|
||||
LOG.debug("countsForCustomer({}) {}", customerId, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
private void publishEvent(SystemEvent event) {
|
||||
if (event == null) {
|
||||
|
||||
@@ -2856,6 +2856,9 @@ components:
|
||||
sharedSecret:
|
||||
type: string
|
||||
format: password
|
||||
dynamicDiscovery:
|
||||
description: Dynamic discovery of HSP and IdPs (home service and identity providers). Regardless of configured value, this will only be set 'true' on the AP if useRadSec is also true.
|
||||
type: boolean
|
||||
example:
|
||||
model_type: RadiusProxyConfiguration
|
||||
caCert:
|
||||
|
||||
@@ -15,7 +15,7 @@ import com.telecominfraproject.wlan.servicemetric.apnode.models.ApNodeMetrics;
|
||||
* <li>AlarmCode.CPUTemperature
|
||||
* <li>AlarmCode.CPUUtilization
|
||||
* <li>AlarmCode.MemoryUtilization
|
||||
* <li>AlarmCode.AccessPointIsUnreachable
|
||||
* <li>AlarmCode.NoMetricsReceived
|
||||
* </ul>
|
||||
*
|
||||
* @author dtop
|
||||
@@ -112,7 +112,7 @@ public class EquipmentAlarmsContext {
|
||||
AtomicInteger count = new AtomicInteger();
|
||||
|
||||
//check alarms against thresholds
|
||||
if(alarmCode.getId() == AlarmCode.AccessPointIsUnreachable.getId()) {
|
||||
if(alarmCode.getId() == AlarmCode.NoMetricsReceived.getId()) {
|
||||
ret = metricReceivedTimestamps.isEmpty();
|
||||
} else if(alarmCode.getId() == AlarmCode.CPUTemperature.getId()) {
|
||||
cpuTempSamples.values().forEach(v -> { sum.addAndGet(v); count.incrementAndGet(); });
|
||||
@@ -149,7 +149,7 @@ public class EquipmentAlarmsContext {
|
||||
AtomicInteger count = new AtomicInteger();
|
||||
|
||||
//check alarms against thresholds
|
||||
if(alarmCode.getId() == AlarmCode.AccessPointIsUnreachable.getId()) {
|
||||
if(alarmCode.getId() == AlarmCode.NoMetricsReceived.getId()) {
|
||||
ret = !metricReceivedTimestamps.isEmpty();
|
||||
} else if(alarmCode.getId() == AlarmCode.CPUTemperature.getId()) {
|
||||
cpuTempSamples.values().forEach(v -> { sum.addAndGet(v); count.incrementAndGet(); });
|
||||
|
||||
@@ -40,7 +40,7 @@ import com.telecominfraproject.wlan.stream.StreamProcessor;
|
||||
/**
|
||||
* @author dtop
|
||||
* <br> This stream processor is listening for APNodeMetrics, aggregating them in sliding windows of 5 minutes and raising/clearing alarms based on preconfigured thresholds.
|
||||
* <br> "AP out of reach" alarm is raised when no APNodeMetrics have been received for the equipment in the last interval, cleared when APNodeMetrics appear again
|
||||
* <br> "No metrics received" alarm is raised when no APNodeMetrics have been received for the equipment in the last interval, cleared when APNodeMetrics appear again
|
||||
* <br> "Temperature too high" alarm is raised when average temperature over the last interval goes above the configured threshold of 80C, cleared when average temperature goes below the threshold
|
||||
* <br> "CPU utilization is too high" alarm is raised when average CPU utilization on AP over the last interval goes above the configured threshold of 80%, cleared when average CPU utilization goes below the threshold
|
||||
* <br> "Memory utilization is too high" alarm is raised when average RAM utilization on AP over the last interval goes above the configured threshold of 70%, cleared when average RAM utilization goes below the threshold
|
||||
@@ -304,10 +304,10 @@ public class EquipmentAlarmsProcessor extends StreamProcessor {
|
||||
equipmentAlarmsThread.start();
|
||||
|
||||
//populate alarm codes this SP is responsible for
|
||||
alarmCodeSet.add(AlarmCode.NoMetricsReceived);
|
||||
alarmCodeSet.add(AlarmCode.CPUTemperature);
|
||||
alarmCodeSet.add(AlarmCode.CPUUtilization);
|
||||
alarmCodeSet.add(AlarmCode.MemoryUtilization);
|
||||
alarmCodeSet.add(AlarmCode.AccessPointIsUnreachable);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
package com.telecominfraproject.wlan.equipmentgateway.models;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import com.telecominfraproject.wlan.core.model.equipment.LEDColour;
|
||||
|
||||
public class CEGWBlinkRequest extends EquipmentCommand {
|
||||
|
||||
private static final long serialVersionUID = 3464950479960821571L;
|
||||
|
||||
private boolean blinkAllLEDs;
|
||||
private int numCycles;
|
||||
private int colour1DurationMs;
|
||||
private int colour2DurationMs;
|
||||
@@ -28,6 +31,14 @@ public class CEGWBlinkRequest extends EquipmentCommand {
|
||||
public CEGWBlinkRequest() {
|
||||
super(CEGWCommandType.BlinkRequest, null, 0);
|
||||
}
|
||||
|
||||
public boolean getBlinkAllLEDs() {
|
||||
return this.blinkAllLEDs;
|
||||
}
|
||||
|
||||
public void setBlinkAllLEDs(boolean blinkAllLEDs) {
|
||||
this.blinkAllLEDs = blinkAllLEDs;
|
||||
}
|
||||
|
||||
public int getNumCycles() {
|
||||
return numCycles;
|
||||
@@ -79,4 +90,25 @@ public class CEGWBlinkRequest extends EquipmentCommand {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = super.hashCode();
|
||||
result = prime * result + Objects.hash(blinkAllLEDs, colour1, colour1DurationMs, colour2, colour2DurationMs, numCycles);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (!super.equals(obj))
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
CEGWBlinkRequest other = (CEGWBlinkRequest) obj;
|
||||
return blinkAllLEDs == other.blinkAllLEDs && colour1 == other.colour1 && colour1DurationMs == other.colour1DurationMs && colour2 == other.colour2
|
||||
&& colour2DurationMs == other.colour2DurationMs && numCycles == other.numCycles;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -346,6 +346,7 @@ components:
|
||||
- off
|
||||
|
||||
CEGWBlinkRequest:
|
||||
description: Turn all LEDs on the AP to blinking, or turn off. The blinkAllLEDs attribute is the only currently supported functionality on the AP.
|
||||
allOf:
|
||||
- $ref: '#/components/schemas/CEGWBaseCommand'
|
||||
properties:
|
||||
@@ -357,6 +358,8 @@ components:
|
||||
type: string
|
||||
enum:
|
||||
- CEGWBlinkRequest
|
||||
blinkAllLEDs:
|
||||
type: boolean
|
||||
colour1:
|
||||
$ref: '#/components/schemas/LEDColour'
|
||||
colour2:
|
||||
@@ -375,6 +378,7 @@ components:
|
||||
inventoryId: inv-1
|
||||
model_type: CEGWBlinkRequest
|
||||
commandType: BlinkRequest
|
||||
blinkAllLEDs: true
|
||||
colour1: blue
|
||||
colour2: red
|
||||
colour1DurationMs: 1000
|
||||
|
||||
@@ -191,18 +191,18 @@ public class ManufacturerServiceRemoteTest extends BaseRemoteTest {
|
||||
Set<String> ouiList = new HashSet<>();
|
||||
ouiList.add(oui1);
|
||||
ouiListSearchResult = remoteInterface.getManufacturerDetailsForOuiSet(ouiList);
|
||||
assertTrue(ouiListSearchResult.size() == 1);
|
||||
assertTrue(ouiListSearchResult.size() == 2);
|
||||
assertTrue(ouiListSearchResult.get(oui1).equals(ret1));
|
||||
|
||||
ouiList.add(oui2);
|
||||
ouiListSearchResult = remoteInterface.getManufacturerDetailsForOuiSet(ouiList);
|
||||
assertTrue(ouiListSearchResult.size() == 2);
|
||||
assertTrue(ouiListSearchResult.size() == 3);
|
||||
assertTrue(ouiListSearchResult.get(oui1).equals(ret1));
|
||||
assertTrue(ouiListSearchResult.get(oui2).equals(ret2));
|
||||
|
||||
ouiList.add(oui3);
|
||||
ouiListSearchResult = remoteInterface.getManufacturerDetailsForOuiSet(ouiList);
|
||||
assertTrue(ouiListSearchResult.size() == 3);
|
||||
assertTrue(ouiListSearchResult.size() == 4);
|
||||
assertTrue(ouiListSearchResult.get(oui1).equals(ret1));
|
||||
assertTrue(ouiListSearchResult.get(oui2).equals(ret2));
|
||||
assertTrue(ouiListSearchResult.get(oui3).equals(ret3));
|
||||
@@ -211,7 +211,7 @@ public class ManufacturerServiceRemoteTest extends BaseRemoteTest {
|
||||
ouiList.add(String.format("%06d", i));
|
||||
}
|
||||
ouiListSearchResult = remoteInterface.getManufacturerDetailsForOuiSet(ouiList);
|
||||
assertEquals(3,ouiListSearchResult.size());
|
||||
assertEquals(4,ouiListSearchResult.size());
|
||||
assertTrue(ouiListSearchResult.get(oui1).equals(ret1));
|
||||
assertTrue(ouiListSearchResult.get(oui2).equals(ret2));
|
||||
assertTrue(ouiListSearchResult.get(oui3).equals(ret3));
|
||||
|
||||
@@ -35,7 +35,10 @@ import com.telecominfraproject.wlan.manufacturer.models.ManufacturerOuiDetails;
|
||||
public class ManufacturerController {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(ManufacturerController.class);
|
||||
|
||||
|
||||
private static final int GLOBE_BIT = (0x1 << 1);
|
||||
private static final ManufacturerOuiDetails PRIVATE_MAC_RESPONSE = new ManufacturerOuiDetails();
|
||||
|
||||
@Autowired
|
||||
private ManufacturerDatastoreInterface manufacturerDatastore;
|
||||
|
||||
@@ -43,6 +46,11 @@ public class ManufacturerController {
|
||||
private static final long serialVersionUID = -8035392255039609079L;
|
||||
}
|
||||
|
||||
static {
|
||||
PRIVATE_MAC_RESPONSE.setOui("ffffff");
|
||||
PRIVATE_MAC_RESPONSE.setManufacturerName("Unknown (Private Address)");
|
||||
PRIVATE_MAC_RESPONSE.setManufacturerAlias("Unknown");
|
||||
}
|
||||
@PostMapping(value = "/oui")
|
||||
public ManufacturerOuiDetails createOuiDetails(@RequestBody ManufacturerOuiDetails ouiDetails) {
|
||||
LOG.debug("Creating OUI details {} ", ouiDetails);
|
||||
@@ -76,9 +84,7 @@ public class ManufacturerController {
|
||||
@GetMapping(value = "/oui")
|
||||
public ManufacturerOuiDetails getByOui(@RequestParam String oui) {
|
||||
LOG.debug("Retrieving OUI details for OUI {} ", oui);
|
||||
|
||||
ManufacturerOuiDetails ret = manufacturerDatastore.getByOui(oui);
|
||||
|
||||
ManufacturerOuiDetails ret = isGlobalAddress(oui) ? manufacturerDatastore.getByOui(oui) : PRIVATE_MAC_RESPONSE;
|
||||
LOG.debug("Retrieved OUI details {} ", ret);
|
||||
return ret;
|
||||
}
|
||||
@@ -157,7 +163,11 @@ public class ManufacturerController {
|
||||
public Map<String, ManufacturerOuiDetails> getManufacturerDetailsForOuiList(
|
||||
@RequestParam List<String> ouiList) {
|
||||
LOG.debug("calling getManufacturerDetailsForOuiList ");
|
||||
return manufacturerDatastore.getManufacturerDetailsForOuiList(ouiList);
|
||||
Map<String, ManufacturerOuiDetails> manufMap = manufacturerDatastore.getManufacturerDetailsForOuiList(ouiList);
|
||||
|
||||
ouiList.forEach(oui -> {if (!isGlobalAddress(oui)) manufMap.put(oui, PRIVATE_MAC_RESPONSE);});
|
||||
manufMap.put(PRIVATE_MAC_RESPONSE.getOui(), PRIVATE_MAC_RESPONSE);
|
||||
return manufMap;
|
||||
}
|
||||
|
||||
@PutMapping(value = "/oui/alias")
|
||||
@@ -180,4 +190,14 @@ public class ManufacturerController {
|
||||
LOG.debug("Retrieving alias values that begin with {}", prefix);
|
||||
return manufacturerDatastore.getAliasValuesThatBeginWith(prefix, maxResults);
|
||||
}
|
||||
|
||||
private boolean isGlobalAddress(String oui) {
|
||||
if (oui != null && oui.length() == 6) {
|
||||
// we only need to check the first Byte of the OUI
|
||||
Integer hex = Integer.parseInt(oui.substring(0, 2), 16);
|
||||
byte firstByte = hex.byteValue();
|
||||
return (firstByte & GLOBE_BIT) == 0;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
|
||||
package com.telecominfraproject.wlan.portal.controller.equipmentgateway;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
@@ -13,6 +14,7 @@ import com.telecominfraproject.wlan.core.model.json.GenericResponse;
|
||||
import com.telecominfraproject.wlan.equipment.EquipmentServiceInterface;
|
||||
import com.telecominfraproject.wlan.equipment.models.Equipment;
|
||||
import com.telecominfraproject.wlan.equipment.models.RadioChannelChangeSettings;
|
||||
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWBlinkRequest;
|
||||
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWCommandResultCode;
|
||||
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWFirmwareDownloadRequest;
|
||||
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWNewChannelRequest;
|
||||
@@ -30,7 +32,7 @@ import com.telecominfraproject.wlan.status.equipment.models.EquipmentResetMethod
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping(value = "/portal")
|
||||
public class EquipmentGatewayPortalController {
|
||||
public class EquipmentGatewayPortalController {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(EquipmentGatewayPortalController.class);
|
||||
|
||||
@@ -49,94 +51,113 @@ public class EquipmentGatewayPortalController {
|
||||
|
||||
Equipment equipment = equipmentServiceInterface.get(equipmentId);
|
||||
FirmwareVersion fwVersion = firmwareServiceInterface.getFirmwareVersion(firmwareVersionId);
|
||||
|
||||
CEGWFirmwareDownloadRequest fwDownloadRequest = new CEGWFirmwareDownloadRequest(equipment.getInventoryId(),
|
||||
equipment.getId(), fwVersion.getVersionName(), fwVersion.getFilename());
|
||||
|
||||
CEGWFirmwareDownloadRequest fwDownloadRequest =
|
||||
new CEGWFirmwareDownloadRequest(equipment.getInventoryId(), equipment.getId(), fwVersion.getVersionName(), fwVersion.getFilename());
|
||||
|
||||
EquipmentCommandResponse response = equipmentGatewayServiceInterface.sendCommand(fwDownloadRequest);
|
||||
LOG.debug("FW Download Response {}", response);
|
||||
|
||||
if(response.getResultCode() == CEGWCommandResultCode.Success) {
|
||||
return new GenericResponse(true,"");
|
||||
if (response.getResultCode() == CEGWCommandResultCode.Success) {
|
||||
return new GenericResponse(true, "");
|
||||
} else {
|
||||
return new GenericResponse(false, "Failed to request firmware update: "+ response.getResultCode() + " " + response.getResultDetail());
|
||||
return new GenericResponse(false, "Failed to request firmware update: " + response.getResultCode() + " " + response.getResultDetail());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping(value = "/equipmentGateway/requestChannelChange", method = RequestMethod.POST)
|
||||
public GenericResponse requestChannelChange(@RequestParam long equipmentId, @RequestBody RadioChannelChangeSettings radioChannelChangeSettings) {
|
||||
LOG.debug("requestChannelChange {} {}", equipmentId);
|
||||
|
||||
Equipment equipment = equipmentServiceInterface.get(equipmentId);
|
||||
|
||||
CEGWNewChannelRequest newChannelRequest = new CEGWNewChannelRequest(equipment.getInventoryId(), equipmentId, radioChannelChangeSettings.getBackupChannel(), radioChannelChangeSettings.getPrimaryChannel());
|
||||
|
||||
Equipment equipment = equipmentServiceInterface.get(equipmentId);
|
||||
|
||||
CEGWNewChannelRequest newChannelRequest = new CEGWNewChannelRequest(equipment.getInventoryId(), equipmentId,
|
||||
radioChannelChangeSettings.getBackupChannel(), radioChannelChangeSettings.getPrimaryChannel());
|
||||
|
||||
EquipmentCommandResponse response = equipmentGatewayServiceInterface.sendCommand(newChannelRequest);
|
||||
LOG.debug("Channel Change Response {}", response);
|
||||
|
||||
if(response.getResultCode() == CEGWCommandResultCode.Success) {
|
||||
return new GenericResponse(true,"");
|
||||
if (response.getResultCode() == CEGWCommandResultCode.Success) {
|
||||
return new GenericResponse(true, "");
|
||||
} else {
|
||||
return new GenericResponse(false, "Failed to initiate channel change: "+ response.getResultCode() + " " + response.getResultDetail());
|
||||
return new GenericResponse(false, "Failed to initiate channel change: " + response.getResultCode() + " " + response.getResultDetail());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping(value = "/equipmentGateway/requestApReboot", method = RequestMethod.POST)
|
||||
public GenericResponse requestApReboot(@RequestParam long equipmentId) {
|
||||
LOG.debug("requestApReboot {}", equipmentId);
|
||||
|
||||
Equipment equipment = equipmentServiceInterface.get(equipmentId);
|
||||
// No config change, just plain reboot
|
||||
CEGWRebootRequest apRebootRequest = new CEGWRebootRequest(equipment.getInventoryId(),
|
||||
equipment.getId(), false, EquipmentResetMethod.NoReset);
|
||||
// No config change, just plain reboot
|
||||
CEGWRebootRequest apRebootRequest = new CEGWRebootRequest(equipment.getInventoryId(), equipment.getId(), false, EquipmentResetMethod.NoReset);
|
||||
|
||||
EquipmentCommandResponse response = equipmentGatewayServiceInterface.sendCommand(apRebootRequest);
|
||||
LOG.debug("AP reboot response {}", response);
|
||||
|
||||
if(response.getResultCode() == CEGWCommandResultCode.Success) {
|
||||
return new GenericResponse(true,"");
|
||||
if (response.getResultCode() == CEGWCommandResultCode.Success) {
|
||||
return new GenericResponse(true, "");
|
||||
} else {
|
||||
return new GenericResponse(false, "Failed to trigger AP reboot: "+ response.getResultCode() + " " + response.getResultDetail());
|
||||
return new GenericResponse(false, "Failed to trigger AP reboot: " + response.getResultCode() + " " + response.getResultDetail());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping(value = "/equipmentGateway/requestApSwitchSoftwareBank", method = RequestMethod.POST)
|
||||
public GenericResponse requestApSwitchSoftwareBank(@RequestParam long equipmentId) {
|
||||
LOG.debug("requestApSwitchSoftwareBank {}", equipmentId);
|
||||
|
||||
Equipment equipment = equipmentServiceInterface.get(equipmentId);
|
||||
// Reboot, switch active/inactive software bank
|
||||
CEGWRebootRequest apSwitchSoftwareBank = new CEGWRebootRequest(equipment.getInventoryId(),
|
||||
equipment.getId(), true, EquipmentResetMethod.NoReset);
|
||||
// Reboot, switch active/inactive software bank
|
||||
CEGWRebootRequest apSwitchSoftwareBank = new CEGWRebootRequest(equipment.getInventoryId(), equipment.getId(), true, EquipmentResetMethod.NoReset);
|
||||
|
||||
EquipmentCommandResponse response = equipmentGatewayServiceInterface.sendCommand(apSwitchSoftwareBank);
|
||||
LOG.debug("AP switch software bank response {}", response);
|
||||
|
||||
if(response.getResultCode() == CEGWCommandResultCode.Success) {
|
||||
return new GenericResponse(true,"");
|
||||
if (response.getResultCode() == CEGWCommandResultCode.Success) {
|
||||
return new GenericResponse(true, "");
|
||||
} else {
|
||||
return new GenericResponse(false, "Failed to trigger AP switch software bank: "+ response.getResultCode() + " " + response.getResultDetail());
|
||||
return new GenericResponse(false, "Failed to trigger AP switch software bank: " + response.getResultCode() + " " + response.getResultDetail());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping(value = "/equipmentGateway/requestApFactoryReset", method = RequestMethod.POST)
|
||||
public GenericResponse requestApFactoryReset(@RequestParam long equipmentId) {
|
||||
LOG.debug("requestApFactoryReset {}", equipmentId);
|
||||
|
||||
Equipment equipment = equipmentServiceInterface.get(equipmentId);
|
||||
// Reboot Ap with factory settings
|
||||
CEGWRebootRequest apFactoryReset = new CEGWRebootRequest(equipment.getInventoryId(),
|
||||
equipment.getId(), false, EquipmentResetMethod.FactoryReset);
|
||||
// Reboot Ap with factory settings
|
||||
CEGWRebootRequest apFactoryReset = new CEGWRebootRequest(equipment.getInventoryId(), equipment.getId(), false, EquipmentResetMethod.FactoryReset);
|
||||
|
||||
EquipmentCommandResponse response = equipmentGatewayServiceInterface.sendCommand(apFactoryReset);
|
||||
LOG.debug("AP factory reset response {}", response);
|
||||
|
||||
if(response.getResultCode() == CEGWCommandResultCode.Success) {
|
||||
return new GenericResponse(true,"");
|
||||
if (response.getResultCode() == CEGWCommandResultCode.Success) {
|
||||
return new GenericResponse(true, "");
|
||||
} else {
|
||||
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)
|
||||
public GenericResponse requestApBlinkLEDs(@RequestParam long equipmentId, @RequestParam boolean blinkAllLEDs) {
|
||||
String action = "stop blinking LEDs on AP ";
|
||||
if (blinkAllLEDs) action = "start blinking LEDs on AP ";
|
||||
Equipment equipment = equipmentServiceInterface.get(equipmentId);
|
||||
LOG.debug("Request {} for AP {}", action, equipment.getInventoryId());
|
||||
|
||||
// Turn LEDs on Ap on or off based on blinkAllLEDs value
|
||||
CEGWBlinkRequest apBlinkLEDs = new CEGWBlinkRequest(equipment.getInventoryId(), equipment.getId());
|
||||
apBlinkLEDs.setBlinkAllLEDs(blinkAllLEDs);
|
||||
|
||||
EquipmentCommandResponse response = equipmentGatewayServiceInterface.sendCommand(apBlinkLEDs);
|
||||
LOG.debug("{} response {}", action,response);
|
||||
|
||||
|
||||
if (response.getResultCode() == CEGWCommandResultCode.Success) {
|
||||
return new GenericResponse(true, "");
|
||||
} else {
|
||||
return new GenericResponse(false, "Failed to " + action + " for AP: " + response.getResultCode() + " " + response.getResultDetail());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1865,6 +1865,9 @@ components:
|
||||
sharedSecret:
|
||||
type: string
|
||||
format: password
|
||||
dynamicDiscovery:
|
||||
description: Dynamic discovery of HSP and IdPs (home service and identity providers). Regardless of configured value, this will only be set 'true' on the AP if useRadSec is also true.
|
||||
type: boolean
|
||||
example:
|
||||
model_type: RadiusProxyConfiguration
|
||||
caCert:
|
||||
@@ -14238,6 +14241,36 @@ paths:
|
||||
$ref: '#/components/schemas/GenericResponse'
|
||||
500:
|
||||
$ref: '#/components/responses/GenericApiError'
|
||||
|
||||
/portal/equipmentGateway/requestApBlinkLEDs:
|
||||
post:
|
||||
tags:
|
||||
- Equipment Gateway
|
||||
summary: Request to enable or disable the blinking of LEDs on the AP
|
||||
operationId: requestApBlinkLEDs
|
||||
parameters:
|
||||
- name: equipmentId
|
||||
in: query
|
||||
description: Equipment id for AP on which the enabling or disabling of blinking LEDs is requested.
|
||||
required: true
|
||||
schema:
|
||||
type: integer
|
||||
format: int64
|
||||
- name: blinkAllLEDs
|
||||
in: query
|
||||
description: enable (true) or disable (false) the LEDs blinking state.
|
||||
required: true
|
||||
schema:
|
||||
type: boolean
|
||||
responses:
|
||||
200:
|
||||
description: successful operation
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/GenericResponse'
|
||||
500:
|
||||
$ref: '#/components/responses/GenericApiError'
|
||||
|
||||
/portal/equipmentGateway/requestChannelChange:
|
||||
post:
|
||||
|
||||
@@ -28,6 +28,8 @@ public class RadiusProxyConfiguration extends BaseJsonModel implements PushableC
|
||||
private Boolean useRadSec;
|
||||
private String sharedSecret; // if useRadSec is false
|
||||
private String acctSharedSecret; // if useRadSec is false
|
||||
private Boolean dynamicDiscovery; // dynamic discovery of HSP and IdPs (home service and identity providers).
|
||||
// regardless of configured value, this will only be set 'true' on the AP if useRadSec is also true.
|
||||
|
||||
private RadiusProxyConfiguration() {
|
||||
|
||||
@@ -70,6 +72,7 @@ public class RadiusProxyConfiguration extends BaseJsonModel implements PushableC
|
||||
}
|
||||
|
||||
public Integer getPort() {
|
||||
if (port == null) return -1;
|
||||
return port;
|
||||
}
|
||||
|
||||
@@ -86,6 +89,7 @@ public class RadiusProxyConfiguration extends BaseJsonModel implements PushableC
|
||||
}
|
||||
|
||||
public Integer getAcctPort() {
|
||||
if (acctPort == null) return -1;
|
||||
return acctPort;
|
||||
}
|
||||
|
||||
@@ -118,6 +122,7 @@ public class RadiusProxyConfiguration extends BaseJsonModel implements PushableC
|
||||
}
|
||||
|
||||
public Boolean getUseRadSec() {
|
||||
if (useRadSec == null) return false;
|
||||
return useRadSec;
|
||||
}
|
||||
|
||||
@@ -141,6 +146,21 @@ public class RadiusProxyConfiguration extends BaseJsonModel implements PushableC
|
||||
this.acctSharedSecret = acctSharedSecret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the dynamicDiscovery
|
||||
*/
|
||||
public Boolean getDynamicDiscovery() {
|
||||
if (dynamicDiscovery == null) return false;
|
||||
return dynamicDiscovery;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param dynamicDiscovery the dynamicDiscovery to set
|
||||
*/
|
||||
public void setDynamicDiscovery(Boolean dynamicDiscovery) {
|
||||
this.dynamicDiscovery = dynamicDiscovery;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsToBeUpdatedOnDevice(RadiusProxyConfiguration previousVersion) {
|
||||
return !Objects.deepEquals(this, previousVersion);
|
||||
@@ -153,8 +173,8 @@ public class RadiusProxyConfiguration extends BaseJsonModel implements PushableC
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(acctPort, acctServer, acctSharedSecret, caCert, clientCert, clientKey, name, passphrase, port, realm, server, sharedSecret,
|
||||
useRadSec);
|
||||
return Objects.hash(acctPort, acctServer, acctSharedSecret, caCert, clientCert, clientKey, dynamicDiscovery, name, passphrase, port, realm, server,
|
||||
sharedSecret, useRadSec);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -168,9 +188,10 @@ public class RadiusProxyConfiguration extends BaseJsonModel implements PushableC
|
||||
RadiusProxyConfiguration other = (RadiusProxyConfiguration) obj;
|
||||
return Objects.equals(acctPort, other.acctPort) && Objects.equals(acctServer, other.acctServer)
|
||||
&& Objects.equals(acctSharedSecret, other.acctSharedSecret) && Objects.equals(caCert, other.caCert)
|
||||
&& Objects.equals(clientCert, other.clientCert) && Objects.equals(clientKey, other.clientKey) && Objects.equals(name, other.name)
|
||||
&& Objects.equals(passphrase, other.passphrase) && Objects.equals(port, other.port) && Objects.equals(realm, other.realm)
|
||||
&& Objects.equals(server, other.server) && Objects.equals(sharedSecret, other.sharedSecret) && Objects.equals(useRadSec, other.useRadSec);
|
||||
&& Objects.equals(clientCert, other.clientCert) && Objects.equals(clientKey, other.clientKey)
|
||||
&& Objects.equals(dynamicDiscovery, other.dynamicDiscovery) && Objects.equals(name, other.name) && Objects.equals(passphrase, other.passphrase)
|
||||
&& Objects.equals(port, other.port) && Objects.equals(realm, other.realm) && Objects.equals(server, other.server)
|
||||
&& Objects.equals(sharedSecret, other.sharedSecret) && Objects.equals(useRadSec, other.useRadSec);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -491,6 +491,9 @@ components:
|
||||
sharedSecret:
|
||||
type: string
|
||||
format: password
|
||||
dynamicDiscovery:
|
||||
description: Dynamic discovery of HSP and IdPs (home service and identity providers). Regardless of configured value, this will only be set 'true' on the AP if useRadSec is also true.
|
||||
type: boolean
|
||||
example:
|
||||
model_type: RadiusProxyConfiguration
|
||||
caCert:
|
||||
|
||||
@@ -2864,6 +2864,9 @@ components:
|
||||
sharedSecret:
|
||||
type: string
|
||||
format: password
|
||||
dynamicDiscovery:
|
||||
description: Dynamic discovery of HSP and IdPs (home service and identity providers). Regardless of configured value, this will only be set 'true' on the AP if useRadSec is also true.
|
||||
type: boolean
|
||||
example:
|
||||
model_type: RadiusProxyConfiguration
|
||||
caCert:
|
||||
|
||||
Reference in New Issue
Block a user