mirror of
https://github.com/Telecominfraproject/wlan-cloud-services.git
synced 2026-03-20 22:39:22 +00:00
Compare commits
162 Commits
release/v1
...
updateAPI
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
80cd0abd58 | ||
|
|
4555ff339b | ||
|
|
04a13877d1 | ||
|
|
e148bab291 | ||
|
|
9ad3cec4af | ||
|
|
dc0b838f83 | ||
|
|
7cac7fff3f | ||
|
|
b48340b709 | ||
|
|
44b3836758 | ||
|
|
4f0b032549 | ||
|
|
5ba0c4c242 | ||
|
|
304e80332a | ||
|
|
9fd3e73398 | ||
|
|
b9db744aee | ||
|
|
1eee65d284 | ||
|
|
75c943211a | ||
|
|
d0a0ed59fe | ||
|
|
a200fcc12e | ||
|
|
1f6996abb2 | ||
|
|
1ebaa4a539 | ||
|
|
f1e1bdffd7 | ||
|
|
37f5872552 | ||
|
|
367b9ec428 | ||
|
|
87ca619ad5 | ||
|
|
622f78f681 | ||
|
|
faeb65d8d6 | ||
|
|
34841a3a04 | ||
|
|
4fc8bc4018 | ||
|
|
cce36019fe | ||
|
|
4596280090 | ||
|
|
caaa8fb4e3 | ||
|
|
b957c8bf72 | ||
|
|
b797cc392f | ||
|
|
5fc9715649 | ||
|
|
0a66897e48 | ||
|
|
8d77fcb090 | ||
|
|
256d9fbd16 | ||
|
|
39e14da2e6 | ||
|
|
996c60adf6 | ||
|
|
879abe3beb | ||
|
|
796d657952 | ||
|
|
52ed5f6344 | ||
|
|
f5869961b2 | ||
|
|
f02cadbdc3 | ||
|
|
c45cabf607 | ||
|
|
c9faf138da | ||
|
|
f6b96fc566 | ||
|
|
a089e7b748 | ||
|
|
e790db2c2b | ||
|
|
b03dccc63f | ||
|
|
03eccfa448 | ||
|
|
18eeaffa13 | ||
|
|
40aaeb33f4 | ||
|
|
fb4ff772e4 | ||
|
|
d9076562d4 | ||
|
|
5ee517df81 | ||
|
|
492406b56f | ||
|
|
c5648961c4 | ||
|
|
c2540266d6 | ||
|
|
35047c4fe7 | ||
|
|
deae54b4e9 | ||
|
|
e957cf5a3b | ||
|
|
09a9002962 | ||
|
|
48040b3cba | ||
|
|
a29b6636b8 | ||
|
|
9d558695ae | ||
|
|
81e100b210 | ||
|
|
5fddfcbdc9 | ||
|
|
d86c4e2b0c | ||
|
|
5881a00657 | ||
|
|
56b0dc08ba | ||
|
|
5ec68adc99 | ||
|
|
0357f2d3a4 | ||
|
|
40c7439a60 | ||
|
|
901f1c4517 | ||
|
|
9c58fda584 | ||
|
|
982ccfdd0e | ||
|
|
535df0041e | ||
|
|
4b100290a7 | ||
|
|
660326974c | ||
|
|
ce8ff0885f | ||
|
|
5c85997548 | ||
|
|
1d77f9f7f2 | ||
|
|
ffc8ffe5e7 | ||
|
|
b0f76cb984 | ||
|
|
dc88bc43b8 | ||
|
|
1e7e29540d | ||
|
|
ae23c46570 | ||
|
|
ab1695a183 | ||
|
|
8e9db0c95e | ||
|
|
a4232049d0 | ||
|
|
0a65d2e8ca | ||
|
|
dca76d8a6e | ||
|
|
02d2e1cef4 | ||
|
|
dc0593d2ee | ||
|
|
f923587d1e | ||
|
|
62369d210e | ||
|
|
5c21848004 | ||
|
|
81616bb4aa | ||
|
|
f275c87290 | ||
|
|
03f5522cac | ||
|
|
0d5e4b4035 | ||
|
|
a2b159943a | ||
|
|
1a85f976e4 | ||
|
|
82cdbdbc68 | ||
|
|
ae0bd303dd | ||
|
|
782d221a70 | ||
|
|
bc5b0cad5a | ||
|
|
16ff64b5b9 | ||
|
|
9d639ccb0c | ||
|
|
e7fcaeffc7 | ||
|
|
b7560bd519 | ||
|
|
800fa9781c | ||
|
|
d8bdb51b21 | ||
|
|
ee5377c2af | ||
|
|
9d1e09c3c9 | ||
|
|
23d5c9b513 | ||
|
|
bf1d76a7c7 | ||
|
|
8dd7c99d11 | ||
|
|
be6b3f69a3 | ||
|
|
d37b5a55c2 | ||
|
|
694bb8dc05 | ||
|
|
32d4fb1197 | ||
|
|
ac3b928a85 | ||
|
|
1693b61c9f | ||
|
|
7a5cde65f2 | ||
|
|
e43663a290 | ||
|
|
bd35d28c70 | ||
|
|
be9fd94bfc | ||
|
|
e9283c85d4 | ||
|
|
4cdd220874 | ||
|
|
eeeb1d1df6 | ||
|
|
b47fdab224 | ||
|
|
c93c8b01f2 | ||
|
|
35620415fc | ||
|
|
659fc5bc9e | ||
|
|
818cfeb4f0 | ||
|
|
6e6a7d53d3 | ||
|
|
dfa5b71a79 | ||
|
|
7b657acee7 | ||
|
|
db5c1bb6c1 | ||
|
|
8c4ac0e282 | ||
|
|
f71e6804fa | ||
|
|
a3eac7942a | ||
|
|
e84f7b7765 | ||
|
|
6d133ae448 | ||
|
|
f30d70ae81 | ||
|
|
d4a516199a | ||
|
|
ea94c14e63 | ||
|
|
a35e2deb84 | ||
|
|
4c0d39860b | ||
|
|
40a1e597c1 | ||
|
|
b10b511c64 | ||
|
|
3ee708925f | ||
|
|
e7b40a1be6 | ||
|
|
b00fb6d287 | ||
|
|
6e8977365a | ||
|
|
ea794940a9 | ||
|
|
cdebd4485e | ||
|
|
272b6836a1 | ||
|
|
074f51ea8d | ||
|
|
f26dc9758b |
1
adoption-metrics-datastore-common-test/.gitignore
vendored
Normal file
1
adoption-metrics-datastore-common-test/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -16,7 +15,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>adoption-metrics-datastore-interface</artifactId>
|
<artifactId>adoption-metrics-datastore-interface</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
|
|||||||
1
adoption-metrics-datastore-inmemory/.gitignore
vendored
Normal file
1
adoption-metrics-datastore-inmemory/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -16,19 +15,19 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>base-datastore-inmemory</artifactId>
|
<artifactId>base-datastore-inmemory</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>adoption-metrics-datastore-interface</artifactId>
|
<artifactId>adoption-metrics-datastore-interface</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>adoption-metrics-datastore-common-test</artifactId>
|
<artifactId>adoption-metrics-datastore-common-test</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|||||||
1
adoption-metrics-datastore-interface/.gitignore
vendored
Normal file
1
adoption-metrics-datastore-interface/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -16,12 +15,12 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>adoption-metrics-models</artifactId>
|
<artifactId>adoption-metrics-models</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>base-exceptions</artifactId>
|
<artifactId>base-exceptions</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|||||||
1
adoption-metrics-datastore-rdbms/.gitignore
vendored
Normal file
1
adoption-metrics-datastore-rdbms/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -16,26 +15,26 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>base-jdbc</artifactId>
|
<artifactId>base-jdbc</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>adoption-metrics-datastore-interface</artifactId>
|
<artifactId>adoption-metrics-datastore-interface</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>base-jdbc-tests</artifactId>
|
<artifactId>base-jdbc-tests</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>adoption-metrics-datastore-common-test</artifactId>
|
<artifactId>adoption-metrics-datastore-common-test</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|||||||
1
adoption-metrics-models/.gitignore
vendored
Normal file
1
adoption-metrics-models/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -16,7 +15,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>base-models</artifactId>
|
<artifactId>base-models</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|||||||
1
adoption-metrics-service-interface/.gitignore
vendored
Normal file
1
adoption-metrics-service-interface/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>adoption-metrics-models</artifactId>
|
<artifactId>adoption-metrics-models</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|||||||
1
adoption-metrics-service-local/.gitignore
vendored
Normal file
1
adoption-metrics-service-local/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -16,13 +16,13 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>adoption-metrics-service-interface</artifactId>
|
<artifactId>adoption-metrics-service-interface</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>adoption-metrics-service</artifactId>
|
<artifactId>adoption-metrics-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|||||||
1
adoption-metrics-service-remote/.gitignore
vendored
Normal file
1
adoption-metrics-service-remote/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -15,41 +15,41 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>adoption-metrics-service-interface</artifactId>
|
<artifactId>adoption-metrics-service-interface</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>base-client</artifactId>
|
<artifactId>base-client</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- Dependencies for the unit tests -->
|
<!-- Dependencies for the unit tests -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>base-remote-tests</artifactId>
|
<artifactId>base-remote-tests</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>adoption-metrics-service</artifactId>
|
<artifactId>adoption-metrics-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>adoption-metrics-datastore-inmemory</artifactId>
|
<artifactId>adoption-metrics-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>cloud-event-dispatcher-empty</artifactId>
|
<artifactId>cloud-event-dispatcher-empty</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|||||||
1
adoption-metrics-service/.gitignore
vendored
Normal file
1
adoption-metrics-service/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -15,29 +15,29 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>base-container</artifactId>
|
<artifactId>base-container</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>cloud-event-dispatcher-interface</artifactId>
|
<artifactId>cloud-event-dispatcher-interface</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>adoption-metrics-models</artifactId>
|
<artifactId>adoption-metrics-models</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>adoption-metrics-datastore-interface</artifactId>
|
<artifactId>adoption-metrics-datastore-interface</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>adoption-metrics-datastore-inmemory</artifactId>
|
<artifactId>adoption-metrics-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>cloud-event-dispatcher-empty</artifactId>
|
<artifactId>cloud-event-dispatcher-empty</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|||||||
1
adoption-metrics-sp/.gitignore
vendored
Normal file
1
adoption-metrics-sp/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -15,25 +15,25 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>base-stream-consumer</artifactId>
|
<artifactId>base-stream-consumer</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>service-metric-models</artifactId>
|
<artifactId>service-metric-models</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>system-event-models</artifactId>
|
<artifactId>system-event-models</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>adoption-metrics-service-interface</artifactId>
|
<artifactId>adoption-metrics-service-interface</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|||||||
1
alarm-datastore-cassandra/.gitignore
vendored
Normal file
1
alarm-datastore-cassandra/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -16,26 +15,26 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>base-cassandra</artifactId>
|
<artifactId>base-cassandra</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>alarm-datastore-interface</artifactId>
|
<artifactId>alarm-datastore-interface</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>base-cassandra-tests</artifactId>
|
<artifactId>base-cassandra-tests</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>alarm-datastore-common-test</artifactId>
|
<artifactId>alarm-datastore-common-test</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|||||||
@@ -7,12 +7,9 @@ import java.nio.charset.StandardCharsets;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
|
|
||||||
@@ -36,6 +33,7 @@ import com.telecominfraproject.wlan.alarm.models.AlarmCounts;
|
|||||||
import com.telecominfraproject.wlan.core.model.pagination.ColumnAndSort;
|
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.core.server.cassandra.CassandraUtils;
|
||||||
import com.telecominfraproject.wlan.core.server.cassandra.RowMapper;
|
import com.telecominfraproject.wlan.core.server.cassandra.RowMapper;
|
||||||
import com.telecominfraproject.wlan.datastore.exceptions.DsConcurrentModificationException;
|
import com.telecominfraproject.wlan.datastore.exceptions.DsConcurrentModificationException;
|
||||||
import com.telecominfraproject.wlan.datastore.exceptions.DsEntityNotFoundException;
|
import com.telecominfraproject.wlan.datastore.exceptions.DsEntityNotFoundException;
|
||||||
@@ -118,9 +116,6 @@ public class AlarmDatastoreCassandra implements AlarmDatastore {
|
|||||||
" from "+TABLE_NAME+" " +
|
" from "+TABLE_NAME+" " +
|
||||||
" where customerId = ? and equipmentId = ? and alarmCode = ? and createdTimestamp = ?";
|
" where customerId = ? and equipmentId = ? and alarmCode = ? and createdTimestamp = ?";
|
||||||
|
|
||||||
private static final String CQL_GET_ALL_NO_DETAILS =
|
|
||||||
"select customerId, equipmentId, alarmCode, createdTimestamp from alarm " ;
|
|
||||||
|
|
||||||
private static final String CQL_GET_BY_CUSTOMER_ID =
|
private static final String CQL_GET_BY_CUSTOMER_ID =
|
||||||
"select " + ALL_COLUMNS +
|
"select " + ALL_COLUMNS +
|
||||||
" from " + TABLE_NAME + " " +
|
" from " + TABLE_NAME + " " +
|
||||||
@@ -151,27 +146,28 @@ public class AlarmDatastoreCassandra implements AlarmDatastore {
|
|||||||
+ " IF lastModifiedTimestamp = ? "
|
+ " IF lastModifiedTimestamp = ? "
|
||||||
;
|
;
|
||||||
|
|
||||||
private static final String CQL_COUNTS_BY_EQUIPMENT_AND_ALARM_CODE_HEADER = "select equipmentId, alarmCode, count(1) from alarm where customerId = ? ";
|
private static final String CQL_INSERT_INTO_BY_ACKNOWLEDGED_TABLE = "insert into alarm_by_acknowledged(customerId, equipmentId, alarmCode, createdTimestamp, acknowledged) values ( ?, ?, ?, ?, ?) ";
|
||||||
private static final String CQL_COUNTS_BY_EQUIPMENT_AND_ALARM_CODE_FOOTER = " group by equipmentId, alarmCode";
|
private static final String CQL_DELETE_FROM_BY_ACKNOWLEDGED_TABLE = "delete from alarm_by_acknowledged where customerId = ? and equipmentId = ? and alarmCode = ? and createdTimestamp = ? and acknowledged = ? ";
|
||||||
|
|
||||||
|
private static final String CQL_INSERT_INTO_BY_ACKNOWLEDGED_EQUIPMENTID_TABLE = "insert into alarm_by_acknowledged_equipmentId(customerId, equipmentId, alarmCode, createdTimestamp, acknowledged) values ( ?, ?, ?, ?, ?) ";
|
||||||
|
private static final String CQL_DELETE_FROM_BY_ACKNOWLEDGED_EQUIPMENTID_TABLE = "delete from alarm_by_acknowledged_equipmentId where customerId = ? and equipmentId = ? and alarmCode = ? and createdTimestamp = ? and acknowledged = ? ";
|
||||||
|
|
||||||
|
private static final String CQL_INSERT_INTO_BY_ACKNOWLEDGED_ALARMCODE_TABLE = "insert into alarm_by_acknowledged_alarmCode(customerId, equipmentId, alarmCode, createdTimestamp, acknowledged) values ( ?, ?, ?, ?, ?) ";
|
||||||
|
private static final String CQL_DELETE_FROM_BY_ACKNOWLEDGED_ALARMCODE_TABLE = "delete from alarm_by_acknowledged_alarmCode where customerId = ? and equipmentId = ? and alarmCode = ? and createdTimestamp = ? and acknowledged = ? ";
|
||||||
|
|
||||||
|
private static final String CQL_INSERT_INTO_BY_ACKNOWLEDGED_TIMESTAMP_TABLE = "insert into alarm_by_acknowledged_timestamp(customerId, equipmentId, alarmCode, createdTimestamp, acknowledged) values ( ?, ?, ?, ?, ?) ";
|
||||||
|
private static final String CQL_DELETE_FROM_BY_ACKNOWLEDGED_TIMESTAMP_TABLE = "delete from alarm_by_acknowledged_timestamp where customerId = ? and equipmentId = ? and alarmCode = ? and createdTimestamp = ? and acknowledged = ? ";
|
||||||
|
|
||||||
//Cassandra has a difficulty running this:
|
//Cassandra has a difficulty running this:
|
||||||
// message="Group by currently only support groups of columns following their declared order in the PRIMARY KEY"
|
// message="Group by currently only support groups of columns following their declared order in the PRIMARY KEY"
|
||||||
//private static final String CQL_COUNTS_BY_ALARM_CODE_HEADER = "select alarmCode, count(1) from alarm where customerId = ? ";
|
//private static final String CQL_COUNTS_BY_ALARM_CODE_HEADER = "select alarmCode, count(1) from alarm where customerId = ? ";
|
||||||
//private static final String CQL_COUNTS_BY_ALARM_CODE_FOOTER = " group by alarmCode";
|
//private static final String CQL_COUNTS_BY_ALARM_CODE_FOOTER = " group by alarmCode";
|
||||||
|
|
||||||
private static final String CQL_INCREMENT_EQUIPMENT_ALARM_COUNT = "update alarm_counts_by_equipment set alarmCount = alarmCount + 1 where customerId = ? and equipmentId = ? and alarmCode = ? ";
|
// CQL statements for counts
|
||||||
private static final String CQL_DECREMENT_EQUIPMENT_ALARM_COUNT = "update alarm_counts_by_equipment set alarmCount = alarmCount - 1 where customerId = ? and equipmentId = ? and alarmCode = ? ";
|
private static final String CQL_GET_CUSTOMER_ALARM_COUNT_BY_CUSTOMER_ID = "select equipmentId, alarmCode from alarm where customerId = ? ";
|
||||||
|
|
||||||
private static final String CQL_GET_EQUIPMENT_ALARM_COUNT_BY_CUSTOMER_ID = "select equipmentId, alarmCode, alarmCount from alarm_counts_by_equipment where customerId = ? ";
|
private static final String CQL_GET_CUSTOMER_ACKNOWLEDGED_ALARM_COUNT_BY_CUSTOMER_ID = "select equipmentId, alarmCode from alarm_by_acknowledged where customerId = ? and acknowledged = ? ";
|
||||||
|
|
||||||
private static final String CQL_INCREMENT_CUSTOMER_ALARM_COUNT = "update alarm_counts_by_customer set alarmCount = alarmCount + 1 where customerId = ? and alarmCode = ? ";
|
|
||||||
private static final String CQL_DECREMENT_CUSTOMER_ALARM_COUNT = "update alarm_counts_by_customer set alarmCount = alarmCount - 1 where customerId = ? and alarmCode = ? ";
|
|
||||||
|
|
||||||
private static final String CQL_GET_CUSTOMER_ALARM_COUNT_BY_CUSTOMER_ID = "select alarmCode, alarmCount from alarm_counts_by_customer where customerId = ? ";
|
|
||||||
|
|
||||||
private static final String CQL_UPDATE_CUSTOMER_ALARM_COUNT = "update alarm_counts_by_customer set alarmCount = alarmCount + ? where customerId = ? and alarmCode = ? ";
|
|
||||||
private static final String CQL_UPDATE_EQUIPMENT_ALARM_COUNT = "update alarm_counts_by_equipment set alarmCount = alarmCount + ? where customerId = ? and equipmentId = ? and alarmCode = ? ";
|
|
||||||
|
|
||||||
|
|
||||||
private static final RowMapper<Alarm> alarmRowMapper = new AlarmRowMapper();
|
private static final RowMapper<Alarm> alarmRowMapper = new AlarmRowMapper();
|
||||||
|
|
||||||
@@ -179,38 +175,39 @@ public class AlarmDatastoreCassandra implements AlarmDatastore {
|
|||||||
private CqlSession cqlSession;
|
private CqlSession cqlSession;
|
||||||
|
|
||||||
private PreparedStatement preparedStmt_getOrNull;
|
private PreparedStatement preparedStmt_getOrNull;
|
||||||
private PreparedStatement preparedStmt_getAllNoDetails;
|
|
||||||
private PreparedStatement preparedStmt_create;
|
private PreparedStatement preparedStmt_create;
|
||||||
private PreparedStatement preparedStmt_update;
|
private PreparedStatement preparedStmt_update;
|
||||||
private PreparedStatement preparedStmt_getLastmod;
|
private PreparedStatement preparedStmt_getLastmod;
|
||||||
private PreparedStatement preparedStmt_delete;
|
private PreparedStatement preparedStmt_delete;
|
||||||
private PreparedStatement preparedStmt_deleteByEquipment;
|
private PreparedStatement preparedStmt_deleteByEquipment;
|
||||||
private PreparedStatement preparedStmt_incrementAlarmCountByEquipment;
|
|
||||||
private PreparedStatement preparedStmt_decrementAlarmCountByEquipment;
|
// filter by acknowledged statements
|
||||||
|
private PreparedStatement preparedStmt_insertIntoAlarmByAcknowledged;
|
||||||
private PreparedStatement preparedStmt_incrementAlarmCountByCustomer;
|
private PreparedStatement preparedStmt_deleteFromAlarmByAcknowledged;
|
||||||
private PreparedStatement preparedStmt_decrementAlarmCountByCustomer;
|
private PreparedStatement preparedStmt_insertIntoAlarmByAcknowledgedEquipmentId;
|
||||||
|
private PreparedStatement preparedStmt_deleteFromAlarmByAcknowledgedEquipmentId;
|
||||||
private PreparedStatement preparedStmt_updateAlarmCountByEquipment;
|
private PreparedStatement preparedStmt_insertIntoAlarmByAcknowledgedAlarmCode;
|
||||||
private PreparedStatement preparedStmt_updateAlarmCountByCustomer;
|
private PreparedStatement preparedStmt_deleteFromAlarmByAcknowledgedAlarmCode;
|
||||||
|
private PreparedStatement preparedStmt_insertIntoAlarmByAcknowledgedTimestamp;
|
||||||
|
private PreparedStatement preparedStmt_deleteFromAlarmByAcknowledgedTimestamp;
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
private void postConstruct(){
|
private void postConstruct(){
|
||||||
preparedStmt_getOrNull = cqlSession.prepare(CQL_GET_BY_ID);
|
preparedStmt_getOrNull = cqlSession.prepare(CQL_GET_BY_ID);
|
||||||
preparedStmt_getAllNoDetails = cqlSession.prepare(CQL_GET_ALL_NO_DETAILS);
|
|
||||||
preparedStmt_create = cqlSession.prepare(CQL_INSERT);
|
preparedStmt_create = cqlSession.prepare(CQL_INSERT);
|
||||||
preparedStmt_update = cqlSession.prepare(CQL_UPDATE);
|
preparedStmt_update = cqlSession.prepare(CQL_UPDATE);
|
||||||
preparedStmt_getLastmod = cqlSession.prepare(CQL_GET_LASTMOD_BY_ID);
|
preparedStmt_getLastmod = cqlSession.prepare(CQL_GET_LASTMOD_BY_ID);
|
||||||
preparedStmt_delete = cqlSession.prepare(CQL_DELETE);
|
preparedStmt_delete = cqlSession.prepare(CQL_DELETE);
|
||||||
preparedStmt_deleteByEquipment = cqlSession.prepare(CQL_DELETE_BY_EQUIPMENT);
|
preparedStmt_deleteByEquipment = cqlSession.prepare(CQL_DELETE_BY_EQUIPMENT);
|
||||||
preparedStmt_incrementAlarmCountByEquipment = cqlSession.prepare(CQL_INCREMENT_EQUIPMENT_ALARM_COUNT);
|
|
||||||
preparedStmt_decrementAlarmCountByEquipment = cqlSession.prepare(CQL_DECREMENT_EQUIPMENT_ALARM_COUNT);
|
preparedStmt_insertIntoAlarmByAcknowledged = cqlSession.prepare(CQL_INSERT_INTO_BY_ACKNOWLEDGED_TABLE);
|
||||||
preparedStmt_incrementAlarmCountByCustomer= cqlSession.prepare(CQL_INCREMENT_CUSTOMER_ALARM_COUNT);
|
preparedStmt_deleteFromAlarmByAcknowledged = cqlSession.prepare(CQL_DELETE_FROM_BY_ACKNOWLEDGED_TABLE);
|
||||||
preparedStmt_decrementAlarmCountByCustomer = cqlSession.prepare(CQL_DECREMENT_CUSTOMER_ALARM_COUNT);
|
preparedStmt_insertIntoAlarmByAcknowledgedEquipmentId = cqlSession.prepare(CQL_INSERT_INTO_BY_ACKNOWLEDGED_EQUIPMENTID_TABLE);
|
||||||
|
preparedStmt_deleteFromAlarmByAcknowledgedEquipmentId = cqlSession.prepare(CQL_DELETE_FROM_BY_ACKNOWLEDGED_EQUIPMENTID_TABLE);
|
||||||
preparedStmt_updateAlarmCountByEquipment = cqlSession.prepare(CQL_UPDATE_EQUIPMENT_ALARM_COUNT);
|
preparedStmt_insertIntoAlarmByAcknowledgedAlarmCode = cqlSession.prepare(CQL_INSERT_INTO_BY_ACKNOWLEDGED_ALARMCODE_TABLE);
|
||||||
preparedStmt_updateAlarmCountByCustomer= cqlSession.prepare(CQL_UPDATE_CUSTOMER_ALARM_COUNT);
|
preparedStmt_deleteFromAlarmByAcknowledgedAlarmCode = cqlSession.prepare(CQL_DELETE_FROM_BY_ACKNOWLEDGED_ALARMCODE_TABLE);
|
||||||
|
preparedStmt_insertIntoAlarmByAcknowledgedTimestamp = cqlSession.prepare(CQL_INSERT_INTO_BY_ACKNOWLEDGED_TIMESTAMP_TABLE);
|
||||||
|
preparedStmt_deleteFromAlarmByAcknowledgedTimestamp = cqlSession.prepare(CQL_DELETE_FROM_BY_ACKNOWLEDGED_TIMESTAMP_TABLE);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -244,17 +241,38 @@ public class AlarmDatastoreCassandra implements AlarmDatastore {
|
|||||||
));
|
));
|
||||||
|
|
||||||
LOG.debug("Stored Alarm {}", alarm);
|
LOG.debug("Stored Alarm {}", alarm);
|
||||||
|
|
||||||
//update alarm count
|
//insert entry into acknowledged tables
|
||||||
cqlSession.execute(preparedStmt_incrementAlarmCountByEquipment.bind(
|
cqlSession.execute(preparedStmt_insertIntoAlarmByAcknowledged.bind(
|
||||||
alarm.getCustomerId(),
|
alarm.getCustomerId(),
|
||||||
alarm.getEquipmentId(),
|
alarm.getEquipmentId(),
|
||||||
alarm.getAlarmCode().getId()
|
alarm.getAlarmCode().getId(),
|
||||||
|
alarm.getCreatedTimestamp(),
|
||||||
|
alarm.isAcknowledged()
|
||||||
));
|
));
|
||||||
|
|
||||||
cqlSession.execute(preparedStmt_incrementAlarmCountByCustomer.bind(
|
cqlSession.execute(preparedStmt_insertIntoAlarmByAcknowledgedEquipmentId.bind(
|
||||||
alarm.getCustomerId(),
|
alarm.getCustomerId(),
|
||||||
alarm.getAlarmCode().getId()
|
alarm.getEquipmentId(),
|
||||||
|
alarm.getAlarmCode().getId(),
|
||||||
|
alarm.getCreatedTimestamp(),
|
||||||
|
alarm.isAcknowledged()
|
||||||
|
));
|
||||||
|
|
||||||
|
cqlSession.execute(preparedStmt_insertIntoAlarmByAcknowledgedAlarmCode.bind(
|
||||||
|
alarm.getCustomerId(),
|
||||||
|
alarm.getEquipmentId(),
|
||||||
|
alarm.getAlarmCode().getId(),
|
||||||
|
alarm.getCreatedTimestamp(),
|
||||||
|
alarm.isAcknowledged()
|
||||||
|
));
|
||||||
|
|
||||||
|
cqlSession.execute(preparedStmt_insertIntoAlarmByAcknowledgedTimestamp.bind(
|
||||||
|
alarm.getCustomerId(),
|
||||||
|
alarm.getEquipmentId(),
|
||||||
|
alarm.getAlarmCode().getId(),
|
||||||
|
alarm.getCreatedTimestamp(),
|
||||||
|
alarm.isAcknowledged()
|
||||||
));
|
));
|
||||||
|
|
||||||
return alarm.clone();
|
return alarm.clone();
|
||||||
@@ -309,6 +327,8 @@ public class AlarmDatastoreCassandra implements AlarmDatastore {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Alarm update(Alarm alarm) {
|
public Alarm update(Alarm alarm) {
|
||||||
|
Alarm original = getOrNull(alarm.getCustomerId(), alarm.getEquipmentId(), alarm.getAlarmCode(), alarm.getCreatedTimestamp());
|
||||||
|
|
||||||
long newLastModifiedTs = System.currentTimeMillis();
|
long newLastModifiedTs = System.currentTimeMillis();
|
||||||
long incomingLastModifiedTs = alarm.getLastModifiedTimestamp();
|
long incomingLastModifiedTs = alarm.getLastModifiedTimestamp();
|
||||||
|
|
||||||
@@ -378,6 +398,78 @@ public class AlarmDatastoreCassandra implements AlarmDatastore {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if the acknowledged boolean value has been updated (typically false -> true, but opposite could happen too)
|
||||||
|
// then we need to update the values in the supporting acknowledged tables as well.
|
||||||
|
// Since they are part of the primary key to properly filter, we cannot simply update the acknowledged value in these tables.
|
||||||
|
// We need to delete those rows (in acknowledged tables) and recreate them with the new acknowledged value (in alarm)
|
||||||
|
if (original.isAcknowledged() != alarm.isAcknowledged()) {
|
||||||
|
//delete entry into acknowledged tables
|
||||||
|
cqlSession.execute(preparedStmt_deleteFromAlarmByAcknowledged.bind(
|
||||||
|
original.getCustomerId(),
|
||||||
|
original.getEquipmentId(),
|
||||||
|
original.getAlarmCode().getId(),
|
||||||
|
original.getCreatedTimestamp(),
|
||||||
|
original.isAcknowledged()
|
||||||
|
));
|
||||||
|
|
||||||
|
cqlSession.execute(preparedStmt_deleteFromAlarmByAcknowledgedEquipmentId.bind(
|
||||||
|
original.getCustomerId(),
|
||||||
|
original.getEquipmentId(),
|
||||||
|
original.getAlarmCode().getId(),
|
||||||
|
original.getCreatedTimestamp(),
|
||||||
|
original.isAcknowledged()
|
||||||
|
));
|
||||||
|
|
||||||
|
cqlSession.execute(preparedStmt_deleteFromAlarmByAcknowledgedAlarmCode.bind(
|
||||||
|
original.getCustomerId(),
|
||||||
|
original.getEquipmentId(),
|
||||||
|
original.getAlarmCode().getId(),
|
||||||
|
original.getCreatedTimestamp(),
|
||||||
|
original.isAcknowledged()
|
||||||
|
));
|
||||||
|
|
||||||
|
cqlSession.execute(preparedStmt_deleteFromAlarmByAcknowledgedTimestamp.bind(
|
||||||
|
original.getCustomerId(),
|
||||||
|
original.getEquipmentId(),
|
||||||
|
original.getAlarmCode().getId(),
|
||||||
|
original.getCreatedTimestamp(),
|
||||||
|
original.isAcknowledged()
|
||||||
|
));
|
||||||
|
|
||||||
|
// recreate rows in supporting acknowledged tables with the new acknowledged value
|
||||||
|
cqlSession.execute(preparedStmt_insertIntoAlarmByAcknowledged.bind(
|
||||||
|
alarm.getCustomerId(),
|
||||||
|
alarm.getEquipmentId(),
|
||||||
|
alarm.getAlarmCode().getId(),
|
||||||
|
alarm.getCreatedTimestamp(),
|
||||||
|
alarm.isAcknowledged()
|
||||||
|
));
|
||||||
|
|
||||||
|
cqlSession.execute(preparedStmt_insertIntoAlarmByAcknowledgedEquipmentId.bind(
|
||||||
|
alarm.getCustomerId(),
|
||||||
|
alarm.getEquipmentId(),
|
||||||
|
alarm.getAlarmCode().getId(),
|
||||||
|
alarm.getCreatedTimestamp(),
|
||||||
|
alarm.isAcknowledged()
|
||||||
|
));
|
||||||
|
|
||||||
|
cqlSession.execute(preparedStmt_insertIntoAlarmByAcknowledgedAlarmCode.bind(
|
||||||
|
alarm.getCustomerId(),
|
||||||
|
alarm.getEquipmentId(),
|
||||||
|
alarm.getAlarmCode().getId(),
|
||||||
|
alarm.getCreatedTimestamp(),
|
||||||
|
alarm.isAcknowledged()
|
||||||
|
));
|
||||||
|
|
||||||
|
cqlSession.execute(preparedStmt_insertIntoAlarmByAcknowledgedTimestamp.bind(
|
||||||
|
alarm.getCustomerId(),
|
||||||
|
alarm.getEquipmentId(),
|
||||||
|
alarm.getAlarmCode().getId(),
|
||||||
|
alarm.getCreatedTimestamp(),
|
||||||
|
alarm.isAcknowledged()
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//make a copy so that we don't accidentally update caller's version by reference
|
//make a copy so that we don't accidentally update caller's version by reference
|
||||||
Alarm alarmCopy = alarm.clone();
|
Alarm alarmCopy = alarm.clone();
|
||||||
@@ -398,17 +490,38 @@ public class AlarmDatastoreCassandra implements AlarmDatastore {
|
|||||||
|
|
||||||
cqlSession.execute(preparedStmt_delete.bind(customerId, equipmentId, alarmCode.getId(), createdTimestamp));
|
cqlSession.execute(preparedStmt_delete.bind(customerId, equipmentId, alarmCode.getId(), createdTimestamp));
|
||||||
LOG.debug("Deleted Alarm {}", ret);
|
LOG.debug("Deleted Alarm {}", ret);
|
||||||
|
|
||||||
//update alarm count
|
//delete entry into acknowledged tables
|
||||||
cqlSession.execute(preparedStmt_decrementAlarmCountByEquipment.bind(
|
cqlSession.execute(preparedStmt_deleteFromAlarmByAcknowledged.bind(
|
||||||
ret.getCustomerId(),
|
ret.getCustomerId(),
|
||||||
ret.getEquipmentId(),
|
ret.getEquipmentId(),
|
||||||
ret.getAlarmCode().getId()
|
ret.getAlarmCode().getId(),
|
||||||
|
ret.getCreatedTimestamp(),
|
||||||
|
ret.isAcknowledged()
|
||||||
));
|
));
|
||||||
|
|
||||||
cqlSession.execute(preparedStmt_decrementAlarmCountByCustomer.bind(
|
cqlSession.execute(preparedStmt_deleteFromAlarmByAcknowledgedEquipmentId.bind(
|
||||||
ret.getCustomerId(),
|
ret.getCustomerId(),
|
||||||
ret.getAlarmCode().getId()
|
ret.getEquipmentId(),
|
||||||
|
ret.getAlarmCode().getId(),
|
||||||
|
ret.getCreatedTimestamp(),
|
||||||
|
ret.isAcknowledged()
|
||||||
|
));
|
||||||
|
|
||||||
|
cqlSession.execute(preparedStmt_deleteFromAlarmByAcknowledgedAlarmCode.bind(
|
||||||
|
ret.getCustomerId(),
|
||||||
|
ret.getEquipmentId(),
|
||||||
|
ret.getAlarmCode().getId(),
|
||||||
|
ret.getCreatedTimestamp(),
|
||||||
|
ret.isAcknowledged()
|
||||||
|
));
|
||||||
|
|
||||||
|
cqlSession.execute(preparedStmt_deleteFromAlarmByAcknowledgedTimestamp.bind(
|
||||||
|
ret.getCustomerId(),
|
||||||
|
ret.getEquipmentId(),
|
||||||
|
ret.getAlarmCode().getId(),
|
||||||
|
ret.getCreatedTimestamp(),
|
||||||
|
ret.isAcknowledged()
|
||||||
));
|
));
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@@ -424,153 +537,43 @@ public class AlarmDatastoreCassandra implements AlarmDatastore {
|
|||||||
LOG.debug("Deleted Alarms {}", ret);
|
LOG.debug("Deleted Alarms {}", ret);
|
||||||
|
|
||||||
ret.forEach(al -> {
|
ret.forEach(al -> {
|
||||||
//TODO: replace with one update of a counter
|
//delete entry into acknowledged tables
|
||||||
//update alarm count
|
cqlSession.execute(preparedStmt_deleteFromAlarmByAcknowledged.bind(
|
||||||
cqlSession.execute(preparedStmt_decrementAlarmCountByEquipment.bind(
|
|
||||||
al.getCustomerId(),
|
al.getCustomerId(),
|
||||||
al.getEquipmentId(),
|
al.getEquipmentId(),
|
||||||
al.getAlarmCode().getId()
|
al.getAlarmCode().getId(),
|
||||||
|
al.getCreatedTimestamp(),
|
||||||
|
al.isAcknowledged()
|
||||||
));
|
));
|
||||||
|
|
||||||
cqlSession.execute(preparedStmt_decrementAlarmCountByCustomer.bind(
|
cqlSession.execute(preparedStmt_deleteFromAlarmByAcknowledgedEquipmentId.bind(
|
||||||
al.getCustomerId(),
|
al.getCustomerId(),
|
||||||
al.getAlarmCode().getId()
|
al.getEquipmentId(),
|
||||||
));
|
al.getAlarmCode().getId(),
|
||||||
|
al.getCreatedTimestamp(),
|
||||||
|
al.isAcknowledged()
|
||||||
|
));
|
||||||
|
|
||||||
|
cqlSession.execute(preparedStmt_deleteFromAlarmByAcknowledgedAlarmCode.bind(
|
||||||
|
al.getCustomerId(),
|
||||||
|
al.getEquipmentId(),
|
||||||
|
al.getAlarmCode().getId(),
|
||||||
|
al.getCreatedTimestamp(),
|
||||||
|
al.isAcknowledged()
|
||||||
|
));
|
||||||
|
|
||||||
|
cqlSession.execute(preparedStmt_deleteFromAlarmByAcknowledgedTimestamp.bind(
|
||||||
|
al.getCustomerId(),
|
||||||
|
al.getEquipmentId(),
|
||||||
|
al.getAlarmCode().getId(),
|
||||||
|
al.getCreatedTimestamp(),
|
||||||
|
al.isAcknowledged()
|
||||||
|
));
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void resetAlarmCounters() {
|
|
||||||
LOG.debug("Resetting Alarm counters ");
|
|
||||||
|
|
||||||
//count real alarms per-customer and per equipment
|
|
||||||
Map<Integer, AlarmCounts> alarmCountsPerCustomerMap = new HashMap<>();
|
|
||||||
|
|
||||||
//select customerId, equipmentId, alarmCode, createdTimestamp from alarm
|
|
||||||
ResultSet rs = cqlSession.execute(preparedStmt_getAllNoDetails.bind());
|
|
||||||
|
|
||||||
rs.forEach(row -> {
|
|
||||||
int customerId = row.getInt(0);
|
|
||||||
long equipmentId = row.getLong(1);
|
|
||||||
AlarmCode alarmCode = AlarmCode.getById(row.getInt(2));
|
|
||||||
|
|
||||||
AlarmCounts alarmCounts = alarmCountsPerCustomerMap.get(customerId);
|
|
||||||
if(alarmCounts == null) {
|
|
||||||
alarmCounts = new AlarmCounts();
|
|
||||||
alarmCounts.setCustomerId(customerId);
|
|
||||||
alarmCountsPerCustomerMap.put(customerId, alarmCounts);
|
|
||||||
}
|
|
||||||
|
|
||||||
alarmCounts.addToCounter(equipmentId, alarmCode, 1);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
//read existing counters alarms per-customer
|
|
||||||
Map<Integer, AlarmCounts> existingCustomerCountsPerCustomerMap = new HashMap<>();
|
|
||||||
rs = cqlSession.execute(cqlSession.prepare("select customerid, alarmcode, alarmcount from alarm_counts_by_customer ").bind());
|
|
||||||
|
|
||||||
rs.forEach(row -> {
|
|
||||||
int customerId = row.getInt(0);
|
|
||||||
AlarmCode alarmCode = AlarmCode.getById(row.getInt(1));
|
|
||||||
long count = row.getLong(2);
|
|
||||||
|
|
||||||
AlarmCounts alarmCounts = existingCustomerCountsPerCustomerMap.get(customerId);
|
|
||||||
if(alarmCounts == null) {
|
|
||||||
alarmCounts = new AlarmCounts();
|
|
||||||
alarmCounts.setCustomerId(customerId);
|
|
||||||
existingCustomerCountsPerCustomerMap.put(customerId, alarmCounts);
|
|
||||||
}
|
|
||||||
|
|
||||||
alarmCounts.addToCounter(0, alarmCode, (int) count);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
//read existing counters alarms per equipment
|
|
||||||
Map<Integer, AlarmCounts> existingEquipmentCountsPerCustomerMap = new HashMap<>();
|
|
||||||
rs = cqlSession.execute(cqlSession.prepare("select customerid, equipmentid, alarmcode, alarmcount from alarm_counts_by_equipment ").bind());
|
|
||||||
|
|
||||||
rs.forEach(row -> {
|
|
||||||
int customerId = row.getInt(0);
|
|
||||||
long equipmentId = row.getLong(1);
|
|
||||||
AlarmCode alarmCode = AlarmCode.getById(row.getInt(2));
|
|
||||||
long count = row.getLong(3);
|
|
||||||
|
|
||||||
AlarmCounts alarmCounts = existingEquipmentCountsPerCustomerMap.get(customerId);
|
|
||||||
if(alarmCounts == null) {
|
|
||||||
alarmCounts = new AlarmCounts();
|
|
||||||
alarmCounts.setCustomerId(customerId);
|
|
||||||
existingEquipmentCountsPerCustomerMap.put(customerId, alarmCounts);
|
|
||||||
}
|
|
||||||
|
|
||||||
alarmCounts.addToCounter(equipmentId, alarmCode, (int) count);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
//set existing counters per customer - first to 0, then to new computed values
|
|
||||||
existingCustomerCountsPerCustomerMap.values().forEach(customerCounts -> {
|
|
||||||
AlarmCounts realAlarmCounts = alarmCountsPerCustomerMap.get(customerCounts.getCustomerId());
|
|
||||||
customerCounts.getTotalCountsPerAlarmCodeMap().forEach((alarmCode, existingCount) -> {
|
|
||||||
int realCount = realAlarmCounts != null ? realAlarmCounts.getTotalCountsPerAlarmCodeMap().getOrDefault(alarmCode, new AtomicInteger(0)).get(): 0;
|
|
||||||
//update alarm_counts_by_customer set alarmCount = alarmCount + ? where customerId = ? and alarmCode = ?
|
|
||||||
cqlSession.execute(preparedStmt_updateAlarmCountByCustomer.bind( (long) (0L - existingCount.get() + realCount), customerCounts.getCustomerId(), alarmCode.getId()));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
//set existing counters per equipment - first to 0, then to new computed values
|
|
||||||
existingEquipmentCountsPerCustomerMap.values().forEach(customerCounts -> {
|
|
||||||
int customerId = customerCounts.getCustomerId();
|
|
||||||
AlarmCounts realAlarmCounts = alarmCountsPerCustomerMap.get(customerId);
|
|
||||||
|
|
||||||
customerCounts.getCountsPerEquipmentIdMap().forEach((eqId, perAlarmCodeMap) -> {
|
|
||||||
|
|
||||||
perAlarmCodeMap.forEach((alarmCode, existingCount) -> {
|
|
||||||
int realCount = 0;
|
|
||||||
if(realAlarmCounts != null && realAlarmCounts.getCountsPerEquipmentIdMap().get(eqId)!=null ) {
|
|
||||||
realCount = realAlarmCounts.getCountsPerEquipmentIdMap().get(eqId).getOrDefault(alarmCode, new AtomicInteger(0)).get();
|
|
||||||
}
|
|
||||||
//update alarm_counts_by_equipment set alarmCount = alarmCount + ? where customerId = ? and equipmentId = ? and alarmCode = ?
|
|
||||||
cqlSession.execute(preparedStmt_updateAlarmCountByEquipment.bind( (long) ( 0L - existingCount.get() + realCount), customerId, eqId, alarmCode.getId()));
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
//process new customer counts that are not present in existing counts
|
|
||||||
alarmCountsPerCustomerMap.values().forEach(customerCounts -> {
|
|
||||||
AlarmCounts existingAlarmCounts = existingCustomerCountsPerCustomerMap.get(customerCounts.getCustomerId());
|
|
||||||
if(existingAlarmCounts == null) {
|
|
||||||
customerCounts.getTotalCountsPerAlarmCodeMap().forEach((alarmCode, newCount) -> {
|
|
||||||
//update alarm_counts_by_customer set alarmCount = alarmCount + ? where customerId = ? and alarmCode = ?
|
|
||||||
cqlSession.execute(preparedStmt_updateAlarmCountByCustomer.bind((long) newCount.get(), customerCounts.getCustomerId(), alarmCode.getId()));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
//process new equipment counts that are not present in existing counts
|
|
||||||
alarmCountsPerCustomerMap.values().forEach(customerCounts -> {
|
|
||||||
int customerId = customerCounts.getCustomerId();
|
|
||||||
AlarmCounts existingAlarmCounts = existingEquipmentCountsPerCustomerMap.get(customerId);
|
|
||||||
|
|
||||||
customerCounts.getCountsPerEquipmentIdMap().forEach((eqId, perAlarmCodeMap) -> {
|
|
||||||
if(existingAlarmCounts == null || existingAlarmCounts.getCountsPerEquipmentIdMap().get(eqId) == null) {
|
|
||||||
perAlarmCodeMap.forEach((alarmCode, existingCount) -> {
|
|
||||||
//update alarm_counts_by_equipment set alarmCount = alarmCount + ? where customerId = ? and equipmentId = ? and alarmCode = ?
|
|
||||||
cqlSession.execute(preparedStmt_updateAlarmCountByEquipment.bind((long) existingCount.get(), customerId, eqId, alarmCode.getId()));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
LOG.debug("Completed resetting Alarm counters ");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Alarm> get(int customerId, Set<Long> equipmentIds, Set<AlarmCode> alarmCodes,
|
public List<Alarm> get(int customerId, Set<Long> equipmentIds, Set<AlarmCode> alarmCodes,
|
||||||
@@ -651,11 +654,12 @@ public class AlarmDatastoreCassandra implements AlarmDatastore {
|
|||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static enum FilterOptions{ customer_only, customer_and_equipment, customer_and_alarmCode, customer_and_timestamp, customer_and_acknowledged }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PaginationResponse<Alarm> getForCustomer(int customerId, Set<Long> equipmentIds,
|
public PaginationResponse<Alarm> getForCustomer(int customerId, Set<Long> equipmentIds,
|
||||||
Set<AlarmCode> alarmCodes, long createdAfterTimestamp, List<ColumnAndSort> sortBy,
|
Set<AlarmCode> alarmCodes, long createdAfterTimestamp, Boolean acknowledged, List<ColumnAndSort> sortBy,
|
||||||
PaginationContext<Alarm> context) {
|
PaginationContext<Alarm> context) {
|
||||||
PaginationResponse<Alarm> ret = new PaginationResponse<>();
|
PaginationResponse<Alarm> ret = new PaginationResponse<>();
|
||||||
ret.setContext(context.clone());
|
ret.setContext(context.clone());
|
||||||
@@ -671,7 +675,8 @@ public class AlarmDatastoreCassandra implements AlarmDatastore {
|
|||||||
LOG.debug("Looking up Alarms for customer {} with last returned page number {}",
|
LOG.debug("Looking up Alarms for customer {} with last returned page number {}",
|
||||||
customerId, context.getLastReturnedPageNumber());
|
customerId, context.getLastReturnedPageNumber());
|
||||||
|
|
||||||
String query = CQL_GET_BY_CUSTOMER_ID;
|
String query_head = CQL_GET_BY_CUSTOMER_ID;
|
||||||
|
String query = "";
|
||||||
|
|
||||||
if((alarmCodes==null || alarmCodes.isEmpty()) && createdAfterTimestamp>0) {
|
if((alarmCodes==null || alarmCodes.isEmpty()) && createdAfterTimestamp>0) {
|
||||||
//if alarm codes not specified (means all) - explicitly list all of them, otherwise the following exception if thrown:
|
//if alarm codes not specified (means all) - explicitly list all of them, otherwise the following exception if thrown:
|
||||||
@@ -680,6 +685,8 @@ public class AlarmDatastoreCassandra implements AlarmDatastore {
|
|||||||
alarmCodes = new HashSet<>(Arrays.asList(AlarmCode.validValues()));
|
alarmCodes = new HashSet<>(Arrays.asList(AlarmCode.validValues()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FilterOptions filterOptions = FilterOptions.customer_only;
|
||||||
|
|
||||||
// add filters for the query
|
// add filters for the query
|
||||||
ArrayList<Object> queryArgs = new ArrayList<>();
|
ArrayList<Object> queryArgs = new ArrayList<>();
|
||||||
queryArgs.add(customerId);
|
queryArgs.add(customerId);
|
||||||
@@ -688,39 +695,52 @@ public class AlarmDatastoreCassandra implements AlarmDatastore {
|
|||||||
if (equipmentIds != null && !equipmentIds.isEmpty()) {
|
if (equipmentIds != null && !equipmentIds.isEmpty()) {
|
||||||
queryArgs.addAll(equipmentIds);
|
queryArgs.addAll(equipmentIds);
|
||||||
|
|
||||||
StringBuilder strb = new StringBuilder(100);
|
query += " and equipmentId in" + CassandraUtils.getBindPlaceholders(equipmentIds);
|
||||||
strb.append("and equipmentId in (");
|
|
||||||
for (int i = 0; i < equipmentIds.size(); i++) {
|
|
||||||
strb.append("?");
|
|
||||||
if (i < equipmentIds.size() - 1) {
|
|
||||||
strb.append(",");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
strb.append(") ");
|
|
||||||
|
|
||||||
query += strb.toString();
|
filterOptions = FilterOptions.customer_and_equipment;
|
||||||
}
|
}
|
||||||
|
|
||||||
//add alarmCodes filters
|
//add alarmCodes filters
|
||||||
if (alarmCodes != null && !alarmCodes.isEmpty()) {
|
if (alarmCodes != null && !alarmCodes.isEmpty()) {
|
||||||
alarmCodes.forEach(ac -> queryArgs.add(ac.getId()));
|
alarmCodes.forEach(ac -> queryArgs.add(ac.getId()));
|
||||||
|
|
||||||
StringBuilder strb = new StringBuilder(100);
|
query += " and alarmCode in" + CassandraUtils.getBindPlaceholders(alarmCodes);
|
||||||
strb.append("and alarmCode in (");
|
|
||||||
for (int i = 0; i < alarmCodes.size(); i++) {
|
|
||||||
strb.append("?");
|
|
||||||
if (i < alarmCodes.size() - 1) {
|
|
||||||
strb.append(",");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
strb.append(") ");
|
|
||||||
|
|
||||||
query += strb.toString();
|
filterOptions = FilterOptions.customer_and_alarmCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(createdAfterTimestamp > 0) {
|
if(createdAfterTimestamp > 0) {
|
||||||
query += " and createdTimestamp > ?" ;
|
query += " and createdTimestamp > ?" ;
|
||||||
queryArgs.add(createdAfterTimestamp);
|
queryArgs.add(createdAfterTimestamp);
|
||||||
|
filterOptions = FilterOptions.customer_and_timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (acknowledged != null) {
|
||||||
|
queryArgs.clear();
|
||||||
|
queryArgs.add(customerId);
|
||||||
|
queryArgs.add(acknowledged);
|
||||||
|
query_head = "select customerId, equipmentId, alarmCode, createdTimestamp from alarm_by_acknowledged where customerId = ? ";
|
||||||
|
|
||||||
|
if (equipmentIds != null && !equipmentIds.isEmpty()) {
|
||||||
|
query_head = "select customerId, equipmentId, alarmCode, createdTimestamp from alarm_by_acknowledged_equipmentId where customerId = ? ";
|
||||||
|
queryArgs.addAll(equipmentIds);
|
||||||
|
}
|
||||||
|
if (alarmCodes != null && !alarmCodes.isEmpty()) {
|
||||||
|
query_head = "select customerId, equipmentId, alarmCode, createdTimestamp from alarm_by_acknowledged_alarmCode where customerId = ? ";
|
||||||
|
alarmCodes.forEach(ac -> queryArgs.add(ac.getId()));
|
||||||
|
}
|
||||||
|
if (createdAfterTimestamp > 0) {
|
||||||
|
query_head = "select customerId, equipmentId, alarmCode, createdTimestamp from alarm_by_acknowledged_timestamp where customerId = ? ";
|
||||||
|
queryArgs.add(createdAfterTimestamp);
|
||||||
|
|
||||||
|
if (equipmentIds != null && !equipmentIds.isEmpty()) {
|
||||||
|
query_head = "select customerId, equipmentId, alarmCode, createdTimestamp from alarm_by_acknowledged where customerId = ? ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
query = " and acknowledged = ? " + query;
|
||||||
|
|
||||||
|
filterOptions = FilterOptions.customer_and_acknowledged;
|
||||||
}
|
}
|
||||||
|
|
||||||
// add sorting options for the query
|
// add sorting options for the query
|
||||||
@@ -734,7 +754,7 @@ public class AlarmDatastoreCassandra implements AlarmDatastore {
|
|||||||
//TODO: create a cache of these prepared statements, keyed by the numberOfEquipmentIds_numberOfAlarmCodes
|
//TODO: create a cache of these prepared statements, keyed by the numberOfEquipmentIds_numberOfAlarmCodes
|
||||||
PreparedStatement preparedStmt_getPageForCustomer;
|
PreparedStatement preparedStmt_getPageForCustomer;
|
||||||
try {
|
try {
|
||||||
preparedStmt_getPageForCustomer = cqlSession.prepare(query);
|
preparedStmt_getPageForCustomer = cqlSession.prepare(query_head + query);
|
||||||
} catch(InvalidQueryException e) {
|
} catch(InvalidQueryException e) {
|
||||||
LOG.error("Cannot prepare cassandra query '{}'", query, e);
|
LOG.error("Cannot prepare cassandra query '{}'", query, e);
|
||||||
throw e;
|
throw e;
|
||||||
@@ -755,10 +775,30 @@ public class AlarmDatastoreCassandra implements AlarmDatastore {
|
|||||||
|
|
||||||
List<Alarm> pageItems = new ArrayList<>();
|
List<Alarm> pageItems = new ArrayList<>();
|
||||||
|
|
||||||
// iterate through the current page
|
switch(filterOptions) {
|
||||||
while (rs.getAvailableWithoutFetching() > 0) {
|
case customer_only:
|
||||||
pageItems.add(alarmRowMapper.mapRow(rs.one()));
|
case customer_and_equipment:
|
||||||
|
case customer_and_alarmCode:
|
||||||
|
case customer_and_timestamp:
|
||||||
|
// iterate through the current page
|
||||||
|
while (rs.getAvailableWithoutFetching() > 0) {
|
||||||
|
pageItems.add(alarmRowMapper.mapRow(rs.one()));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case customer_and_acknowledged:
|
||||||
|
while (rs.getAvailableWithoutFetching() > 0) {
|
||||||
|
Row row = rs.one();
|
||||||
|
long equipmentIdPostQuery = row.getLong("equipmentId");
|
||||||
|
int alarmCodePostQuery = row.getInt("alarmCode");
|
||||||
|
long createdTimestampPostQuery = row.getLong("createdTimestamp");
|
||||||
|
pageItems.add(getOrNull(customerId, equipmentIdPostQuery, AlarmCode.getById(alarmCodePostQuery), createdTimestampPostQuery));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LOG.warn("Unknown filter option:", filterOptions);
|
||||||
|
throw new IllegalArgumentException("Unknown filter option " + filterOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (pageItems.isEmpty()) {
|
if (pageItems.isEmpty()) {
|
||||||
LOG.debug("Cannot find Alarms for customer {} with last returned page number {}",
|
LOG.debug("Cannot find Alarms for customer {} with last returned page number {}",
|
||||||
@@ -802,7 +842,7 @@ public class AlarmDatastoreCassandra implements AlarmDatastore {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public AlarmCounts getAlarmCounts(int customerId, Set<Long> equipmentIds, Set<AlarmCode> alarmCodes) {
|
public AlarmCounts getAlarmCounts(int customerId, Set<Long> equipmentIds, Set<AlarmCode> alarmCodes, Boolean acknowledged) {
|
||||||
ArrayList<Object> queryArgs = new ArrayList<>();
|
ArrayList<Object> queryArgs = new ArrayList<>();
|
||||||
queryArgs.add(customerId);
|
queryArgs.add(customerId);
|
||||||
|
|
||||||
@@ -810,11 +850,13 @@ public class AlarmDatastoreCassandra implements AlarmDatastore {
|
|||||||
|
|
||||||
StringBuilder query = new StringBuilder();
|
StringBuilder query = new StringBuilder();
|
||||||
|
|
||||||
if (equipmentIds != null && !equipmentIds.isEmpty()) {
|
if (acknowledged == null) {
|
||||||
query.append(CQL_GET_EQUIPMENT_ALARM_COUNT_BY_CUSTOMER_ID);
|
|
||||||
} else {
|
|
||||||
query.append(CQL_GET_CUSTOMER_ALARM_COUNT_BY_CUSTOMER_ID);
|
query.append(CQL_GET_CUSTOMER_ALARM_COUNT_BY_CUSTOMER_ID);
|
||||||
}
|
} else {
|
||||||
|
queryArgs.add(acknowledged);
|
||||||
|
query.append(CQL_GET_CUSTOMER_ACKNOWLEDGED_ALARM_COUNT_BY_CUSTOMER_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//add alarmCodes filters
|
//add alarmCodes filters
|
||||||
@@ -823,23 +865,28 @@ public class AlarmDatastoreCassandra implements AlarmDatastore {
|
|||||||
//add equipmentId filters
|
//add equipmentId filters
|
||||||
if (equipmentIds != null && !equipmentIds.isEmpty()) {
|
if (equipmentIds != null && !equipmentIds.isEmpty()) {
|
||||||
queryArgs.addAll(equipmentIds);
|
queryArgs.addAll(equipmentIds);
|
||||||
|
|
||||||
StringBuilder strb = new StringBuilder(100);
|
if (equipmentIds.size() == 1) {
|
||||||
strb.append("and equipmentId in (");
|
query.append("and equipmentId = ? ");
|
||||||
for (int i = 0; i < equipmentIds.size(); i++) {
|
} else {
|
||||||
strb.append("?");
|
StringBuilder strb = new StringBuilder(100);
|
||||||
if (i < equipmentIds.size() - 1) {
|
strb.append("and equipmentId in (");
|
||||||
strb.append(",");
|
for (int i = 0; i < equipmentIds.size(); i++) {
|
||||||
|
strb.append("?");
|
||||||
|
if (i < equipmentIds.size() - 1) {
|
||||||
|
strb.append(",");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
strb.append(") ");
|
||||||
|
|
||||||
|
query.append(strb);
|
||||||
}
|
}
|
||||||
strb.append(") ");
|
|
||||||
|
|
||||||
query.append(strb);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AlarmCounts alarmCounts = new AlarmCounts();
|
AlarmCounts alarmCounts = new AlarmCounts();
|
||||||
alarmCounts.setCustomerId(customerId);
|
alarmCounts.setCustomerId(customerId);
|
||||||
|
alarmCounts.setAcknowledged(acknowledged);
|
||||||
|
|
||||||
//TODO: create a cache of these prepared statements, keyed by the numberOfEquipmentIds_numberOfAlarmCodes
|
//TODO: create a cache of these prepared statements, keyed by the numberOfEquipmentIds_numberOfAlarmCodes
|
||||||
PreparedStatement preparedStmt_getCounts;
|
PreparedStatement preparedStmt_getCounts;
|
||||||
@@ -850,21 +897,11 @@ public class AlarmDatastoreCassandra implements AlarmDatastore {
|
|||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
|
||||||
ResultSet rs = cqlSession.execute(preparedStmt_getCounts.bind(queryArgs.toArray() ));
|
ResultSet rs = cqlSession.execute(preparedStmt_getCounts.bind(queryArgs.toArray()));
|
||||||
|
|
||||||
int alarmCodeColIdx;
|
|
||||||
int equipmentIdColIdx;
|
|
||||||
int countColIdx;
|
|
||||||
|
|
||||||
if (equipmentIds == null || equipmentIds.isEmpty()) {
|
int equipmentIdColIdx = 0;
|
||||||
alarmCodeColIdx = 0;
|
int alarmCodeColIdx = 1;
|
||||||
equipmentIdColIdx = 0;
|
|
||||||
countColIdx = 1;
|
|
||||||
} else {
|
|
||||||
alarmCodeColIdx = 1;
|
|
||||||
equipmentIdColIdx = 0;
|
|
||||||
countColIdx = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
rs.forEach(row -> {
|
rs.forEach(row -> {
|
||||||
//we will do the client-side filtering for the AlarmCodes, because querying for it as part of CQL does not seem to work
|
//we will do the client-side filtering for the AlarmCodes, because querying for it as part of CQL does not seem to work
|
||||||
@@ -872,86 +909,17 @@ public class AlarmDatastoreCassandra implements AlarmDatastore {
|
|||||||
//the amount of distinct alarm codes per equipment is very small
|
//the amount of distinct alarm codes per equipment is very small
|
||||||
AlarmCode ac = AlarmCode.getById(row.getInt(alarmCodeColIdx));
|
AlarmCode ac = AlarmCode.getById(row.getInt(alarmCodeColIdx));
|
||||||
|
|
||||||
if (alarmCodes != null && !alarmCodes.isEmpty() && alarmCodes.contains(ac)
|
if (alarmCodes != null && !alarmCodes.isEmpty() && alarmCodes.contains(ac) || alarmCodes == null || alarmCodes.isEmpty() )
|
||||||
|| alarmCodes == null || alarmCodes.isEmpty() )
|
|
||||||
{
|
{
|
||||||
if(equipmentIds == null || equipmentIds.isEmpty()) {
|
if(equipmentIds == null || equipmentIds.isEmpty()) {
|
||||||
alarmCounts.addToCounter(0, ac, (int) row.getLong(countColIdx));
|
alarmCounts.addToCounter(0, ac, 1);
|
||||||
} else {
|
} else {
|
||||||
alarmCounts.addToCounter(row.getLong(equipmentIdColIdx), ac, (int) row.getLong(countColIdx));
|
alarmCounts.addToCounter(row.getLong(equipmentIdColIdx), ac, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return alarmCounts;
|
return alarmCounts;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AlarmCounts getAlarmCounts_raw(int customerId, Set<Long> equipmentIds, Set<AlarmCode> alarmCodes) {
|
|
||||||
ArrayList<Object> queryArgs = new ArrayList<>();
|
|
||||||
queryArgs.add(customerId);
|
|
||||||
|
|
||||||
//build the query
|
|
||||||
|
|
||||||
StringBuilder query = new StringBuilder();
|
|
||||||
|
|
||||||
query.append(CQL_COUNTS_BY_EQUIPMENT_AND_ALARM_CODE_HEADER);
|
|
||||||
|
|
||||||
|
|
||||||
//add alarmCodes filters
|
|
||||||
//we will do the client-side filtering for the AlarmCodes, see below
|
|
||||||
|
|
||||||
//add equipmentId filters
|
|
||||||
if (equipmentIds != null && !equipmentIds.isEmpty()) {
|
|
||||||
queryArgs.addAll(equipmentIds);
|
|
||||||
|
|
||||||
StringBuilder strb = new StringBuilder(100);
|
|
||||||
strb.append("and equipmentId in (");
|
|
||||||
for (int i = 0; i < equipmentIds.size(); i++) {
|
|
||||||
strb.append("?");
|
|
||||||
if (i < equipmentIds.size() - 1) {
|
|
||||||
strb.append(",");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
strb.append(") ");
|
|
||||||
|
|
||||||
query.append(strb);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
query.append(CQL_COUNTS_BY_EQUIPMENT_AND_ALARM_CODE_FOOTER);
|
|
||||||
|
|
||||||
AlarmCounts alarmCounts = new AlarmCounts();
|
|
||||||
alarmCounts.setCustomerId(customerId);
|
|
||||||
|
|
||||||
//TODO: create a cache of these prepared statements, keyed by the numberOfEquipmentIds_numberOfAlarmCodes
|
|
||||||
PreparedStatement preparedStmt_getCounts;
|
|
||||||
try {
|
|
||||||
preparedStmt_getCounts = cqlSession.prepare(query.toString());
|
|
||||||
} catch(InvalidQueryException e) {
|
|
||||||
LOG.error("Cannot prepare cassandra query '{}'", query.toString(), e);
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
|
|
||||||
ResultSet rs = cqlSession.execute(preparedStmt_getCounts.bind(queryArgs.toArray() ));
|
|
||||||
|
|
||||||
rs.forEach(row -> {
|
|
||||||
//we will do the client-side filtering for the AlarmCodes, because querying for it as part of CQL does not seem to work
|
|
||||||
//we can afford it because there are not that many different alarm codes in total, and during normal operations
|
|
||||||
//the amount of distinct alarm codes per equipment is very small
|
|
||||||
AlarmCode ac = AlarmCode.getById(row.getInt(1));
|
|
||||||
|
|
||||||
if (alarmCodes != null && !alarmCodes.isEmpty() && alarmCodes.contains(ac)
|
|
||||||
|| alarmCodes == null || alarmCodes.isEmpty() )
|
|
||||||
{
|
|
||||||
if(equipmentIds == null || equipmentIds.isEmpty()) {
|
|
||||||
alarmCounts.addToCounter(0, ac, (int) row.getLong(2));
|
|
||||||
} else {
|
|
||||||
alarmCounts.addToCounter(row.getLong(0), ac, (int) row.getLong(2));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return alarmCounts;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,25 +20,50 @@ CREATE TABLE IF NOT EXISTS tip_wlan_keyspace.alarm (
|
|||||||
-- this is needed to support retrieval of all alarms for a customer
|
-- this is needed to support retrieval of all alarms for a customer
|
||||||
CREATE INDEX IF NOT EXISTS idx_alarm_customerId ON tip_wlan_keyspace.alarm (customerId);
|
CREATE INDEX IF NOT EXISTS idx_alarm_customerId ON tip_wlan_keyspace.alarm (customerId);
|
||||||
|
|
||||||
/*
|
CREATE TABLE IF NOT EXISTS tip_wlan_keyspace.alarm_by_acknowledged (
|
||||||
# Experiment with a separate alarm_counts table because raw alarms table generates warnings like these:
|
|
||||||
# Query '[5 values] select equipmentId, alarmCode, count(1) from alarm where customerId = ? and equipmentId in (?,?,?,?) group by equipmentId, alarmCode [customerid=2, equipmentid=4, equipmentid=6, equipmentid=8, equipmentid=10]' generated server side warning(s): Aggregation query used on multiple partition keys (IN restriction)
|
|
||||||
# See https://cassandra.apache.org/doc/latest/cql/types.html#counters
|
|
||||||
#
|
|
||||||
*/
|
|
||||||
CREATE TABLE IF NOT EXISTS tip_wlan_keyspace.alarm_counts_by_customer (
|
|
||||||
customerId int,
|
|
||||||
alarmCode int,
|
|
||||||
alarmCount counter,
|
|
||||||
|
|
||||||
PRIMARY KEY ((customerId), alarmCode)
|
|
||||||
) WITH comment='Counts of Alarms for a Customer generated by the TIP WLAN CloudSDK';
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS tip_wlan_keyspace.alarm_counts_by_equipment (
|
|
||||||
customerId int,
|
customerId int,
|
||||||
equipmentId bigint,
|
equipmentId bigint,
|
||||||
alarmCode int,
|
alarmCode int,
|
||||||
alarmCount counter,
|
createdTimestamp bigint,
|
||||||
|
acknowledged boolean,
|
||||||
|
|
||||||
PRIMARY KEY ((customerId, equipmentId), alarmCode)
|
PRIMARY KEY ((customerId, acknowledged), equipmentId, alarmCode, createdTimestamp)
|
||||||
) WITH comment='Counts of Alarms for Equipment generated by the TIP WLAN CloudSDK';
|
) WITH comment='Index Table to look up alarms by acknowledged used by TIP WLAN CloudSDK';
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS tip_wlan_keyspace.alarm_by_acknowledged_equipmentId (
|
||||||
|
customerId int,
|
||||||
|
equipmentId bigint,
|
||||||
|
alarmCode int,
|
||||||
|
createdTimestamp bigint,
|
||||||
|
acknowledged boolean,
|
||||||
|
|
||||||
|
PRIMARY KEY ((customerId, acknowledged, equipmentId), alarmCode, createdTimestamp)
|
||||||
|
) WITH comment='Index Table to look up alarms by acknowledged and equipmentId used by TIP WLAN CloudSDK';
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS tip_wlan_keyspace.alarm_by_acknowledged_alarmCode (
|
||||||
|
customerId int,
|
||||||
|
equipmentId bigint,
|
||||||
|
alarmCode int,
|
||||||
|
createdTimestamp bigint,
|
||||||
|
acknowledged boolean,
|
||||||
|
|
||||||
|
PRIMARY KEY ((customerId, acknowledged, alarmCode), equipmentId, createdTimestamp)
|
||||||
|
) WITH comment='Index Table to look up alarms by acknowledged and alarmCode used by TIP WLAN CloudSDK';
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS tip_wlan_keyspace.alarm_by_acknowledged_timestamp (
|
||||||
|
customerId int,
|
||||||
|
equipmentId bigint,
|
||||||
|
alarmCode int,
|
||||||
|
createdTimestamp bigint,
|
||||||
|
acknowledged boolean,
|
||||||
|
|
||||||
|
PRIMARY KEY ((customerId, acknowledged), alarmCode, createdTimestamp, equipmentId)
|
||||||
|
) WITH comment='Index Table to look up alarms by acknowledged and createdTimestamp used by TIP WLAN CloudSDK';
|
||||||
|
|
||||||
|
/*
|
||||||
|
# COPY tip_wlan_keyspace.alarm(customerId, equipmentId, alarmCode, createdTimestamp, acknowledged) TO 'alarmToAcknowledgedTable.csv';
|
||||||
|
# COPY tip_wlan_keyspace.alarm_by_acknowledged(customerId, equipmentId, alarmCode, createdTimestamp, acknowledged) FROM 'alarmToAcknowledgedTable.csv';
|
||||||
|
# COPY tip_wlan_keyspace.alarm_by_acknowledged_equipmentId(customerId, equipmentId, alarmCode, createdTimestamp, acknowledged) FROM 'alarmToAcknowledgedTable.csv';
|
||||||
|
# COPY tip_wlan_keyspace.alarm_by_acknowledged_alarmCode(customerId, equipmentId, alarmCode, createdTimestamp, acknowledged) FROM 'alarmToAcknowledgedTable.csv';
|
||||||
|
# COPY tip_wlan_keyspace.alarm_by_acknowledged_timestamp(customerId, equipmentId, alarmCode, createdTimestamp, acknowledged) FROM 'alarmToAcknowledgedTable.csv';
|
||||||
|
*/
|
||||||
|
|||||||
@@ -28,12 +28,12 @@ public class AlarmDatastoreCassandraTests extends BaseAlarmDatastoreTest {
|
|||||||
@Override
|
@Override
|
||||||
protected List<String> getAlarmPagination_expectedPage3Strings(){
|
protected List<String> getAlarmPagination_expectedPage3Strings(){
|
||||||
//in cassandra the sort order is weird but consistent - although it may change on the cassandra server restart
|
//in cassandra the sort order is weird but consistent - although it may change on the cassandra server restart
|
||||||
return Arrays.asList(new String[]{"qr_6", "qr_2", "qr_26", "qr_43", "qr_41", "qr_3", "qr_49", "qr_40", "qr_24", "qr_28" });
|
return Arrays.asList(new String[]{"qr_12", "qr_49", "qr_21", "qr_39", "qr_1", "qr_25", "qr_42", "qr_9", "qr_29", "qr_7" });
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected List<String> getAlarmPagination_expectedPage1EmptySortStrings() {
|
protected List<String> getAlarmPagination_expectedPage1EmptySortStrings() {
|
||||||
return Arrays.asList(new String[]{"qr_17", "qr_14", "qr_9", "qr_38", "qr_18", "qr_30", "qr_0", "qr_7", "qr_25", "qr_19" });
|
return Arrays.asList(new String[]{"qr_30", "qr_17", "qr_13", "qr_15", "qr_14", "qr_32", "qr_11", "qr_2", "qr_8", "qr_5" });
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
1
alarm-datastore-common-test/.gitignore
vendored
Normal file
1
alarm-datastore-common-test/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -16,7 +15,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>alarm-datastore-interface</artifactId>
|
<artifactId>alarm-datastore-interface</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ 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.exceptions.DsConcurrentModificationException;
|
import com.telecominfraproject.wlan.datastore.exceptions.DsConcurrentModificationException;
|
||||||
import com.telecominfraproject.wlan.datastore.exceptions.DsEntityNotFoundException;
|
import com.telecominfraproject.wlan.datastore.exceptions.DsEntityNotFoundException;
|
||||||
|
import com.telecominfraproject.wlan.status.models.StatusCode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author dtoptygin
|
* @author dtoptygin
|
||||||
@@ -209,9 +210,7 @@ public abstract class BaseAlarmDatastoreTest {
|
|||||||
Set<AlarmCode> alarmCodes = new HashSet<>(Arrays.asList(AlarmCode.AccessPointIsUnreachable, AlarmCode.AssocFailure));
|
Set<AlarmCode> alarmCodes = new HashSet<>(Arrays.asList(AlarmCode.AccessPointIsUnreachable, AlarmCode.AssocFailure));
|
||||||
long pastTimestamp = 0;
|
long pastTimestamp = 0;
|
||||||
Set<Long> equipmentIds_c2 = new HashSet<>();
|
Set<Long> equipmentIds_c2 = new HashSet<>();
|
||||||
|
|
||||||
testInterface.resetAlarmCounters();
|
|
||||||
|
|
||||||
for(int i = 0; i< 50; i++){
|
for(int i = 0; i< 50; i++){
|
||||||
mdl = createAlarmObject();
|
mdl = createAlarmObject();
|
||||||
mdl.setCustomerId(customerId_1);
|
mdl.setCustomerId(customerId_1);
|
||||||
@@ -223,13 +222,16 @@ public abstract class BaseAlarmDatastoreTest {
|
|||||||
mdl.setCreatedTimestamp(mdl.getCreatedTimestamp() - 10000);
|
mdl.setCreatedTimestamp(mdl.getCreatedTimestamp() - 10000);
|
||||||
pastTimestamp = mdl.getCreatedTimestamp();
|
pastTimestamp = mdl.getCreatedTimestamp();
|
||||||
}
|
}
|
||||||
|
if (i < 20) {
|
||||||
|
mdl.setAcknowledged(true);
|
||||||
|
} else {
|
||||||
|
mdl.setAcknowledged(false);
|
||||||
|
}
|
||||||
|
|
||||||
apNameIdx++;
|
apNameIdx++;
|
||||||
testInterface.create(mdl);
|
testInterface.create(mdl);
|
||||||
}
|
}
|
||||||
|
|
||||||
testInterface.resetAlarmCounters();
|
|
||||||
|
|
||||||
for(int i = 0; i< 50; i++){
|
for(int i = 0; i< 50; i++){
|
||||||
mdl = createAlarmObject();
|
mdl = createAlarmObject();
|
||||||
mdl.setCustomerId(customerId_2);
|
mdl.setCustomerId(customerId_2);
|
||||||
@@ -246,13 +248,13 @@ public abstract class BaseAlarmDatastoreTest {
|
|||||||
|
|
||||||
//get active alarms for all equipment and all alarmCodes for the customer since the beginning of time
|
//get active alarms for all equipment and all alarmCodes for the customer since the beginning of time
|
||||||
PaginationContext<Alarm> context = new PaginationContext<>(10);
|
PaginationContext<Alarm> context = new PaginationContext<>(10);
|
||||||
PaginationResponse<Alarm> page1 = testInterface.getForCustomer(customerId_1, null, null, -1, sortBy, context);
|
PaginationResponse<Alarm> page1 = testInterface.getForCustomer(customerId_1, null, null, -1, null, sortBy, context);
|
||||||
PaginationResponse<Alarm> page2 = testInterface.getForCustomer(customerId_1, null, null, -1, sortBy, page1.getContext());
|
PaginationResponse<Alarm> page2 = testInterface.getForCustomer(customerId_1, null, null, -1, null, sortBy, page1.getContext());
|
||||||
PaginationResponse<Alarm> page3 = testInterface.getForCustomer(customerId_1, null, null, -1, sortBy, page2.getContext());
|
PaginationResponse<Alarm> page3 = testInterface.getForCustomer(customerId_1, null, null, -1, null, sortBy, page2.getContext());
|
||||||
PaginationResponse<Alarm> page4 = testInterface.getForCustomer(customerId_1, null, null, -1, sortBy, page3.getContext());
|
PaginationResponse<Alarm> page4 = testInterface.getForCustomer(customerId_1, null, null, -1, null, sortBy, page3.getContext());
|
||||||
PaginationResponse<Alarm> page5 = testInterface.getForCustomer(customerId_1, null, null, -1, sortBy, page4.getContext());
|
PaginationResponse<Alarm> page5 = testInterface.getForCustomer(customerId_1, null, null, -1, null, sortBy, page4.getContext());
|
||||||
PaginationResponse<Alarm> page6 = testInterface.getForCustomer(customerId_1, null, null, -1, sortBy, page5.getContext());
|
PaginationResponse<Alarm> page6 = testInterface.getForCustomer(customerId_1, null, null, -1, null, sortBy, page5.getContext());
|
||||||
PaginationResponse<Alarm> page7 = testInterface.getForCustomer(customerId_1, null, null, -1, sortBy, page6.getContext());
|
PaginationResponse<Alarm> page7 = testInterface.getForCustomer(customerId_1, null, null, -1, null, sortBy, page6.getContext());
|
||||||
|
|
||||||
//verify returned pages
|
//verify returned pages
|
||||||
assertEquals(10, page1.getItems().size());
|
assertEquals(10, page1.getItems().size());
|
||||||
@@ -285,9 +287,99 @@ public abstract class BaseAlarmDatastoreTest {
|
|||||||
|
|
||||||
assertEquals(expectedPage3Strings, actualPage3Strings);
|
assertEquals(expectedPage3Strings, actualPage3Strings);
|
||||||
|
|
||||||
|
// testing Acknowledged filter (alarm_by_acknowledged)
|
||||||
|
PaginationResponse<Alarm> page1Acknowledged = testInterface.getForCustomer(customerId_1, null, null, -1, true, sortBy, context);
|
||||||
|
PaginationResponse<Alarm> page2Acknowledged = testInterface.getForCustomer(customerId_1, null, null, -1, true, sortBy, page1Acknowledged.getContext());
|
||||||
|
PaginationResponse<Alarm> page3Acknowledged = testInterface.getForCustomer(customerId_1, null, null, -1, true, sortBy, page2Acknowledged.getContext());
|
||||||
|
PaginationResponse<Alarm> page4Acknowledged = testInterface.getForCustomer(customerId_1, null, null, -1, true, sortBy, page3Acknowledged.getContext());
|
||||||
|
|
||||||
|
//verify returned pages
|
||||||
|
assertEquals(10, page1Acknowledged.getItems().size());
|
||||||
|
assertEquals(10, page2Acknowledged.getItems().size());
|
||||||
|
assertEquals(0, page3Acknowledged.getItems().size());
|
||||||
|
assertEquals(0, page4Acknowledged.getItems().size());
|
||||||
|
|
||||||
|
// testing Acknowledged filter with equipmentIds (alarm_by_acknowledged_equipmentId)
|
||||||
|
PaginationResponse<Alarm> page1AcknowledgedAndEquipment = testInterface.getForCustomer(customerId_1, equipmentIds, null, -1, true, sortBy, context);
|
||||||
|
PaginationResponse<Alarm> page2AcknowledgedAndEquipment = testInterface.getForCustomer(customerId_1, equipmentIds, null, -1, true, sortBy, page1AcknowledgedAndEquipment.getContext());
|
||||||
|
PaginationResponse<Alarm> page3AcknowledgedAndEquipment = testInterface.getForCustomer(customerId_1, equipmentIds, null, -1, true, sortBy, page2AcknowledgedAndEquipment.getContext());
|
||||||
|
PaginationResponse<Alarm> page4AcknowledgedAndEquipment = testInterface.getForCustomer(customerId_1, equipmentIds, null, -1, true, sortBy, page3AcknowledgedAndEquipment.getContext());
|
||||||
|
|
||||||
|
page1AcknowledgedAndEquipment.getItems().forEach(e -> assertEquals(true, e.isAcknowledged()) );
|
||||||
|
page2AcknowledgedAndEquipment.getItems().forEach(e -> assertEquals(true, e.isAcknowledged()) );
|
||||||
|
|
||||||
|
page1AcknowledgedAndEquipment.getItems().forEach(e -> assertTrue(equipmentIds.contains(e.getEquipmentId())));
|
||||||
|
page2AcknowledgedAndEquipment.getItems().forEach(e -> assertTrue(equipmentIds.contains(e.getEquipmentId())));
|
||||||
|
|
||||||
|
assertTrue(page3AcknowledgedAndEquipment.getContext().isLastPage());
|
||||||
|
assertTrue(page4AcknowledgedAndEquipment.getContext().isLastPage());
|
||||||
|
|
||||||
|
// testing Acknowledged filter with alarmCodes (alarm_by_acknowledged_alarmCode)
|
||||||
|
PaginationResponse<Alarm> page1AcknowledgedAndAlarmCode = testInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, -1, true, sortBy, context);
|
||||||
|
PaginationResponse<Alarm> page2AcknowledgedAndAlarmCode = testInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, -1, true, sortBy, page1AcknowledgedAndAlarmCode.getContext());
|
||||||
|
PaginationResponse<Alarm> page3AcknowledgedAndAlarmCode = testInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, -1, true, sortBy, page2AcknowledgedAndAlarmCode.getContext());
|
||||||
|
PaginationResponse<Alarm> page4AcknowledgedAndAlarmCode = testInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, -1, true, sortBy, page3AcknowledgedAndAlarmCode.getContext());
|
||||||
|
|
||||||
|
page1AcknowledgedAndAlarmCode.getItems().forEach(e -> assertEquals(true, e.isAcknowledged()) );
|
||||||
|
page2AcknowledgedAndAlarmCode.getItems().forEach(e -> assertEquals(true, e.isAcknowledged()) );
|
||||||
|
|
||||||
|
page1AcknowledgedAndAlarmCode.getItems().forEach(e -> assertEquals(AlarmCode.AccessPointIsUnreachable, e.getAlarmCode()));
|
||||||
|
page2AcknowledgedAndAlarmCode.getItems().forEach(e -> assertEquals(AlarmCode.AccessPointIsUnreachable, e.getAlarmCode()));
|
||||||
|
|
||||||
|
assertTrue(page3AcknowledgedAndAlarmCode.getContext().isLastPage());
|
||||||
|
assertTrue(page4AcknowledgedAndAlarmCode.getContext().isLastPage());
|
||||||
|
|
||||||
|
// testing Acknowledged filter with failure alarm code (no alarms initialized with failure code, should return empty page)
|
||||||
|
PaginationResponse<Alarm> page1AcknowledgedAndAlarmCodeFailure = testInterface.getForCustomer(customerId_1, equipmentIds, Collections.singleton(AlarmCode.AssocFailure), -1, true, sortBy, context);
|
||||||
|
|
||||||
|
assertTrue(page1AcknowledgedAndAlarmCodeFailure.getContext().isLastPage());
|
||||||
|
|
||||||
|
long checkTimestamp = pastTimestamp;
|
||||||
|
|
||||||
|
// testing Acknowledged filter with timestamp (alarm_by_acknowledged_timestamp)
|
||||||
|
PaginationResponse<Alarm> page1AcknowledgedAndTimestamp = testInterface.getForCustomer(customerId_1, null, null, pastTimestamp, true, sortBy, context);
|
||||||
|
PaginationResponse<Alarm> page2AcknowledgedAndTimestamp = testInterface.getForCustomer(customerId_1, null, null, pastTimestamp, true, sortBy, page1AcknowledgedAndTimestamp.getContext());
|
||||||
|
PaginationResponse<Alarm> page3AcknowledgedAndTimestamp = testInterface.getForCustomer(customerId_1, null, null, pastTimestamp, true, sortBy, page2AcknowledgedAndTimestamp.getContext());
|
||||||
|
PaginationResponse<Alarm> page4AcknowledgedAndTimestamp = testInterface.getForCustomer(customerId_1, null, null, pastTimestamp, true, sortBy, page3AcknowledgedAndTimestamp.getContext());
|
||||||
|
|
||||||
|
assertEquals(10, page1AcknowledgedAndTimestamp.getItems().size());
|
||||||
|
assertEquals(9, page2AcknowledgedAndTimestamp.getItems().size());
|
||||||
|
assertEquals(0, page3AcknowledgedAndTimestamp.getItems().size());
|
||||||
|
assertEquals(0, page4AcknowledgedAndTimestamp.getItems().size());
|
||||||
|
|
||||||
|
page1AcknowledgedAndTimestamp.getItems().forEach(e -> assertEquals(true, e.isAcknowledged()) );
|
||||||
|
page2AcknowledgedAndTimestamp.getItems().forEach(e -> assertEquals(true, e.isAcknowledged()) );
|
||||||
|
|
||||||
|
page1AcknowledgedAndTimestamp.getItems().forEach(e -> assertTrue(e.getCreatedTimestamp() > checkTimestamp));
|
||||||
|
page2AcknowledgedAndTimestamp.getItems().forEach(e -> assertTrue(e.getCreatedTimestamp() > checkTimestamp));
|
||||||
|
|
||||||
|
assertTrue(page3AcknowledgedAndTimestamp.getContext().isLastPage());
|
||||||
|
assertTrue(page4AcknowledgedAndTimestamp.getContext().isLastPage());
|
||||||
|
|
||||||
|
// testing Acknowledged with equipmentId and timestamp
|
||||||
|
// With timestamp, alarmCodes will be set to AlarmCode.validValues, so these calls will be equivalent to having all filters included.
|
||||||
|
// Because all filters are included, the alarm_by_acknowledged will be used instead of alarm_by_acknowledged_timestamp
|
||||||
|
PaginationResponse<Alarm> page1AcknowledgedEquipmentIdAndTimestamp = testInterface.getForCustomer(customerId_1, equipmentIds, null, pastTimestamp, true, sortBy, context);
|
||||||
|
PaginationResponse<Alarm> page2AcknowledgedEquipmentIdAndTimestamp = testInterface.getForCustomer(customerId_1, equipmentIds, null, pastTimestamp, true, sortBy, page1AcknowledgedEquipmentIdAndTimestamp.getContext());
|
||||||
|
PaginationResponse<Alarm> page3AcknowledgedEquipmentIdAndTimestamp = testInterface.getForCustomer(customerId_1, equipmentIds, null, pastTimestamp, true, sortBy, page2AcknowledgedEquipmentIdAndTimestamp.getContext());
|
||||||
|
|
||||||
|
assertEquals(10, page1AcknowledgedEquipmentIdAndTimestamp.getItems().size());
|
||||||
|
assertEquals(9, page2AcknowledgedEquipmentIdAndTimestamp.getItems().size());
|
||||||
|
assertEquals(0, page3AcknowledgedEquipmentIdAndTimestamp.getItems().size());
|
||||||
|
|
||||||
|
page1AcknowledgedEquipmentIdAndTimestamp.getItems().forEach(e -> assertEquals(true, e.isAcknowledged()) );
|
||||||
|
page2AcknowledgedEquipmentIdAndTimestamp.getItems().forEach(e -> assertEquals(true, e.isAcknowledged()) );
|
||||||
|
|
||||||
|
page1AcknowledgedEquipmentIdAndTimestamp.getItems().forEach(e -> assertTrue(equipmentIds.contains(e.getEquipmentId())));
|
||||||
|
page2AcknowledgedEquipmentIdAndTimestamp.getItems().forEach(e -> assertTrue(equipmentIds.contains(e.getEquipmentId())));
|
||||||
|
|
||||||
|
page1AcknowledgedEquipmentIdAndTimestamp.getItems().forEach(e -> assertTrue(e.getCreatedTimestamp() > checkTimestamp));
|
||||||
|
page2AcknowledgedEquipmentIdAndTimestamp.getItems().forEach(e -> assertTrue(e.getCreatedTimestamp() > checkTimestamp));
|
||||||
|
|
||||||
|
assertTrue(page3AcknowledgedEquipmentIdAndTimestamp.getContext().isLastPage());
|
||||||
|
|
||||||
//test first page of the results with empty sort order -> default sort order (by Id ascending)
|
//test first page of the results with empty sort order -> default sort order (by Id ascending)
|
||||||
PaginationResponse<Alarm> page1EmptySort = testInterface.getForCustomer(customerId_1, null, null, -1, Collections.emptyList(), context);
|
PaginationResponse<Alarm> page1EmptySort = testInterface.getForCustomer(customerId_1, null, null, -1, null, Collections.emptyList(), context);
|
||||||
assertEquals(10, page1EmptySort.getItems().size());
|
assertEquals(10, page1EmptySort.getItems().size());
|
||||||
|
|
||||||
List<String> expectedPage1EmptySortStrings = getAlarmPagination_expectedPage1EmptySortStrings();
|
List<String> expectedPage1EmptySortStrings = getAlarmPagination_expectedPage1EmptySortStrings();
|
||||||
@@ -297,7 +389,7 @@ public abstract class BaseAlarmDatastoreTest {
|
|||||||
assertEquals(expectedPage1EmptySortStrings, actualPage1EmptySortStrings);
|
assertEquals(expectedPage1EmptySortStrings, actualPage1EmptySortStrings);
|
||||||
|
|
||||||
//test first page of the results with null sort order -> default sort order (by Id ascending)
|
//test first page of the results with null sort order -> default sort order (by Id ascending)
|
||||||
PaginationResponse<Alarm> page1NullSort = testInterface.getForCustomer(customerId_1, null, null, -1, null, context);
|
PaginationResponse<Alarm> page1NullSort = testInterface.getForCustomer(customerId_1, null, null, -1, null, null, context);
|
||||||
assertEquals(10, page1NullSort.getItems().size());
|
assertEquals(10, page1NullSort.getItems().size());
|
||||||
|
|
||||||
List<String> expectedPage1NullSortStrings = expectedPage1EmptySortStrings;
|
List<String> expectedPage1NullSortStrings = expectedPage1EmptySortStrings;
|
||||||
@@ -308,7 +400,7 @@ public abstract class BaseAlarmDatastoreTest {
|
|||||||
|
|
||||||
|
|
||||||
//test first page of the results with sort descending order by a equipmentId property
|
//test first page of the results with sort descending order by a equipmentId property
|
||||||
PaginationResponse<Alarm> page1SingleSortDesc = testInterface.getForCustomer(customerId_1, null, null, -1, Collections.singletonList(new ColumnAndSort("equipmentId", SortOrder.desc)), context);
|
PaginationResponse<Alarm> page1SingleSortDesc = testInterface.getForCustomer(customerId_1, null, null, -1, null, Collections.singletonList(new ColumnAndSort("equipmentId", SortOrder.desc)), context);
|
||||||
assertEquals(10, page1SingleSortDesc.getItems().size());
|
assertEquals(10, page1SingleSortDesc.getItems().size());
|
||||||
|
|
||||||
List<String> expectedPage1SingleSortDescStrings = getAlarmPagination_expectedPage1SingleSortDescStrings();
|
List<String> expectedPage1SingleSortDescStrings = getAlarmPagination_expectedPage1SingleSortDescStrings();
|
||||||
@@ -320,13 +412,13 @@ public abstract class BaseAlarmDatastoreTest {
|
|||||||
//test with explicit list of equipmentIds and explicit list of AlarmCodes
|
//test with explicit list of equipmentIds and explicit list of AlarmCodes
|
||||||
long createdAfterTs = pastTimestamp + 10;
|
long createdAfterTs = pastTimestamp + 10;
|
||||||
context = new PaginationContext<>(10);
|
context = new PaginationContext<>(10);
|
||||||
page1 = testInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, sortBy, context);
|
page1 = testInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, null, sortBy, context);
|
||||||
page2 = testInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, sortBy, page1.getContext());
|
page2 = testInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, null, sortBy, page1.getContext());
|
||||||
page3 = testInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, sortBy, page2.getContext());
|
page3 = testInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, null, sortBy, page2.getContext());
|
||||||
page4 = testInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, sortBy, page3.getContext());
|
page4 = testInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, null, sortBy, page3.getContext());
|
||||||
page5 = testInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, sortBy, page4.getContext());
|
page5 = testInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, null, sortBy, page4.getContext());
|
||||||
page6 = testInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, sortBy, page5.getContext());
|
page6 = testInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, null, sortBy, page5.getContext());
|
||||||
page7 = testInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, sortBy, page6.getContext());
|
page7 = testInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, null, sortBy, page6.getContext());
|
||||||
|
|
||||||
//verify returned pages
|
//verify returned pages
|
||||||
assertEquals(10, page1.getItems().size());
|
assertEquals(10, page1.getItems().size());
|
||||||
@@ -344,17 +436,13 @@ public abstract class BaseAlarmDatastoreTest {
|
|||||||
|
|
||||||
//test with explicit list of equipmentIds of one element and explicit list of AlarmCodes of one element
|
//test with explicit list of equipmentIds of one element and explicit list of AlarmCodes of one element
|
||||||
context = new PaginationContext<>(10);
|
context = new PaginationContext<>(10);
|
||||||
page1 = testInterface.getForCustomer(customerId_1, Collections.singleton(equipmentIds.iterator().next()), Collections.singleton(AlarmCode.AccessPointIsUnreachable), -1, sortBy, context);
|
page1 = testInterface.getForCustomer(customerId_1, Collections.singleton(equipmentIds.iterator().next()), Collections.singleton(AlarmCode.AccessPointIsUnreachable), -1, null, sortBy, context);
|
||||||
assertEquals(1, page1.getItems().size());
|
assertEquals(1, page1.getItems().size());
|
||||||
|
|
||||||
testInterface.resetAlarmCounters();
|
|
||||||
|
|
||||||
//clean up after the test
|
//clean up after the test
|
||||||
equipmentIds.forEach(eqId -> testInterface.delete(customerId_1, eqId));
|
equipmentIds.forEach(eqId -> testInterface.delete(customerId_1, eqId));
|
||||||
equipmentIds_c2.forEach(eqId -> testInterface.delete(customerId_2, eqId));
|
equipmentIds_c2.forEach(eqId -> testInterface.delete(customerId_2, eqId));
|
||||||
|
|
||||||
testInterface.resetAlarmCounters();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected List<String> getAlarmPagination_expectedPage3Strings(){
|
protected List<String> getAlarmPagination_expectedPage3Strings(){
|
||||||
@@ -369,6 +457,54 @@ public abstract class BaseAlarmDatastoreTest {
|
|||||||
return Arrays.asList(new String[]{"qr_49", "qr_48", "qr_47", "qr_46", "qr_45", "qr_44", "qr_43", "qr_42", "qr_41", "qr_40" });
|
return Arrays.asList(new String[]{"qr_49", "qr_48", "qr_47", "qr_46", "qr_45", "qr_44", "qr_43", "qr_42", "qr_41", "qr_40" });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAlarmAcknowledgedPaginationWithUpdate() {
|
||||||
|
Alarm alarm = createAlarmObject();
|
||||||
|
|
||||||
|
//create
|
||||||
|
Alarm created = testInterface.create(alarm);
|
||||||
|
assertNotNull(created);
|
||||||
|
assertEquals(alarm.getCustomerId(), created.getCustomerId());
|
||||||
|
assertEquals(alarm.getEquipmentId(), created.getEquipmentId());
|
||||||
|
assertEquals(alarm.getAlarmCode(), created.getAlarmCode());
|
||||||
|
assertEquals(alarm.getCreatedTimestamp(), created.getCreatedTimestamp());
|
||||||
|
assertNotNull(created.getDetails());
|
||||||
|
assertEquals(alarm.getDetails(), created.getDetails());
|
||||||
|
|
||||||
|
List<ColumnAndSort> sortBy = new ArrayList<>();
|
||||||
|
sortBy.addAll(Arrays.asList(new ColumnAndSort("equipmentId")));
|
||||||
|
PaginationContext<Alarm> context = new PaginationContext<>(10);
|
||||||
|
|
||||||
|
PaginationResponse<Alarm> page1CheckFalse = testInterface.getForCustomer(created.getCustomerId(), null, null, -1, false, sortBy, context);
|
||||||
|
|
||||||
|
assertEquals(1, page1CheckFalse.getItems().size());
|
||||||
|
page1CheckFalse.getItems().forEach(e -> assertFalse(e.isAcknowledged()));
|
||||||
|
|
||||||
|
PaginationResponse<Alarm> page1CheckTrue = testInterface.getForCustomer(created.getCustomerId(), null, null, -1, true, sortBy, context);
|
||||||
|
|
||||||
|
assertEquals(0, page1CheckTrue.getItems().size());
|
||||||
|
|
||||||
|
// update
|
||||||
|
created.setAcknowledged(true);
|
||||||
|
Alarm updated = testInterface.update(created);
|
||||||
|
assertNotNull(updated);
|
||||||
|
assertTrue(updated.isAcknowledged());
|
||||||
|
|
||||||
|
page1CheckFalse = testInterface.getForCustomer(created.getCustomerId(), null, null, -1, false, sortBy, context);
|
||||||
|
|
||||||
|
assertEquals(0, page1CheckFalse.getItems().size());
|
||||||
|
|
||||||
|
page1CheckTrue = testInterface.getForCustomer(created.getCustomerId(), null, null, -1, true, sortBy, context);
|
||||||
|
|
||||||
|
assertEquals(1, page1CheckTrue.getItems().size());
|
||||||
|
page1CheckTrue.getItems().forEach(e -> assertTrue(e.isAcknowledged()));
|
||||||
|
|
||||||
|
//delete
|
||||||
|
created = testInterface.delete(created.getCustomerId(), created.getEquipmentId(), created.getAlarmCode(), created.getCreatedTimestamp());
|
||||||
|
assertNotNull(created);
|
||||||
|
created = testInterface.getOrNull(created.getCustomerId(), created.getEquipmentId(), created.getAlarmCode(), created.getCreatedTimestamp());
|
||||||
|
assertNull(created);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testAlarmCountsModel() {
|
public void testAlarmCountsModel() {
|
||||||
@@ -406,6 +542,7 @@ public abstract class BaseAlarmDatastoreTest {
|
|||||||
mdl.setScopeId("qr_"+apNameIdx);
|
mdl.setScopeId("qr_"+apNameIdx);
|
||||||
if((i%2) == 0) {
|
if((i%2) == 0) {
|
||||||
mdl.setAlarmCode(AlarmCode.CPUUtilization);
|
mdl.setAlarmCode(AlarmCode.CPUUtilization);
|
||||||
|
mdl.setAcknowledged(true);
|
||||||
equipmentIds_CPUUtilization.add(mdl.getEquipmentId());
|
equipmentIds_CPUUtilization.add(mdl.getEquipmentId());
|
||||||
} else {
|
} else {
|
||||||
equipmentIds_AccessPointIsUnreachable.add(mdl.getEquipmentId());
|
equipmentIds_AccessPointIsUnreachable.add(mdl.getEquipmentId());
|
||||||
@@ -417,21 +554,21 @@ public abstract class BaseAlarmDatastoreTest {
|
|||||||
testInterface.create(mdl);
|
testInterface.create(mdl);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
mdl = createAlarmObject();
|
||||||
mdl = createAlarmObject();
|
mdl.setCustomerId(customerId_1);
|
||||||
mdl.setCustomerId(customerId_1);
|
mdl.setEquipmentId(0);
|
||||||
mdl.setEquipmentId(0);
|
mdl.setAlarmCode(AlarmCode.GenericError);
|
||||||
mdl.setAlarmCode(AlarmCode.GenericError);
|
equipmentIds_c1.add(mdl.getEquipmentId());
|
||||||
equipmentIds_c1.add(mdl.getEquipmentId());
|
|
||||||
|
testInterface.create(mdl);
|
||||||
testInterface.create(mdl);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int i = 0; i< 50; i++){
|
for(int i = 0; i< 50; i++){
|
||||||
mdl = createAlarmObject();
|
mdl = createAlarmObject();
|
||||||
mdl.setCustomerId(customerId_2);
|
mdl.setCustomerId(customerId_2);
|
||||||
mdl.setScopeId("qr_"+apNameIdx);
|
mdl.setScopeId("qr_"+apNameIdx);
|
||||||
equipmentIds_c2.add(mdl.getEquipmentId());
|
equipmentIds_c2.add(mdl.getEquipmentId());
|
||||||
|
mdl.setAcknowledged(false);
|
||||||
|
mdl.setAlarmCode(AlarmCode.GenericError);
|
||||||
|
|
||||||
apNameIdx++;
|
apNameIdx++;
|
||||||
testInterface.create(mdl);
|
testInterface.create(mdl);
|
||||||
@@ -439,33 +576,71 @@ public abstract class BaseAlarmDatastoreTest {
|
|||||||
|
|
||||||
Set<AlarmCode> alarmCodes = new HashSet<>(Arrays.asList(AlarmCode.AccessPointIsUnreachable, AlarmCode.GenericError, AlarmCode.CPUUtilization));
|
Set<AlarmCode> alarmCodes = new HashSet<>(Arrays.asList(AlarmCode.AccessPointIsUnreachable, AlarmCode.GenericError, AlarmCode.CPUUtilization));
|
||||||
|
|
||||||
AlarmCounts alarmCounts = testInterface.getAlarmCounts(customerId_1, equipmentIds, alarmCodes);
|
AlarmCounts alarmCounts = testInterface.getAlarmCounts(customerId_1, equipmentIds, alarmCodes, null);
|
||||||
assertEquals(0, alarmCounts.getCounter(0, AlarmCode.GenericError));
|
assertEquals(0, alarmCounts.getCounter(0, AlarmCode.GenericError));
|
||||||
assertEquals(25, alarmCounts.getCounter(0, AlarmCode.CPUUtilization));
|
assertEquals(25, alarmCounts.getCounter(0, AlarmCode.CPUUtilization));
|
||||||
assertEquals(25, alarmCounts.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
assertEquals(25, alarmCounts.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
||||||
|
assertEquals(25, alarmCounts.getSeverityCounter(StatusCode.requiresAttention));
|
||||||
|
assertEquals(25, alarmCounts.getSeverityCounter(StatusCode.error));
|
||||||
|
|
||||||
equipmentIds_CPUUtilization.forEach(eqId -> assertEquals(1, alarmCounts.getCounter(eqId, AlarmCode.CPUUtilization)));
|
equipmentIds_CPUUtilization.forEach(eqId -> assertEquals(1, alarmCounts.getCounter(eqId, AlarmCode.CPUUtilization)));
|
||||||
equipmentIds_AccessPointIsUnreachable.forEach(eqId -> assertEquals(1, alarmCounts.getCounter(eqId, AlarmCode.AccessPointIsUnreachable)) );
|
equipmentIds_AccessPointIsUnreachable.forEach(eqId -> assertEquals(1, alarmCounts.getCounter(eqId, AlarmCode.AccessPointIsUnreachable)) );
|
||||||
|
|
||||||
AlarmCounts alarmCounts_noEq = testInterface.getAlarmCounts(customerId_1, null, alarmCodes);
|
AlarmCounts alarmCounts_noEq = testInterface.getAlarmCounts(customerId_1, null, alarmCodes, null);
|
||||||
assertEquals(1, alarmCounts_noEq.getCounter(0, AlarmCode.GenericError));
|
assertEquals(1, alarmCounts_noEq.getCounter(0, AlarmCode.GenericError));
|
||||||
assertEquals(25, alarmCounts_noEq.getCounter(0, AlarmCode.CPUUtilization));
|
assertEquals(25, alarmCounts_noEq.getCounter(0, AlarmCode.CPUUtilization));
|
||||||
assertEquals(25, alarmCounts_noEq.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
assertEquals(25, alarmCounts_noEq.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
||||||
|
assertEquals(25, alarmCounts_noEq.getSeverityCounter(StatusCode.requiresAttention));
|
||||||
|
assertEquals(26, alarmCounts_noEq.getSeverityCounter(StatusCode.error));
|
||||||
assertTrue(alarmCounts_noEq.getCountsPerEquipmentIdMap().isEmpty());
|
assertTrue(alarmCounts_noEq.getCountsPerEquipmentIdMap().isEmpty());
|
||||||
assertEquals(3, alarmCounts_noEq.getTotalCountsPerAlarmCodeMap().size());
|
assertEquals(3, alarmCounts_noEq.getTotalCountsPerAlarmCodeMap().size());
|
||||||
|
|
||||||
AlarmCounts alarmCounts_noEq_1code = testInterface.getAlarmCounts(customerId_1, null, Collections.singleton(AlarmCode.CPUUtilization));
|
AlarmCounts alarmCounts_noEq_1code = testInterface.getAlarmCounts(customerId_1, null, Collections.singleton(AlarmCode.CPUUtilization), null);
|
||||||
assertEquals(0, alarmCounts_noEq_1code.getCounter(0, AlarmCode.GenericError));
|
assertEquals(0, alarmCounts_noEq_1code.getCounter(0, AlarmCode.GenericError));
|
||||||
assertEquals(25, alarmCounts_noEq_1code.getCounter(0, AlarmCode.CPUUtilization));
|
assertEquals(25, alarmCounts_noEq_1code.getCounter(0, AlarmCode.CPUUtilization));
|
||||||
assertEquals(0, alarmCounts_noEq_1code.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
assertEquals(0, alarmCounts_noEq_1code.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
||||||
|
assertEquals(25, alarmCounts_noEq_1code.getSeverityCounter(StatusCode.requiresAttention));
|
||||||
|
assertEquals(0, alarmCounts_noEq_1code.getSeverityCounter(StatusCode.error));
|
||||||
assertTrue(alarmCounts_noEq_1code.getCountsPerEquipmentIdMap().isEmpty());
|
assertTrue(alarmCounts_noEq_1code.getCountsPerEquipmentIdMap().isEmpty());
|
||||||
assertEquals(1, alarmCounts_noEq_1code.getTotalCountsPerAlarmCodeMap().size());
|
assertEquals(1, alarmCounts_noEq_1code.getTotalCountsPerAlarmCodeMap().size());
|
||||||
|
|
||||||
AlarmCounts alarmCounts_1Eq_1code = testInterface.getAlarmCounts(customerId_1, Collections.singleton(equipmentIds.iterator().next()), Collections.singleton(AlarmCode.CPUUtilization));
|
AlarmCounts alarmCounts_acknowledgedT = testInterface.getAlarmCounts(customerId_1, null, Collections.singleton(AlarmCode.CPUUtilization), true);
|
||||||
|
assertTrue(alarmCounts_acknowledgedT.getAcknowledged());
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedT.getCounter(0, AlarmCode.GenericError));
|
||||||
|
assertEquals(25, alarmCounts_acknowledgedT.getCounter(0, AlarmCode.CPUUtilization));
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedT.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
||||||
|
assertEquals(25, alarmCounts_acknowledgedT.getSeverityCounter(StatusCode.requiresAttention));
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedT.getSeverityCounter(StatusCode.error));
|
||||||
|
assertTrue(alarmCounts_acknowledgedT.getCountsPerEquipmentIdMap().isEmpty());
|
||||||
|
assertEquals(1, alarmCounts_acknowledgedT.getTotalCountsPerAlarmCodeMap().size());
|
||||||
|
|
||||||
|
AlarmCounts alarmCounts_acknowledgedF = testInterface.getAlarmCounts(customerId_1, null, Collections.singleton(AlarmCode.CPUUtilization), false);
|
||||||
|
assertFalse(alarmCounts_acknowledgedF.getAcknowledged());
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedF.getCounter(0, AlarmCode.GenericError));
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedF.getCounter(0, AlarmCode.CPUUtilization));
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedF.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedF.getSeverityCounter(StatusCode.requiresAttention));
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedF.getSeverityCounter(StatusCode.error));
|
||||||
|
assertTrue(alarmCounts_acknowledgedF.getCountsPerEquipmentIdMap().isEmpty());
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedF.getTotalCountsPerAlarmCodeMap().size());
|
||||||
|
|
||||||
|
AlarmCounts alarmCounts_acknowledgedF2 = testInterface.getAlarmCounts(customerId_2, null, Collections.singleton(AlarmCode.GenericError), false);
|
||||||
|
assertFalse(alarmCounts_acknowledgedF2.getAcknowledged());
|
||||||
|
assertEquals(50, alarmCounts_acknowledgedF2.getCounter(0, AlarmCode.GenericError));
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedF2.getCounter(0, AlarmCode.CPUUtilization));
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedF2.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedF2.getSeverityCounter(StatusCode.requiresAttention));
|
||||||
|
assertEquals(50, alarmCounts_acknowledgedF2.getSeverityCounter(StatusCode.error));
|
||||||
|
assertTrue(alarmCounts_acknowledgedF2.getCountsPerEquipmentIdMap().isEmpty());
|
||||||
|
assertEquals(1, alarmCounts_acknowledgedF2.getTotalCountsPerAlarmCodeMap().size());
|
||||||
|
|
||||||
|
AlarmCounts alarmCounts_1Eq_1code = testInterface.getAlarmCounts(customerId_1, Collections.singleton(equipmentIds.iterator().next()), Collections.singleton(AlarmCode.CPUUtilization), null);
|
||||||
assertEquals(0, alarmCounts_1Eq_1code.getCounter(0, AlarmCode.GenericError));
|
assertEquals(0, alarmCounts_1Eq_1code.getCounter(0, AlarmCode.GenericError));
|
||||||
assertEquals(1, alarmCounts_1Eq_1code.getCounter(equipmentIds.iterator().next(), AlarmCode.CPUUtilization));
|
assertEquals(1, alarmCounts_1Eq_1code.getCounter(equipmentIds.iterator().next(), AlarmCode.CPUUtilization));
|
||||||
assertEquals(1, alarmCounts_1Eq_1code.getCounter(0, AlarmCode.CPUUtilization));
|
assertEquals(1, alarmCounts_1Eq_1code.getCounter(0, AlarmCode.CPUUtilization));
|
||||||
assertEquals(0, alarmCounts_1Eq_1code.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
assertEquals(0, alarmCounts_1Eq_1code.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
||||||
|
assertEquals(1, alarmCounts_1Eq_1code.getSeverityCounter(StatusCode.requiresAttention));
|
||||||
|
assertEquals(0, alarmCounts_1Eq_1code.getSeverityCounter(StatusCode.error));
|
||||||
assertEquals(1, alarmCounts_1Eq_1code.getCountsPerEquipmentIdMap().size());
|
assertEquals(1, alarmCounts_1Eq_1code.getCountsPerEquipmentIdMap().size());
|
||||||
assertEquals(1, alarmCounts_1Eq_1code.getTotalCountsPerAlarmCodeMap().size());
|
assertEquals(1, alarmCounts_1Eq_1code.getTotalCountsPerAlarmCodeMap().size());
|
||||||
|
|
||||||
@@ -475,10 +650,12 @@ public abstract class BaseAlarmDatastoreTest {
|
|||||||
for(int i=0; i< 4; i++) {
|
for(int i=0; i< 4; i++) {
|
||||||
smallEqIds.add(iter.next());
|
smallEqIds.add(iter.next());
|
||||||
}
|
}
|
||||||
AlarmCounts alarmCounts_small = testInterface.getAlarmCounts(customerId_1, smallEqIds, alarmCodes);
|
AlarmCounts alarmCounts_small = testInterface.getAlarmCounts(customerId_1, smallEqIds, alarmCodes, null);
|
||||||
assertEquals(0, alarmCounts_small.getCounter(0, AlarmCode.GenericError));
|
assertEquals(0, alarmCounts_small.getCounter(0, AlarmCode.GenericError));
|
||||||
assertEquals(2, alarmCounts_small.getCounter(0, AlarmCode.CPUUtilization));
|
assertEquals(2, alarmCounts_small.getCounter(0, AlarmCode.CPUUtilization));
|
||||||
assertEquals(2, alarmCounts_small.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
assertEquals(2, alarmCounts_small.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
||||||
|
assertEquals(2, alarmCounts_small.getSeverityCounter(StatusCode.requiresAttention));
|
||||||
|
assertEquals(2, alarmCounts_small.getSeverityCounter(StatusCode.error));
|
||||||
|
|
||||||
//clean up after the test
|
//clean up after the test
|
||||||
equipmentIds_c1.forEach(eqId -> testInterface.delete(customerId_1, eqId));
|
equipmentIds_c1.forEach(eqId -> testInterface.delete(customerId_1, eqId));
|
||||||
@@ -486,6 +663,38 @@ public abstract class BaseAlarmDatastoreTest {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAlarmCountsForSingleEquipment() {
|
||||||
|
//create some Alarms
|
||||||
|
Alarm mdl;
|
||||||
|
int customerId = (int) testSequence.incrementAndGet();
|
||||||
|
long equipmentId = testSequence.incrementAndGet();
|
||||||
|
|
||||||
|
|
||||||
|
mdl = createAlarmObject();
|
||||||
|
mdl.setCustomerId(customerId);
|
||||||
|
mdl.setEquipmentId(equipmentId);
|
||||||
|
mdl.setAlarmCode(AlarmCode.CPUUtilization);
|
||||||
|
testInterface.create(mdl);
|
||||||
|
|
||||||
|
mdl.setAlarmCode(AlarmCode.AccessPointIsUnreachable);
|
||||||
|
testInterface.create(mdl);
|
||||||
|
|
||||||
|
Set<AlarmCode> alarmCodes = new HashSet<>(Arrays.asList(AlarmCode.AccessPointIsUnreachable, AlarmCode.GenericError, AlarmCode.CPUUtilization));
|
||||||
|
|
||||||
|
AlarmCounts alarmCounts = testInterface.getAlarmCounts(customerId, Collections.singleton(equipmentId), alarmCodes, null);
|
||||||
|
assertEquals(0, alarmCounts.getCounter(0, AlarmCode.GenericError));
|
||||||
|
assertEquals(1, alarmCounts.getCounter(0, AlarmCode.CPUUtilization));
|
||||||
|
assertEquals(1, alarmCounts.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
||||||
|
assertEquals(2, alarmCounts.getCounter(equipmentId, null));
|
||||||
|
assertEquals(1, alarmCounts.getSeverityCounter(StatusCode.requiresAttention));
|
||||||
|
assertEquals(1, alarmCounts.getSeverityCounter(StatusCode.error));
|
||||||
|
|
||||||
|
//clean up after the test
|
||||||
|
testInterface.delete(customerId, equipmentId);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
protected Alarm createAlarmObject() {
|
protected Alarm createAlarmObject() {
|
||||||
Alarm result = new Alarm();
|
Alarm result = new Alarm();
|
||||||
@@ -493,6 +702,7 @@ public abstract class BaseAlarmDatastoreTest {
|
|||||||
result.setEquipmentId(testSequence.getAndIncrement());
|
result.setEquipmentId(testSequence.getAndIncrement());
|
||||||
result.setAlarmCode(AlarmCode.AccessPointIsUnreachable);
|
result.setAlarmCode(AlarmCode.AccessPointIsUnreachable);
|
||||||
result.setCreatedTimestamp(System.currentTimeMillis());
|
result.setCreatedTimestamp(System.currentTimeMillis());
|
||||||
|
result.setAcknowledged(false);
|
||||||
|
|
||||||
result.setScopeId("test-scope-" + result.getEquipmentId());
|
result.setScopeId("test-scope-" + result.getEquipmentId());
|
||||||
|
|
||||||
|
|||||||
1
alarm-datastore-inmemory/.gitignore
vendored
Normal file
1
alarm-datastore-inmemory/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -16,19 +15,19 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>base-datastore-inmemory</artifactId>
|
<artifactId>base-datastore-inmemory</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>alarm-datastore-interface</artifactId>
|
<artifactId>alarm-datastore-interface</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>alarm-datastore-common-test</artifactId>
|
<artifactId>alarm-datastore-common-test</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ public class AlarmDatastoreInMemory extends BaseInMemoryDatastore implements Ala
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PaginationResponse<Alarm> getForCustomer(int customerId, Set<Long> equipmentIdSet, Set<AlarmCode> alarmCodeSet,
|
public PaginationResponse<Alarm> getForCustomer(int customerId, Set<Long> equipmentIdSet, Set<AlarmCode> alarmCodeSet,
|
||||||
long createdAfterTimestamp, List<ColumnAndSort> sortBy, PaginationContext<Alarm> context) {
|
long createdAfterTimestamp, Boolean acknowledged, List<ColumnAndSort> sortBy, PaginationContext<Alarm> context) {
|
||||||
|
|
||||||
if(context == null) {
|
if(context == null) {
|
||||||
context = new PaginationContext<>();
|
context = new PaginationContext<>();
|
||||||
@@ -226,6 +226,7 @@ public class AlarmDatastoreInMemory extends BaseInMemoryDatastore implements Ala
|
|||||||
&& ( equipmentIdSet == null || equipmentIdSet.isEmpty() || equipmentIdSet.contains(a.getEquipmentId()) )
|
&& ( equipmentIdSet == null || equipmentIdSet.isEmpty() || equipmentIdSet.contains(a.getEquipmentId()) )
|
||||||
&& ( alarmCodeSet ==null || alarmCodeSet.isEmpty() || alarmCodeSet.contains(a.getAlarmCode()) )
|
&& ( alarmCodeSet ==null || alarmCodeSet.isEmpty() || alarmCodeSet.contains(a.getAlarmCode()) )
|
||||||
&& a.getCreatedTimestamp() > createdAfterTimestamp
|
&& a.getCreatedTimestamp() > createdAfterTimestamp
|
||||||
|
&& (acknowledged == null || a.isAcknowledged() == acknowledged.booleanValue())
|
||||||
) {
|
) {
|
||||||
items.add(a.clone());
|
items.add(a.clone());
|
||||||
}
|
}
|
||||||
@@ -321,22 +322,37 @@ public class AlarmDatastoreInMemory extends BaseInMemoryDatastore implements Ala
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AlarmCounts getAlarmCounts(int customerId, Set<Long> equipmentIdSet, Set<AlarmCode> alarmCodeSet) {
|
public AlarmCounts getAlarmCounts(int customerId, Set<Long> equipmentIdSet, Set<AlarmCode> alarmCodeSet, Boolean acknowledged) {
|
||||||
|
|
||||||
AlarmCounts alarmCounts = new AlarmCounts();
|
AlarmCounts alarmCounts = new AlarmCounts();
|
||||||
alarmCounts.setCustomerId(customerId);
|
alarmCounts.setCustomerId(customerId);
|
||||||
|
alarmCounts.setAcknowledged(acknowledged);
|
||||||
|
|
||||||
idToAlarmMap.values().forEach(a -> {
|
if (acknowledged == null) {
|
||||||
if(a.getCustomerId() == customerId) {
|
idToAlarmMap.values().forEach(a -> {
|
||||||
if( alarmCodeSet ==null || alarmCodeSet.isEmpty() || alarmCodeSet.contains(a.getAlarmCode()) ) {
|
if(a.getCustomerId() == customerId) {
|
||||||
if( equipmentIdSet != null && !equipmentIdSet.isEmpty() && equipmentIdSet.contains(a.getEquipmentId()) ) {
|
if( alarmCodeSet ==null || alarmCodeSet.isEmpty() || alarmCodeSet.contains(a.getAlarmCode()) ) {
|
||||||
alarmCounts.addToCounter(a.getEquipmentId(), a.getAlarmCode(), 1);
|
if( equipmentIdSet != null && !equipmentIdSet.isEmpty() && equipmentIdSet.contains(a.getEquipmentId()) ) {
|
||||||
} else if( equipmentIdSet == null || equipmentIdSet.isEmpty()) {
|
alarmCounts.addToCounter(a.getEquipmentId(), a.getAlarmCode(), 1);
|
||||||
alarmCounts.addToCounter(0, a.getAlarmCode(), 1);
|
} else if (equipmentIdSet == null || equipmentIdSet.isEmpty()) {
|
||||||
}
|
alarmCounts.addToCounter(0, a.getAlarmCode(), 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
idToAlarmMap.values().forEach(a -> {
|
||||||
|
if(a.getCustomerId() == customerId && acknowledged.equals(a.isAcknowledged())) {
|
||||||
|
if( alarmCodeSet ==null || alarmCodeSet.isEmpty() || alarmCodeSet.contains(a.getAlarmCode()) ) {
|
||||||
|
if( equipmentIdSet != null && !equipmentIdSet.isEmpty() && equipmentIdSet.contains(a.getEquipmentId()) ) {
|
||||||
|
alarmCounts.addToCounter(a.getEquipmentId(), a.getAlarmCode(), 1);
|
||||||
|
} else if (equipmentIdSet == null || equipmentIdSet.isEmpty()) {
|
||||||
|
alarmCounts.addToCounter(0, a.getAlarmCode(), 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return alarmCounts;
|
return alarmCounts;
|
||||||
}
|
}
|
||||||
|
|||||||
1
alarm-datastore-interface/.gitignore
vendored
Normal file
1
alarm-datastore-interface/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -16,12 +15,12 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>alarm-models</artifactId>
|
<artifactId>alarm-models</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>base-exceptions</artifactId>
|
<artifactId>base-exceptions</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|||||||
@@ -60,22 +60,15 @@ public interface AlarmDatastore {
|
|||||||
* @param createdAfterTimestamp
|
* @param createdAfterTimestamp
|
||||||
* @return next page of matching Alarm objects.
|
* @return next page of matching Alarm objects.
|
||||||
*/
|
*/
|
||||||
PaginationResponse<Alarm> getForCustomer(int customerId, Set<Long> equipmentIdSet, Set<AlarmCode> alarmCodeSet, long createdAfterTimestamp, List<ColumnAndSort> sortBy, PaginationContext<Alarm> context);
|
PaginationResponse<Alarm> getForCustomer(int customerId, Set<Long> equipmentIdSet, Set<AlarmCode> alarmCodeSet, long createdAfterTimestamp, Boolean acknowledged, List<ColumnAndSort> sortBy, PaginationContext<Alarm> context);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param customerId
|
* @param customerId
|
||||||
* @param equipmentIdSet - if empty, then only total counts of all alarms for customer per alarm code will be counted
|
* @param equipmentIdSet - if empty, then only total counts of all alarms for customer per alarm code will be counted
|
||||||
* @param alarmCodeSet - can be empty, in which case all alarm codes will be counted
|
* @param alarmCodeSet - can be empty, in which case all alarm codes will be counted
|
||||||
|
* @param acknowledged - can by empty, in which case acknowledged will be ignored
|
||||||
* @return alarm counts for the given filters
|
* @return alarm counts for the given filters
|
||||||
*/
|
*/
|
||||||
AlarmCounts getAlarmCounts(int customerId, Set<Long> equipmentIdSet, Set<AlarmCode> alarmCodeSet);
|
AlarmCounts getAlarmCounts(int customerId, Set<Long> equipmentIdSet, Set<AlarmCode> alarmCodeSet, Boolean acknowledged);
|
||||||
|
|
||||||
/**
|
|
||||||
* In some datastores (i.e. Cassandra) it makes sense to store counts of alarms in a separate table for fast retrieval by UI.
|
|
||||||
* Unfortunately, there are some situations where those counters get out of sync with the real alarm counts.
|
|
||||||
* This method is here to re-calculate the counter values and bring them in-sync with the real alarms.
|
|
||||||
*/
|
|
||||||
default void resetAlarmCounters() {
|
|
||||||
//only Cassandra datastore needs to implement this
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
<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">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
<parent>
|
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>alarm-datastore-rdbms</artifactId>
|
|
||||||
<name>alarm-datastore-rdbms</name>
|
|
||||||
<description>SQL implementation of the data store</description>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
|
||||||
<artifactId>base-jdbc</artifactId>
|
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
|
||||||
<artifactId>alarm-datastore-interface</artifactId>
|
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
|
||||||
<artifactId>base-jdbc-tests</artifactId>
|
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
|
||||||
<artifactId>alarm-datastore-common-test</artifactId>
|
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</project>
|
|
||||||
@@ -1,646 +0,0 @@
|
|||||||
package com.telecominfraproject.wlan.alarm.datastore.rdbms;
|
|
||||||
|
|
||||||
import java.sql.Connection;
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.dao.DuplicateKeyException;
|
|
||||||
import org.springframework.dao.EmptyResultDataAccessException;
|
|
||||||
import org.springframework.jdbc.core.PreparedStatementCreator;
|
|
||||||
import org.springframework.jdbc.core.RowCallbackHandler;
|
|
||||||
import org.springframework.jdbc.core.RowMapper;
|
|
||||||
import org.springframework.stereotype.Repository;
|
|
||||||
import org.springframework.transaction.annotation.Propagation;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
|
|
||||||
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.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.core.server.jdbc.BaseJdbcDao;
|
|
||||||
import com.telecominfraproject.wlan.datastore.exceptions.DsConcurrentModificationException;
|
|
||||||
import com.telecominfraproject.wlan.datastore.exceptions.DsDuplicateEntityException;
|
|
||||||
import com.telecominfraproject.wlan.datastore.exceptions.DsEntityNotFoundException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author dtoptygin
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@Repository
|
|
||||||
@Transactional(propagation = Propagation.MANDATORY)
|
|
||||||
public class AlarmDAO extends BaseJdbcDao {
|
|
||||||
|
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(AlarmDatastoreRdbms.class);
|
|
||||||
|
|
||||||
private static final String[] GENERATED_KEY_COLS = { };
|
|
||||||
|
|
||||||
private static final String[] ALL_COLUMNS_LIST = {
|
|
||||||
|
|
||||||
//TODO: add colums from properties Alarm in here
|
|
||||||
"customerId",
|
|
||||||
"equipmentId",
|
|
||||||
"alarmCode",
|
|
||||||
"createdTimestamp",
|
|
||||||
"originatorType",
|
|
||||||
"severity",
|
|
||||||
"scopeType",
|
|
||||||
"scopeId",
|
|
||||||
"details",
|
|
||||||
"acknowledged",
|
|
||||||
//make sure the order of properties matches this list and list in AlarmRowMapper and list in create/update methods
|
|
||||||
|
|
||||||
"lastModifiedTimestamp"
|
|
||||||
};
|
|
||||||
|
|
||||||
private static final Set<String> columnsToSkipForInsert = new HashSet<>(Arrays.asList());
|
|
||||||
private static final Set<String> columnsToSkipForUpdate = new HashSet<>(Arrays.asList(
|
|
||||||
"customerId",
|
|
||||||
"equipmentId",
|
|
||||||
"alarmCode",
|
|
||||||
"createdTimestamp"));
|
|
||||||
|
|
||||||
private static final String TABLE_NAME = "alarm";
|
|
||||||
private static final String TABLE_PREFIX = "s.";
|
|
||||||
private static final String ALL_COLUMNS;
|
|
||||||
|
|
||||||
private static final Set<String> ALL_COLUMNS_LOWERCASE = new HashSet<>();
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
//use this for queries where multiple tables are involved
|
|
||||||
private static final String ALL_COLUMNS_WITH_PREFIX;
|
|
||||||
|
|
||||||
private static final String ALL_COLUMNS_FOR_INSERT;
|
|
||||||
private static final String BIND_VARS_FOR_INSERT;
|
|
||||||
private static final String ALL_COLUMNS_UPDATE;
|
|
||||||
|
|
||||||
static{
|
|
||||||
StringBuilder strbAllColumns = new StringBuilder(1024);
|
|
||||||
StringBuilder strbAllColumnsWithPrefix = new StringBuilder(1024);
|
|
||||||
StringBuilder strbAllColumnsForInsert = new StringBuilder(1024);
|
|
||||||
StringBuilder strbBindVarsForInsert = new StringBuilder(128);
|
|
||||||
StringBuilder strbColumnsForUpdate = new StringBuilder(512);
|
|
||||||
for(String colName: ALL_COLUMNS_LIST){
|
|
||||||
|
|
||||||
ALL_COLUMNS_LOWERCASE.add(colName.toLowerCase());
|
|
||||||
|
|
||||||
strbAllColumns.append(colName).append(",");
|
|
||||||
strbAllColumnsWithPrefix.append(TABLE_PREFIX).append(colName).append(",");
|
|
||||||
|
|
||||||
if(!columnsToSkipForInsert.contains(colName)){
|
|
||||||
strbAllColumnsForInsert.append(colName).append(",");
|
|
||||||
strbBindVarsForInsert.append("?,");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!columnsToSkipForUpdate.contains(colName)){
|
|
||||||
strbColumnsForUpdate.append(colName).append("=?,");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// remove trailing ','
|
|
||||||
strbAllColumns.deleteCharAt(strbAllColumns.length() - 1);
|
|
||||||
strbAllColumnsWithPrefix.deleteCharAt(strbAllColumnsWithPrefix.length() - 1);
|
|
||||||
strbAllColumnsForInsert.deleteCharAt(strbAllColumnsForInsert.length() - 1);
|
|
||||||
strbBindVarsForInsert.deleteCharAt(strbBindVarsForInsert.length() - 1);
|
|
||||||
strbColumnsForUpdate.deleteCharAt(strbColumnsForUpdate.length() - 1);
|
|
||||||
|
|
||||||
ALL_COLUMNS = strbAllColumns.toString();
|
|
||||||
ALL_COLUMNS_WITH_PREFIX = strbAllColumnsWithPrefix.toString();
|
|
||||||
ALL_COLUMNS_FOR_INSERT = strbAllColumnsForInsert.toString();
|
|
||||||
BIND_VARS_FOR_INSERT = strbBindVarsForInsert.toString();
|
|
||||||
ALL_COLUMNS_UPDATE = strbColumnsForUpdate.toString();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private static final String SQL_GET_BY_ID =
|
|
||||||
"select " + ALL_COLUMNS +
|
|
||||||
" from "+TABLE_NAME+" " +
|
|
||||||
" where customerId = ? and equipmentId = ? and alarmCode = ? and createdTimestamp = ?";
|
|
||||||
|
|
||||||
private static final String SQL_GET_BY_CUSTOMER_ID =
|
|
||||||
"select " + ALL_COLUMNS +
|
|
||||||
" from " + TABLE_NAME + " " +
|
|
||||||
" where customerId = ? ";
|
|
||||||
|
|
||||||
private static final String SQL_GET_LASTMOD_BY_ID =
|
|
||||||
"select lastModifiedTimestamp " +
|
|
||||||
" from "+TABLE_NAME+" " +
|
|
||||||
" where customerId = ? and equipmentId = ? and alarmCode = ? and createdTimestamp = ?";
|
|
||||||
|
|
||||||
private static final String SQL_INSERT =
|
|
||||||
"insert into "+TABLE_NAME+" ( "
|
|
||||||
+ ALL_COLUMNS_FOR_INSERT
|
|
||||||
+ " ) values ( "+BIND_VARS_FOR_INSERT+" ) ";
|
|
||||||
|
|
||||||
private static final String SQL_DELETE =
|
|
||||||
"delete from "+TABLE_NAME+
|
|
||||||
" where customerId = ? and equipmentId = ? and alarmCode = ? and createdTimestamp = ?";
|
|
||||||
|
|
||||||
private static final String SQL_DELETE_BY_EQUIPMENT =
|
|
||||||
"delete from "+TABLE_NAME+
|
|
||||||
" where customerId = ? and equipmentId = ? ";
|
|
||||||
|
|
||||||
private static final String SQL_UPDATE =
|
|
||||||
"update "+TABLE_NAME+" set "
|
|
||||||
+ ALL_COLUMNS_UPDATE +
|
|
||||||
" where customerId = ? and equipmentId = ? and alarmCode = ? and createdTimestamp = ?"
|
|
||||||
+ " and ( lastModifiedTimestamp = ? or ? = true) " //last parameter will allow us to skip check for concurrent modification, if necessary
|
|
||||||
;
|
|
||||||
|
|
||||||
private static final String SQL_PAGING_SUFFIX = " LIMIT ? OFFSET ? ";
|
|
||||||
private static final String SORT_SUFFIX = "";
|
|
||||||
|
|
||||||
private static final String SQL_COUNTS_BY_EQUIPMENT_AND_ALARM_CODE_HEADER = "select equipmentId, alarmCode, count(1) from alarm where customerId = ? ";
|
|
||||||
private static final String SQL_COUNTS_BY_EQUIPMENT_AND_ALARM_CODE_FOOTER = " group by equipmentId, alarmCode";
|
|
||||||
|
|
||||||
private static final String SQL_COUNTS_BY_ALARM_CODE_HEADER = "select alarmCode, count(1) from alarm where customerId = ? ";
|
|
||||||
private static final String SQL_COUNTS_BY_ALARM_CODE_FOOTER = " group by alarmCode";
|
|
||||||
|
|
||||||
private static final RowMapper<Alarm> alarmRowMapper = new AlarmRowMapper();
|
|
||||||
|
|
||||||
|
|
||||||
@Autowired(required=false)
|
|
||||||
public void setDataSource(AlarmDataSourceInterface dataSource) {
|
|
||||||
setDataSource((DataSource)dataSource);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public Alarm create(final Alarm alarm) {
|
|
||||||
|
|
||||||
final long ts = System.currentTimeMillis();
|
|
||||||
if(alarm.getCreatedTimestamp()<=0) {
|
|
||||||
alarm.setCreatedTimestamp(ts);
|
|
||||||
}
|
|
||||||
|
|
||||||
alarm.setLastModifiedTimestamp(ts);
|
|
||||||
|
|
||||||
try{
|
|
||||||
jdbcTemplate.update(
|
|
||||||
new PreparedStatementCreator() {
|
|
||||||
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
|
|
||||||
PreparedStatement ps = connection.prepareStatement(SQL_INSERT );
|
|
||||||
int colIdx = 1;
|
|
||||||
|
|
||||||
//TODO: add remaining properties from Alarm here
|
|
||||||
ps.setInt(colIdx++, alarm.getCustomerId());
|
|
||||||
ps.setLong(colIdx++, alarm.getEquipmentId());
|
|
||||||
ps.setInt(colIdx++, alarm.getAlarmCode().getId());
|
|
||||||
ps.setLong(colIdx++, alarm.getCreatedTimestamp());
|
|
||||||
|
|
||||||
ps.setInt(colIdx++, alarm.getOriginatorType().getId());
|
|
||||||
ps.setInt(colIdx++, alarm.getSeverity().getId());
|
|
||||||
ps.setInt(colIdx++, alarm.getScopeType().getId());
|
|
||||||
ps.setString(colIdx++, alarm.getScopeId());
|
|
||||||
|
|
||||||
ps.setBytes(colIdx++, (alarm.getDetails()!=null)?alarm.getDetails().toZippedBytes():null);
|
|
||||||
|
|
||||||
ps.setBoolean(colIdx++, alarm.isAcknowledged());
|
|
||||||
ps.setLong(colIdx++, alarm.getLastModifiedTimestamp());
|
|
||||||
|
|
||||||
return ps;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}catch (DuplicateKeyException e) {
|
|
||||||
throw new DsDuplicateEntityException(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG.debug("Stored Alarm {}", alarm);
|
|
||||||
|
|
||||||
return alarm.clone();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Alarm get(int customerId, long equipmentId, AlarmCode alarmCode, long createdTimestamp) {
|
|
||||||
LOG.debug("Looking up Alarm for id {} {} {} {}", customerId, equipmentId, alarmCode, createdTimestamp);
|
|
||||||
|
|
||||||
try {
|
|
||||||
Alarm alarm = this.jdbcTemplate.queryForObject(
|
|
||||||
SQL_GET_BY_ID,
|
|
||||||
alarmRowMapper, customerId, equipmentId, alarmCode.getId(), createdTimestamp);
|
|
||||||
|
|
||||||
LOG.debug("Found Alarm {}", alarm);
|
|
||||||
|
|
||||||
return alarm;
|
|
||||||
}catch (EmptyResultDataAccessException e) {
|
|
||||||
throw new DsEntityNotFoundException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Transactional(noRollbackFor = { EmptyResultDataAccessException.class })
|
|
||||||
public Alarm getOrNull(int customerId, long equipmentId, AlarmCode alarmCode, long createdTimestamp) {
|
|
||||||
LOG.debug("Looking up Alarm for id {} {} {} {}", customerId, equipmentId, alarmCode, createdTimestamp);
|
|
||||||
|
|
||||||
try{
|
|
||||||
Alarm alarm = this.jdbcTemplate.queryForObject(
|
|
||||||
SQL_GET_BY_ID,
|
|
||||||
alarmRowMapper, customerId, equipmentId, alarmCode.getId(), createdTimestamp);
|
|
||||||
|
|
||||||
LOG.debug("Found Alarm {}", alarm);
|
|
||||||
|
|
||||||
return alarm;
|
|
||||||
}catch (EmptyResultDataAccessException e) {
|
|
||||||
LOG.debug("Could not find Alarm for id {} {} {} {}", customerId, equipmentId, alarmCode, createdTimestamp);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Alarm update(Alarm alarm) {
|
|
||||||
|
|
||||||
long newLastModifiedTs = System.currentTimeMillis();
|
|
||||||
long incomingLastModifiedTs = alarm.getLastModifiedTimestamp();
|
|
||||||
|
|
||||||
int updateCount = this.jdbcTemplate.update(SQL_UPDATE, new Object[]{
|
|
||||||
|
|
||||||
//TODO: add remaining properties from Alarm here
|
|
||||||
alarm.getOriginatorType().getId(),
|
|
||||||
alarm.getSeverity().getId(),
|
|
||||||
alarm.getScopeType().getId(),
|
|
||||||
alarm.getScopeId(),
|
|
||||||
(alarm.getDetails()!=null)?alarm.getDetails().toZippedBytes():null ,
|
|
||||||
alarm.isAcknowledged(),
|
|
||||||
|
|
||||||
newLastModifiedTs,
|
|
||||||
|
|
||||||
// use id for update operation
|
|
||||||
alarm.getCustomerId(),
|
|
||||||
alarm.getEquipmentId(),
|
|
||||||
alarm.getAlarmCode().getId(),
|
|
||||||
alarm.getCreatedTimestamp(),
|
|
||||||
// use lastModifiedTimestamp for data protection against concurrent modifications
|
|
||||||
incomingLastModifiedTs,
|
|
||||||
isSkipCheckForConcurrentUpdates()
|
|
||||||
});
|
|
||||||
|
|
||||||
if(updateCount==0){
|
|
||||||
|
|
||||||
try{
|
|
||||||
|
|
||||||
if(isSkipCheckForConcurrentUpdates()){
|
|
||||||
//in this case we did not request protection against concurrent updates,
|
|
||||||
//so the updateCount is 0 because record in db was not found
|
|
||||||
throw new EmptyResultDataAccessException(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
//find out if record could not be updated because it does not exist or because it was modified concurrently
|
|
||||||
long recordTimestamp = this.jdbcTemplate.queryForObject(
|
|
||||||
SQL_GET_LASTMOD_BY_ID,
|
|
||||||
Long.class,
|
|
||||||
alarm.getCustomerId(),
|
|
||||||
alarm.getEquipmentId(),
|
|
||||||
alarm.getAlarmCode().getId(),
|
|
||||||
alarm.getCreatedTimestamp()
|
|
||||||
);
|
|
||||||
|
|
||||||
LOG.debug("Concurrent modification detected for Alarm with id {} {} {} {} expected version is {} but version in db was {}",
|
|
||||||
alarm.getCustomerId(),
|
|
||||||
alarm.getEquipmentId(),
|
|
||||||
alarm.getAlarmCode().getId(),
|
|
||||||
alarm.getCreatedTimestamp(),
|
|
||||||
incomingLastModifiedTs,
|
|
||||||
recordTimestamp
|
|
||||||
);
|
|
||||||
throw new DsConcurrentModificationException("Concurrent modification detected for Alarm with id " +
|
|
||||||
alarm.getCustomerId() + " " +
|
|
||||||
alarm.getEquipmentId() + " " +
|
|
||||||
alarm.getAlarmCode().getId() + " " +
|
|
||||||
alarm.getCreatedTimestamp() + " "
|
|
||||||
+" expected version is " + incomingLastModifiedTs
|
|
||||||
+" but version in db was " + recordTimestamp
|
|
||||||
);
|
|
||||||
|
|
||||||
}catch (EmptyResultDataAccessException e) {
|
|
||||||
LOG.debug("Cannot find Alarm for {} {} {} {} ", alarm.getCustomerId(),
|
|
||||||
alarm.getEquipmentId(),
|
|
||||||
alarm.getAlarmCode().getId(),
|
|
||||||
alarm.getCreatedTimestamp());
|
|
||||||
throw new DsEntityNotFoundException("Alarm not found " +
|
|
||||||
alarm.getCustomerId() + " " +
|
|
||||||
alarm.getEquipmentId() + " " +
|
|
||||||
alarm.getAlarmCode().getId() + " " +
|
|
||||||
alarm.getCreatedTimestamp());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//make a copy so that we don't accidentally update caller's version by reference
|
|
||||||
Alarm alarmCopy = alarm.clone();
|
|
||||||
alarmCopy.setLastModifiedTimestamp(newLastModifiedTs);
|
|
||||||
|
|
||||||
LOG.debug("Updated Alarm {}", alarmCopy);
|
|
||||||
|
|
||||||
return alarmCopy;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public Alarm delete(int customerId, long equipmentId, AlarmCode alarmCode, long createdTimestamp) {
|
|
||||||
Alarm ret = get(customerId, equipmentId, alarmCode, createdTimestamp);
|
|
||||||
|
|
||||||
this.jdbcTemplate.update(SQL_DELETE, customerId, equipmentId, alarmCode.getId(), createdTimestamp);
|
|
||||||
|
|
||||||
LOG.debug("Deleted Alarm {}", ret);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Alarm> delete(int customerId, long equipmentId) {
|
|
||||||
List<Alarm> ret = get(customerId, Collections.singleton(equipmentId), null, -1);
|
|
||||||
|
|
||||||
this.jdbcTemplate.update(SQL_DELETE_BY_EQUIPMENT, customerId, equipmentId);
|
|
||||||
|
|
||||||
LOG.debug("Deleted Alarms {}", ret);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Alarm> get(int customerId, Set<Long> equipmentIds, Set<AlarmCode> alarmCodes,
|
|
||||||
long createdAfterTimestamp) {
|
|
||||||
|
|
||||||
if(equipmentIds == null || equipmentIds.isEmpty()) {
|
|
||||||
throw new IllegalArgumentException("equipmentIds must be provided");
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG.debug("Looking up Alarms for customer {} equipment {} codes {} createdAfter {}",
|
|
||||||
customerId, equipmentIds, alarmCodes, createdAfterTimestamp);
|
|
||||||
|
|
||||||
String query = SQL_GET_BY_CUSTOMER_ID;
|
|
||||||
|
|
||||||
// add filters for the query
|
|
||||||
ArrayList<Object> queryArgs = new ArrayList<>();
|
|
||||||
queryArgs.add(customerId);
|
|
||||||
|
|
||||||
//add equipmentId filters
|
|
||||||
if (equipmentIds != null && !equipmentIds.isEmpty()) {
|
|
||||||
queryArgs.addAll(equipmentIds);
|
|
||||||
|
|
||||||
StringBuilder strb = new StringBuilder(100);
|
|
||||||
strb.append("and equipmentId in (");
|
|
||||||
for (int i = 0; i < equipmentIds.size(); i++) {
|
|
||||||
strb.append("?");
|
|
||||||
if (i < equipmentIds.size() - 1) {
|
|
||||||
strb.append(",");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
strb.append(") ");
|
|
||||||
|
|
||||||
query += strb.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
//add alarmCodes filters
|
|
||||||
if (alarmCodes != null && !alarmCodes.isEmpty()) {
|
|
||||||
alarmCodes.forEach(ac -> queryArgs.add(ac.getId()));
|
|
||||||
|
|
||||||
StringBuilder strb = new StringBuilder(100);
|
|
||||||
strb.append("and alarmCode in (");
|
|
||||||
for (int i = 0; i < alarmCodes.size(); i++) {
|
|
||||||
strb.append("?");
|
|
||||||
if (i < alarmCodes.size() - 1) {
|
|
||||||
strb.append(",");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
strb.append(") ");
|
|
||||||
|
|
||||||
query += strb.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(createdAfterTimestamp > 0) {
|
|
||||||
query += " and createdTimestamp > ?" ;
|
|
||||||
queryArgs.add(createdAfterTimestamp);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Alarm> ret = this.jdbcTemplate.query(query, queryArgs.toArray(),
|
|
||||||
alarmRowMapper);
|
|
||||||
|
|
||||||
LOG.debug("Found {} Alarms for customer {} equipment {} codes {} createdAfter {}",
|
|
||||||
ret.size(),
|
|
||||||
customerId, equipmentIds, alarmCodes, createdAfterTimestamp);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Alarm> getAllForCustomer(int customerId) {
|
|
||||||
LOG.debug("Looking up Alarms for customer {}", customerId);
|
|
||||||
|
|
||||||
List<Alarm> ret = this.jdbcTemplate.query(SQL_GET_BY_CUSTOMER_ID,
|
|
||||||
alarmRowMapper, customerId);
|
|
||||||
|
|
||||||
LOG.debug("Found Alarms for customer {} : {}", customerId, ret);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public PaginationResponse<Alarm> getForCustomer(int customerId,
|
|
||||||
Set<Long> equipmentIds, Set<AlarmCode> alarmCodes, long createdAfterTimestamp,
|
|
||||||
List<ColumnAndSort> sortBy, PaginationContext<Alarm> context) {
|
|
||||||
|
|
||||||
PaginationResponse<Alarm> ret = new PaginationResponse<>();
|
|
||||||
ret.setContext(context.clone());
|
|
||||||
|
|
||||||
if (ret.getContext().isLastPage()) {
|
|
||||||
// no more pages available according to the context
|
|
||||||
LOG.debug(
|
|
||||||
"No more pages available when looking up Alarms for customer {} with last returned page number {}",
|
|
||||||
customerId, context.getLastReturnedPageNumber());
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG.debug("Looking up Alarms for customer {} with last returned page number {}",
|
|
||||||
customerId, context.getLastReturnedPageNumber());
|
|
||||||
|
|
||||||
String query = SQL_GET_BY_CUSTOMER_ID;
|
|
||||||
|
|
||||||
// add filters for the query
|
|
||||||
ArrayList<Object> queryArgs = new ArrayList<>();
|
|
||||||
queryArgs.add(customerId);
|
|
||||||
|
|
||||||
//add equipmentId filters
|
|
||||||
if (equipmentIds != null && !equipmentIds.isEmpty()) {
|
|
||||||
queryArgs.addAll(equipmentIds);
|
|
||||||
|
|
||||||
StringBuilder strb = new StringBuilder(100);
|
|
||||||
strb.append("and equipmentId in (");
|
|
||||||
for (int i = 0; i < equipmentIds.size(); i++) {
|
|
||||||
strb.append("?");
|
|
||||||
if (i < equipmentIds.size() - 1) {
|
|
||||||
strb.append(",");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
strb.append(") ");
|
|
||||||
|
|
||||||
query += strb.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
//add alarmCodes filters
|
|
||||||
if (alarmCodes != null && !alarmCodes.isEmpty()) {
|
|
||||||
alarmCodes.forEach(ac -> queryArgs.add(ac.getId()));
|
|
||||||
|
|
||||||
StringBuilder strb = new StringBuilder(100);
|
|
||||||
strb.append("and alarmCode in (");
|
|
||||||
for (int i = 0; i < alarmCodes.size(); i++) {
|
|
||||||
strb.append("?");
|
|
||||||
if (i < alarmCodes.size() - 1) {
|
|
||||||
strb.append(",");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
strb.append(") ");
|
|
||||||
|
|
||||||
query += strb.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(createdAfterTimestamp > 0) {
|
|
||||||
query += " and createdTimestamp > ?" ;
|
|
||||||
queryArgs.add(createdAfterTimestamp);
|
|
||||||
}
|
|
||||||
|
|
||||||
// add sorting options for the query
|
|
||||||
StringBuilder strbSort = new StringBuilder(100);
|
|
||||||
strbSort.append(" order by ");
|
|
||||||
|
|
||||||
if (sortBy != null && !sortBy.isEmpty()) {
|
|
||||||
|
|
||||||
// use supplied sorting options
|
|
||||||
for (ColumnAndSort column : sortBy) {
|
|
||||||
if (!ALL_COLUMNS_LOWERCASE.contains(column.getColumnName().toLowerCase())) {
|
|
||||||
// unknown column, skip it
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
strbSort.append(column.getColumnName());
|
|
||||||
|
|
||||||
if (column.getSortOrder() == SortOrder.desc) {
|
|
||||||
strbSort.append(" desc");
|
|
||||||
}
|
|
||||||
|
|
||||||
strbSort.append(",");
|
|
||||||
}
|
|
||||||
|
|
||||||
// remove last ','
|
|
||||||
strbSort.deleteCharAt(strbSort.length() - 1);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// no sort order was specified - sort by id to have consistent
|
|
||||||
// paging
|
|
||||||
strbSort.append(" equipmentId, createdTimestamp");
|
|
||||||
}
|
|
||||||
|
|
||||||
query += strbSort.toString();
|
|
||||||
|
|
||||||
// add pagination parameters for the query
|
|
||||||
query += SQL_PAGING_SUFFIX ;
|
|
||||||
|
|
||||||
queryArgs.add(context.getMaxItemsPerPage());
|
|
||||||
queryArgs.add(context.getTotalItemsReturned());
|
|
||||||
|
|
||||||
/*
|
|
||||||
* https://www.citusdata.com/blog/2016/03/30/five-ways-to-paginate/
|
|
||||||
* Choosing offset=1000 makes cost about 19 and has a 0.609 ms execution
|
|
||||||
* time. Once offset=5,000,000 the cost goes up to 92734 and execution
|
|
||||||
* time is 758.484 ms. - DT: still acceptable for our use case
|
|
||||||
*/
|
|
||||||
List<Alarm> pageItems = this.jdbcTemplate.query(query, queryArgs.toArray(),
|
|
||||||
alarmRowMapper);
|
|
||||||
|
|
||||||
LOG.debug("Found {} Alarms for customer {} with last returned page number {}",
|
|
||||||
pageItems.size(), customerId, context.getLastReturnedPageNumber());
|
|
||||||
|
|
||||||
ret.setItems(pageItems);
|
|
||||||
|
|
||||||
// adjust context for the next page
|
|
||||||
ret.prepareForNextPage();
|
|
||||||
|
|
||||||
// startAfterItem is not used in RDBMS datastores, set it to null
|
|
||||||
ret.getContext().setStartAfterItem(null);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public AlarmCounts getAlarmCounts(int customerId, Set<Long> equipmentIds, Set<AlarmCode> alarmCodes) {
|
|
||||||
|
|
||||||
ArrayList<Object> queryArgs = new ArrayList<>();
|
|
||||||
queryArgs.add(customerId);
|
|
||||||
|
|
||||||
//build the query
|
|
||||||
|
|
||||||
StringBuilder query = new StringBuilder();
|
|
||||||
if(equipmentIds == null || equipmentIds.isEmpty()) {
|
|
||||||
query.append(SQL_COUNTS_BY_ALARM_CODE_HEADER);
|
|
||||||
} else {
|
|
||||||
query.append(SQL_COUNTS_BY_EQUIPMENT_AND_ALARM_CODE_HEADER);
|
|
||||||
}
|
|
||||||
|
|
||||||
//add alarmCodes filters
|
|
||||||
if (alarmCodes != null && !alarmCodes.isEmpty()) {
|
|
||||||
alarmCodes.forEach(ac -> queryArgs.add(ac.getId()));
|
|
||||||
|
|
||||||
StringBuilder strb = new StringBuilder(100);
|
|
||||||
strb.append("and alarmCode in (");
|
|
||||||
for (int i = 0; i < alarmCodes.size(); i++) {
|
|
||||||
strb.append("?");
|
|
||||||
if (i < alarmCodes.size() - 1) {
|
|
||||||
strb.append(",");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
strb.append(") ");
|
|
||||||
|
|
||||||
query.append(strb);
|
|
||||||
}
|
|
||||||
|
|
||||||
//add equipmentId filters
|
|
||||||
if (equipmentIds != null && !equipmentIds.isEmpty()) {
|
|
||||||
queryArgs.addAll(equipmentIds);
|
|
||||||
|
|
||||||
StringBuilder strb = new StringBuilder(100);
|
|
||||||
strb.append("and equipmentId in (");
|
|
||||||
for (int i = 0; i < equipmentIds.size(); i++) {
|
|
||||||
strb.append("?");
|
|
||||||
if (i < equipmentIds.size() - 1) {
|
|
||||||
strb.append(",");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
strb.append(") ");
|
|
||||||
|
|
||||||
query.append(strb);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if(equipmentIds == null || equipmentIds.isEmpty()) {
|
|
||||||
query.append(SQL_COUNTS_BY_ALARM_CODE_FOOTER);
|
|
||||||
} else {
|
|
||||||
query.append(SQL_COUNTS_BY_EQUIPMENT_AND_ALARM_CODE_FOOTER);
|
|
||||||
}
|
|
||||||
|
|
||||||
AlarmCounts alarmCounts = new AlarmCounts();
|
|
||||||
alarmCounts.setCustomerId(customerId);
|
|
||||||
|
|
||||||
this.jdbcTemplate.query(query.toString(), queryArgs.toArray(),
|
|
||||||
new RowCallbackHandler() {
|
|
||||||
@Override
|
|
||||||
public void processRow(ResultSet rs) throws SQLException {
|
|
||||||
if(equipmentIds == null || equipmentIds.isEmpty()) {
|
|
||||||
alarmCounts.addToCounter(0, AlarmCode.getById(rs.getInt(1)), rs.getInt(2));
|
|
||||||
} else {
|
|
||||||
alarmCounts.addToCounter(rs.getLong(1), AlarmCode.getById(rs.getInt(2)), rs.getInt(3));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return alarmCounts;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
package com.telecominfraproject.wlan.alarm.datastore.rdbms;
|
|
||||||
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
import org.springframework.context.annotation.Profile;
|
|
||||||
import org.springframework.context.annotation.PropertySource;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import com.telecominfraproject.wlan.core.server.jdbc.BaseDataSourceConfig;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author dtoptygin
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
@Profile("!use_single_ds")
|
|
||||||
@PropertySource({ "${alarm-ds.props:classpath:alarm-ds.properties}" })
|
|
||||||
public class AlarmDataSourceConfig extends BaseDataSourceConfig {
|
|
||||||
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public AlarmDataSourceInterface alarmDataSourceInterface(){
|
|
||||||
|
|
||||||
AlarmDataSourceInterface ret = new AlarmDataSourceImpl(getDataSource(), getKeyColumnConverter());
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getDataSourceName() {
|
|
||||||
return "alarm-ds";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
package com.telecominfraproject.wlan.alarm.datastore.rdbms;
|
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
|
||||||
|
|
||||||
import com.telecominfraproject.wlan.core.server.jdbc.BaseJDbcDataSource;
|
|
||||||
import com.telecominfraproject.wlan.core.server.jdbc.BaseKeyColumnConverter;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author dtoptygin
|
|
||||||
* SQL DataSource that is used by Alarm Service
|
|
||||||
*/
|
|
||||||
public class AlarmDataSourceImpl extends BaseJDbcDataSource implements AlarmDataSourceInterface {
|
|
||||||
|
|
||||||
public AlarmDataSourceImpl(DataSource targetDataSource, BaseKeyColumnConverter keyColumnConverter){
|
|
||||||
super(targetDataSource, keyColumnConverter);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
package com.telecominfraproject.wlan.alarm.datastore.rdbms;
|
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author dtoptygin
|
|
||||||
* Marker interface to distinguish SQL DataSource that is used by Alarm Service
|
|
||||||
*/
|
|
||||||
public interface AlarmDataSourceInterface extends DataSource {
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
package com.telecominfraproject.wlan.alarm.datastore.rdbms;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
|
|
||||||
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.alarm.datastore.AlarmDatastore;
|
|
||||||
import com.telecominfraproject.wlan.alarm.models.Alarm;
|
|
||||||
import com.telecominfraproject.wlan.alarm.models.AlarmCode;
|
|
||||||
import com.telecominfraproject.wlan.alarm.models.AlarmCounts;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author dtoptygin
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@Configuration
|
|
||||||
public class AlarmDatastoreRdbms implements AlarmDatastore {
|
|
||||||
|
|
||||||
@Autowired AlarmDAO alarmDAO;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Alarm create(Alarm alarm) {
|
|
||||||
return alarmDAO.create(alarm);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Alarm getOrNull(int customerId, long equipmentId, AlarmCode alarmCode, long createdTimestamp) {
|
|
||||||
return alarmDAO.getOrNull(customerId, equipmentId, alarmCode, createdTimestamp);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Alarm update(Alarm alarm) {
|
|
||||||
return alarmDAO.update(alarm);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Alarm delete(int customerId, long equipmentId, AlarmCode alarmCode, long createdTimestamp) {
|
|
||||||
return alarmDAO.delete(customerId, equipmentId, alarmCode, createdTimestamp);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Alarm> delete(int customerId, long equipmentId) {
|
|
||||||
return alarmDAO.delete(customerId, equipmentId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Alarm> get(int customerId, Set<Long> equipmentIdSet, Set<AlarmCode> alarmCodeSet,
|
|
||||||
long createdAfterTimestamp) {
|
|
||||||
return alarmDAO.get(customerId, equipmentIdSet, alarmCodeSet, createdAfterTimestamp);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PaginationResponse<Alarm> getForCustomer(int customerId, Set<Long> equipmentIdSet,
|
|
||||||
Set<AlarmCode> alarmCodeSet, long createdAfterTimestamp, List<ColumnAndSort> sortBy,
|
|
||||||
PaginationContext<Alarm> context) {
|
|
||||||
|
|
||||||
if(context == null) {
|
|
||||||
context = new PaginationContext<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
return alarmDAO.getForCustomer(customerId, equipmentIdSet,
|
|
||||||
alarmCodeSet, createdAfterTimestamp, sortBy,
|
|
||||||
context);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AlarmCounts getAlarmCounts(int customerId, Set<Long> equipmentIdSet, Set<AlarmCode> alarmCodeSet) {
|
|
||||||
return alarmDAO.getAlarmCounts(customerId, equipmentIdSet, alarmCodeSet);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
package com.telecominfraproject.wlan.alarm.datastore.rdbms;
|
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.jdbc.core.RowMapper;
|
|
||||||
|
|
||||||
import com.telecominfraproject.wlan.alarm.models.Alarm;
|
|
||||||
import com.telecominfraproject.wlan.alarm.models.AlarmCode;
|
|
||||||
import com.telecominfraproject.wlan.alarm.models.AlarmDetails;
|
|
||||||
import com.telecominfraproject.wlan.alarm.models.AlarmScopeType;
|
|
||||||
import com.telecominfraproject.wlan.alarm.models.OriginatorType;
|
|
||||||
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
|
|
||||||
import com.telecominfraproject.wlan.status.models.StatusCode;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author dtoptygin
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class AlarmRowMapper implements RowMapper<Alarm> {
|
|
||||||
|
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(AlarmRowMapper.class);
|
|
||||||
|
|
||||||
public Alarm mapRow(ResultSet rs, int rowNum) throws SQLException {
|
|
||||||
Alarm alarm = new Alarm();
|
|
||||||
int colIdx=1;
|
|
||||||
|
|
||||||
//TODO: add columns from properties Alarm in here.
|
|
||||||
//make sure order of fields is the same as defined in Alarm
|
|
||||||
alarm.setCustomerId(rs.getInt(colIdx++));
|
|
||||||
alarm.setEquipmentId(rs.getLong(colIdx++));
|
|
||||||
alarm.setAlarmCode(AlarmCode.getById(rs.getInt(colIdx++)));
|
|
||||||
alarm.setCreatedTimestamp(rs.getLong(colIdx++));
|
|
||||||
|
|
||||||
alarm.setOriginatorType(OriginatorType.getById(rs.getInt(colIdx++)));
|
|
||||||
alarm.setSeverity(StatusCode.getById(rs.getInt(colIdx++)));
|
|
||||||
alarm.setScopeType(AlarmScopeType.getById(rs.getInt(colIdx++)));
|
|
||||||
alarm.setScopeId(rs.getString(colIdx++));
|
|
||||||
|
|
||||||
byte[] zippedBytes = rs.getBytes(colIdx++);
|
|
||||||
if (zippedBytes !=null) {
|
|
||||||
try {
|
|
||||||
AlarmDetails details = BaseJsonModel.fromZippedBytes(zippedBytes, AlarmDetails.class);
|
|
||||||
alarm.setDetails(details);
|
|
||||||
} catch (RuntimeException exp) {
|
|
||||||
LOG.error("Failed to decode AlarmDetails from database for {}", alarm);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
alarm.setAcknowledged(rs.getBoolean(colIdx++));
|
|
||||||
alarm.setLastModifiedTimestamp(rs.getLong(colIdx++));
|
|
||||||
|
|
||||||
return alarm;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
create table if not exists alarm (
|
|
||||||
customerId int not null,
|
|
||||||
equipmentId bigint default 0 not null,
|
|
||||||
alarmCode int not null,
|
|
||||||
createdTimestamp bigint not null,
|
|
||||||
|
|
||||||
originatorType int not null,
|
|
||||||
severity int not null,
|
|
||||||
scopeType int not null,
|
|
||||||
scopeId varchar(255) not null,
|
|
||||||
details bytea,
|
|
||||||
acknowledged boolean,
|
|
||||||
|
|
||||||
lastModifiedTimestamp bigint not null,
|
|
||||||
|
|
||||||
primary key (customerId, equipmentId, alarmCode, createdTimestamp)
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
create index if not exists idx_alarm_customerId on alarm (customerId);
|
|
||||||
create index if not exists idx_alarm_equipmentId on alarm (equipmentId );
|
|
||||||
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
package com.telecominfraproject.wlan.alarm.datastore.rdbms;
|
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
import static org.junit.Assert.assertNotNull;
|
|
||||||
import static org.junit.Assert.assertNull;
|
|
||||||
import static org.junit.Assert.fail;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.context.annotation.Import;
|
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
|
||||||
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase;
|
|
||||||
|
|
||||||
import com.telecominfraproject.wlan.core.server.jdbc.test.BaseJdbcTest;
|
|
||||||
import com.telecominfraproject.wlan.core.server.jdbc.test.TestWithEmbeddedDB;
|
|
||||||
|
|
||||||
import com.telecominfraproject.wlan.alarm.models.Alarm;
|
|
||||||
import com.telecominfraproject.wlan.alarm.models.AlarmCode;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author dtoptygin
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@Import(value = {
|
|
||||||
AlarmDatastoreRdbms.class,
|
|
||||||
AlarmDataSourceConfig.class,
|
|
||||||
AlarmDAO.class,
|
|
||||||
BaseJdbcTest.Config.class
|
|
||||||
})
|
|
||||||
@TestWithEmbeddedDB
|
|
||||||
public class AlarmDatastoreRdbmsPlumbingTests extends BaseJdbcTest {
|
|
||||||
|
|
||||||
@Autowired(required=false) private EmbeddedDatabase db;
|
|
||||||
@Autowired private AlarmDatastoreRdbms alarmDatastore;
|
|
||||||
@Autowired private AlarmDAO alarmDAO;
|
|
||||||
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setUp() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testDataAccess() {
|
|
||||||
if(db!=null){
|
|
||||||
//this is a simple test to see if embedded db is working in test environment
|
|
||||||
JdbcTemplate jdbcTemplate = new JdbcTemplate(db);
|
|
||||||
Long ret = jdbcTemplate.queryForObject(
|
|
||||||
"select equipmentId from alarm where customerId = ? and equipmentId = ? and alarmCode = ? and createdTimestamp = ?",
|
|
||||||
Long.class, 1, 1L, 4, 1L);
|
|
||||||
|
|
||||||
assertEquals((Long)1L, ret);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testCreateUpdateDeleteAlarm() {
|
|
||||||
|
|
||||||
//GET by Id test
|
|
||||||
assertNotNull(alarmDatastore.getOrNull(1, 1L, AlarmCode.AccessPointIsUnreachable, 1L));
|
|
||||||
|
|
||||||
//DELETE Test
|
|
||||||
alarmDatastore.delete(1, 1L, AlarmCode.AccessPointIsUnreachable, 1L);
|
|
||||||
|
|
||||||
assertNull(alarmDatastore.getOrNull(1, 1L, AlarmCode.AccessPointIsUnreachable, 1L));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
package com.telecominfraproject.wlan.alarm.datastore.rdbms;
|
|
||||||
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
|
||||||
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
|
||||||
import org.springframework.context.annotation.Import;
|
|
||||||
import org.springframework.test.annotation.Rollback;
|
|
||||||
import org.springframework.test.context.junit4.SpringRunner;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
|
|
||||||
import com.telecominfraproject.wlan.core.server.jdbc.test.BaseJdbcTest;
|
|
||||||
import com.telecominfraproject.wlan.core.server.jdbc.test.TestWithEmbeddedDB;
|
|
||||||
|
|
||||||
import com.telecominfraproject.wlan.alarm.datastore.BaseAlarmDatastoreTest;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author dtoptygin
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@RunWith(SpringRunner.class)
|
|
||||||
@SpringBootTest(webEnvironment = WebEnvironment.NONE, classes = BaseJdbcTest.Config.class)
|
|
||||||
@Rollback(value = true)
|
|
||||||
@Transactional
|
|
||||||
@Import(value = { AlarmDatastoreRdbms.class, AlarmDataSourceConfig.class,
|
|
||||||
AlarmDAO.class, BaseJdbcTest.Config.class })
|
|
||||||
@TestWithEmbeddedDB
|
|
||||||
public class AlarmDatastoreRdbmsTests extends BaseAlarmDatastoreTest {
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
|
|
||||||
<configuration>
|
|
||||||
<conversionRule conversionWord="filteredStack"
|
|
||||||
converterClass="com.telecominfraproject.wlan.server.exceptions.logback.ExceptionCompressingConverter" />
|
|
||||||
|
|
||||||
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
|
|
||||||
<encoder>
|
|
||||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n%filteredStack%nopex</pattern>
|
|
||||||
<!-- See http://logback.qos.ch/manual/layouts.html for details -->
|
|
||||||
<!-- %ex{5} - add at the end to display only 5 levels of the exception stack trace -->
|
|
||||||
<!-- %nopex - add at the end to not display any of the exception stack traces -->
|
|
||||||
<!-- %ex{full} - add at the end to display all the levels of the exception stack trace -->
|
|
||||||
</encoder>
|
|
||||||
</appender>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
details: http://logback.qos.ch/manual/configuration.html#auto_configuration
|
|
||||||
|
|
||||||
runtime configuration, if need to override the defaults:
|
|
||||||
-Dlogging.config=file:///home/ec2-user/opensync/logback.xml
|
|
||||||
|
|
||||||
for log configuration debugging - use
|
|
||||||
-Dlogback.statusListenerClass=ch.qos.logback.core.status.OnConsoleStatusListener
|
|
||||||
|
|
||||||
log levels:
|
|
||||||
OFF ERROR WARN INFO DEBUG TRACE
|
|
||||||
-->
|
|
||||||
<logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/>
|
|
||||||
<logger name="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" level="INFO"/>
|
|
||||||
<logger name="org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer" level="INFO"/>
|
|
||||||
<logger name="org.springframework.security.web.authentication.preauth" level="OFF"/>
|
|
||||||
<logger name="com.netflix.servo.tag.aws.AwsInjectableTag" level="OFF"/>
|
|
||||||
|
|
||||||
<logger name="com.telecominfraproject" level="WARN"/>
|
|
||||||
|
|
||||||
<root level="WARN">
|
|
||||||
<appender-ref ref="stdout"/>
|
|
||||||
</root>
|
|
||||||
|
|
||||||
</configuration>
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
drop table alarm if exists;
|
|
||||||
|
|
||||||
create table alarm (
|
|
||||||
customerId int not null,
|
|
||||||
equipmentId bigint default 0 not null,
|
|
||||||
alarmCode int not null,
|
|
||||||
createdTimestamp bigint not null,
|
|
||||||
|
|
||||||
originatorType int not null,
|
|
||||||
severity int not null,
|
|
||||||
scopeType int not null,
|
|
||||||
scopeId varchar(255) not null,
|
|
||||||
details varbinary(65535),
|
|
||||||
acknowledged boolean,
|
|
||||||
|
|
||||||
lastModifiedTimestamp bigint not null,
|
|
||||||
|
|
||||||
primary key (customerId, equipmentId, alarmCode, createdTimestamp)
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
create index idx_alarm_customerId on alarm (customerId);
|
|
||||||
create index idx_alarm_equipmentId on alarm (equipmentId );
|
|
||||||
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
insert into alarm (
|
|
||||||
customerId,
|
|
||||||
equipmentId,
|
|
||||||
alarmCode,
|
|
||||||
createdTimestamp,
|
|
||||||
|
|
||||||
originatorType,
|
|
||||||
severity,
|
|
||||||
scopeType,
|
|
||||||
scopeId,
|
|
||||||
|
|
||||||
details,
|
|
||||||
acknowledged,
|
|
||||||
lastModifiedTimestamp
|
|
||||||
) values (
|
|
||||||
1,1,4,1,
|
|
||||||
|
|
||||||
1,1,1, '-1',
|
|
||||||
|
|
||||||
null,
|
|
||||||
false,0
|
|
||||||
);
|
|
||||||
|
|
||||||
1
alarm-models/.gitignore
vendored
Normal file
1
alarm-models/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -16,17 +15,17 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>base-models</artifactId>
|
<artifactId>base-models</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>status-models</artifactId>
|
<artifactId>status-models</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>system-event-models</artifactId>
|
<artifactId>system-event-models</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ public class AlarmCode implements EnumWithId {
|
|||||||
public static final AlarmCode
|
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"),
|
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"),
|
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"),
|
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"),
|
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"),
|
NoiseFloor5G = new AlarmCode(9, "NoiseFloor5G", "Noise floor is too high on 5G radio", StatusCode.requiresAttention, "Investigate interference sources"),
|
||||||
|
|||||||
@@ -5,14 +5,18 @@ import java.util.Map;
|
|||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
|
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
|
||||||
|
import com.telecominfraproject.wlan.status.models.StatusCode;
|
||||||
|
|
||||||
public class AlarmCounts extends BaseJsonModel {
|
public class AlarmCounts extends BaseJsonModel {
|
||||||
|
|
||||||
private static final long serialVersionUID = -8513006445975878351L;
|
private static final long serialVersionUID = -8513006445975878351L;
|
||||||
|
|
||||||
private int customerId;
|
private int customerId;
|
||||||
|
private Boolean acknowledged;
|
||||||
private Map<Long, Map<AlarmCode, AtomicInteger>> countsPerEquipmentIdMap = new HashMap<>();
|
private Map<Long, Map<AlarmCode, AtomicInteger>> countsPerEquipmentIdMap = new HashMap<>();
|
||||||
|
private Map<Long, AtomicInteger> totalCountsPerEquipmentIdMap = new HashMap<>();
|
||||||
private Map<AlarmCode, AtomicInteger> totalCountsPerAlarmCodeMap = new HashMap<>();
|
private Map<AlarmCode, AtomicInteger> totalCountsPerAlarmCodeMap = new HashMap<>();
|
||||||
|
private Map<StatusCode, AtomicInteger> totalCountsBySeverityMap = new HashMap<>();
|
||||||
|
|
||||||
public int getCustomerId() {
|
public int getCustomerId() {
|
||||||
return customerId;
|
return customerId;
|
||||||
@@ -20,20 +24,38 @@ public class AlarmCounts extends BaseJsonModel {
|
|||||||
public void setCustomerId(int customerId) {
|
public void setCustomerId(int customerId) {
|
||||||
this.customerId = customerId;
|
this.customerId = customerId;
|
||||||
}
|
}
|
||||||
public Map<Long, Map<AlarmCode, AtomicInteger>> getCountsPerEquipmentIdMap() {
|
public Boolean getAcknowledged() {
|
||||||
|
return acknowledged;
|
||||||
|
}
|
||||||
|
public void setAcknowledged(Boolean acknowledged) {
|
||||||
|
this.acknowledged = acknowledged;
|
||||||
|
}
|
||||||
|
public Map<Long, Map<AlarmCode, AtomicInteger>> getCountsPerEquipmentIdMap() {
|
||||||
return countsPerEquipmentIdMap;
|
return countsPerEquipmentIdMap;
|
||||||
}
|
}
|
||||||
public void setCountsPerEquipmentIdMap(Map<Long, Map<AlarmCode, AtomicInteger>> countsPerEquipmentIdMap) {
|
public void setCountsPerEquipmentIdMap(Map<Long, Map<AlarmCode, AtomicInteger>> countsPerEquipmentIdMap) {
|
||||||
this.countsPerEquipmentIdMap = countsPerEquipmentIdMap;
|
this.countsPerEquipmentIdMap = countsPerEquipmentIdMap;
|
||||||
}
|
}
|
||||||
|
public Map<Long, AtomicInteger> getTotalCountsPerEquipmentIdMap() {
|
||||||
|
return totalCountsPerEquipmentIdMap;
|
||||||
|
}
|
||||||
|
public void setTotalCountsPerEquipmentIdMap(Map<Long, AtomicInteger> totalCountsPerEquipmentIdMap) {
|
||||||
|
this.totalCountsPerEquipmentIdMap = totalCountsPerEquipmentIdMap;
|
||||||
|
}
|
||||||
public Map<AlarmCode, AtomicInteger> getTotalCountsPerAlarmCodeMap() {
|
public Map<AlarmCode, AtomicInteger> getTotalCountsPerAlarmCodeMap() {
|
||||||
return totalCountsPerAlarmCodeMap;
|
return totalCountsPerAlarmCodeMap;
|
||||||
}
|
}
|
||||||
public void setTotalCountsPerAlarmCodeMap(Map<AlarmCode, AtomicInteger> totalCountsPerAlarmCodeMap) {
|
public void setTotalCountsPerAlarmCodeMap(Map<AlarmCode, AtomicInteger> totalCountsPerAlarmCodeMap) {
|
||||||
this.totalCountsPerAlarmCodeMap = totalCountsPerAlarmCodeMap;
|
this.totalCountsPerAlarmCodeMap = totalCountsPerAlarmCodeMap;
|
||||||
}
|
}
|
||||||
|
public Map<StatusCode, AtomicInteger> getTotalCountsBySeverityMap() {
|
||||||
public void addToCounter(long equipmentId, AlarmCode alarmCode, int valueToAdd) {
|
return totalCountsBySeverityMap;
|
||||||
|
}
|
||||||
|
public void setTotalCountsBySeverityMap(Map<StatusCode, AtomicInteger> totalCountsBySeverityMap) {
|
||||||
|
this.totalCountsBySeverityMap = totalCountsBySeverityMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addToCounter(long equipmentId, AlarmCode alarmCode, int valueToAdd) {
|
||||||
//update total counts
|
//update total counts
|
||||||
AtomicInteger totalCount = totalCountsPerAlarmCodeMap.get(alarmCode);
|
AtomicInteger totalCount = totalCountsPerAlarmCodeMap.get(alarmCode);
|
||||||
if (totalCount == null) {
|
if (totalCount == null) {
|
||||||
@@ -42,7 +64,23 @@ public class AlarmCounts extends BaseJsonModel {
|
|||||||
}
|
}
|
||||||
totalCount.addAndGet(valueToAdd);
|
totalCount.addAndGet(valueToAdd);
|
||||||
|
|
||||||
|
//update total counts by severity
|
||||||
|
AtomicInteger totalBySeverityCount = totalCountsBySeverityMap.get(alarmCode.getSeverity());
|
||||||
|
if (totalBySeverityCount == null) {
|
||||||
|
totalBySeverityCount = new AtomicInteger();
|
||||||
|
totalCountsBySeverityMap.put(alarmCode.getSeverity(), totalBySeverityCount);
|
||||||
|
}
|
||||||
|
totalBySeverityCount.addAndGet(valueToAdd);
|
||||||
|
|
||||||
if(equipmentId>0) {
|
if(equipmentId>0) {
|
||||||
|
//update total counts by equipmentId
|
||||||
|
AtomicInteger totalEquipmentIdCount = totalCountsPerEquipmentIdMap.get(equipmentId);
|
||||||
|
if (totalEquipmentIdCount == null) {
|
||||||
|
totalEquipmentIdCount = new AtomicInteger();
|
||||||
|
totalCountsPerEquipmentIdMap.put(equipmentId, totalEquipmentIdCount);
|
||||||
|
}
|
||||||
|
totalEquipmentIdCount.addAndGet(valueToAdd);
|
||||||
|
|
||||||
//update per-equipmentId counts only for real equipmentIds
|
//update per-equipmentId counts only for real equipmentIds
|
||||||
Map<AlarmCode, AtomicInteger> perEquipmentMap = countsPerEquipmentIdMap.get(equipmentId);
|
Map<AlarmCode, AtomicInteger> perEquipmentMap = countsPerEquipmentIdMap.get(equipmentId);
|
||||||
if(perEquipmentMap == null) {
|
if(perEquipmentMap == null) {
|
||||||
@@ -50,6 +88,7 @@ public class AlarmCounts extends BaseJsonModel {
|
|||||||
countsPerEquipmentIdMap.put(equipmentId, perEquipmentMap);
|
countsPerEquipmentIdMap.put(equipmentId, perEquipmentMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//update counts by equipmentId and alarmCode
|
||||||
AtomicInteger perEqCount = perEquipmentMap.get(alarmCode);
|
AtomicInteger perEqCount = perEquipmentMap.get(alarmCode);
|
||||||
if(perEqCount == null) {
|
if(perEqCount == null) {
|
||||||
perEqCount = new AtomicInteger();
|
perEqCount = new AtomicInteger();
|
||||||
@@ -63,6 +102,14 @@ public class AlarmCounts extends BaseJsonModel {
|
|||||||
public int getCounter(long equipmentId, AlarmCode alarmCode) {
|
public int getCounter(long equipmentId, AlarmCode alarmCode) {
|
||||||
|
|
||||||
if(equipmentId>0) {
|
if(equipmentId>0) {
|
||||||
|
if (alarmCode == null) {
|
||||||
|
AtomicInteger perEqTotalCount = totalCountsPerEquipmentIdMap.get(equipmentId);
|
||||||
|
if (perEqTotalCount == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return perEqTotalCount.get();
|
||||||
|
}
|
||||||
|
|
||||||
//get from per-equipmentId counts only for real equipmentIds
|
//get from per-equipmentId counts only for real equipmentIds
|
||||||
Map<AlarmCode, AtomicInteger> perEquipmentMap = countsPerEquipmentIdMap.get(equipmentId);
|
Map<AlarmCode, AtomicInteger> perEquipmentMap = countsPerEquipmentIdMap.get(equipmentId);
|
||||||
if(perEquipmentMap == null) {
|
if(perEquipmentMap == null) {
|
||||||
@@ -88,6 +135,12 @@ public class AlarmCounts extends BaseJsonModel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getSeverityCounter(StatusCode severity) {
|
||||||
|
AtomicInteger ret = totalCountsBySeverityMap.get(severity);
|
||||||
|
if (ret == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return ret.get();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,10 +10,29 @@ import com.telecominfraproject.wlan.systemevent.models.EquipmentEventWithPayload
|
|||||||
public class AlarmAddedEvent extends EquipmentEventWithPayload<Alarm> {
|
public class AlarmAddedEvent extends EquipmentEventWithPayload<Alarm> {
|
||||||
private static final long serialVersionUID = 7142208487917559985L;
|
private static final long serialVersionUID = 7142208487917559985L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor with current event time stamp
|
||||||
|
* @param alarm
|
||||||
|
*/
|
||||||
public AlarmAddedEvent(Alarm alarm){
|
public AlarmAddedEvent(Alarm alarm){
|
||||||
super(alarm.getCustomerId(), alarm.getEquipmentId(), alarm.getLastModifiedTimestamp(), alarm);
|
super(alarm.getCustomerId(), alarm.getEquipmentId(), alarm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor with explicit event time stamp. This constructor is used to
|
||||||
|
* workaround the issue with how the System events are defined in the cassandra
|
||||||
|
* schema: No two events can have the same combination of
|
||||||
|
* customerId+equipmentId+dataType+eventTimestamp, so the application code must
|
||||||
|
* work around this limitation by creating unique event time stamps if 2
|
||||||
|
* alarms are raised at the same time.
|
||||||
|
*
|
||||||
|
* @param alarm
|
||||||
|
* @param eventTimestamp
|
||||||
|
*/
|
||||||
|
public AlarmAddedEvent(Alarm alarm, long eventTimestamp){
|
||||||
|
super(alarm.getCustomerId(), alarm.getEquipmentId(), eventTimestamp, alarm);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor used by JSON
|
* Constructor used by JSON
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ public class AlarmChangedEvent extends EquipmentEventWithPayload<Alarm> {
|
|||||||
private static final long serialVersionUID = 7142209997917559985L;
|
private static final long serialVersionUID = 7142209997917559985L;
|
||||||
|
|
||||||
public AlarmChangedEvent(Alarm alarm){
|
public AlarmChangedEvent(Alarm alarm){
|
||||||
super(alarm.getCustomerId(), alarm.getEquipmentId(), alarm.getLastModifiedTimestamp(), alarm);
|
super(alarm.getCustomerId(), alarm.getEquipmentId(), alarm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ public class AlarmRemovedEvent extends EquipmentEventWithPayload<Alarm> {
|
|||||||
private static final long serialVersionUID = 7142208488887559985L;
|
private static final long serialVersionUID = 7142208488887559985L;
|
||||||
|
|
||||||
public AlarmRemovedEvent(Alarm alarm){
|
public AlarmRemovedEvent(Alarm alarm){
|
||||||
super(alarm.getCustomerId(), alarm.getEquipmentId(), System.currentTimeMillis(), alarm);
|
super(alarm.getCustomerId(), alarm.getEquipmentId(), alarm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
1
alarm-service-interface/.gitignore
vendored
Normal file
1
alarm-service-interface/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>alarm-models</artifactId>
|
<artifactId>alarm-models</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package com.telecominfraproject.wlan.alarm;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import com.telecominfraproject.wlan.core.model.json.GenericResponse;
|
|
||||||
import com.telecominfraproject.wlan.core.model.pagination.ColumnAndSort;
|
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;
|
||||||
@@ -104,21 +103,15 @@ public interface AlarmServiceInterface {
|
|||||||
* @param createdAfterTimestamp
|
* @param createdAfterTimestamp
|
||||||
* @return next page of matching Alarm objects.
|
* @return next page of matching Alarm objects.
|
||||||
*/
|
*/
|
||||||
PaginationResponse<Alarm> getForCustomer(int customerId, Set<Long> equipmentIdSet, Set<AlarmCode> alarmCodeSet, long createdAfterTimestamp, List<ColumnAndSort> sortBy, PaginationContext<Alarm> context);
|
PaginationResponse<Alarm> getForCustomer(int customerId, Set<Long> equipmentIdSet, Set<AlarmCode> alarmCodeSet, long createdAfterTimestamp, Boolean acknowledged, List<ColumnAndSort> sortBy, PaginationContext<Alarm> context);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param customerId
|
* @param customerId
|
||||||
* @param equipmentIdSet - if empty, then only total counts of all alarms for customer per alarm code will be counted
|
* @param equipmentIdSet - if empty, then only total counts of all alarms for customer per alarm code will be counted
|
||||||
* @param alarmCodeSet - can be empty, in which case all alarm codes will be counted
|
* @param alarmCodeSet - can be empty, in which case all alarm codes will be counted
|
||||||
|
* @param acknowledged - can be empty, in which case acknowledged would be ignored
|
||||||
* @return alarm counts for the given filters
|
* @return alarm counts for the given filters
|
||||||
*/
|
*/
|
||||||
AlarmCounts getAlarmCounts(int customerId, Set<Long> equipmentIdSet, Set<AlarmCode> alarmCodeSet);
|
AlarmCounts getAlarmCounts(int customerId, Set<Long> equipmentIdSet, Set<AlarmCode> alarmCodeSet, Boolean acknowledged);
|
||||||
|
|
||||||
/**
|
|
||||||
* In some datastores (i.e. Cassandra) it makes sense to store counts of alarms in a separate table for fast retrieval by UI.
|
|
||||||
* Unfortunately, there are some situations where those counters get out of sync with the real alarm counts.
|
|
||||||
* This method is here to re-calculate the counter values and bring them in-sync with the real alarms.
|
|
||||||
*/
|
|
||||||
GenericResponse resetAlarmCounters() ;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
1
alarm-service-local/.gitignore
vendored
Normal file
1
alarm-service-local/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -16,13 +16,13 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>alarm-service-interface</artifactId>
|
<artifactId>alarm-service-interface</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>alarm-service</artifactId>
|
<artifactId>alarm-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import org.slf4j.LoggerFactory;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import com.telecominfraproject.wlan.core.model.json.GenericResponse;
|
|
||||||
import com.telecominfraproject.wlan.core.model.pagination.ColumnAndSort;
|
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;
|
||||||
@@ -69,20 +68,16 @@ public class AlarmServiceLocal implements AlarmServiceInterface {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PaginationResponse<Alarm> getForCustomer(int customerId, Set<Long> equipmentIdSet,
|
public PaginationResponse<Alarm> getForCustomer(int customerId, Set<Long> equipmentIdSet,
|
||||||
Set<AlarmCode> alarmCodeSet, long createdAfterTimestamp, List<ColumnAndSort> sortBy,
|
Set<AlarmCode> alarmCodeSet, long createdAfterTimestamp, Boolean acknowledged, List<ColumnAndSort> sortBy,
|
||||||
PaginationContext<Alarm> context) {
|
PaginationContext<Alarm> context) {
|
||||||
|
|
||||||
return alarmController.getForCustomer(customerId, equipmentIdSet,
|
return alarmController.getForCustomer(customerId, equipmentIdSet,
|
||||||
alarmCodeSet, createdAfterTimestamp, sortBy, context);
|
alarmCodeSet, createdAfterTimestamp, acknowledged, sortBy, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AlarmCounts getAlarmCounts(int customerId, Set<Long> equipmentIdSet, Set<AlarmCode> alarmCodeSet) {
|
public AlarmCounts getAlarmCounts(int customerId, Set<Long> equipmentIdSet, Set<AlarmCode> alarmCodeSet, Boolean acknowledged) {
|
||||||
return alarmController.getAlarmCounts(customerId, equipmentIdSet, alarmCodeSet);
|
return alarmController.getAlarmCounts(customerId, equipmentIdSet, alarmCodeSet, acknowledged);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public GenericResponse resetAlarmCounters() {
|
|
||||||
return alarmController.resetAlarmCounters();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
1
alarm-service-remote/.gitignore
vendored
Normal file
1
alarm-service-remote/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -15,41 +15,53 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>alarm-service-interface</artifactId>
|
<artifactId>alarm-service-interface</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>base-client</artifactId>
|
<artifactId>base-client</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- Dependencies for the unit tests -->
|
<!-- Dependencies for the unit tests -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>base-remote-tests</artifactId>
|
<artifactId>base-remote-tests</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>alarm-service</artifactId>
|
<artifactId>alarm-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>alarm-datastore-inmemory</artifactId>
|
<artifactId>alarm-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>cloud-event-dispatcher-empty</artifactId>
|
<artifactId>cloud-event-dispatcher-empty</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<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>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ import com.telecominfraproject.wlan.alarm.models.AlarmCode;
|
|||||||
import com.telecominfraproject.wlan.alarm.models.AlarmCounts;
|
import com.telecominfraproject.wlan.alarm.models.AlarmCounts;
|
||||||
import com.telecominfraproject.wlan.core.client.BaseRemoteClient;
|
import com.telecominfraproject.wlan.core.client.BaseRemoteClient;
|
||||||
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
|
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
|
||||||
import com.telecominfraproject.wlan.core.model.json.GenericResponse;
|
|
||||||
import com.telecominfraproject.wlan.core.model.pagination.ColumnAndSort;
|
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;
|
||||||
@@ -62,22 +61,6 @@ public class AlarmServiceRemote extends BaseRemoteClient implements AlarmService
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public GenericResponse resetAlarmCounters() {
|
|
||||||
|
|
||||||
LOG.debug("calling resetAlarmCounters ");
|
|
||||||
|
|
||||||
ResponseEntity<GenericResponse> responseEntity = restTemplate.postForEntity(
|
|
||||||
getBaseUrl() + "/resetCounts",
|
|
||||||
null, GenericResponse.class);
|
|
||||||
|
|
||||||
GenericResponse ret = responseEntity.getBody();
|
|
||||||
|
|
||||||
LOG.debug("completed resetAlarmCounters {} ", ret);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Alarm getOrNull(int customerId, long equipmentId, AlarmCode alarmCode, long createdTimestamp) {
|
public Alarm getOrNull(int customerId, long equipmentId, AlarmCode alarmCode, long createdTimestamp) {
|
||||||
|
|
||||||
@@ -137,9 +120,9 @@ public class AlarmServiceRemote extends BaseRemoteClient implements AlarmService
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AlarmCounts getAlarmCounts(int customerId, Set<Long> equipmentIdSet, Set<AlarmCode> alarmCodeSet) {
|
public AlarmCounts getAlarmCounts(int customerId, Set<Long> equipmentIdSet, Set<AlarmCode> alarmCodeSet, Boolean acknowledged) {
|
||||||
|
|
||||||
LOG.debug("getAlarmCounts({}, {}, {})", customerId, equipmentIdSet, alarmCodeSet);
|
LOG.debug("getAlarmCounts({}, {}, {}, {})", customerId, equipmentIdSet, alarmCodeSet, acknowledged);
|
||||||
|
|
||||||
String equipmentIdSetStr = null;
|
String equipmentIdSetStr = null;
|
||||||
if (equipmentIdSet != null && !equipmentIdSet.isEmpty()) {
|
if (equipmentIdSet != null && !equipmentIdSet.isEmpty()) {
|
||||||
@@ -158,8 +141,8 @@ public class AlarmServiceRemote extends BaseRemoteClient implements AlarmService
|
|||||||
}
|
}
|
||||||
|
|
||||||
ResponseEntity<AlarmCounts> responseEntity = restTemplate.exchange(
|
ResponseEntity<AlarmCounts> responseEntity = restTemplate.exchange(
|
||||||
getBaseUrl() + "/counts?customerId={customerId}&equipmentIdSet={equipmentIdSetStr}&alarmCodeSet={alarmCodeSetStr}", HttpMethod.GET,
|
getBaseUrl() + "/counts?customerId={customerId}&equipmentIdSet={equipmentIdSetStr}&alarmCodeSet={alarmCodeSetStr}&acknowledged={acknowledged}", HttpMethod.GET,
|
||||||
null, AlarmCounts.class, customerId, equipmentIdSetStr, alarmCodeSetStr);
|
null, AlarmCounts.class, customerId, equipmentIdSetStr, alarmCodeSetStr, acknowledged);
|
||||||
|
|
||||||
AlarmCounts ret = responseEntity.getBody();
|
AlarmCounts ret = responseEntity.getBody();
|
||||||
LOG.debug("completed getAlarmCounts {} ", ret);
|
LOG.debug("completed getAlarmCounts {} ", ret);
|
||||||
@@ -170,10 +153,10 @@ public class AlarmServiceRemote extends BaseRemoteClient implements AlarmService
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PaginationResponse<Alarm> getForCustomer(int customerId, Set<Long> equipmentIdSet,
|
public PaginationResponse<Alarm> getForCustomer(int customerId, Set<Long> equipmentIdSet,
|
||||||
Set<AlarmCode> alarmCodeSet, long createdAfterTimestamp, List<ColumnAndSort> sortBy,
|
Set<AlarmCode> alarmCodeSet, long createdAfterTimestamp, Boolean acknowledged, List<ColumnAndSort> sortBy,
|
||||||
PaginationContext<Alarm> context) {
|
PaginationContext<Alarm> context) {
|
||||||
|
|
||||||
LOG.debug("calling getForCustomer( {}, {}, {}, {}, {}, {} )", customerId, equipmentIdSet, alarmCodeSet, createdAfterTimestamp, sortBy, context);
|
LOG.debug("calling getForCustomer( {}, {}, {}, {}, {}, {}, {} )", customerId, equipmentIdSet, alarmCodeSet, createdAfterTimestamp, acknowledged, sortBy, context);
|
||||||
|
|
||||||
String equipmentIdSetStr = null;
|
String equipmentIdSetStr = null;
|
||||||
if (equipmentIdSet != null && !equipmentIdSet.isEmpty()) {
|
if (equipmentIdSet != null && !equipmentIdSet.isEmpty()) {
|
||||||
@@ -193,9 +176,9 @@ public class AlarmServiceRemote extends BaseRemoteClient implements AlarmService
|
|||||||
|
|
||||||
ResponseEntity<PaginationResponse<Alarm>> responseEntity = restTemplate.exchange(
|
ResponseEntity<PaginationResponse<Alarm>> responseEntity = restTemplate.exchange(
|
||||||
getBaseUrl()
|
getBaseUrl()
|
||||||
+ "/forCustomer?customerId={customerId}&equipmentIdSet={equipmentIdSetStr}&alarmCodeSet={alarmCodeSetStr}&createdAfterTimestamp={createdAfterTimestamp}&sortBy={sortBy}&paginationContext={paginationContext}",
|
+ "/forCustomer?customerId={customerId}&equipmentIdSet={equipmentIdSetStr}&alarmCodeSet={alarmCodeSetStr}&createdAfterTimestamp={createdAfterTimestamp}&acknowledged={acknowledged}&sortBy={sortBy}&paginationContext={paginationContext}",
|
||||||
HttpMethod.GET,
|
HttpMethod.GET,
|
||||||
null, Alarm_PAGINATION_RESPONSE_CLASS_TOKEN, customerId, equipmentIdSetStr, alarmCodeSetStr, createdAfterTimestamp, sortBy, context);
|
null, Alarm_PAGINATION_RESPONSE_CLASS_TOKEN, customerId, equipmentIdSetStr, alarmCodeSetStr, createdAfterTimestamp, acknowledged, sortBy, context);
|
||||||
|
|
||||||
PaginationResponse<Alarm> ret = responseEntity.getBody();
|
PaginationResponse<Alarm> ret = responseEntity.getBody();
|
||||||
LOG.debug("completed getForCustomer {} ", ret.getItems().size());
|
LOG.debug("completed getForCustomer {} ", ret.getItems().size());
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import org.junit.Before;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Import;
|
||||||
import org.springframework.test.context.ActiveProfiles;
|
import org.springframework.test.context.ActiveProfiles;
|
||||||
import org.springframework.test.context.junit4.SpringRunner;
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
|
|
||||||
@@ -26,13 +27,19 @@ import com.telecominfraproject.wlan.alarm.models.Alarm;
|
|||||||
import com.telecominfraproject.wlan.alarm.models.AlarmCode;
|
import com.telecominfraproject.wlan.alarm.models.AlarmCode;
|
||||||
import com.telecominfraproject.wlan.alarm.models.AlarmCounts;
|
import com.telecominfraproject.wlan.alarm.models.AlarmCounts;
|
||||||
import com.telecominfraproject.wlan.alarm.models.AlarmDetails;
|
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.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.core.model.pagination.SortOrder;
|
import com.telecominfraproject.wlan.core.model.pagination.SortOrder;
|
||||||
import com.telecominfraproject.wlan.datastore.exceptions.DsConcurrentModificationException;
|
import com.telecominfraproject.wlan.datastore.exceptions.DsConcurrentModificationException;
|
||||||
import com.telecominfraproject.wlan.datastore.exceptions.DsEntityNotFoundException;
|
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.remote.tests.BaseRemoteTest;
|
||||||
|
import com.telecominfraproject.wlan.status.models.StatusCode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author dtoptygin
|
* @author dtoptygin
|
||||||
@@ -43,10 +50,16 @@ import com.telecominfraproject.wlan.remote.tests.BaseRemoteTest;
|
|||||||
"integration_test",
|
"integration_test",
|
||||||
"no_ssl","http_digest_auth","rest-template-single-user-per-service-digest-auth",
|
"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
|
}) //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 {
|
public class AlarmServiceRemoteTest extends BaseRemoteTest {
|
||||||
|
|
||||||
|
|
||||||
@Autowired AlarmServiceRemote remoteInterface;
|
@Autowired AlarmServiceRemote remoteInterface;
|
||||||
|
@Autowired EquipmentServiceLocal equipmentServicelocal;
|
||||||
|
|
||||||
@Before public void urlSetup(){
|
@Before public void urlSetup(){
|
||||||
configureBaseUrl("tip.wlan.alarmServiceBaseUrl");
|
configureBaseUrl("tip.wlan.alarmServiceBaseUrl");
|
||||||
@@ -232,6 +245,11 @@ public class AlarmServiceRemoteTest extends BaseRemoteTest {
|
|||||||
mdl.setCreatedTimestamp(mdl.getCreatedTimestamp() - 10000);
|
mdl.setCreatedTimestamp(mdl.getCreatedTimestamp() - 10000);
|
||||||
pastTimestamp = mdl.getCreatedTimestamp();
|
pastTimestamp = mdl.getCreatedTimestamp();
|
||||||
}
|
}
|
||||||
|
if (i < 20) {
|
||||||
|
mdl.setAcknowledged(true);
|
||||||
|
} else {
|
||||||
|
mdl.setAcknowledged(false);
|
||||||
|
}
|
||||||
|
|
||||||
apNameIdx++;
|
apNameIdx++;
|
||||||
remoteInterface.create(mdl);
|
remoteInterface.create(mdl);
|
||||||
@@ -252,13 +270,13 @@ public class AlarmServiceRemoteTest extends BaseRemoteTest {
|
|||||||
|
|
||||||
//get active alarms for all equipment and all alarmCodes for the customer since the beginning of time
|
//get active alarms for all equipment and all alarmCodes for the customer since the beginning of time
|
||||||
PaginationContext<Alarm> context = new PaginationContext<>(10);
|
PaginationContext<Alarm> context = new PaginationContext<>(10);
|
||||||
PaginationResponse<Alarm> page1 = remoteInterface.getForCustomer(customerId_1, null, null, -1, sortBy, context);
|
PaginationResponse<Alarm> page1 = remoteInterface.getForCustomer(customerId_1, null, null, -1, null, sortBy, context);
|
||||||
PaginationResponse<Alarm> page2 = remoteInterface.getForCustomer(customerId_1, null, null, -1, sortBy, page1.getContext());
|
PaginationResponse<Alarm> page2 = remoteInterface.getForCustomer(customerId_1, null, null, -1, null, sortBy, page1.getContext());
|
||||||
PaginationResponse<Alarm> page3 = remoteInterface.getForCustomer(customerId_1, null, null, -1, sortBy, page2.getContext());
|
PaginationResponse<Alarm> page3 = remoteInterface.getForCustomer(customerId_1, null, null, -1, null, sortBy, page2.getContext());
|
||||||
PaginationResponse<Alarm> page4 = remoteInterface.getForCustomer(customerId_1, null, null, -1, sortBy, page3.getContext());
|
PaginationResponse<Alarm> page4 = remoteInterface.getForCustomer(customerId_1, null, null, -1, null, sortBy, page3.getContext());
|
||||||
PaginationResponse<Alarm> page5 = remoteInterface.getForCustomer(customerId_1, null, null, -1, sortBy, page4.getContext());
|
PaginationResponse<Alarm> page5 = remoteInterface.getForCustomer(customerId_1, null, null, -1, null, sortBy, page4.getContext());
|
||||||
PaginationResponse<Alarm> page6 = remoteInterface.getForCustomer(customerId_1, null, null, -1, sortBy, page5.getContext());
|
PaginationResponse<Alarm> page6 = remoteInterface.getForCustomer(customerId_1, null, null, -1, null, sortBy, page5.getContext());
|
||||||
PaginationResponse<Alarm> page7 = remoteInterface.getForCustomer(customerId_1, null, null, -1, sortBy, page6.getContext());
|
PaginationResponse<Alarm> page7 = remoteInterface.getForCustomer(customerId_1, null, null, -1, null, sortBy, page6.getContext());
|
||||||
|
|
||||||
//verify returned pages
|
//verify returned pages
|
||||||
assertEquals(10, page1.getItems().size());
|
assertEquals(10, page1.getItems().size());
|
||||||
@@ -291,9 +309,99 @@ public class AlarmServiceRemoteTest extends BaseRemoteTest {
|
|||||||
|
|
||||||
assertEquals(expectedPage3Strings, actualPage3Strings);
|
assertEquals(expectedPage3Strings, actualPage3Strings);
|
||||||
|
|
||||||
|
// testing Acknowledged filter (alarm_by_acknowledged)
|
||||||
|
PaginationResponse<Alarm> page1Acknowledged = remoteInterface.getForCustomer(customerId_1, null, null, -1, true, sortBy, context);
|
||||||
|
PaginationResponse<Alarm> page2Acknowledged = remoteInterface.getForCustomer(customerId_1, null, null, -1, true, sortBy, page1Acknowledged.getContext());
|
||||||
|
PaginationResponse<Alarm> page3Acknowledged = remoteInterface.getForCustomer(customerId_1, null, null, -1, true, sortBy, page2Acknowledged.getContext());
|
||||||
|
PaginationResponse<Alarm> page4Acknowledged = remoteInterface.getForCustomer(customerId_1, null, null, -1, true, sortBy, page3Acknowledged.getContext());
|
||||||
|
|
||||||
|
//verify returned pages
|
||||||
|
assertEquals(10, page1Acknowledged.getItems().size());
|
||||||
|
assertEquals(10, page2Acknowledged.getItems().size());
|
||||||
|
assertEquals(0, page3Acknowledged.getItems().size());
|
||||||
|
assertEquals(0, page4Acknowledged.getItems().size());
|
||||||
|
|
||||||
|
// testing Acknowledged filter with equipmentIds (alarm_by_acknowledged_equipmentId)
|
||||||
|
PaginationResponse<Alarm> page1AcknowledgedAndEquipment = remoteInterface.getForCustomer(customerId_1, equipmentIds, null, -1, true, sortBy, context);
|
||||||
|
PaginationResponse<Alarm> page2AcknowledgedAndEquipment = remoteInterface.getForCustomer(customerId_1, equipmentIds, null, -1, true, sortBy, page1AcknowledgedAndEquipment.getContext());
|
||||||
|
PaginationResponse<Alarm> page3AcknowledgedAndEquipment = remoteInterface.getForCustomer(customerId_1, equipmentIds, null, -1, true, sortBy, page2AcknowledgedAndEquipment.getContext());
|
||||||
|
PaginationResponse<Alarm> page4AcknowledgedAndEquipment = remoteInterface.getForCustomer(customerId_1, equipmentIds, null, -1, true, sortBy, page3AcknowledgedAndEquipment.getContext());
|
||||||
|
|
||||||
|
page1AcknowledgedAndEquipment.getItems().forEach(e -> assertEquals(true, e.isAcknowledged()) );
|
||||||
|
page2AcknowledgedAndEquipment.getItems().forEach(e -> assertEquals(true, e.isAcknowledged()) );
|
||||||
|
|
||||||
|
page1AcknowledgedAndEquipment.getItems().forEach(e -> assertTrue(equipmentIds.contains(e.getEquipmentId())));
|
||||||
|
page2AcknowledgedAndEquipment.getItems().forEach(e -> assertTrue(equipmentIds.contains(e.getEquipmentId())));
|
||||||
|
|
||||||
|
assertTrue(page3AcknowledgedAndEquipment.getContext().isLastPage());
|
||||||
|
assertTrue(page4AcknowledgedAndEquipment.getContext().isLastPage());
|
||||||
|
|
||||||
|
// testing Acknowledged filter with alarmCodes (alarm_by_acknowledged_alarmCode)
|
||||||
|
PaginationResponse<Alarm> page1AcknowledgedAndAlarmCode = remoteInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, -1, true, sortBy, context);
|
||||||
|
PaginationResponse<Alarm> page2AcknowledgedAndAlarmCode = remoteInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, -1, true, sortBy, page1AcknowledgedAndAlarmCode.getContext());
|
||||||
|
PaginationResponse<Alarm> page3AcknowledgedAndAlarmCode = remoteInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, -1, true, sortBy, page2AcknowledgedAndAlarmCode.getContext());
|
||||||
|
PaginationResponse<Alarm> page4AcknowledgedAndAlarmCode = remoteInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, -1, true, sortBy, page3AcknowledgedAndAlarmCode.getContext());
|
||||||
|
|
||||||
|
page1AcknowledgedAndAlarmCode.getItems().forEach(e -> assertEquals(true, e.isAcknowledged()) );
|
||||||
|
page2AcknowledgedAndAlarmCode.getItems().forEach(e -> assertEquals(true, e.isAcknowledged()) );
|
||||||
|
|
||||||
|
page1AcknowledgedAndAlarmCode.getItems().forEach(e -> assertEquals(AlarmCode.AccessPointIsUnreachable, e.getAlarmCode()));
|
||||||
|
page2AcknowledgedAndAlarmCode.getItems().forEach(e -> assertEquals(AlarmCode.AccessPointIsUnreachable, e.getAlarmCode()));
|
||||||
|
|
||||||
|
assertTrue(page3AcknowledgedAndAlarmCode.getContext().isLastPage());
|
||||||
|
assertTrue(page4AcknowledgedAndAlarmCode.getContext().isLastPage());
|
||||||
|
|
||||||
|
// testing Acknowledged filter with failure alarm code (no alarms initialized with failure code, should return empty page)
|
||||||
|
PaginationResponse<Alarm> page1AcknowledgedAndAlarmCodeFailure = remoteInterface.getForCustomer(customerId_1, equipmentIds, Collections.singleton(AlarmCode.AssocFailure), -1, true, sortBy, context);
|
||||||
|
|
||||||
|
assertTrue(page1AcknowledgedAndAlarmCodeFailure.getContext().isLastPage());
|
||||||
|
|
||||||
|
long checkTimestamp = pastTimestamp;
|
||||||
|
|
||||||
|
// testing Acknowledged filter with timestamp (alarm_by_acknowledged_timestamp)
|
||||||
|
PaginationResponse<Alarm> page1AcknowledgedAndTimestamp = remoteInterface.getForCustomer(customerId_1, null, null, pastTimestamp, true, sortBy, context);
|
||||||
|
PaginationResponse<Alarm> page2AcknowledgedAndTimestamp = remoteInterface.getForCustomer(customerId_1, null, null, pastTimestamp, true, sortBy, page1AcknowledgedAndTimestamp.getContext());
|
||||||
|
PaginationResponse<Alarm> page3AcknowledgedAndTimestamp = remoteInterface.getForCustomer(customerId_1, null, null, pastTimestamp, true, sortBy, page2AcknowledgedAndTimestamp.getContext());
|
||||||
|
PaginationResponse<Alarm> page4AcknowledgedAndTimestamp = remoteInterface.getForCustomer(customerId_1, null, null, pastTimestamp, true, sortBy, page3AcknowledgedAndTimestamp.getContext());
|
||||||
|
|
||||||
|
assertEquals(10, page1AcknowledgedAndTimestamp.getItems().size());
|
||||||
|
assertEquals(9, page2AcknowledgedAndTimestamp.getItems().size());
|
||||||
|
assertEquals(0, page3AcknowledgedAndTimestamp.getItems().size());
|
||||||
|
assertEquals(0, page4AcknowledgedAndTimestamp.getItems().size());
|
||||||
|
|
||||||
|
page1AcknowledgedAndTimestamp.getItems().forEach(e -> assertEquals(true, e.isAcknowledged()) );
|
||||||
|
page2AcknowledgedAndTimestamp.getItems().forEach(e -> assertEquals(true, e.isAcknowledged()) );
|
||||||
|
|
||||||
|
page1AcknowledgedAndTimestamp.getItems().forEach(e -> assertTrue(e.getCreatedTimestamp() > checkTimestamp));
|
||||||
|
page2AcknowledgedAndTimestamp.getItems().forEach(e -> assertTrue(e.getCreatedTimestamp() > checkTimestamp));
|
||||||
|
|
||||||
|
assertTrue(page3AcknowledgedAndTimestamp.getContext().isLastPage());
|
||||||
|
assertTrue(page4AcknowledgedAndTimestamp.getContext().isLastPage());
|
||||||
|
|
||||||
|
// testing Acknowledged with equipmentId and timestamp
|
||||||
|
// With timestamp, alarmCodes will be set to AlarmCode.validValues, so these calls will be equivalent to having all filters included.
|
||||||
|
// Because all filters are included, the alarm_by_acknowledged will be used instead of alarm_by_acknowledged_timestamp
|
||||||
|
PaginationResponse<Alarm> page1AcknowledgedEquipmentIdAndTimestamp = remoteInterface.getForCustomer(customerId_1, equipmentIds, null, pastTimestamp, true, sortBy, context);
|
||||||
|
PaginationResponse<Alarm> page2AcknowledgedEquipmentIdAndTimestamp = remoteInterface.getForCustomer(customerId_1, equipmentIds, null, pastTimestamp, true, sortBy, page1AcknowledgedEquipmentIdAndTimestamp.getContext());
|
||||||
|
PaginationResponse<Alarm> page3AcknowledgedEquipmentIdAndTimestamp = remoteInterface.getForCustomer(customerId_1, equipmentIds, null, pastTimestamp, true, sortBy, page2AcknowledgedEquipmentIdAndTimestamp.getContext());
|
||||||
|
|
||||||
|
assertEquals(10, page1AcknowledgedEquipmentIdAndTimestamp.getItems().size());
|
||||||
|
assertEquals(9, page2AcknowledgedEquipmentIdAndTimestamp.getItems().size());
|
||||||
|
assertEquals(0, page3AcknowledgedEquipmentIdAndTimestamp.getItems().size());
|
||||||
|
|
||||||
|
page1AcknowledgedEquipmentIdAndTimestamp.getItems().forEach(e -> assertEquals(true, e.isAcknowledged()) );
|
||||||
|
page2AcknowledgedEquipmentIdAndTimestamp.getItems().forEach(e -> assertEquals(true, e.isAcknowledged()) );
|
||||||
|
|
||||||
|
page1AcknowledgedEquipmentIdAndTimestamp.getItems().forEach(e -> assertTrue(equipmentIds.contains(e.getEquipmentId())));
|
||||||
|
page2AcknowledgedEquipmentIdAndTimestamp.getItems().forEach(e -> assertTrue(equipmentIds.contains(e.getEquipmentId())));
|
||||||
|
|
||||||
|
page1AcknowledgedEquipmentIdAndTimestamp.getItems().forEach(e -> assertTrue(e.getCreatedTimestamp() > checkTimestamp));
|
||||||
|
page2AcknowledgedEquipmentIdAndTimestamp.getItems().forEach(e -> assertTrue(e.getCreatedTimestamp() > checkTimestamp));
|
||||||
|
|
||||||
|
assertTrue(page3AcknowledgedEquipmentIdAndTimestamp.getContext().isLastPage());
|
||||||
|
|
||||||
//test first page of the results with empty sort order -> default sort order (by Id ascending)
|
//test first page of the results with empty sort order -> default sort order (by Id ascending)
|
||||||
PaginationResponse<Alarm> page1EmptySort = remoteInterface.getForCustomer(customerId_1, null, null, -1, Collections.emptyList(), context);
|
PaginationResponse<Alarm> page1EmptySort = remoteInterface.getForCustomer(customerId_1, null, null, -1, null, Collections.emptyList(), context);
|
||||||
assertEquals(10, page1EmptySort.getItems().size());
|
assertEquals(10, page1EmptySort.getItems().size());
|
||||||
|
|
||||||
List<String> expectedPage1EmptySortStrings = new ArrayList<>(Arrays.asList(new String[]{"qr_0", "qr_1", "qr_2", "qr_3", "qr_4", "qr_5", "qr_6", "qr_7", "qr_8", "qr_9" }));
|
List<String> expectedPage1EmptySortStrings = new ArrayList<>(Arrays.asList(new String[]{"qr_0", "qr_1", "qr_2", "qr_3", "qr_4", "qr_5", "qr_6", "qr_7", "qr_8", "qr_9" }));
|
||||||
@@ -303,7 +411,7 @@ public class AlarmServiceRemoteTest extends BaseRemoteTest {
|
|||||||
assertEquals(expectedPage1EmptySortStrings, actualPage1EmptySortStrings);
|
assertEquals(expectedPage1EmptySortStrings, actualPage1EmptySortStrings);
|
||||||
|
|
||||||
//test first page of the results with null sort order -> default sort order (by Id ascending)
|
//test first page of the results with null sort order -> default sort order (by Id ascending)
|
||||||
PaginationResponse<Alarm> page1NullSort = remoteInterface.getForCustomer(customerId_1, null, null, -1, null, context);
|
PaginationResponse<Alarm> page1NullSort = remoteInterface.getForCustomer(customerId_1, null, null, -1, null, null, context);
|
||||||
assertEquals(10, page1NullSort.getItems().size());
|
assertEquals(10, page1NullSort.getItems().size());
|
||||||
|
|
||||||
List<String> expectedPage1NullSortStrings = new ArrayList<>(Arrays.asList(new String[]{"qr_0", "qr_1", "qr_2", "qr_3", "qr_4", "qr_5", "qr_6", "qr_7", "qr_8", "qr_9" }));
|
List<String> expectedPage1NullSortStrings = new ArrayList<>(Arrays.asList(new String[]{"qr_0", "qr_1", "qr_2", "qr_3", "qr_4", "qr_5", "qr_6", "qr_7", "qr_8", "qr_9" }));
|
||||||
@@ -314,7 +422,7 @@ public class AlarmServiceRemoteTest extends BaseRemoteTest {
|
|||||||
|
|
||||||
|
|
||||||
//test first page of the results with sort descending order by a equipmentId property
|
//test first page of the results with sort descending order by a equipmentId property
|
||||||
PaginationResponse<Alarm> page1SingleSortDesc = remoteInterface.getForCustomer(customerId_1, null, null, -1, Collections.singletonList(new ColumnAndSort("equipmentId", SortOrder.desc)), context);
|
PaginationResponse<Alarm> page1SingleSortDesc = remoteInterface.getForCustomer(customerId_1, null, null, -1, null, Collections.singletonList(new ColumnAndSort("equipmentId", SortOrder.desc)), context);
|
||||||
assertEquals(10, page1SingleSortDesc.getItems().size());
|
assertEquals(10, page1SingleSortDesc.getItems().size());
|
||||||
|
|
||||||
List<String> expectedPage1SingleSortDescStrings = new ArrayList< >(Arrays.asList(new String[]{"qr_49", "qr_48", "qr_47", "qr_46", "qr_45", "qr_44", "qr_43", "qr_42", "qr_41", "qr_40" }));
|
List<String> expectedPage1SingleSortDescStrings = new ArrayList< >(Arrays.asList(new String[]{"qr_49", "qr_48", "qr_47", "qr_46", "qr_45", "qr_44", "qr_43", "qr_42", "qr_41", "qr_40" }));
|
||||||
@@ -326,13 +434,13 @@ public class AlarmServiceRemoteTest extends BaseRemoteTest {
|
|||||||
//test with explicit list of equipmentIds and explicit list of AlarmCodes
|
//test with explicit list of equipmentIds and explicit list of AlarmCodes
|
||||||
long createdAfterTs = pastTimestamp + 10;
|
long createdAfterTs = pastTimestamp + 10;
|
||||||
context = new PaginationContext<>(10);
|
context = new PaginationContext<>(10);
|
||||||
page1 = remoteInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, sortBy, context);
|
page1 = remoteInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, null, sortBy, context);
|
||||||
page2 = remoteInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, sortBy, page1.getContext());
|
page2 = remoteInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, null, sortBy, page1.getContext());
|
||||||
page3 = remoteInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, sortBy, page2.getContext());
|
page3 = remoteInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, null, sortBy, page2.getContext());
|
||||||
page4 = remoteInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, sortBy, page3.getContext());
|
page4 = remoteInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, null, sortBy, page3.getContext());
|
||||||
page5 = remoteInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, sortBy, page4.getContext());
|
page5 = remoteInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, null, sortBy, page4.getContext());
|
||||||
page6 = remoteInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, sortBy, page5.getContext());
|
page6 = remoteInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, null, sortBy, page5.getContext());
|
||||||
page7 = remoteInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, sortBy, page6.getContext());
|
page7 = remoteInterface.getForCustomer(customerId_1, equipmentIds, alarmCodes, createdAfterTs, null, sortBy, page6.getContext());
|
||||||
|
|
||||||
//verify returned pages
|
//verify returned pages
|
||||||
assertEquals(10, page1.getItems().size());
|
assertEquals(10, page1.getItems().size());
|
||||||
@@ -350,18 +458,69 @@ public class AlarmServiceRemoteTest extends BaseRemoteTest {
|
|||||||
|
|
||||||
//test with explicit list of equipmentIds of one element and explicit list of AlarmCodes of one element
|
//test with explicit list of equipmentIds of one element and explicit list of AlarmCodes of one element
|
||||||
context = new PaginationContext<>(10);
|
context = new PaginationContext<>(10);
|
||||||
page1 = remoteInterface.getForCustomer(customerId_1, Collections.singleton(equipmentIds.iterator().next()), Collections.singleton(AlarmCode.AccessPointIsUnreachable), -1, sortBy, context);
|
page1 = remoteInterface.getForCustomer(customerId_1, Collections.singleton(equipmentIds.iterator().next()), Collections.singleton(AlarmCode.AccessPointIsUnreachable), -1, null, sortBy, context);
|
||||||
assertEquals(1, page1.getItems().size());
|
assertEquals(1, page1.getItems().size());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAlarmAcknowledgedPaginationWithUpdate() {
|
||||||
|
Alarm alarm = createAlarmObject();
|
||||||
|
|
||||||
|
//create
|
||||||
|
Alarm created = remoteInterface.create(alarm);
|
||||||
|
assertNotNull(created);
|
||||||
|
assertEquals(alarm.getCustomerId(), created.getCustomerId());
|
||||||
|
assertEquals(alarm.getEquipmentId(), created.getEquipmentId());
|
||||||
|
assertEquals(alarm.getAlarmCode(), created.getAlarmCode());
|
||||||
|
assertEquals(alarm.getCreatedTimestamp(), created.getCreatedTimestamp());
|
||||||
|
assertNotNull(created.getDetails());
|
||||||
|
assertEquals(alarm.getDetails(), created.getDetails());
|
||||||
|
|
||||||
|
List<ColumnAndSort> sortBy = new ArrayList<>();
|
||||||
|
sortBy.addAll(Arrays.asList(new ColumnAndSort("equipmentId")));
|
||||||
|
PaginationContext<Alarm> context = new PaginationContext<>(10);
|
||||||
|
|
||||||
|
PaginationResponse<Alarm> page1CheckFalse = remoteInterface.getForCustomer(created.getCustomerId(), null, null, -1, false, sortBy, context);
|
||||||
|
|
||||||
|
assertEquals(1, page1CheckFalse.getItems().size());
|
||||||
|
page1CheckFalse.getItems().forEach(e -> assertFalse(e.isAcknowledged()));
|
||||||
|
|
||||||
|
PaginationResponse<Alarm> page1CheckTrue = remoteInterface.getForCustomer(created.getCustomerId(), null, null, -1, true, sortBy, context);
|
||||||
|
|
||||||
|
assertEquals(0, page1CheckTrue.getItems().size());
|
||||||
|
|
||||||
|
// update
|
||||||
|
created.setAcknowledged(true);
|
||||||
|
Alarm updated = remoteInterface.update(created);
|
||||||
|
assertNotNull(updated);
|
||||||
|
assertTrue(updated.isAcknowledged());
|
||||||
|
|
||||||
|
page1CheckFalse = remoteInterface.getForCustomer(created.getCustomerId(), null, null, -1, false, sortBy, context);
|
||||||
|
|
||||||
|
assertEquals(0, page1CheckFalse.getItems().size());
|
||||||
|
|
||||||
|
page1CheckTrue = remoteInterface.getForCustomer(created.getCustomerId(), null, null, -1, true, sortBy, context);
|
||||||
|
|
||||||
|
assertEquals(1, page1CheckTrue.getItems().size());
|
||||||
|
page1CheckTrue.getItems().forEach(e -> assertTrue(e.isAcknowledged()));
|
||||||
|
|
||||||
|
//delete
|
||||||
|
created = remoteInterface.delete(created.getCustomerId(), created.getEquipmentId(), created.getAlarmCode(), created.getCreatedTimestamp());
|
||||||
|
assertNotNull(created);
|
||||||
|
created = remoteInterface.getOrNull(created.getCustomerId(), created.getEquipmentId(), created.getAlarmCode(), created.getCreatedTimestamp());
|
||||||
|
assertNull(created);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testAlarmCountsRetrieval() {
|
public void testAlarmCountsRetrieval() {
|
||||||
//create some Alarms
|
//create some Alarms
|
||||||
Alarm mdl;
|
Alarm mdl;
|
||||||
int customerId_1 = getNextCustomerId();
|
final int customerId_1 = getNextCustomerId();
|
||||||
int customerId_2 = getNextCustomerId();
|
final int customerId_2 = getNextCustomerId();
|
||||||
|
final long equipmentId_1 = createEquipmentObject(customerId_1).getId();
|
||||||
|
|
||||||
|
|
||||||
int apNameIdx = 0;
|
int apNameIdx = 0;
|
||||||
Set<Long> equipmentIds = new HashSet<>();
|
Set<Long> equipmentIds = new HashSet<>();
|
||||||
@@ -369,11 +528,12 @@ public class AlarmServiceRemoteTest extends BaseRemoteTest {
|
|||||||
Set<Long> equipmentIds_AccessPointIsUnreachable = new HashSet<>();
|
Set<Long> equipmentIds_AccessPointIsUnreachable = new HashSet<>();
|
||||||
|
|
||||||
for(int i = 0; i< 50; i++){
|
for(int i = 0; i< 50; i++){
|
||||||
mdl = createAlarmObject();
|
mdl = createAlarmObject(customerId_1, createEquipmentObject(customerId_1).getId());
|
||||||
mdl.setCustomerId(customerId_1);
|
mdl.setEquipmentId(createEquipmentObject(customerId_1).getId());
|
||||||
mdl.setScopeId("qr_"+apNameIdx);
|
mdl.setScopeId("qr_"+apNameIdx);
|
||||||
if((i%2) == 0) {
|
if((i%2) == 0) {
|
||||||
mdl.setAlarmCode(AlarmCode.CPUUtilization);
|
mdl.setAlarmCode(AlarmCode.CPUUtilization);
|
||||||
|
mdl.setAcknowledged(true);
|
||||||
equipmentIds_CPUUtilization.add(mdl.getEquipmentId());
|
equipmentIds_CPUUtilization.add(mdl.getEquipmentId());
|
||||||
} else {
|
} else {
|
||||||
equipmentIds_AccessPointIsUnreachable.add(mdl.getEquipmentId());
|
equipmentIds_AccessPointIsUnreachable.add(mdl.getEquipmentId());
|
||||||
@@ -384,70 +544,152 @@ public class AlarmServiceRemoteTest extends BaseRemoteTest {
|
|||||||
remoteInterface.create(mdl);
|
remoteInterface.create(mdl);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
mdl = createAlarmObject(customerId_1, equipmentId_1);
|
||||||
mdl = createAlarmObject();
|
mdl.setCustomerId(customerId_1);
|
||||||
mdl.setCustomerId(customerId_1);
|
mdl.setAlarmCode(AlarmCode.GenericError);
|
||||||
mdl.setEquipmentId(0);
|
|
||||||
mdl.setAlarmCode(AlarmCode.GenericError);
|
remoteInterface.create(mdl);
|
||||||
|
|
||||||
remoteInterface.create(mdl);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int i = 0; i< 50; i++){
|
for(int i = 0; i< 50; i++){
|
||||||
mdl = createAlarmObject();
|
mdl = createAlarmObject(customerId_2, createEquipmentObject(customerId_2).getId());
|
||||||
mdl.setCustomerId(customerId_2);
|
mdl.setScopeId("qr_"+apNameIdx);
|
||||||
mdl.setScopeId("qr_"+apNameIdx);
|
mdl.setAcknowledged(false);
|
||||||
|
mdl.setAlarmCode(AlarmCode.GenericError);
|
||||||
apNameIdx++;
|
apNameIdx++;
|
||||||
remoteInterface.create(mdl);
|
remoteInterface.create(mdl);
|
||||||
}
|
}
|
||||||
|
|
||||||
Set<AlarmCode> alarmCodes = new HashSet<>(Arrays.asList(AlarmCode.AccessPointIsUnreachable, AlarmCode.GenericError, AlarmCode.CPUUtilization));
|
Set<AlarmCode> alarmCodes = new HashSet<>(Arrays.asList(AlarmCode.AccessPointIsUnreachable, AlarmCode.GenericError, AlarmCode.CPUUtilization));
|
||||||
|
|
||||||
AlarmCounts alarmCounts = remoteInterface.getAlarmCounts(customerId_1, equipmentIds, alarmCodes);
|
AlarmCounts alarmCounts = remoteInterface.getAlarmCounts(customerId_1, equipmentIds, alarmCodes, null);
|
||||||
assertEquals(0, alarmCounts.getCounter(0, AlarmCode.GenericError));
|
assertEquals(0, alarmCounts.getCounter(0, AlarmCode.GenericError));
|
||||||
assertEquals(25, alarmCounts.getCounter(0, AlarmCode.CPUUtilization));
|
assertEquals(25, alarmCounts.getCounter(0, AlarmCode.CPUUtilization));
|
||||||
assertEquals(25, alarmCounts.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
assertEquals(25, alarmCounts.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
||||||
|
assertEquals(25, alarmCounts.getSeverityCounter(StatusCode.requiresAttention));
|
||||||
|
assertEquals(25, alarmCounts.getSeverityCounter(StatusCode.error));
|
||||||
equipmentIds_CPUUtilization.forEach(eqId -> assertEquals(1, alarmCounts.getCounter(eqId, AlarmCode.CPUUtilization)));
|
equipmentIds_CPUUtilization.forEach(eqId -> assertEquals(1, alarmCounts.getCounter(eqId, AlarmCode.CPUUtilization)));
|
||||||
equipmentIds_AccessPointIsUnreachable.forEach(eqId -> assertEquals(1, alarmCounts.getCounter(eqId, AlarmCode.AccessPointIsUnreachable)) );
|
equipmentIds_AccessPointIsUnreachable.forEach(eqId -> assertEquals(1, alarmCounts.getCounter(eqId, AlarmCode.AccessPointIsUnreachable)) );
|
||||||
|
|
||||||
AlarmCounts alarmCounts_noEq = remoteInterface.getAlarmCounts(customerId_1, null, alarmCodes);
|
AlarmCounts alarmCounts_noEq = remoteInterface.getAlarmCounts(customerId_1, null, alarmCodes, null);
|
||||||
assertEquals(1, alarmCounts_noEq.getCounter(0, AlarmCode.GenericError));
|
assertEquals(1, alarmCounts_noEq.getCounter(0, AlarmCode.GenericError));
|
||||||
assertEquals(25, alarmCounts_noEq.getCounter(0, AlarmCode.CPUUtilization));
|
assertEquals(25, alarmCounts_noEq.getCounter(0, AlarmCode.CPUUtilization));
|
||||||
assertEquals(25, alarmCounts_noEq.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
assertEquals(25, alarmCounts_noEq.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
||||||
|
assertEquals(25, alarmCounts_noEq.getSeverityCounter(StatusCode.requiresAttention));
|
||||||
|
assertEquals(26, alarmCounts_noEq.getSeverityCounter(StatusCode.error));
|
||||||
assertTrue(alarmCounts_noEq.getCountsPerEquipmentIdMap().isEmpty());
|
assertTrue(alarmCounts_noEq.getCountsPerEquipmentIdMap().isEmpty());
|
||||||
assertEquals(3, alarmCounts_noEq.getTotalCountsPerAlarmCodeMap().size());
|
assertEquals(3, alarmCounts_noEq.getTotalCountsPerAlarmCodeMap().size());
|
||||||
|
|
||||||
AlarmCounts alarmCounts_noEq_1code = remoteInterface.getAlarmCounts(customerId_1, null, Collections.singleton(AlarmCode.CPUUtilization));
|
AlarmCounts alarmCounts_noEq_1code = remoteInterface.getAlarmCounts(customerId_1, null, Collections.singleton(AlarmCode.CPUUtilization), null);
|
||||||
assertEquals(0, alarmCounts_noEq_1code.getCounter(0, AlarmCode.GenericError));
|
assertEquals(0, alarmCounts_noEq_1code.getCounter(0, AlarmCode.GenericError));
|
||||||
assertEquals(25, alarmCounts_noEq_1code.getCounter(0, AlarmCode.CPUUtilization));
|
assertEquals(25, alarmCounts_noEq_1code.getCounter(0, AlarmCode.CPUUtilization));
|
||||||
assertEquals(0, alarmCounts_noEq_1code.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
assertEquals(0, alarmCounts_noEq_1code.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
||||||
|
assertEquals(25, alarmCounts_noEq_1code.getSeverityCounter(StatusCode.requiresAttention));
|
||||||
|
assertEquals(0, alarmCounts_noEq_1code.getSeverityCounter(StatusCode.error));
|
||||||
assertTrue(alarmCounts_noEq_1code.getCountsPerEquipmentIdMap().isEmpty());
|
assertTrue(alarmCounts_noEq_1code.getCountsPerEquipmentIdMap().isEmpty());
|
||||||
assertEquals(1, alarmCounts_noEq_1code.getTotalCountsPerAlarmCodeMap().size());
|
assertEquals(1, alarmCounts_noEq_1code.getTotalCountsPerAlarmCodeMap().size());
|
||||||
|
|
||||||
AlarmCounts alarmCounts_1Eq_1code = remoteInterface.getAlarmCounts(customerId_1, Collections.singleton(equipmentIds.iterator().next()), Collections.singleton(AlarmCode.CPUUtilization));
|
AlarmCounts alarmCounts_acknowledgedT = remoteInterface.getAlarmCounts(customerId_1, null, Collections.singleton(AlarmCode.CPUUtilization), true);
|
||||||
|
assertTrue(alarmCounts_acknowledgedT.getAcknowledged());
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedT.getCounter(0, AlarmCode.GenericError));
|
||||||
|
assertEquals(25, alarmCounts_acknowledgedT.getCounter(0, AlarmCode.CPUUtilization));
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedT.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
||||||
|
assertEquals(25, alarmCounts_acknowledgedT.getSeverityCounter(StatusCode.requiresAttention));
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedT.getSeverityCounter(StatusCode.error));
|
||||||
|
assertTrue(alarmCounts_acknowledgedT.getCountsPerEquipmentIdMap().isEmpty());
|
||||||
|
assertEquals(1, alarmCounts_acknowledgedT.getTotalCountsPerAlarmCodeMap().size());
|
||||||
|
|
||||||
|
AlarmCounts alarmCounts_acknowledgedF = remoteInterface.getAlarmCounts(customerId_1, null, Collections.singleton(AlarmCode.CPUUtilization), false);
|
||||||
|
assertFalse(alarmCounts_acknowledgedF.getAcknowledged());
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedF.getCounter(0, AlarmCode.GenericError));
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedF.getCounter(0, AlarmCode.CPUUtilization));
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedF.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedF.getSeverityCounter(StatusCode.requiresAttention));
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedF.getSeverityCounter(StatusCode.error));
|
||||||
|
assertTrue(alarmCounts_acknowledgedF.getCountsPerEquipmentIdMap().isEmpty());
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedF.getTotalCountsPerAlarmCodeMap().size());
|
||||||
|
|
||||||
|
AlarmCounts alarmCounts_acknowledgedF2 = remoteInterface.getAlarmCounts(customerId_2, null, Collections.singleton(AlarmCode.GenericError), false);
|
||||||
|
assertFalse(alarmCounts_acknowledgedF2.getAcknowledged());
|
||||||
|
assertEquals(50, alarmCounts_acknowledgedF2.getCounter(0, AlarmCode.GenericError));
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedF2.getCounter(0, AlarmCode.CPUUtilization));
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedF2.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
||||||
|
assertEquals(0, alarmCounts_acknowledgedF2.getSeverityCounter(StatusCode.requiresAttention));
|
||||||
|
assertEquals(50, alarmCounts_acknowledgedF2.getSeverityCounter(StatusCode.error));
|
||||||
|
assertTrue(alarmCounts_acknowledgedF2.getCountsPerEquipmentIdMap().isEmpty());
|
||||||
|
assertEquals(1, alarmCounts_acknowledgedF2.getTotalCountsPerAlarmCodeMap().size());
|
||||||
|
|
||||||
|
AlarmCounts alarmCounts_1Eq_1code = remoteInterface.getAlarmCounts(customerId_1, Collections.singleton(equipmentIds.iterator().next()), Collections.singleton(AlarmCode.CPUUtilization), null);
|
||||||
assertEquals(0, alarmCounts_1Eq_1code.getCounter(0, AlarmCode.GenericError));
|
assertEquals(0, alarmCounts_1Eq_1code.getCounter(0, AlarmCode.GenericError));
|
||||||
assertEquals(1, alarmCounts_1Eq_1code.getCounter(equipmentIds.iterator().next(), AlarmCode.CPUUtilization));
|
assertEquals(1, alarmCounts_1Eq_1code.getCounter(equipmentIds.iterator().next(), AlarmCode.CPUUtilization));
|
||||||
assertEquals(1, alarmCounts_1Eq_1code.getCounter(0, AlarmCode.CPUUtilization));
|
assertEquals(1, alarmCounts_1Eq_1code.getCounter(0, AlarmCode.CPUUtilization));
|
||||||
assertEquals(0, alarmCounts_1Eq_1code.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
assertEquals(0, alarmCounts_1Eq_1code.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
||||||
|
assertEquals(1, alarmCounts_1Eq_1code.getSeverityCounter(StatusCode.requiresAttention));
|
||||||
|
assertEquals(0, alarmCounts_1Eq_1code.getSeverityCounter(StatusCode.error));
|
||||||
assertEquals(1, alarmCounts_1Eq_1code.getCountsPerEquipmentIdMap().size());
|
assertEquals(1, alarmCounts_1Eq_1code.getCountsPerEquipmentIdMap().size());
|
||||||
assertEquals(1, alarmCounts_1Eq_1code.getTotalCountsPerAlarmCodeMap().size());
|
assertEquals(1, alarmCounts_1Eq_1code.getTotalCountsPerAlarmCodeMap().size());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAlarmCountsForSingleEquipment() {
|
||||||
|
//create some Alarms
|
||||||
|
Alarm mdl;
|
||||||
|
int customerId = getNextCustomerId();
|
||||||
|
long equipmentId = getNextEquipmentId();
|
||||||
|
|
||||||
|
|
||||||
|
mdl = createAlarmObject();
|
||||||
|
mdl.setCustomerId(customerId);
|
||||||
|
mdl.setEquipmentId(equipmentId);
|
||||||
|
mdl.setAlarmCode(AlarmCode.CPUUtilization);
|
||||||
|
remoteInterface.create(mdl);
|
||||||
|
|
||||||
|
mdl.setAlarmCode(AlarmCode.AccessPointIsUnreachable);
|
||||||
|
remoteInterface.create(mdl);
|
||||||
|
|
||||||
|
Set<AlarmCode> alarmCodes = new HashSet<>(Arrays.asList(AlarmCode.AccessPointIsUnreachable, AlarmCode.GenericError, AlarmCode.CPUUtilization));
|
||||||
|
|
||||||
|
AlarmCounts alarmCounts = remoteInterface.getAlarmCounts(customerId, Collections.singleton(equipmentId), alarmCodes, null);
|
||||||
|
assertEquals(0, alarmCounts.getCounter(0, AlarmCode.GenericError));
|
||||||
|
assertEquals(1, alarmCounts.getCounter(0, AlarmCode.CPUUtilization));
|
||||||
|
assertEquals(1, alarmCounts.getCounter(0, AlarmCode.AccessPointIsUnreachable));
|
||||||
|
assertEquals(2, alarmCounts.getCounter(equipmentId, null));
|
||||||
|
assertEquals(1, alarmCounts.getSeverityCounter(StatusCode.requiresAttention));
|
||||||
|
assertEquals(1, alarmCounts.getSeverityCounter(StatusCode.error));
|
||||||
|
|
||||||
|
//clean up after the test
|
||||||
|
remoteInterface.delete(customerId, equipmentId);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private Alarm createAlarmObject() {
|
private Alarm createAlarmObject() {
|
||||||
Alarm result = new Alarm();
|
int customerId = getNextCustomerId();
|
||||||
result.setCustomerId(getNextCustomerId());
|
return createAlarmObject(customerId, createEquipmentObject(customerId).getId());
|
||||||
result.setEquipmentId(getNextEquipmentId());
|
}
|
||||||
|
|
||||||
|
private Alarm createAlarmObject(int customerId, long equipmentId) {
|
||||||
|
Alarm result = new Alarm();
|
||||||
|
result.setCustomerId(customerId);
|
||||||
result.setAlarmCode(AlarmCode.AccessPointIsUnreachable);
|
result.setAlarmCode(AlarmCode.AccessPointIsUnreachable);
|
||||||
result.setCreatedTimestamp(System.currentTimeMillis());
|
result.setCreatedTimestamp(System.currentTimeMillis());
|
||||||
|
result.setEquipmentId(equipmentId);
|
||||||
|
|
||||||
result.setScopeId("test-scope-" + result.getEquipmentId());
|
result.setScopeId("test-scope-" + result.getEquipmentId());
|
||||||
|
|
||||||
AlarmDetails details = new AlarmDetails();
|
AlarmDetails details = new AlarmDetails();
|
||||||
details.setMessage("test-details-" + result.getEquipmentId());
|
details.setMessage("test-details-" + result.getEquipmentId());
|
||||||
result.setDetails(details );
|
result.setDetails(details );
|
||||||
|
|
||||||
return result;
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
1
alarm-service/.gitignore
vendored
Normal file
1
alarm-service/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -15,29 +15,46 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>base-container</artifactId>
|
<artifactId>base-container</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>cloud-event-dispatcher-interface</artifactId>
|
<artifactId>cloud-event-dispatcher-interface</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>alarm-models</artifactId>
|
<artifactId>alarm-models</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>alarm-datastore-interface</artifactId>
|
<artifactId>alarm-datastore-interface</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<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>
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>alarm-datastore-inmemory</artifactId>
|
<artifactId>alarm-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<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>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
@@ -45,7 +62,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>cloud-event-dispatcher-empty</artifactId>
|
<artifactId>cloud-event-dispatcher-empty</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|||||||
@@ -16,11 +16,11 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
|
|
||||||
import com.telecominfraproject.wlan.cloudeventdispatcher.CloudEventDispatcherInterface;
|
import com.telecominfraproject.wlan.cloudeventdispatcher.CloudEventDispatcherInterface;
|
||||||
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
|
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
|
||||||
import com.telecominfraproject.wlan.core.model.json.GenericResponse;
|
|
||||||
import com.telecominfraproject.wlan.core.model.pagination.ColumnAndSort;
|
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.datastore.exceptions.DsDataValidationException;
|
import com.telecominfraproject.wlan.datastore.exceptions.DsDataValidationException;
|
||||||
|
import com.telecominfraproject.wlan.equipment.EquipmentServiceInterface;
|
||||||
import com.telecominfraproject.wlan.systemevent.models.SystemEvent;
|
import com.telecominfraproject.wlan.systemevent.models.SystemEvent;
|
||||||
|
|
||||||
import com.telecominfraproject.wlan.alarm.datastore.AlarmDatastore;
|
import com.telecominfraproject.wlan.alarm.datastore.AlarmDatastore;
|
||||||
@@ -49,6 +49,7 @@ public class AlarmController {
|
|||||||
|
|
||||||
@Autowired private AlarmDatastore alarmDatastore;
|
@Autowired private AlarmDatastore alarmDatastore;
|
||||||
@Autowired private CloudEventDispatcherInterface cloudEventDispatcher;
|
@Autowired private CloudEventDispatcherInterface cloudEventDispatcher;
|
||||||
|
@Autowired private EquipmentServiceInterface equipmentServiceInterface;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -67,9 +68,18 @@ public class AlarmController {
|
|||||||
LOG.error("Failed to create Alarm, request contains unsupported value: {}", alarm);
|
LOG.error("Failed to create Alarm, request contains unsupported value: {}", alarm);
|
||||||
throw new DsDataValidationException("Alarm contains unsupported value");
|
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 = System.currentTimeMillis();
|
long ts = alarm.getCreatedTimestamp();
|
||||||
if (alarm.getCreatedTimestamp() == 0) {
|
if (ts == 0) {
|
||||||
|
ts = System.currentTimeMillis();
|
||||||
alarm.setCreatedTimestamp(ts);
|
alarm.setCreatedTimestamp(ts);
|
||||||
}
|
}
|
||||||
alarm.setLastModifiedTimestamp(ts);
|
alarm.setLastModifiedTimestamp(ts);
|
||||||
@@ -78,10 +88,9 @@ public class AlarmController {
|
|||||||
|
|
||||||
LOG.debug("Created Alarm {}", ret);
|
LOG.debug("Created Alarm {}", ret);
|
||||||
|
|
||||||
AlarmAddedEvent event = new AlarmAddedEvent(ret);
|
AlarmAddedEvent event = new AlarmAddedEvent(ret, ts);
|
||||||
publishEvent(event);
|
publishEvent(event);
|
||||||
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,10 +132,11 @@ public class AlarmController {
|
|||||||
|
|
||||||
@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,
|
||||||
@RequestParam Set<Long> equipmentIdSet,
|
@RequestParam(required = false) Set<Long> equipmentIdSet,
|
||||||
@RequestParam Set<AlarmCode> alarmCodeSet,
|
@RequestParam(required = false) Set<AlarmCode> alarmCodeSet,
|
||||||
@RequestParam long createdAfterTimestamp,
|
@RequestParam(required = false) long createdAfterTimestamp,
|
||||||
@RequestParam List<ColumnAndSort> sortBy,
|
@RequestParam(required = false) Boolean acknowledged,
|
||||||
|
@RequestParam(required = false) List<ColumnAndSort> sortBy,
|
||||||
@RequestParam(required = false) PaginationContext<Alarm> paginationContext) {
|
@RequestParam(required = false) PaginationContext<Alarm> paginationContext) {
|
||||||
|
|
||||||
if(paginationContext == null) {
|
if(paginationContext == null) {
|
||||||
@@ -148,7 +158,7 @@ public class AlarmController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
PaginationResponse<Alarm> onePage = this.alarmDatastore
|
PaginationResponse<Alarm> onePage = this.alarmDatastore
|
||||||
.getForCustomer(customerId, equipmentIdSet, alarmCodeSet, createdAfterTimestamp, sortBy, paginationContext);
|
.getForCustomer(customerId, equipmentIdSet, alarmCodeSet, createdAfterTimestamp, acknowledged, sortBy, paginationContext);
|
||||||
ret.setContext(onePage.getContext());
|
ret.setContext(onePage.getContext());
|
||||||
ret.getItems().addAll(onePage.getItems());
|
ret.getItems().addAll(onePage.getItems());
|
||||||
|
|
||||||
@@ -233,22 +243,17 @@ public class AlarmController {
|
|||||||
@RequestMapping(value = "/counts", method = RequestMethod.GET)
|
@RequestMapping(value = "/counts", method = RequestMethod.GET)
|
||||||
public AlarmCounts getAlarmCounts(@RequestParam int customerId,
|
public AlarmCounts getAlarmCounts(@RequestParam int customerId,
|
||||||
@RequestParam Set<Long> equipmentIdSet,
|
@RequestParam Set<Long> equipmentIdSet,
|
||||||
@RequestParam Set<AlarmCode> alarmCodeSet) {
|
@RequestParam Set<AlarmCode> alarmCodeSet,
|
||||||
|
@RequestParam Boolean acknowledged) {
|
||||||
|
|
||||||
LOG.debug("Getting Alarm counts for {} {} {}", customerId, equipmentIdSet, alarmCodeSet);
|
LOG.debug("Getting Alarm counts for {} {} {} {}", customerId, equipmentIdSet, alarmCodeSet, acknowledged);
|
||||||
|
|
||||||
AlarmCounts ret = alarmDatastore.getAlarmCounts(customerId, equipmentIdSet, alarmCodeSet);
|
AlarmCounts ret = alarmDatastore.getAlarmCounts(customerId, equipmentIdSet, alarmCodeSet, acknowledged);
|
||||||
|
|
||||||
LOG.debug("Alarm counts: {}", ret);
|
LOG.debug("Alarm counts: {}", ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping(value = "/resetCounts", method = RequestMethod.POST)
|
|
||||||
public GenericResponse resetAlarmCounters() {
|
|
||||||
alarmDatastore.resetAlarmCounters();
|
|
||||||
return new GenericResponse(true, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void publishEvent(SystemEvent event) {
|
private void publishEvent(SystemEvent event) {
|
||||||
if (event == null) {
|
if (event == null) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -262,11 +262,17 @@ components:
|
|||||||
customerId:
|
customerId:
|
||||||
type: integer
|
type: integer
|
||||||
format: int32
|
format: int32
|
||||||
|
acknowledged:
|
||||||
|
type: boolean
|
||||||
countsPerEquipmentIdMap:
|
countsPerEquipmentIdMap:
|
||||||
$ref: '#/components/schemas/CountsPerEquipmentIdPerAlarmCodeMap'
|
$ref: '#/components/schemas/CountsPerEquipmentIdPerAlarmCodeMap'
|
||||||
totalCountsPerAlarmCodeMap:
|
totalCountsPerAlarmCodeMap:
|
||||||
$ref: '#/components/schemas/CountsPerAlarmCodeMap'
|
$ref: '#/components/schemas/CountsPerAlarmCodeMap'
|
||||||
|
totalCountsPerEquipmentIdMap:
|
||||||
|
$ref: '#/components/schemas/CountsPerEquipmentIdMap'
|
||||||
|
totalCountsBySeverityMap:
|
||||||
|
$ref: '#/components/schemas/CountsBySeverityMap'
|
||||||
|
|
||||||
CountsPerAlarmCodeMap:
|
CountsPerAlarmCodeMap:
|
||||||
description: map of AlarmCode to the integer count of alarms
|
description: map of AlarmCode to the integer count of alarms
|
||||||
type: object
|
type: object
|
||||||
@@ -279,6 +285,20 @@ components:
|
|||||||
type: object
|
type: object
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
$ref: '#/components/schemas/CountsPerAlarmCodeMap'
|
$ref: '#/components/schemas/CountsPerAlarmCodeMap'
|
||||||
|
|
||||||
|
CountsPerEquipmentIdMap:
|
||||||
|
description: map of equipmentId to integer count of alarms
|
||||||
|
type: object
|
||||||
|
additionalProperties:
|
||||||
|
type: integer
|
||||||
|
format: int32
|
||||||
|
|
||||||
|
CountsBySeverityMap:
|
||||||
|
description: map of severity to integer count of alarms
|
||||||
|
type: object
|
||||||
|
additionalProperties:
|
||||||
|
type: integer
|
||||||
|
format: int32
|
||||||
|
|
||||||
#
|
#
|
||||||
# Other related objects
|
# Other related objects
|
||||||
@@ -534,7 +554,7 @@ paths:
|
|||||||
- name: equipmentIdSet
|
- name: equipmentIdSet
|
||||||
in: query
|
in: query
|
||||||
description: Equipment ID Set
|
description: Equipment ID Set
|
||||||
required: true
|
required: false
|
||||||
schema:
|
schema:
|
||||||
type: array
|
type: array
|
||||||
items:
|
items:
|
||||||
@@ -543,7 +563,7 @@ paths:
|
|||||||
- name: alarmCodeSet
|
- name: alarmCodeSet
|
||||||
in: query
|
in: query
|
||||||
description: Alarm Code Set
|
description: Alarm Code Set
|
||||||
required: true
|
required: false
|
||||||
schema:
|
schema:
|
||||||
type: array
|
type: array
|
||||||
items:
|
items:
|
||||||
@@ -551,14 +571,20 @@ paths:
|
|||||||
- name: createdAfterTimestamp
|
- name: createdAfterTimestamp
|
||||||
in: query
|
in: query
|
||||||
description: Created After Timestamp
|
description: Created After Timestamp
|
||||||
required: true
|
required: false
|
||||||
schema:
|
schema:
|
||||||
type: integer
|
type: integer
|
||||||
format: int64
|
format: int64
|
||||||
|
- name: acknowledged
|
||||||
|
in: query
|
||||||
|
description: Acknowledged flag
|
||||||
|
required: false
|
||||||
|
schema:
|
||||||
|
type: boolean
|
||||||
- name: sortBy
|
- name: sortBy
|
||||||
in: query
|
in: query
|
||||||
description: sort options
|
description: sort options
|
||||||
required: true
|
required: false
|
||||||
schema:
|
schema:
|
||||||
type: array
|
type: array
|
||||||
items:
|
items:
|
||||||
@@ -623,6 +649,12 @@ paths:
|
|||||||
type: array
|
type: array
|
||||||
items:
|
items:
|
||||||
$ref: '#/components/schemas/AlarmCode'
|
$ref: '#/components/schemas/AlarmCode'
|
||||||
|
- name: acknowledged
|
||||||
|
in: query
|
||||||
|
description: Acknowledged flag
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: boolean
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
description: successful operation
|
description: successful operation
|
||||||
|
|||||||
@@ -17,7 +17,11 @@ import org.springframework.test.context.ActiveProfiles;
|
|||||||
import org.springframework.test.context.junit4.SpringRunner;
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
|
|
||||||
import com.telecominfraproject.wlan.cloudeventdispatcher.CloudEventDispatcherEmpty;
|
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.datastore.inmemory.AlarmDatastoreInMemory;
|
||||||
import com.telecominfraproject.wlan.alarm.models.Alarm;
|
import com.telecominfraproject.wlan.alarm.models.Alarm;
|
||||||
import com.telecominfraproject.wlan.alarm.models.AlarmCode;
|
import com.telecominfraproject.wlan.alarm.models.AlarmCode;
|
||||||
@@ -39,10 +43,14 @@ import com.telecominfraproject.wlan.alarm.models.AlarmDetails;
|
|||||||
CloudEventDispatcherEmpty.class,
|
CloudEventDispatcherEmpty.class,
|
||||||
AlarmDatastoreInMemory.class,
|
AlarmDatastoreInMemory.class,
|
||||||
AlarmControllerTest.Config.class,
|
AlarmControllerTest.Config.class,
|
||||||
|
EquipmentServiceLocal.class,
|
||||||
|
EquipmentController.class,
|
||||||
|
EquipmentDatastoreInMemory.class
|
||||||
})
|
})
|
||||||
public class AlarmControllerTest {
|
public class AlarmControllerTest {
|
||||||
|
|
||||||
@Autowired private AlarmController alarmController;
|
@Autowired private AlarmController alarmController;
|
||||||
|
@Autowired EquipmentServiceLocal equipmentServicelocal;
|
||||||
|
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
@@ -59,8 +67,9 @@ public class AlarmControllerTest {
|
|||||||
|
|
||||||
//Create new Alarm - success
|
//Create new Alarm - success
|
||||||
Alarm alarm = new Alarm();
|
Alarm alarm = new Alarm();
|
||||||
alarm.setCustomerId((int) testSequence.getAndIncrement());
|
int customerId = (int) testSequence.getAndIncrement();
|
||||||
alarm.setEquipmentId(testSequence.getAndIncrement());
|
alarm.setCustomerId(customerId);
|
||||||
|
alarm.setEquipmentId(createEquipmentObject(customerId).getId());
|
||||||
alarm.setAlarmCode(AlarmCode.AccessPointIsUnreachable);
|
alarm.setAlarmCode(AlarmCode.AccessPointIsUnreachable);
|
||||||
alarm.setCreatedTimestamp(System.currentTimeMillis());
|
alarm.setCreatedTimestamp(System.currentTimeMillis());
|
||||||
|
|
||||||
@@ -91,5 +100,14 @@ public class AlarmControllerTest {
|
|||||||
assertEquals(expected.getDetails(), actual.getDetails());
|
assertEquals(expected.getDetails(), actual.getDetails());
|
||||||
//TODO: add more fields to check here
|
//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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<artifactId>all-cloud-and-opensync-gw-in-one-docker</artifactId>
|
<artifactId>all-cloud-and-opensync-gw-in-one-docker</artifactId>
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>all-cloud-and-opensync-gw-in-one-process</artifactId>
|
<artifactId>all-cloud-and-opensync-gw-in-one-process</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|||||||
@@ -57,6 +57,9 @@ OVSDB_DEVICE_RADIO_1="${OVSDB_DEVICE_RADIO_1:=radio1}"
|
|||||||
echo $OVSDB_DEVICE_RADIO_1
|
echo $OVSDB_DEVICE_RADIO_1
|
||||||
OVSDB_DEVICE_RADIO_2="${OVSDB_DEVICE_RADIO_2:=radio2}"
|
OVSDB_DEVICE_RADIO_2="${OVSDB_DEVICE_RADIO_2:=radio2}"
|
||||||
echo $OVSDB_DEVICE_RADIO_2
|
echo $OVSDB_DEVICE_RADIO_2
|
||||||
|
OVSDB_OFF_CHANNEL_REPORTING_INTERVAL_SECONDS="${OVSDB_OFF_CHANNEL_REPORTING_INTERVAL_SECONDS:=120}"
|
||||||
|
OVSDB_REPORTING_INTERVAL_SECONDS="${OVSDB_REPORTING_INTERVAL_SECONDS:=60}"
|
||||||
|
|
||||||
|
|
||||||
echo Reading AP configuration from $OVSDB_CONFIG_FILE
|
echo Reading AP configuration from $OVSDB_CONFIG_FILE
|
||||||
|
|
||||||
@@ -150,6 +153,8 @@ OVSDB_PROPS="$OVSDB_PROPS -Dtip.wlan.ovsdb.wifi-iface.default_radio2=$OVSDB_IF_D
|
|||||||
OVSDB_PROPS="$OVSDB_PROPS -Dtip.wlan.ovsdb.wifi-device.radio0=$OVSDB_DEVICE_RADIO_0"
|
OVSDB_PROPS="$OVSDB_PROPS -Dtip.wlan.ovsdb.wifi-device.radio0=$OVSDB_DEVICE_RADIO_0"
|
||||||
OVSDB_PROPS="$OVSDB_PROPS -Dtip.wlan.ovsdb.wifi-device.radio1=$OVSDB_DEVICE_RADIO_1"
|
OVSDB_PROPS="$OVSDB_PROPS -Dtip.wlan.ovsdb.wifi-device.radio1=$OVSDB_DEVICE_RADIO_1"
|
||||||
OVSDB_PROPS="$OVSDB_PROPS -Dtip.wlan.ovsdb.wifi-device.radio2=$OVSDB_DEVICE_RADIO_2"
|
OVSDB_PROPS="$OVSDB_PROPS -Dtip.wlan.ovsdb.wifi-device.radio2=$OVSDB_DEVICE_RADIO_2"
|
||||||
|
OVSDB_PROPS="$OVSDB_PROPS -Dtip.wlan.defaultOffChannelReportingIntervalSeconds=$OVSDB_OFF_CHANNEL_REPORTING_INTERVAL_SECONDS"
|
||||||
|
OVSDB_PROPS="$OVSDB_PROPS -Dtip.wlan.defaultReportingIntervalSeconds=$OVSDB_REPORTING_INTERVAL_SECONDS"
|
||||||
|
|
||||||
echo OVSDB_PROPS $OVSDB_PROPS
|
echo OVSDB_PROPS $OVSDB_PROPS
|
||||||
|
|
||||||
|
|||||||
@@ -39,6 +39,8 @@ OVSDB_PROPS+=" -Dtip.wlan.ovsdb.wifi-iface.default_radio2=$OVSDB_IF_DEFAULT_RADI
|
|||||||
OVSDB_PROPS+=" -Dtip.wlan.ovsdb.wifi-device.radio0=$OVSDB_DEVICE_RADIO_0"
|
OVSDB_PROPS+=" -Dtip.wlan.ovsdb.wifi-device.radio0=$OVSDB_DEVICE_RADIO_0"
|
||||||
OVSDB_PROPS+=" -Dtip.wlan.ovsdb.wifi-device.radio1=$OVSDB_DEVICE_RADIO_1"
|
OVSDB_PROPS+=" -Dtip.wlan.ovsdb.wifi-device.radio1=$OVSDB_DEVICE_RADIO_1"
|
||||||
OVSDB_PROPS+=" -Dtip.wlan.ovsdb.wifi-device.radio2=$OVSDB_DEVICE_RADIO_2"
|
OVSDB_PROPS+=" -Dtip.wlan.ovsdb.wifi-device.radio2=$OVSDB_DEVICE_RADIO_2"
|
||||||
|
OVSDB_PROPS+=" -Dtip.wlan.defaultOffChannelReportingIntervalSeconds=$OVSDB_OFF_CHANNEL_REPORTING_INTERVAL_SECONDS"
|
||||||
|
OVSDB_PROPS+=" -Dtip.wlan.defaultReportingIntervalSeconds=$OVSDB_REPORTING_INTERVAL_SECONDS"
|
||||||
|
|
||||||
echo OVSDB_PROPS $OVSDB_PROPS
|
echo OVSDB_PROPS $OVSDB_PROPS
|
||||||
|
|
||||||
|
|||||||
1
all-cloud-and-opensync-gw-in-one-process/.gitignore
vendored
Normal file
1
all-cloud-and-opensync-gw-in-one-process/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -21,350 +21,344 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>opensync-ext-cloud</artifactId>
|
<artifactId>opensync-ext-cloud</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- PortForwarding Gateway - to support remote ssh connections to APs -->
|
<!-- PortForwarding Gateway - to support remote ssh connections to APs -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>port-forwarding-gateway</artifactId>
|
<artifactId>port-forwarding-gateway</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- portal services -->
|
<!-- portal services -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>webtoken-auth-service</artifactId>
|
<artifactId>webtoken-auth-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>portal-services</artifactId>
|
<artifactId>portal-services</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>customer-service-local</artifactId>
|
<artifactId>customer-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>location-service-local</artifactId>
|
<artifactId>location-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>equipment-service-local</artifactId>
|
<artifactId>equipment-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>profile-service-local</artifactId>
|
<artifactId>profile-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>portal-user-service-local</artifactId>
|
<artifactId>portal-user-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>status-service-local</artifactId>
|
<artifactId>status-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>client-service-local</artifactId>
|
<artifactId>client-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>alarm-service-local</artifactId>
|
<artifactId>alarm-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>service-metric-service-local</artifactId>
|
<artifactId>service-metric-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>system-event-service-local</artifactId>
|
<artifactId>system-event-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>routing-service-local</artifactId>
|
<artifactId>routing-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>firmware-service-local</artifactId>
|
<artifactId>firmware-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>manufacturer-service-local</artifactId>
|
<artifactId>manufacturer-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>adoption-metrics-service-local</artifactId>
|
<artifactId>adoption-metrics-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>filestore-service</artifactId>
|
<artifactId>filestore-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- prov services -->
|
<!-- prov services -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>customer-service</artifactId>
|
<artifactId>customer-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>customer-datastore-inmemory</artifactId>
|
<artifactId>customer-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>location-service</artifactId>
|
<artifactId>location-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>location-datastore-inmemory</artifactId>
|
<artifactId>location-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>equipment-service</artifactId>
|
<artifactId>equipment-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>equipment-datastore-inmemory</artifactId>
|
<artifactId>equipment-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>profile-service</artifactId>
|
<artifactId>profile-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>profile-datastore-inmemory</artifactId>
|
<artifactId>profile-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>portal-user-service</artifactId>
|
<artifactId>portal-user-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>portal-user-datastore-inmemory</artifactId>
|
<artifactId>portal-user-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>firmware-service</artifactId>
|
<artifactId>firmware-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>firmware-datastore-inmemory</artifactId>
|
<artifactId>firmware-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>manufacturer-service</artifactId>
|
<artifactId>manufacturer-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>manufacturer-datastore-inmemory</artifactId>
|
<artifactId>manufacturer-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>adoption-metrics-service</artifactId>
|
<artifactId>adoption-metrics-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>adoption-metrics-datastore-inmemory</artifactId>
|
<artifactId>adoption-metrics-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>cloud-event-dispatcher-local</artifactId>
|
<artifactId>cloud-event-dispatcher-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- ssc services -->
|
<!-- ssc services -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>cloud-event-dispatcher</artifactId>
|
<artifactId>cloud-event-dispatcher</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>service-metric-service</artifactId>
|
<artifactId>service-metric-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>service-metric-datastore-inmemory</artifactId>
|
<artifactId>service-metric-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>system-event-service</artifactId>
|
<artifactId>system-event-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>system-event-datastore-inmemory</artifactId>
|
<artifactId>system-event-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>alarm-service</artifactId>
|
<artifactId>alarm-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>alarm-datastore-inmemory</artifactId>
|
<artifactId>alarm-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>status-service</artifactId>
|
<artifactId>status-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>status-datastore-inmemory</artifactId>
|
<artifactId>status-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>client-service</artifactId>
|
<artifactId>client-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>client-datastore-inmemory</artifactId>
|
<artifactId>client-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>routing-service</artifactId>
|
<artifactId>routing-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>routing-datastore-inmemory</artifactId>
|
<artifactId>routing-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- Stream Processors -->
|
<!-- Stream Processors -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>single-process-streams</artifactId>
|
<artifactId>single-process-streams</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>provisioning-sp</artifactId>
|
<artifactId>provisioning-sp</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>dashboard-sp</artifactId>
|
<artifactId>dashboard-sp</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<artifactId>equipment-alarms-sp</artifactId>
|
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>adoption-metrics-sp</artifactId>
|
<artifactId>adoption-metrics-sp</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>equipment-gateway-service-local</artifactId>
|
<artifactId>equipment-gateway-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|||||||
@@ -86,6 +86,7 @@ import com.telecominfraproject.wlan.servicemetric.models.ServiceMetricDataType;
|
|||||||
import com.telecominfraproject.wlan.status.StatusServiceInterface;
|
import com.telecominfraproject.wlan.status.StatusServiceInterface;
|
||||||
import com.telecominfraproject.wlan.status.dashboard.models.CustomerPortalDashboardStatus;
|
import com.telecominfraproject.wlan.status.dashboard.models.CustomerPortalDashboardStatus;
|
||||||
import com.telecominfraproject.wlan.status.equipment.models.EquipmentAdminStatusData;
|
import com.telecominfraproject.wlan.status.equipment.models.EquipmentAdminStatusData;
|
||||||
|
import com.telecominfraproject.wlan.status.equipment.models.EquipmentChannelStatusData;
|
||||||
import com.telecominfraproject.wlan.status.equipment.models.EquipmentProtocolState;
|
import com.telecominfraproject.wlan.status.equipment.models.EquipmentProtocolState;
|
||||||
import com.telecominfraproject.wlan.status.equipment.models.EquipmentProtocolStatusData;
|
import com.telecominfraproject.wlan.status.equipment.models.EquipmentProtocolStatusData;
|
||||||
import com.telecominfraproject.wlan.status.equipment.report.models.EquipmentCapacityDetails;
|
import com.telecominfraproject.wlan.status.equipment.report.models.EquipmentCapacityDetails;
|
||||||
@@ -950,6 +951,21 @@ public class AllInOneWithGatewayStartListener implements ApplicationRunner {
|
|||||||
|
|
||||||
status.setDetails(eqRadioUtilReport);
|
status.setDetails(eqRadioUtilReport);
|
||||||
statusList.add(status);
|
statusList.add(status);
|
||||||
|
|
||||||
|
status = new Status();
|
||||||
|
status.setCustomerId(equipment.getCustomerId());
|
||||||
|
status.setEquipmentId(equipment.getId());
|
||||||
|
EquipmentChannelStatusData eqChannelStatus = new EquipmentChannelStatusData();
|
||||||
|
|
||||||
|
Map<RadioType, Integer> channelStatusDataMap = new EnumMap<>(RadioType.class);
|
||||||
|
channelStatusDataMap.put(RadioType.is2dot4GHz, 6);
|
||||||
|
channelStatusDataMap.put(RadioType.is5GHzL, 36);
|
||||||
|
channelStatusDataMap.put(RadioType.is5GHzU, 157);
|
||||||
|
|
||||||
|
eqChannelStatus.setChannelNumberStatusDataMap(channelStatusDataMap);
|
||||||
|
|
||||||
|
status.setDetails(eqChannelStatus);
|
||||||
|
statusList.add(status);
|
||||||
|
|
||||||
statusServiceInterface.update(statusList);
|
statusServiceInterface.update(statusList);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>all-cloud-in-one-process-with-persistence</artifactId>
|
<artifactId>all-cloud-in-one-process-with-persistence</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>all-cloud-in-one-process</artifactId>
|
<artifactId>all-cloud-in-one-process</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|||||||
1
all-cloud-in-one-process-with-persistence/.gitignore
vendored
Normal file
1
all-cloud-in-one-process-with-persistence/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -22,322 +22,244 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>webtoken-auth-service</artifactId>
|
<artifactId>webtoken-auth-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>portal-services</artifactId>
|
<artifactId>portal-services</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>customer-service-local</artifactId>
|
<artifactId>customer-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>location-service-local</artifactId>
|
<artifactId>location-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>equipment-service-local</artifactId>
|
<artifactId>equipment-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>profile-service-local</artifactId>
|
<artifactId>profile-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>portal-user-service-local</artifactId>
|
<artifactId>portal-user-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>status-service-local</artifactId>
|
<artifactId>status-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>client-service-local</artifactId>
|
<artifactId>client-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>alarm-service-local</artifactId>
|
<artifactId>alarm-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>service-metric-service-local</artifactId>
|
<artifactId>service-metric-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>system-event-service-local</artifactId>
|
<artifactId>system-event-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>routing-service-local</artifactId>
|
<artifactId>routing-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>firmware-service-local</artifactId>
|
<artifactId>firmware-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>manufacturer-service-local</artifactId>
|
<artifactId>manufacturer-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>adoption-metrics-service-local</artifactId>
|
<artifactId>adoption-metrics-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>filestore-service</artifactId>
|
<artifactId>filestore-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- prov services -->
|
<!-- prov services -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>customer-service</artifactId>
|
<artifactId>customer-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>customer-datastore-rdbms</artifactId>
|
<artifactId>customer-datastore-rdbms</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>location-service</artifactId>
|
<artifactId>location-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>location-datastore-rdbms</artifactId>
|
<artifactId>location-datastore-rdbms</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>equipment-service</artifactId>
|
<artifactId>equipment-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>equipment-datastore-rdbms</artifactId>
|
<artifactId>equipment-datastore-rdbms</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>profile-service</artifactId>
|
<artifactId>profile-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>profile-datastore-rdbms</artifactId>
|
<artifactId>profile-datastore-rdbms</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>portal-user-service</artifactId>
|
<artifactId>portal-user-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>portal-user-datastore-rdbms</artifactId>
|
<artifactId>portal-user-datastore-rdbms</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>firmware-service</artifactId>
|
<artifactId>firmware-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>firmware-datastore-rdbms</artifactId>
|
<artifactId>firmware-datastore-rdbms</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>manufacturer-service</artifactId>
|
<artifactId>manufacturer-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>manufacturer-datastore-rdbms</artifactId>
|
<artifactId>manufacturer-datastore-rdbms</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>adoption-metrics-service</artifactId>
|
<artifactId>adoption-metrics-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>adoption-metrics-datastore-rdbms</artifactId>
|
<artifactId>adoption-metrics-datastore-rdbms</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>cloud-event-dispatcher-local</artifactId>
|
<artifactId>cloud-event-dispatcher-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- ssc services -->
|
<!-- ssc services -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>cloud-event-dispatcher</artifactId>
|
<artifactId>cloud-event-dispatcher</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<artifactId>service-metric-service</artifactId>
|
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<artifactId>service-metric-datastore-rdbms</artifactId>
|
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<artifactId>system-event-service</artifactId>
|
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<artifactId>system-event-datastore-rdbms</artifactId>
|
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<artifactId>alarm-service</artifactId>
|
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<artifactId>alarm-datastore-rdbms</artifactId>
|
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<artifactId>status-service</artifactId>
|
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<artifactId>status-datastore-rdbms</artifactId>
|
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<artifactId>client-service</artifactId>
|
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<artifactId>client-datastore-rdbms</artifactId>
|
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<artifactId>routing-service</artifactId>
|
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<artifactId>routing-datastore-rdbms</artifactId>
|
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- Stream Processors -->
|
<!-- Stream Processors -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>single-process-streams</artifactId>
|
<artifactId>single-process-streams</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>provisioning-sp</artifactId>
|
<artifactId>provisioning-sp</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>dashboard-sp</artifactId>
|
<artifactId>dashboard-sp</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<artifactId>equipment-alarms-sp</artifactId>
|
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>adoption-metrics-sp</artifactId>
|
<artifactId>adoption-metrics-sp</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>equipment-gateway-service-remote</artifactId>
|
<artifactId>equipment-gateway-service-remote</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|||||||
1
all-cloud-in-one-process/.gitignore
vendored
Normal file
1
all-cloud-in-one-process/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -21,343 +21,337 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>webtoken-auth-service</artifactId>
|
<artifactId>webtoken-auth-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>portal-services</artifactId>
|
<artifactId>portal-services</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>customer-service-local</artifactId>
|
<artifactId>customer-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>location-service-local</artifactId>
|
<artifactId>location-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>equipment-service-local</artifactId>
|
<artifactId>equipment-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>profile-service-local</artifactId>
|
<artifactId>profile-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>portal-user-service-local</artifactId>
|
<artifactId>portal-user-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>status-service-local</artifactId>
|
<artifactId>status-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>client-service-local</artifactId>
|
<artifactId>client-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>alarm-service-local</artifactId>
|
<artifactId>alarm-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>service-metric-service-local</artifactId>
|
<artifactId>service-metric-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>system-event-service-local</artifactId>
|
<artifactId>system-event-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>routing-service-local</artifactId>
|
<artifactId>routing-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>firmware-service-local</artifactId>
|
<artifactId>firmware-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>manufacturer-service-local</artifactId>
|
<artifactId>manufacturer-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>adoption-metrics-service-local</artifactId>
|
<artifactId>adoption-metrics-service-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>filestore-service</artifactId>
|
<artifactId>filestore-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- prov services -->
|
<!-- prov services -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>customer-service</artifactId>
|
<artifactId>customer-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>customer-datastore-inmemory</artifactId>
|
<artifactId>customer-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>location-service</artifactId>
|
<artifactId>location-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>location-datastore-inmemory</artifactId>
|
<artifactId>location-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>equipment-service</artifactId>
|
<artifactId>equipment-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>equipment-datastore-inmemory</artifactId>
|
<artifactId>equipment-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>profile-service</artifactId>
|
<artifactId>profile-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>profile-datastore-inmemory</artifactId>
|
<artifactId>profile-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>portal-user-service</artifactId>
|
<artifactId>portal-user-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>portal-user-datastore-inmemory</artifactId>
|
<artifactId>portal-user-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>firmware-service</artifactId>
|
<artifactId>firmware-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>firmware-datastore-inmemory</artifactId>
|
<artifactId>firmware-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>manufacturer-service</artifactId>
|
<artifactId>manufacturer-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>manufacturer-datastore-inmemory</artifactId>
|
<artifactId>manufacturer-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>adoption-metrics-service</artifactId>
|
<artifactId>adoption-metrics-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>adoption-metrics-datastore-inmemory</artifactId>
|
<artifactId>adoption-metrics-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>cloud-event-dispatcher-local</artifactId>
|
<artifactId>cloud-event-dispatcher-local</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- ssc services -->
|
<!-- ssc services -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>cloud-event-dispatcher</artifactId>
|
<artifactId>cloud-event-dispatcher</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>service-metric-service</artifactId>
|
<artifactId>service-metric-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>service-metric-datastore-inmemory</artifactId>
|
<artifactId>service-metric-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>system-event-service</artifactId>
|
<artifactId>system-event-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>system-event-datastore-inmemory</artifactId>
|
<artifactId>system-event-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>alarm-service</artifactId>
|
<artifactId>alarm-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>alarm-datastore-inmemory</artifactId>
|
<artifactId>alarm-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>status-service</artifactId>
|
<artifactId>status-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>status-datastore-inmemory</artifactId>
|
<artifactId>status-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>client-service</artifactId>
|
<artifactId>client-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>client-datastore-inmemory</artifactId>
|
<artifactId>client-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>routing-service</artifactId>
|
<artifactId>routing-service</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
<!-- Use in-memory DS for now, later switch to RDBMS -->
|
||||||
<artifactId>routing-datastore-inmemory</artifactId>
|
<artifactId>routing-datastore-inmemory</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- Stream Processors -->
|
<!-- Stream Processors -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>single-process-streams</artifactId>
|
<artifactId>single-process-streams</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>provisioning-sp</artifactId>
|
<artifactId>provisioning-sp</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>dashboard-sp</artifactId>
|
<artifactId>dashboard-sp</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<artifactId>equipment-alarms-sp</artifactId>
|
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>adoption-metrics-sp</artifactId>
|
<artifactId>adoption-metrics-sp</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<artifactId>equipment-gateway-service-remote</artifactId>
|
<artifactId>equipment-gateway-service-remote</artifactId>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>port-forwarding-gateway-local</artifactId>
|
<artifactId>port-forwarding-gateway-local</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
package com.telecominfraproject.wlan.startuptasks;
|
package com.telecominfraproject.wlan.startuptasks;
|
||||||
|
|
||||||
import java.io.BufferedWriter;
|
import java.io.IOException;
|
||||||
import java.net.Inet4Address;
|
import java.net.Inet4Address;
|
||||||
import java.net.Inet6Address;
|
import java.net.Inet6Address;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
@@ -111,6 +110,7 @@ import com.telecominfraproject.wlan.servicemetric.models.ServiceMetricDataType;
|
|||||||
import com.telecominfraproject.wlan.status.StatusServiceInterface;
|
import com.telecominfraproject.wlan.status.StatusServiceInterface;
|
||||||
import com.telecominfraproject.wlan.status.dashboard.models.CustomerPortalDashboardStatus;
|
import com.telecominfraproject.wlan.status.dashboard.models.CustomerPortalDashboardStatus;
|
||||||
import com.telecominfraproject.wlan.status.equipment.models.EquipmentAdminStatusData;
|
import com.telecominfraproject.wlan.status.equipment.models.EquipmentAdminStatusData;
|
||||||
|
import com.telecominfraproject.wlan.status.equipment.models.EquipmentChannelStatusData;
|
||||||
import com.telecominfraproject.wlan.status.equipment.models.EquipmentProtocolState;
|
import com.telecominfraproject.wlan.status.equipment.models.EquipmentProtocolState;
|
||||||
import com.telecominfraproject.wlan.status.equipment.models.EquipmentProtocolStatusData;
|
import com.telecominfraproject.wlan.status.equipment.models.EquipmentProtocolStatusData;
|
||||||
import com.telecominfraproject.wlan.status.equipment.report.models.EquipmentCapacityDetails;
|
import com.telecominfraproject.wlan.status.equipment.report.models.EquipmentCapacityDetails;
|
||||||
@@ -324,12 +324,6 @@ public class AllInOneStartListener implements ApplicationRunner {
|
|||||||
rfConfig.getRfConfigMap().forEach((x, y) -> y.setRf("TipWlan-rf"));
|
rfConfig.getRfConfigMap().forEach((x, y) -> y.setRf("TipWlan-rf"));
|
||||||
profileRf.setDetails(rfConfig);
|
profileRf.setDetails(rfConfig);
|
||||||
profileRf = profileServiceInterface.create(profileRf);
|
profileRf = profileServiceInterface.create(profileRf);
|
||||||
|
|
||||||
// create userlist file
|
|
||||||
Path path = constructCaptivePortalUserList();
|
|
||||||
|
|
||||||
LOG.debug("Path to userlist {}", path);
|
|
||||||
|
|
||||||
// Captive portal profile
|
// Captive portal profile
|
||||||
Profile profileCaptivePortal = new Profile();
|
Profile profileCaptivePortal = new Profile();
|
||||||
profileCaptivePortal.setCustomerId(customer.getId());
|
profileCaptivePortal.setCustomerId(customer.getId());
|
||||||
@@ -343,19 +337,15 @@ public class AllInOneStartListener implements ApplicationRunner {
|
|||||||
ManagedFileInfo backgroundFile = new ManagedFileInfo();
|
ManagedFileInfo backgroundFile = new ManagedFileInfo();
|
||||||
backgroundFile.setFileCategory(FileCategory.CaptivePortalBackground);
|
backgroundFile.setFileCategory(FileCategory.CaptivePortalBackground);
|
||||||
backgroundFile.setFileType(FileType.PNG);
|
backgroundFile.setFileType(FileType.PNG);
|
||||||
backgroundFile.setApExportUrl("/filestore/tip-logo.png");
|
backgroundFile.setApExportUrl("tip-logo.png");
|
||||||
ManagedFileInfo logoFile = new ManagedFileInfo();
|
ManagedFileInfo logoFile = new ManagedFileInfo();
|
||||||
logoFile.setFileCategory(FileCategory.CaptivePortalLogo);
|
logoFile.setFileCategory(FileCategory.CaptivePortalLogo);
|
||||||
logoFile.setFileType(FileType.PNG);
|
logoFile.setFileType(FileType.PNG);
|
||||||
logoFile.setApExportUrl("/filestore/tip-logo-mobile.png");
|
logoFile.setApExportUrl("tip-logo-mobile.png");
|
||||||
ManagedFileInfo usernamePasswordFile = new ManagedFileInfo();
|
|
||||||
usernamePasswordFile.setFileCategory(FileCategory.UsernamePasswordList);
|
|
||||||
usernamePasswordFile.setFileType(FileType.TEXT);
|
|
||||||
usernamePasswordFile.setApExportUrl("/filestore/userlist.txt");
|
|
||||||
captivePortalConfig.setUsernamePasswordFile(usernamePasswordFile);
|
|
||||||
captivePortalConfig.setBackgroundFile(backgroundFile);
|
captivePortalConfig.setBackgroundFile(backgroundFile);
|
||||||
captivePortalConfig.setLogoFile(logoFile);
|
captivePortalConfig.setLogoFile(logoFile);
|
||||||
captivePortalConfig.setBrowserTitle(profileCaptivePortal.getName());
|
captivePortalConfig.setBrowserTitle(profileCaptivePortal.getName());
|
||||||
|
captivePortalConfig.setUserList(constructCaptivePortalUserList());
|
||||||
profileCaptivePortal.setDetails(captivePortalConfig);
|
profileCaptivePortal.setDetails(captivePortalConfig);
|
||||||
profileCaptivePortal = profileServiceInterface.create(profileCaptivePortal);
|
profileCaptivePortal = profileServiceInterface.create(profileCaptivePortal);
|
||||||
|
|
||||||
@@ -856,7 +846,7 @@ public class AllInOneStartListener implements ApplicationRunner {
|
|||||||
return hotspot20IdProviderProfile;
|
return hotspot20IdProviderProfile;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Path constructCaptivePortalUserList() {
|
protected List<TimedAccessUserRecord> constructCaptivePortalUserList() {
|
||||||
|
|
||||||
List<TimedAccessUserRecord> userList = new ArrayList<>();
|
List<TimedAccessUserRecord> userList = new ArrayList<>();
|
||||||
|
|
||||||
@@ -941,22 +931,24 @@ public class AllInOneStartListener implements ApplicationRunner {
|
|||||||
try {
|
try {
|
||||||
Files.deleteIfExists(path);
|
Files.deleteIfExists(path);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
LOG.error("Cannot delete {}", path, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
for (TimedAccessUserRecord userRecord : userList) {
|
for (TimedAccessUserRecord userRecord : userList) {
|
||||||
sb.append("username=" + userRecord.getUsername() + ", password=" + userRecord.getPassword()
|
byte[] bytes = ("username=" + userRecord.getUsername() + ", password=" + userRecord.getPassword()
|
||||||
+ ", firstname=" + userRecord.getUserDetails().getFirstName() + ", lastname="
|
+ ", firstname=" + userRecord.getUserDetails().getFirstName() + ", lastname="
|
||||||
+ userRecord.getUserDetails().getLastName() + System.lineSeparator());
|
+ userRecord.getUserDetails().getLastName() + System.lineSeparator()).getBytes();
|
||||||
|
try {
|
||||||
|
Files.write(path, bytes, StandardOpenOption.APPEND);
|
||||||
|
LOG.debug("Successfully written data to the file {}", path);
|
||||||
|
} catch (IOException e) {
|
||||||
|
try {
|
||||||
|
Files.write(path, bytes);
|
||||||
|
} catch (IOException e1) {
|
||||||
|
throw new RuntimeException(e1);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
try (BufferedWriter bw = Files.newBufferedWriter(path, StandardCharsets.UTF_8, StandardOpenOption.CREATE_NEW)) {
|
return userList;
|
||||||
bw.write(sb.toString());
|
|
||||||
System.out.println("Successfully written data to the file");
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return path;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createFirmwareObjects(Customer customer) {
|
private void createFirmwareObjects(Customer customer) {
|
||||||
@@ -1511,6 +1503,21 @@ public class AllInOneStartListener implements ApplicationRunner {
|
|||||||
status.setDetails(eqRadioUtilReport);
|
status.setDetails(eqRadioUtilReport);
|
||||||
statusList.add(status);
|
statusList.add(status);
|
||||||
|
|
||||||
|
status = new Status();
|
||||||
|
status.setCustomerId(equipment.getCustomerId());
|
||||||
|
status.setEquipmentId(equipment.getId());
|
||||||
|
EquipmentChannelStatusData eqChannelStatus = new EquipmentChannelStatusData();
|
||||||
|
|
||||||
|
Map<RadioType, Integer> channelStatusDataMap = new EnumMap<>(RadioType.class);
|
||||||
|
channelStatusDataMap.put(RadioType.is2dot4GHz, 6);
|
||||||
|
channelStatusDataMap.put(RadioType.is5GHzL, 36);
|
||||||
|
channelStatusDataMap.put(RadioType.is5GHzU, 157);
|
||||||
|
|
||||||
|
eqChannelStatus.setChannelNumberStatusDataMap(channelStatusDataMap);
|
||||||
|
|
||||||
|
status.setDetails(eqChannelStatus);
|
||||||
|
statusList.add(status);
|
||||||
|
|
||||||
statusServiceInterface.update(statusList);
|
statusServiceInterface.update(statusList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
1
client-datastore-cassandra/.gitignore
vendored
Normal file
1
client-datastore-cassandra/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -16,26 +15,26 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>base-cassandra</artifactId>
|
<artifactId>base-cassandra</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>client-datastore-interface</artifactId>
|
<artifactId>client-datastore-interface</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>base-cassandra-tests</artifactId>
|
<artifactId>base-cassandra-tests</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>client-datastore-common-test</artifactId>
|
<artifactId>client-datastore-common-test</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|||||||
@@ -142,10 +142,7 @@ public class ClientDAO {
|
|||||||
private static final String CQL_DELETE_BLOCKED_LIST =
|
private static final String CQL_DELETE_BLOCKED_LIST =
|
||||||
"delete from client_blocklist where customerId = ? and macAddress = ?";
|
"delete from client_blocklist where customerId = ? and macAddress = ?";
|
||||||
|
|
||||||
// Statements using client_by_mac_string table
|
// Statements using client_by_mac_string table
|
||||||
private static final String CQL_GET_CLIENT_MAC_BY_CUSTOMER_ID =
|
|
||||||
"select customerId, macAddress from client_by_mac_string where customerId = ?";
|
|
||||||
|
|
||||||
private static final String CQL_GET_CLIENT_MAC_LIKE_MAC_SUBSTRING =
|
private static final String CQL_GET_CLIENT_MAC_LIKE_MAC_SUBSTRING =
|
||||||
"select customerId, macAddress from client_by_mac_string where customerId = ? and macAddressString like ?";
|
"select customerId, macAddress from client_by_mac_string where customerId = ? and macAddressString like ?";
|
||||||
|
|
||||||
@@ -169,7 +166,6 @@ public class ClientDAO {
|
|||||||
private PreparedStatement preparedStmt_getBlockedListForCustomer;
|
private PreparedStatement preparedStmt_getBlockedListForCustomer;
|
||||||
private PreparedStatement preparedStmt_insertBlockedList;
|
private PreparedStatement preparedStmt_insertBlockedList;
|
||||||
private PreparedStatement preparedStmt_deleteBlockedList;
|
private PreparedStatement preparedStmt_deleteBlockedList;
|
||||||
private PreparedStatement preparedStmt_getClientMacByCustomerId;
|
|
||||||
private PreparedStatement preparedStmt_getClientMacLikeMacString;
|
private PreparedStatement preparedStmt_getClientMacLikeMacString;
|
||||||
private PreparedStatement preparedStmt_insertMacString;
|
private PreparedStatement preparedStmt_insertMacString;
|
||||||
private PreparedStatement preparedStmt_deleteMacString;
|
private PreparedStatement preparedStmt_deleteMacString;
|
||||||
@@ -188,7 +184,6 @@ public class ClientDAO {
|
|||||||
preparedStmt_getBlockedListForCustomer = cqlSession.prepare(CQL_GET_BLOCKED_LIST_BY_CUSTOMER_ID);
|
preparedStmt_getBlockedListForCustomer = cqlSession.prepare(CQL_GET_BLOCKED_LIST_BY_CUSTOMER_ID);
|
||||||
preparedStmt_insertBlockedList = cqlSession.prepare(CQL_INSERT_BLOCKED_LIST);
|
preparedStmt_insertBlockedList = cqlSession.prepare(CQL_INSERT_BLOCKED_LIST);
|
||||||
preparedStmt_deleteBlockedList = cqlSession.prepare(CQL_DELETE_BLOCKED_LIST);
|
preparedStmt_deleteBlockedList = cqlSession.prepare(CQL_DELETE_BLOCKED_LIST);
|
||||||
preparedStmt_getClientMacByCustomerId = cqlSession.prepare(CQL_GET_CLIENT_MAC_BY_CUSTOMER_ID);
|
|
||||||
preparedStmt_getClientMacLikeMacString = cqlSession.prepare(CQL_GET_CLIENT_MAC_LIKE_MAC_SUBSTRING);
|
preparedStmt_getClientMacLikeMacString = cqlSession.prepare(CQL_GET_CLIENT_MAC_LIKE_MAC_SUBSTRING);
|
||||||
preparedStmt_insertMacString = cqlSession.prepare(CQL_INSERT_INTO_CLIENT_MAC_STRING);
|
preparedStmt_insertMacString = cqlSession.prepare(CQL_INSERT_INTO_CLIENT_MAC_STRING);
|
||||||
preparedStmt_deleteMacString = cqlSession.prepare(CQL_DELETE_FROM_CLIENT_MAC_STRING);
|
preparedStmt_deleteMacString = cqlSession.prepare(CQL_DELETE_FROM_CLIENT_MAC_STRING);
|
||||||
@@ -412,9 +407,10 @@ public class ClientDAO {
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PaginationResponse<Client> searchByMacAddress(int customerId, String macSubstring,
|
private static enum FilterOptions{ customer_only, customer_and_macAddress}
|
||||||
List<ColumnAndSort> sortBy, PaginationContext<Client> context) {
|
|
||||||
LOG.debug("calling searchByMacAddress({}, {})", customerId, macSubstring);
|
public PaginationResponse<Client> getForCustomer(int customerId, String macSubstring,
|
||||||
|
List<ColumnAndSort> sortBy, PaginationContext<Client> context) {
|
||||||
|
|
||||||
PaginationResponse<Client> ret = new PaginationResponse<>();
|
PaginationResponse<Client> ret = new PaginationResponse<>();
|
||||||
ret.setContext(context.clone());
|
ret.setContext(context.clone());
|
||||||
@@ -422,108 +418,27 @@ public class ClientDAO {
|
|||||||
if (ret.getContext().isLastPage()) {
|
if (ret.getContext().isLastPage()) {
|
||||||
// no more pages available according to the context
|
// no more pages available according to the context
|
||||||
LOG.debug(
|
LOG.debug(
|
||||||
"No more pages available when looking up Clients for customer {} and macSubstring {} with last returned page number {}",
|
"No more pages available when looking up Clients for customer {} macSubstring {} with last returned page number {}",
|
||||||
customerId, macSubstring, context.getLastReturnedPageNumber());
|
customerId, macSubstring, context.getLastReturnedPageNumber());
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG.debug("Looking up Clients for customer {} and macSubstring {} with last returned page number {}",
|
LOG.debug("Looking up Clients for customer {} macSubstring {} with last returned page number {}",
|
||||||
customerId, macSubstring, context.getLastReturnedPageNumber());
|
customerId, macSubstring, context.getLastReturnedPageNumber());
|
||||||
|
|
||||||
// add sorting options for the query
|
|
||||||
// Cassandra allows very limited support for ordering results
|
|
||||||
// See https://cassandra.apache.org/doc/latest/cql/dml.html#select
|
|
||||||
// In here allowed orderings are the order induced by the clustering columns and the reverse of that one.
|
|
||||||
// also, order by with secondary indexes is not supported
|
|
||||||
// ***** We will ignore the order supplied by the caller for this datastore
|
|
||||||
|
|
||||||
ArrayList<Object> bindVars = new ArrayList<>();
|
String query = CQL_GET_BY_CUSTOMER_ID;
|
||||||
BoundStatement boundStmt;
|
FilterOptions filterOptions = FilterOptions.customer_only;
|
||||||
|
|
||||||
|
// add filters for the query
|
||||||
|
ArrayList<Object> queryArgs = new ArrayList<>();
|
||||||
|
queryArgs.add(customerId);
|
||||||
|
|
||||||
if (macSubstring != null && !macSubstring.isEmpty()) {
|
if (macSubstring != null && !macSubstring.isEmpty()) {
|
||||||
bindVars.add(customerId);
|
queryArgs.add("%" + macSubstring.toLowerCase() + "%");
|
||||||
bindVars.add("%" + macSubstring.toLowerCase() + "%");
|
|
||||||
|
|
||||||
boundStmt = preparedStmt_getClientMacLikeMacString.bind(bindVars.toArray());
|
query = CQL_GET_CLIENT_MAC_LIKE_MAC_SUBSTRING;
|
||||||
} else {
|
filterOptions = FilterOptions.customer_and_macAddress;
|
||||||
bindVars.add(customerId);
|
|
||||||
|
|
||||||
boundStmt = preparedStmt_getClientMacByCustomerId.bind(bindVars.toArray());
|
|
||||||
}
|
}
|
||||||
//have to do it this way - setPageSize creates new object
|
|
||||||
boundStmt = boundStmt.setPageSize(context.getMaxItemsPerPage());
|
|
||||||
|
|
||||||
if(context.getThirdPartyPagingState()!=null) {
|
|
||||||
ByteBuffer currentPagingState = ByteBuffer.wrap(context.getThirdPartyPagingState());
|
|
||||||
//have to do it this way - setPagingState creates new object
|
|
||||||
boundStmt = boundStmt.setPagingState(currentPagingState);
|
|
||||||
}
|
|
||||||
|
|
||||||
ResultSet rs = cqlSession.execute(boundStmt);
|
|
||||||
ByteBuffer nextPagingState = rs.getExecutionInfo().getPagingState();
|
|
||||||
|
|
||||||
List<Client> pageItems = new ArrayList<>();
|
|
||||||
Set<MacAddress> macSet = new HashSet<>();
|
|
||||||
|
|
||||||
// iterate through the current page
|
|
||||||
while (rs.getAvailableWithoutFetching() > 0) {
|
|
||||||
// macSet will contain MACs of paginated items to get Client objects via macSet
|
|
||||||
macSet.add(new MacAddress(rs.one().getLong("macAddress")));
|
|
||||||
}
|
|
||||||
pageItems.addAll(get(customerId, macSet));
|
|
||||||
|
|
||||||
if (pageItems.isEmpty()) {
|
|
||||||
LOG.debug("Cannot find Clients for customer {} and macSubstring {} with last returned page number {}",
|
|
||||||
customerId, macSubstring, context.getLastReturnedPageNumber());
|
|
||||||
} else {
|
|
||||||
LOG.debug("Found {} Clients for customer {} and macSubstring {} with last returned page number {}",
|
|
||||||
pageItems.size(), customerId, macSubstring, context.getLastReturnedPageNumber());
|
|
||||||
}
|
|
||||||
|
|
||||||
ret.setItems(pageItems);
|
|
||||||
|
|
||||||
// adjust context for the next page
|
|
||||||
ret.prepareForNextPage();
|
|
||||||
|
|
||||||
if(nextPagingState!=null) {
|
|
||||||
ret.getContext().setThirdPartyPagingState(nextPagingState.array());
|
|
||||||
} else {
|
|
||||||
ret.getContext().setThirdPartyPagingState(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
// startAfterItem is not used in Cassandra datastores, set it to null
|
|
||||||
ret.getContext().setStartAfterItem(null);
|
|
||||||
|
|
||||||
//in cassandra we will rely only on nextPagingState to set the lastPage indicator
|
|
||||||
ret.getContext().setLastPage(false);
|
|
||||||
|
|
||||||
if(nextPagingState == null) {
|
|
||||||
//in cassandra, if there are no more pages available, the pagingState is returned as null by the driver
|
|
||||||
//this overrides all other heuristics related to guessing the indication of the last page
|
|
||||||
ret.getContext().setLastPage(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public PaginationResponse<Client> getForCustomer(int customerId, List<ColumnAndSort> sortBy,
|
|
||||||
PaginationContext<Client> context) {
|
|
||||||
|
|
||||||
PaginationResponse<Client> ret = new PaginationResponse<>();
|
|
||||||
ret.setContext(context.clone());
|
|
||||||
|
|
||||||
if (ret.getContext().isLastPage()) {
|
|
||||||
// no more pages available according to the context
|
|
||||||
LOG.debug(
|
|
||||||
"No more pages available when looking up Clients for customer {} with last returned page number {}",
|
|
||||||
customerId, context.getLastReturnedPageNumber());
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG.debug("Looking up Clients for customer {} with last returned page number {}",
|
|
||||||
customerId, context.getLastReturnedPageNumber());
|
|
||||||
|
|
||||||
// add sorting options for the query
|
// add sorting options for the query
|
||||||
// Cassandra allows very limited support for ordering results
|
// Cassandra allows very limited support for ordering results
|
||||||
@@ -531,8 +446,18 @@ public class ClientDAO {
|
|||||||
// In here allowed orderings are the order induced by the clustering columns and the reverse of that one.
|
// In here allowed orderings are the order induced by the clustering columns and the reverse of that one.
|
||||||
// also, order by with secondary indexes is not supported
|
// also, order by with secondary indexes is not supported
|
||||||
// ***** We will ignore the order supplied by the caller for this datastore
|
// ***** We will ignore the order supplied by the caller for this datastore
|
||||||
|
|
||||||
BoundStatement boundStmt = preparedStmt_getPageForCustomer.bind(customerId );
|
PreparedStatement preparedStmt_getPageForCustomer;
|
||||||
|
try {
|
||||||
|
preparedStmt_getPageForCustomer = cqlSession.prepare(query);
|
||||||
|
} catch(InvalidQueryException e) {
|
||||||
|
LOG.error("Cannot prepare cassandra query '{}'", query, e);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
|
||||||
|
// add pagination parameters for the query
|
||||||
|
BoundStatement boundStmt = preparedStmt_getPageForCustomer.bind(queryArgs.toArray() );
|
||||||
|
|
||||||
//have to do it this way - setPageSize creates new object
|
//have to do it this way - setPageSize creates new object
|
||||||
boundStmt = boundStmt.setPageSize(context.getMaxItemsPerPage());
|
boundStmt = boundStmt.setPageSize(context.getMaxItemsPerPage());
|
||||||
|
|
||||||
@@ -547,17 +472,36 @@ public class ClientDAO {
|
|||||||
|
|
||||||
List<Client> pageItems = new ArrayList<>();
|
List<Client> pageItems = new ArrayList<>();
|
||||||
|
|
||||||
// iterate through the current page
|
switch(filterOptions) {
|
||||||
while (rs.getAvailableWithoutFetching() > 0) {
|
case customer_only:
|
||||||
pageItems.add(clientRowMapper.mapRow(rs.one()));
|
// iterate through the current page
|
||||||
|
while (rs.getAvailableWithoutFetching() > 0) {
|
||||||
|
pageItems.add(clientRowMapper.mapRow(rs.one()));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case customer_and_macAddress:
|
||||||
|
//the query was against client_by_mac_string table
|
||||||
|
//find all the macAddresses for the page, then retrieve records for them from client table
|
||||||
|
Set<MacAddress> macAddrSet = new HashSet<>();
|
||||||
|
while (rs.getAvailableWithoutFetching() > 0) {
|
||||||
|
macAddrSet.add(new MacAddress(rs.one().getLong("macAddress")));
|
||||||
|
}
|
||||||
|
|
||||||
|
//get all clients for the involved mac addresses
|
||||||
|
pageItems = get(customerId, macAddrSet);
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LOG.warn("Unknown filter option:", filterOptions);
|
||||||
|
throw new IllegalArgumentException("Unknown filter option " + filterOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pageItems.isEmpty()) {
|
if (pageItems.isEmpty()) {
|
||||||
LOG.debug("Cannot find Clients for customer {} with last returned page number {}",
|
LOG.debug("Cannot find Clients for customer {} macSubstring {} with last returned page number {}",
|
||||||
customerId, context.getLastReturnedPageNumber());
|
customerId, macSubstring, context.getLastReturnedPageNumber());
|
||||||
} else {
|
} else {
|
||||||
LOG.debug("Found {} Clients for customer {} with last returned page number {}",
|
LOG.debug("Found {} Clients for customer {} macSubstring {} with last returned page number {}",
|
||||||
pageItems.size(), customerId, context.getLastReturnedPageNumber());
|
pageItems.size(), customerId, macSubstring, context.getLastReturnedPageNumber());
|
||||||
}
|
}
|
||||||
|
|
||||||
ret.setItems(pageItems);
|
ret.setItems(pageItems);
|
||||||
|
|||||||
@@ -12,6 +12,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.client.datastore.ClientDatastore;
|
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.Client;
|
||||||
import com.telecominfraproject.wlan.client.session.models.ClientSession;
|
import com.telecominfraproject.wlan.client.session.models.ClientSession;
|
||||||
|
|
||||||
@@ -46,30 +47,30 @@ public class ClientDatastoreCassandra implements ClientDatastore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Client> get(int customerId, Set<MacAddress> clientMacSet) {
|
public void delete(long createdBeforeTimestamp) {
|
||||||
return clientDAO.get(customerId, clientMacSet);
|
//This should be handled by Cassandra's life cycle for data.
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PaginationResponse<Client> searchByMacAddress(int customerId, String macSubstring,
|
public List<Client> get(int customerId, Set<MacAddress> clientMacSet) {
|
||||||
List<ColumnAndSort> sortBy, PaginationContext<Client> context) {
|
return clientDAO.get(customerId, clientMacSet);
|
||||||
return clientDAO.searchByMacAddress(customerId, macSubstring, sortBy, context);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Client> getBlockedClients(int customerId) {
|
public List<Client> getBlockedClients(int customerId) {
|
||||||
return clientDAO.getBlockedClients(customerId);
|
return clientDAO.getBlockedClients(customerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PaginationResponse<Client> getForCustomer(int customerId, List<ColumnAndSort> sortBy,
|
public PaginationResponse<Client> getForCustomer(int customerId, String macSubstring,
|
||||||
PaginationContext<Client> context) {
|
List<ColumnAndSort> sortBy, PaginationContext<Client> context) {
|
||||||
|
|
||||||
if(context == null) {
|
if(context == null) {
|
||||||
context = new PaginationContext<>();
|
context = new PaginationContext<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
return clientDAO.getForCustomer( customerId, sortBy, context);
|
return clientDAO.getForCustomer(customerId, macSubstring, sortBy, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -86,6 +87,12 @@ public class ClientDatastoreCassandra implements ClientDatastore {
|
|||||||
public ClientSession deleteSession(int customerId, long equipmentId, MacAddress clientMac) {
|
public ClientSession deleteSession(int customerId, long equipmentId, MacAddress clientMac) {
|
||||||
return clientSessionDAO.deleteSession(customerId, equipmentId, clientMac);
|
return clientSessionDAO.deleteSession(customerId, equipmentId, clientMac);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteSessions(long createdBeforeTimestamp) {
|
||||||
|
//This should be handled by Cassandra's lifecycle for data.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ClientSession> getSessions(int customerId, Set<MacAddress> clientMacSet) {
|
public List<ClientSession> getSessions(int customerId, Set<MacAddress> clientMacSet) {
|
||||||
@@ -94,14 +101,21 @@ public class ClientDatastoreCassandra implements ClientDatastore {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PaginationResponse<ClientSession> getSessionsForCustomer(int customerId, Set<Long> equipmentIds, Set<Long> locationIds,
|
public PaginationResponse<ClientSession> getSessionsForCustomer(int customerId, Set<Long> equipmentIds, Set<Long> locationIds,
|
||||||
List<ColumnAndSort> sortBy, PaginationContext<ClientSession> context) {
|
String macSubstring, List<ColumnAndSort> sortBy, PaginationContext<ClientSession> context) {
|
||||||
|
|
||||||
if(context == null) {
|
if(context == null) {
|
||||||
context = new PaginationContext<>();
|
context = new PaginationContext<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
return clientSessionDAO.getSessionsForCustomer(customerId, equipmentIds, locationIds, sortBy, context);
|
return clientSessionDAO.getSessionsForCustomer(customerId, equipmentIds, locationIds, macSubstring, sortBy, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ClientSessionCounts getSessionCounts(int customerId) {
|
||||||
|
// Not yet supported.
|
||||||
|
ClientSessionCounts counts = new ClientSessionCounts();
|
||||||
|
return counts;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
|
|||||||
import com.telecominfraproject.wlan.core.model.pagination.ColumnAndSort;
|
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.core.server.cassandra.CassandraUtils;
|
||||||
import com.telecominfraproject.wlan.core.server.cassandra.RowMapper;
|
import com.telecominfraproject.wlan.core.server.cassandra.RowMapper;
|
||||||
import com.telecominfraproject.wlan.datastore.exceptions.DsEntityNotFoundException;
|
import com.telecominfraproject.wlan.datastore.exceptions.DsEntityNotFoundException;
|
||||||
|
|
||||||
@@ -134,6 +135,12 @@ public class ClientSessionDAO {
|
|||||||
|
|
||||||
private static final String CQL_INSERT_INTO_BY_LOCATION_TABLE = "insert into client_session_by_location(customerId, locationId, equipmentId, macAddress) values ( ?, ?, ?, ?) ";
|
private static final String CQL_INSERT_INTO_BY_LOCATION_TABLE = "insert into client_session_by_location(customerId, locationId, equipmentId, macAddress) values ( ?, ?, ?, ?) ";
|
||||||
private static final String CQL_DELETE_FROM_BY_LOCATION_TABLE = "delete from client_session_by_location where locationId = ? and equipmentId = ? and macAddress = ? ";
|
private static final String CQL_DELETE_FROM_BY_LOCATION_TABLE = "delete from client_session_by_location where locationId = ? and equipmentId = ? and macAddress = ? ";
|
||||||
|
|
||||||
|
private static final String CQL_INSERT_INTO_CLIENT_SESSION_MAC = "insert into client_session_by_mac (customerId, locationId, equipmentId, macAddress, macAddressString) values (?, ?, ?, ?, ?)";
|
||||||
|
private static final String CQL_DELETE_FROM_CLIENT_SESSION_MAC = "delete from client_session_by_mac where locationId = ? and equipmentId = ? and macAddress = ?";
|
||||||
|
|
||||||
|
private static final String CQL_INSERT_INTO_CLIENT_SESSION_MAC_AND_EQUIPMENT = "insert into client_session_by_mac_and_equipment (customerId, locationId, equipmentId, macAddress, macAddressString) values (?, ?, ?, ?, ?)";
|
||||||
|
private static final String CQL_DELETE_FROM_CLIENT_SESSION_MAC_AND_EQUIPMENT = "delete from client_session_by_mac_and_equipment where locationId = ? and equipmentId = ? and macAddress = ?";
|
||||||
|
|
||||||
|
|
||||||
private static final RowMapper<ClientSession> clientSessionRowMapper = new ClientSessionRowMapper();
|
private static final RowMapper<ClientSession> clientSessionRowMapper = new ClientSessionRowMapper();
|
||||||
@@ -151,6 +158,11 @@ public class ClientSessionDAO {
|
|||||||
private PreparedStatement preparedStmt_deleteByEquipment;
|
private PreparedStatement preparedStmt_deleteByEquipment;
|
||||||
private PreparedStatement preparedStmt_createByLocation;
|
private PreparedStatement preparedStmt_createByLocation;
|
||||||
private PreparedStatement preparedStmt_deleteByLocation;
|
private PreparedStatement preparedStmt_deleteByLocation;
|
||||||
|
private PreparedStatement preparedStmt_createByMac;
|
||||||
|
private PreparedStatement preparedStmt_deleteByMac;
|
||||||
|
private PreparedStatement preparedStmt_createByMacAndEquipment;
|
||||||
|
private PreparedStatement preparedStmt_deleteByMacAndEquipment;
|
||||||
|
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
private void postConstruct(){
|
private void postConstruct(){
|
||||||
@@ -166,6 +178,10 @@ public class ClientSessionDAO {
|
|||||||
preparedStmt_deleteByEquipment = cqlSession.prepare(CQL_DELETE_FROM_BY_EQUIPMENT_TABLE);
|
preparedStmt_deleteByEquipment = cqlSession.prepare(CQL_DELETE_FROM_BY_EQUIPMENT_TABLE);
|
||||||
preparedStmt_createByLocation = cqlSession.prepare(CQL_INSERT_INTO_BY_LOCATION_TABLE);
|
preparedStmt_createByLocation = cqlSession.prepare(CQL_INSERT_INTO_BY_LOCATION_TABLE);
|
||||||
preparedStmt_deleteByLocation = cqlSession.prepare(CQL_DELETE_FROM_BY_LOCATION_TABLE);
|
preparedStmt_deleteByLocation = cqlSession.prepare(CQL_DELETE_FROM_BY_LOCATION_TABLE);
|
||||||
|
preparedStmt_createByMac = cqlSession.prepare(CQL_INSERT_INTO_CLIENT_SESSION_MAC);
|
||||||
|
preparedStmt_deleteByMac = cqlSession.prepare(CQL_DELETE_FROM_CLIENT_SESSION_MAC);
|
||||||
|
preparedStmt_createByMacAndEquipment = cqlSession.prepare(CQL_INSERT_INTO_CLIENT_SESSION_MAC_AND_EQUIPMENT);
|
||||||
|
preparedStmt_deleteByMacAndEquipment = cqlSession.prepare(CQL_DELETE_FROM_CLIENT_SESSION_MAC_AND_EQUIPMENT);
|
||||||
|
|
||||||
} catch (InvalidQueryException e) {
|
} catch (InvalidQueryException e) {
|
||||||
LOG.error("Cannot prepare query", e);
|
LOG.error("Cannot prepare query", e);
|
||||||
@@ -203,6 +219,22 @@ public class ClientSessionDAO {
|
|||||||
clientSession.getLocationId(),
|
clientSession.getLocationId(),
|
||||||
clientSession.getEquipmentId(),
|
clientSession.getEquipmentId(),
|
||||||
clientSession.getMacAddress().getAddressAsLong()));
|
clientSession.getMacAddress().getAddressAsLong()));
|
||||||
|
|
||||||
|
cqlSession.execute(preparedStmt_createByMac.bind(
|
||||||
|
clientSession.getCustomerId(),
|
||||||
|
clientSession.getLocationId(),
|
||||||
|
clientSession.getEquipmentId(),
|
||||||
|
clientSession.getMacAddress().getAddressAsLong(),
|
||||||
|
clientSession.getMacAddress().getAddressAsString()
|
||||||
|
));
|
||||||
|
|
||||||
|
cqlSession.execute(preparedStmt_createByMacAndEquipment.bind(
|
||||||
|
clientSession.getCustomerId(),
|
||||||
|
clientSession.getLocationId(),
|
||||||
|
clientSession.getEquipmentId(),
|
||||||
|
clientSession.getMacAddress().getAddressAsLong(),
|
||||||
|
clientSession.getMacAddress().getAddressAsString()
|
||||||
|
));
|
||||||
|
|
||||||
LOG.debug("Stored Client session {}", clientSession);
|
LOG.debug("Stored Client session {}", clientSession);
|
||||||
|
|
||||||
@@ -297,6 +329,16 @@ public class ClientSessionDAO {
|
|||||||
clientSession.getLocationId(),
|
clientSession.getLocationId(),
|
||||||
clientSession.getEquipmentId(),
|
clientSession.getEquipmentId(),
|
||||||
clientSession.getMacAddress().getAddressAsLong()));
|
clientSession.getMacAddress().getAddressAsLong()));
|
||||||
|
|
||||||
|
cqlSession.execute(preparedStmt_deleteByMac.bind(
|
||||||
|
clientSession.getLocationId(),
|
||||||
|
clientSession.getEquipmentId(),
|
||||||
|
clientSession.getMacAddress().getAddressAsLong()));
|
||||||
|
|
||||||
|
cqlSession.execute(preparedStmt_deleteByMacAndEquipment.bind(
|
||||||
|
clientSession.getLocationId(),
|
||||||
|
clientSession.getEquipmentId(),
|
||||||
|
clientSession.getMacAddress().getAddressAsLong()));
|
||||||
|
|
||||||
|
|
||||||
return clientSession;
|
return clientSession;
|
||||||
@@ -336,9 +378,9 @@ public class ClientSessionDAO {
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static enum FilterOptions{ customer_only, customer_and_equipment, customer_and_location}
|
private static enum FilterOptions{ customer_only, customer_and_equipment, customer_and_location, customer_and_macAddress}
|
||||||
|
|
||||||
public PaginationResponse<ClientSession> getSessionsForCustomer(int customerId, Set<Long> equipmentIds, Set<Long> locationIds, List<ColumnAndSort> sortBy,
|
public PaginationResponse<ClientSession> getSessionsForCustomer(int customerId, Set<Long> equipmentIds, Set<Long> locationIds, String macSubstring, List<ColumnAndSort> sortBy,
|
||||||
PaginationContext<ClientSession> context) {
|
PaginationContext<ClientSession> context) {
|
||||||
|
|
||||||
PaginationResponse<ClientSession> ret = new PaginationResponse<>();
|
PaginationResponse<ClientSession> ret = new PaginationResponse<>();
|
||||||
@@ -367,18 +409,8 @@ public class ClientSessionDAO {
|
|||||||
if (equipmentIds != null && !equipmentIds.isEmpty()) {
|
if (equipmentIds != null && !equipmentIds.isEmpty()) {
|
||||||
queryArgs.addAll(equipmentIds);
|
queryArgs.addAll(equipmentIds);
|
||||||
|
|
||||||
StringBuilder strb = new StringBuilder(100);
|
query += "and equipmentId in " + CassandraUtils.getBindPlaceholders(equipmentIds);
|
||||||
strb.append("and equipmentId in (");
|
query_head = "select macAddress, equipmentId from client_session_by_equipment where customerId = ? ";
|
||||||
for (int i = 0; i < equipmentIds.size(); i++) {
|
|
||||||
strb.append("?");
|
|
||||||
if (i < equipmentIds.size() - 1) {
|
|
||||||
strb.append(",");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
strb.append(") ");
|
|
||||||
|
|
||||||
query += strb.toString();
|
|
||||||
query_head = "select macAddress from client_session_by_equipment where customerId = ? ";
|
|
||||||
|
|
||||||
filterOptions = FilterOptions.customer_and_equipment;
|
filterOptions = FilterOptions.customer_and_equipment;
|
||||||
}
|
}
|
||||||
@@ -392,21 +424,32 @@ public class ClientSessionDAO {
|
|||||||
queryArgs.addAll(equipmentIds);
|
queryArgs.addAll(equipmentIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
StringBuilder strb = new StringBuilder(100);
|
query = " locationId in " + CassandraUtils.getBindPlaceholders(locationIds) + query;
|
||||||
strb.append(" locationId in (");
|
query_head = "select macAddress, equipmentId from client_session_by_location where ";
|
||||||
for (int i = 0; i < locationIds.size(); i++) {
|
|
||||||
strb.append("?");
|
|
||||||
if (i < locationIds.size() - 1) {
|
|
||||||
strb.append(",");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
strb.append(") ");
|
|
||||||
|
|
||||||
query = strb.toString() + query;
|
|
||||||
query_head = "select macAddress from client_session_by_location where ";
|
|
||||||
|
|
||||||
filterOptions = FilterOptions.customer_and_location;
|
filterOptions = FilterOptions.customer_and_location;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//add macSubstring filters
|
||||||
|
if (macSubstring != null && !macSubstring.isEmpty()) {
|
||||||
|
queryArgs.clear();
|
||||||
|
queryArgs.add(customerId);
|
||||||
|
queryArgs.add("%" + macSubstring.toLowerCase() + "%");
|
||||||
|
query_head = "select macAddress, equipmentId from client_session_by_mac where customerId = ? ";
|
||||||
|
|
||||||
|
if (locationIds != null && !locationIds.isEmpty()) {
|
||||||
|
queryArgs.addAll(locationIds);
|
||||||
|
query = "and " + query;
|
||||||
|
}
|
||||||
|
if (equipmentIds != null && !equipmentIds.isEmpty()) {
|
||||||
|
queryArgs.addAll(equipmentIds);
|
||||||
|
query_head = "select macAddress, equipmentId from client_session_by_mac_and_equipment where customerId = ? ";
|
||||||
|
}
|
||||||
|
|
||||||
|
query = " and macAddressString like ? " + query + " allow filtering";
|
||||||
|
|
||||||
|
filterOptions = FilterOptions.customer_and_macAddress;
|
||||||
|
}
|
||||||
|
|
||||||
// add sorting options for the query
|
// add sorting options for the query
|
||||||
// Cassandra allows very limited support for ordering results
|
// Cassandra allows very limited support for ordering results
|
||||||
@@ -450,25 +493,25 @@ public class ClientSessionDAO {
|
|||||||
break;
|
break;
|
||||||
case customer_and_equipment:
|
case customer_and_equipment:
|
||||||
case customer_and_location:
|
case customer_and_location:
|
||||||
//the query was against client_session_by_equipment or client_session_by_location table
|
case customer_and_macAddress:
|
||||||
//find all the macAddresses for the page, then retrieve records for them from client_session table
|
//the query was against client_session_by_equipment, client_session_by_location, or client_session_by_mac(_and_equipment) table
|
||||||
Set<MacAddress> macAddrSet = new HashSet<>();
|
//find all the macAddresses and equipmentId for the page, then retrieve records for them from client_session table
|
||||||
while (rs.getAvailableWithoutFetching() > 0) {
|
while (rs.getAvailableWithoutFetching() > 0) {
|
||||||
macAddrSet.add(new MacAddress(rs.one().getLong("macAddress")));
|
Row row = rs.one();
|
||||||
}
|
MacAddress macAddr = new MacAddress(row.getLong("macAddress"));
|
||||||
|
long eqId = row.getLong("equipmentId");
|
||||||
//get all the sessions for the involved mac addresses
|
// get a single client session per customerId, returned equipmentId, and returned macAddress from filter tables
|
||||||
List<ClientSession> pageSessions = getSessions(customerId, macAddrSet);
|
ClientSession retSession = getSessionOrNull(customerId, eqId, macAddr);
|
||||||
|
|
||||||
//apply local filtering because retrieved sessions may be from different equipments and locations
|
if (retSession != null
|
||||||
pageSessions.forEach(cs -> {
|
&& (locationIds == null || locationIds.isEmpty() || locationIds.contains(retSession.getLocationId()))
|
||||||
//apply locationId and equipmentId filtering in here
|
&& (equipmentIds == null || equipmentIds.isEmpty() || equipmentIds.contains(retSession.getEquipmentId()))
|
||||||
if ((locationIds == null || locationIds.isEmpty() || locationIds.contains(cs.getLocationId()))
|
&& (macSubstring == null || macSubstring.isEmpty() || retSession.getMacAddress().getAddressAsString().toLowerCase().contains(macSubstring.toLowerCase()))
|
||||||
&& (equipmentIds == null || equipmentIds.isEmpty() || equipmentIds.contains(cs.getEquipmentId())) )
|
)
|
||||||
{
|
{
|
||||||
pageItems.add(cs);
|
pageItems.add(retSession);
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -26,7 +26,8 @@ CREATE TABLE IF NOT EXISTS tip_wlan_keyspace.client_by_mac_string (
|
|||||||
PRIMARY KEY (customerId, macAddressString)
|
PRIMARY KEY (customerId, macAddressString)
|
||||||
) WITH comment='Index Table to look up wireless client details by macAddress in text form used by TIP WLAN CloudSDK';
|
) WITH comment='Index Table to look up wireless client details by macAddress in text form used by TIP WLAN CloudSDK';
|
||||||
|
|
||||||
CREATE CUSTOM INDEX IF NOT EXISTS idx_client_macAddressString ON tip_wlan_keyspace.client_by_mac_string (macAddressString) USING 'org.apache.cassandra.index.sasi.SASIIndex' WITH OPTIONS = {'mode': 'CONTAINS', 'analyzer_class': 'org.apache.cassandra.index.sasi.analyzer.StandardAnalyzer', 'case_sensitive': 'false'};
|
DROP INDEX IF EXISTS tip_wlan_keyspace.idx_client_macAddressString;
|
||||||
|
CREATE CUSTOM INDEX IF NOT EXISTS idx_client_macAddressString_nonTokenizing ON tip_wlan_keyspace.client_by_mac_string (macAddressString) USING 'org.apache.cassandra.index.sasi.SASIIndex' WITH OPTIONS = {'mode': 'CONTAINS', 'analyzer_class': 'org.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzer', 'case_sensitive': 'false'};
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS tip_wlan_keyspace.client_session (
|
CREATE TABLE IF NOT EXISTS tip_wlan_keyspace.client_session (
|
||||||
@@ -41,8 +42,8 @@ CREATE TABLE IF NOT EXISTS tip_wlan_keyspace.client_session (
|
|||||||
details blob,
|
details blob,
|
||||||
|
|
||||||
PRIMARY KEY ((customerId, macAddress), equipmentId)
|
PRIMARY KEY ((customerId, macAddress), equipmentId)
|
||||||
) WITH comment='Wireless client sessions used by TIP WLAN CloudSDK. Records automatically expire after 30 days'
|
) WITH comment='Wireless client sessions used by TIP WLAN CloudSDK. Records automatically expire after 24 hours'
|
||||||
AND default_time_to_live = 2592000;
|
AND default_time_to_live = 86400;
|
||||||
|
|
||||||
CREATE INDEX IF NOT EXISTS idx_client_session_customerId ON tip_wlan_keyspace.client_session (customerId);
|
CREATE INDEX IF NOT EXISTS idx_client_session_customerId ON tip_wlan_keyspace.client_session (customerId);
|
||||||
|
|
||||||
@@ -52,16 +53,43 @@ CREATE TABLE IF NOT EXISTS tip_wlan_keyspace.client_session_by_equipment (
|
|||||||
macAddress bigint ,
|
macAddress bigint ,
|
||||||
|
|
||||||
PRIMARY KEY ((customerId, equipmentId), macAddress)
|
PRIMARY KEY ((customerId, equipmentId), macAddress)
|
||||||
) WITH comment='Index Table to look up wireless client sessions by equipmentId used by TIP WLAN CloudSDK. Records automatically expire after 30 days'
|
) WITH comment='Index Table to look up wireless client sessions by equipmentId used by TIP WLAN CloudSDK. Records automatically expire after 24 hours'
|
||||||
AND default_time_to_live = 2592000;
|
AND default_time_to_live = 86400;
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS tip_wlan_keyspace.client_session_by_location (
|
CREATE TABLE IF NOT EXISTS tip_wlan_keyspace.client_session_by_location (
|
||||||
customerId int,
|
customerId int,
|
||||||
locationId bigint,
|
locationId bigint,
|
||||||
equipmentId bigint,
|
equipmentId bigint,
|
||||||
macAddress bigint ,
|
macAddress bigint,
|
||||||
|
|
||||||
PRIMARY KEY ((locationId), equipmentId, macAddress)
|
PRIMARY KEY ((locationId), equipmentId, macAddress)
|
||||||
) WITH comment='Index Table to look up wireless client sessions by location and equipment used by TIP WLAN CloudSDK. Records automatically expire after 30 days'
|
) WITH comment='Index Table to look up wireless client sessions by location and equipment used by TIP WLAN CloudSDK. Records automatically expire after 24 hours'
|
||||||
AND default_time_to_live = 2592000;
|
AND default_time_to_live = 86400;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS tip_wlan_keyspace.client_session_by_mac (
|
||||||
|
customerId int,
|
||||||
|
locationId bigint,
|
||||||
|
equipmentId bigint,
|
||||||
|
macAddress bigint,
|
||||||
|
macAddressString text,
|
||||||
|
|
||||||
|
PRIMARY KEY ((macAddress), locationId, equipmentId, macAddressString)
|
||||||
|
) WITH comment='Index Table to look up wireless client sessions by macAddressString, location, and equipment by TIP WLAN CloudSDK. Records automatically expire after 24 hours'
|
||||||
|
AND default_time_to_live = 86400;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS tip_wlan_keyspace.client_session_by_mac_and_equipment (
|
||||||
|
customerId int,
|
||||||
|
locationId bigint,
|
||||||
|
equipmentId bigint,
|
||||||
|
macAddress bigint,
|
||||||
|
macAddressString text,
|
||||||
|
|
||||||
|
PRIMARY KEY ((macAddress), equipmentId, locationId, macAddressString)
|
||||||
|
) WITH comment='Index Table to look up wireless client sessions by macAddressString, location, and equipment by TIP WLAN CloudSDK. Records automatically expire after 24 hours'
|
||||||
|
AND default_time_to_live = 86400;
|
||||||
|
|
||||||
|
DROP INDEX IF EXISTS tip_wlan_keyspace.idx_client_session_by_mac_macAddressString;
|
||||||
|
DROP INDEX IF EXISTS tip_wlan_keyspace.idx_client_session_by_mac_and_equipment_macAddressString;
|
||||||
|
|
||||||
|
CREATE CUSTOM INDEX IF NOT EXISTS idx_client_session_by_mac_macAddressString_nonTokenizing ON tip_wlan_keyspace.client_session_by_mac (macAddressString) USING 'org.apache.cassandra.index.sasi.SASIIndex' WITH OPTIONS = {'mode': 'CONTAINS', 'analyzer_class': 'org.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzer', 'case_sensitive': 'false'};
|
||||||
|
CREATE CUSTOM INDEX IF NOT EXISTS idx_client_session_by_mac_and_equipment_macAddressString_nonTokenizing ON tip_wlan_keyspace.client_session_by_mac_and_equipment (macAddressString) USING 'org.apache.cassandra.index.sasi.SASIIndex' WITH OPTIONS = {'mode': 'CONTAINS', 'analyzer_class': 'org.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzer', 'case_sensitive': 'false'};
|
||||||
|
|||||||
@@ -30,22 +30,16 @@ public class ClientDatastoreCassandraTests extends BaseClientDatastoreTest {
|
|||||||
@Override
|
@Override
|
||||||
protected List<String> getClientPagination_ExpectedPage3Strings() {
|
protected List<String> getClientPagination_ExpectedPage3Strings() {
|
||||||
//in cassandra the sort order is weird but consistent - although it may change on the cassandra server restart
|
//in cassandra the sort order is weird but consistent - although it may change on the cassandra server restart
|
||||||
return new ArrayList<>(Arrays.asList(new String[]{"qr_0", "qr_13", "qr_47", "qr_4", "qr_36", "qr_21", "qr_12", "qr_27", "qr_20", "qr_19" }));
|
return new ArrayList<>(Arrays.asList(new String[]{"qr_10", "qr_13", "qr_8", "qr_18", "qr_42", "qr_30", "qr_35", "qr_28", "qr_14", "qr_22" }));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected List<String> getClientPagination_ExpectedPage1EmptySortStrings(){
|
protected List<String> getClientPagination_ExpectedPage1EmptySortStrings(){
|
||||||
return new ArrayList<>(Arrays.asList(new String[]{"qr_46", "qr_9", "qr_3", "qr_6", "qr_1", "qr_26", "qr_10", "qr_40", "qr_14", "qr_42" }));
|
return new ArrayList<>(Arrays.asList(new String[]{"qr_32", "qr_0", "qr_12", "qr_25", "qr_40", "qr_39", "qr_29", "qr_41", "qr_4", "qr_44" }));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected List<String> getSearchByMac_ExpectedPage1SingleSortDescStrings() {
|
|
||||||
return new ArrayList<>(Arrays.asList(new String[]{"qr_0", "qr_1", "qr_2", "qr_3", "qr_4", "qr_5", "qr_6", "qr_7", "qr_8", "qr_9" }));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected List<String> getClientPagination_ExpectedPage1SingleSortDescStrings() {
|
protected List<String> getClientPagination_ExpectedPage1SingleSortDescStrings() {
|
||||||
return getClientPagination_ExpectedPage1EmptySortStrings();
|
return getClientPagination_ExpectedPage1EmptySortStrings();
|
||||||
@@ -54,12 +48,12 @@ public class ClientDatastoreCassandraTests extends BaseClientDatastoreTest {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected List<String> getClientSessionPagination_expectedPage1EmptySortStrings(){
|
protected List<String> getClientSessionPagination_expectedPage1EmptySortStrings(){
|
||||||
return new ArrayList<>(Arrays.asList(new String[]{"qr_30", "qr_43", "qr_18", "qr_9", "qr_10", "qr_23", "qr_20", "qr_47", "qr_1", "qr_40" }));
|
return new ArrayList<>(Arrays.asList(new String[]{"qr_12", "qr_47", "qr_4", "qr_1", "qr_21", "qr_42", "qr_45", "qr_35", "qr_14", "qr_0" }));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected List<String> getClientSessionPagination_expectedPage3Strings(){
|
protected List<String> getClientSessionPagination_expectedPage3Strings(){
|
||||||
return new ArrayList<>(Arrays.asList(new String[]{"qr_42", "qr_16", "qr_27", "qr_36", "qr_48", "qr_13", "qr_39", "qr_28", "qr_15", "qr_29" }));
|
return new ArrayList<>(Arrays.asList(new String[]{"qr_28", "qr_32", "qr_6", "qr_19", "qr_49", "qr_31", "qr_33", "qr_25", "qr_7", "qr_40" }));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -125,13 +125,42 @@ select * from client_session_by_location where locationId in (1,2,3) and equipme
|
|||||||
|
|
||||||
select customerId, locationId, equipmentId, macAddress from client_session_by_location where locationId in (1,2,3) and equipmentId in (1,2,3);
|
select customerId, locationId, equipmentId, macAddress from client_session_by_location where locationId in (1,2,3) and equipmentId in (1,2,3);
|
||||||
|
|
||||||
|
-- Index table for looking up client sessions by macAddress substring:
|
||||||
|
-- insert into it when client record is inserted
|
||||||
|
-- delete from it when client record is deleted
|
||||||
|
-- no update
|
||||||
|
|
||||||
|
insert into client_session_by_mac (customerId, locationId, equipmentId, macAddress, macAddressString) values ( 1, 1, 1, 1, 'A1:1');
|
||||||
|
insert into client_session_by_mac (customerId, locationId, equipmentId, macAddress, macAddressString) values ( 1, 1, 2, 2, 'A1:2');
|
||||||
|
insert into client_session_by_mac (customerId, locationId, equipmentId, macAddress, macAddressString) values ( 1, 2, 1, 3, 'A1:3');
|
||||||
|
insert into client_session_by_mac (customerId, locationId, equipmentId, macAddress, macAddressString) values ( 1, 2, 2, 3, 'B1:3');
|
||||||
|
insert into client_session_by_mac (customerId, locationId, equipmentId, macAddress, macAddressString) values ( 1, 3, 2, 3, 'B1:3');
|
||||||
|
|
||||||
|
insert into client_session_by_mac_and_equipment (customerId, locationId, equipmentId, macAddress, macAddressString) values ( 1, 1, 1, 1, 'A1:1');
|
||||||
|
insert into client_session_by_mac_and_equipment (customerId, locationId, equipmentId, macAddress, macAddressString) values ( 1, 1, 2, 2, 'A1:2');
|
||||||
|
insert into client_session_by_mac_and_equipment (customerId, locationId, equipmentId, macAddress, macAddressString) values ( 1, 2, 1, 3, 'A1:3');
|
||||||
|
insert into client_session_by_mac_and_equipment (customerId, locationId, equipmentId, macAddress, macAddressString) values ( 1, 2, 2, 3, 'B1:3');
|
||||||
|
insert into client_session_by_mac_and_equipment (customerId, locationId, equipmentId, macAddress, macAddressString) values ( 1, 3, 2, 3, 'B1:3');
|
||||||
|
|
||||||
|
select macAddress from client_session_by_mac where macAddressString like '%A1%';
|
||||||
|
select macAddress from client_session_by_mac where macAddressString like '%A1%' and locationId in (2);
|
||||||
|
select macAddress from client_session_by_mac where macAddressString like '%A1%' and locationId in (1,2);
|
||||||
|
|
||||||
|
select macAddress from client_session_by_mac_and_equipment where macAddressString like '%A1%' and equipmentId in (2);
|
||||||
|
select macAddress from client_session_by_mac_and_equipment where macAddressString like '%A1%' and equipmentId in (1,3);
|
||||||
|
|
||||||
|
delete from client_session_by_mac where locationId = 1 and equipmentId = 1 and macAddressString = 'A1:1';
|
||||||
|
delete from client_session_by_mac_and_equipment where locationId = 1 and equipmentId = 1 and macAddressString = 'A1:1';
|
||||||
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
-- Commands to clean up after the test
|
-- Commands to clean up after the test
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
TRUNCATE TABLE client_session_by_location ;
|
TRUNCATE TABLE client_session_by_location;
|
||||||
TRUNCATE TABLE client_session_by_equipment ;
|
TRUNCATE TABLE client_session_by_equipment;
|
||||||
|
TRUNCATE TABLE client_session_by_mac;
|
||||||
|
TRUNCATE TABLE client_session_by_mac_and_equipment;
|
||||||
TRUNCATE TABLE client_session;
|
TRUNCATE TABLE client_session;
|
||||||
TRUNCATE TABLE client_by_mac_string;
|
TRUNCATE TABLE client_by_mac_string;
|
||||||
TRUNCATE TABLE client;
|
TRUNCATE TABLE client;
|
||||||
|
|||||||
1
client-datastore-common-test/.gitignore
vendored
Normal file
1
client-datastore-common-test/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -16,7 +15,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>client-datastore-interface</artifactId>
|
<artifactId>client-datastore-interface</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
|
|||||||
@@ -158,214 +158,6 @@ public abstract class BaseClientDatastoreTest {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testSearchByMacAddress() {
|
|
||||||
//create 100 Clients
|
|
||||||
Client mdl;
|
|
||||||
int customerId_1 = (int) testSequence.incrementAndGet();
|
|
||||||
|
|
||||||
List<Client> created_models = new ArrayList<>();
|
|
||||||
|
|
||||||
int apNameIdx = 0;
|
|
||||||
|
|
||||||
for(int i = 0; i< 50; i++){
|
|
||||||
mdl = new Client();
|
|
||||||
mdl.setCustomerId(customerId_1);
|
|
||||||
ClientInfoDetails details = new ClientInfoDetails();
|
|
||||||
details.setAlias("qr_"+apNameIdx);
|
|
||||||
mdl.setDetails(details);
|
|
||||||
mdl.setMacAddress(new MacAddress("A1:FF:FF:FF:FF:" + Integer.toHexString(i)));
|
|
||||||
|
|
||||||
apNameIdx++;
|
|
||||||
mdl = testInterface.create(mdl);
|
|
||||||
created_models.add(mdl);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int i = 0; i< 50; i++){
|
|
||||||
mdl = new Client();
|
|
||||||
mdl.setCustomerId(customerId_1);
|
|
||||||
ClientInfoDetails details = new ClientInfoDetails();
|
|
||||||
details.setAlias("cr_"+apNameIdx);
|
|
||||||
mdl.setDetails(details );
|
|
||||||
mdl.setMacAddress(new MacAddress("B1:FF:FF:FF:FF:" + Integer.toHexString(i)));
|
|
||||||
|
|
||||||
apNameIdx++;
|
|
||||||
mdl = testInterface.create(mdl);
|
|
||||||
created_models.add(mdl);
|
|
||||||
}
|
|
||||||
|
|
||||||
//paginate over Clients
|
|
||||||
|
|
||||||
List<ColumnAndSort> sortBy = new ArrayList<>();
|
|
||||||
sortBy.addAll(Arrays.asList(new ColumnAndSort("macAddress")));
|
|
||||||
|
|
||||||
PaginationContext<Client> context = new PaginationContext<>(10);
|
|
||||||
PaginationResponse<Client> page1 = testInterface.searchByMacAddress(customerId_1, "A1", sortBy, context);
|
|
||||||
PaginationResponse<Client> page2 = testInterface.searchByMacAddress(customerId_1, "A1", sortBy, page1.getContext());
|
|
||||||
PaginationResponse<Client> page3 = testInterface.searchByMacAddress(customerId_1, "A1", sortBy, page2.getContext());
|
|
||||||
PaginationResponse<Client> page4 = testInterface.searchByMacAddress(customerId_1, "A1", sortBy, page3.getContext());
|
|
||||||
PaginationResponse<Client> page5 = testInterface.searchByMacAddress(customerId_1, "A1", sortBy, page4.getContext());
|
|
||||||
PaginationResponse<Client> page6 = testInterface.searchByMacAddress(customerId_1, "A1", sortBy, page5.getContext());
|
|
||||||
PaginationResponse<Client> page7 = testInterface.searchByMacAddress(customerId_1, "A1", sortBy, page6.getContext());
|
|
||||||
|
|
||||||
//verify returned pages
|
|
||||||
assertEquals(10, page1.getItems().size());
|
|
||||||
assertEquals(10, page2.getItems().size());
|
|
||||||
assertEquals(10, page3.getItems().size());
|
|
||||||
assertEquals(10, page4.getItems().size());
|
|
||||||
assertEquals(10, page5.getItems().size());
|
|
||||||
|
|
||||||
page1.getItems().forEach(e -> assertEquals(customerId_1, e.getCustomerId()) );
|
|
||||||
page2.getItems().forEach(e -> assertEquals(customerId_1, e.getCustomerId()) );
|
|
||||||
page3.getItems().forEach(e -> assertEquals(customerId_1, e.getCustomerId()) );
|
|
||||||
page4.getItems().forEach(e -> assertEquals(customerId_1, e.getCustomerId()) );
|
|
||||||
page5.getItems().forEach(e -> assertEquals(customerId_1, e.getCustomerId()) );
|
|
||||||
|
|
||||||
assertEquals(0, page6.getItems().size());
|
|
||||||
assertEquals(0, page7.getItems().size());
|
|
||||||
|
|
||||||
assertFalse(page1.getContext().isLastPage());
|
|
||||||
assertFalse(page2.getContext().isLastPage());
|
|
||||||
assertFalse(page3.getContext().isLastPage());
|
|
||||||
assertFalse(page4.getContext().isLastPage());
|
|
||||||
assertFalse(page5.getContext().isLastPage());
|
|
||||||
|
|
||||||
assertTrue(page6.getContext().isLastPage());
|
|
||||||
assertTrue(page7.getContext().isLastPage());
|
|
||||||
|
|
||||||
List<String> expectedPage3Strings = new ArrayList<>(Arrays.asList(new String[]{"qr_20", "qr_21", "qr_22", "qr_23", "qr_24", "qr_25", "qr_26", "qr_27", "qr_28", "qr_29" }));
|
|
||||||
List<String> actualPage3Strings = new ArrayList<>();
|
|
||||||
page3.getItems().stream().forEach( ce -> actualPage3Strings.add(((ClientInfoDetails)ce.getDetails()).getAlias()) );
|
|
||||||
|
|
||||||
assertEquals(expectedPage3Strings, actualPage3Strings);
|
|
||||||
|
|
||||||
//test first page of the results with empty sort order -> default sort order (by Id ascending)
|
|
||||||
PaginationResponse<Client> page1EmptySort = testInterface.searchByMacAddress(customerId_1, "A1", Collections.emptyList(), context);
|
|
||||||
assertEquals(10, page1EmptySort.getItems().size());
|
|
||||||
|
|
||||||
List<String> expectedPage1EmptySortStrings = new ArrayList<>(Arrays.asList(new String[]{"qr_0", "qr_1", "qr_2", "qr_3", "qr_4", "qr_5", "qr_6", "qr_7", "qr_8", "qr_9" }));
|
|
||||||
List<String> actualPage1EmptySortStrings = new ArrayList<>();
|
|
||||||
page1EmptySort.getItems().stream().forEach( ce -> actualPage1EmptySortStrings.add(((ClientInfoDetails)ce.getDetails()).getAlias()) );
|
|
||||||
|
|
||||||
assertEquals(expectedPage1EmptySortStrings, actualPage1EmptySortStrings);
|
|
||||||
|
|
||||||
//test first page of the results with null sort order -> default sort order (by Id ascending)
|
|
||||||
PaginationResponse<Client> page1NullSort = testInterface.searchByMacAddress(customerId_1, "A1", null, context);
|
|
||||||
assertEquals(10, page1NullSort.getItems().size());
|
|
||||||
|
|
||||||
List<String> expectedPage1NullSortStrings = new ArrayList<>(Arrays.asList(new String[]{"qr_0", "qr_1", "qr_2", "qr_3", "qr_4", "qr_5", "qr_6", "qr_7", "qr_8", "qr_9" }));
|
|
||||||
List<String> actualPage1NullSortStrings = new ArrayList<>();
|
|
||||||
page1NullSort.getItems().stream().forEach( ce -> actualPage1NullSortStrings.add(((ClientInfoDetails)ce.getDetails()).getAlias()) );
|
|
||||||
|
|
||||||
assertEquals(expectedPage1NullSortStrings, actualPage1NullSortStrings);
|
|
||||||
|
|
||||||
|
|
||||||
//test first page of the results with sort descending order by a macAddress property
|
|
||||||
PaginationResponse<Client> page1SingleSortDesc = testInterface.searchByMacAddress(customerId_1, "A1", Collections.singletonList(new ColumnAndSort("macAddress", SortOrder.desc)), context);
|
|
||||||
assertEquals(10, page1SingleSortDesc.getItems().size());
|
|
||||||
|
|
||||||
List<String> expectedPage1SingleSortDescStrings = getSearchByMac_ExpectedPage1SingleSortDescStrings();
|
|
||||||
List<String> actualPage1SingleSortDescStrings = new ArrayList<>();
|
|
||||||
page1SingleSortDesc.getItems().stream().forEach( ce -> actualPage1SingleSortDescStrings.add(((ClientInfoDetails)ce.getDetails()).getAlias()) );
|
|
||||||
|
|
||||||
assertEquals(expectedPage1SingleSortDescStrings, actualPage1SingleSortDescStrings);
|
|
||||||
|
|
||||||
created_models.forEach(m -> testInterface.delete(m.getCustomerId(), m.getMacAddress()));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method is overridden in the cassandra datastore because cassandra does not handle sort order
|
|
||||||
*/
|
|
||||||
protected List<String> getSearchByMac_ExpectedPage1SingleSortDescStrings(){
|
|
||||||
return new ArrayList<>(Arrays.asList(new String[]{"qr_49", "qr_48", "qr_47", "qr_46", "qr_45", "qr_44", "qr_43", "qr_42", "qr_41", "qr_40" }));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testEmptyNullSearchMacSubstring() {
|
|
||||||
Client mdl;
|
|
||||||
int customerId = (int) testSequence.incrementAndGet();
|
|
||||||
int apNameIdx = 0;
|
|
||||||
List<Client> created_models = new ArrayList<>();
|
|
||||||
|
|
||||||
for(int i = 0; i< 50; i++){
|
|
||||||
mdl = new Client();
|
|
||||||
mdl.setCustomerId(customerId);
|
|
||||||
ClientInfoDetails details = new ClientInfoDetails();
|
|
||||||
details.setAlias("qr_"+apNameIdx);
|
|
||||||
mdl.setDetails(details);
|
|
||||||
mdl.setMacAddress(new MacAddress("A1:FF:FF:FF:FF:" + Integer.toHexString(i)));
|
|
||||||
|
|
||||||
apNameIdx++;
|
|
||||||
mdl = testInterface.create(mdl);
|
|
||||||
created_models.add(mdl);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int i = 0; i< 50; i++){
|
|
||||||
mdl = new Client();
|
|
||||||
mdl.setCustomerId(customerId);
|
|
||||||
ClientInfoDetails details = new ClientInfoDetails();
|
|
||||||
details.setAlias("cr_"+apNameIdx);
|
|
||||||
mdl.setDetails(details );
|
|
||||||
mdl.setMacAddress(new MacAddress("B1:FF:FF:FF:FF:" + Integer.toHexString(i)));
|
|
||||||
|
|
||||||
apNameIdx++;
|
|
||||||
mdl = testInterface.create(mdl);
|
|
||||||
created_models.add(mdl);
|
|
||||||
}
|
|
||||||
List<ColumnAndSort> sortBy = new ArrayList<>();
|
|
||||||
PaginationContext<Client> context = new PaginationContext<>(10);
|
|
||||||
|
|
||||||
//test null and empty string macSubstring inputs, expecting to get all results
|
|
||||||
PaginationResponse<Client> emptySubstringPage1 = testInterface.searchByMacAddress(customerId, "", sortBy, context);
|
|
||||||
PaginationResponse<Client> emptySubstringPage2 = testInterface.searchByMacAddress(customerId, "", sortBy, emptySubstringPage1.getContext());
|
|
||||||
PaginationResponse<Client> emptySubstringPage3 = testInterface.searchByMacAddress(customerId, "", sortBy, emptySubstringPage2.getContext());
|
|
||||||
PaginationResponse<Client> emptySubstringPage4 = testInterface.searchByMacAddress(customerId, "", sortBy, emptySubstringPage3.getContext());
|
|
||||||
PaginationResponse<Client> emptySubstringPage5 = testInterface.searchByMacAddress(customerId, "", sortBy, emptySubstringPage4.getContext());
|
|
||||||
PaginationResponse<Client> emptySubstringPage6 = testInterface.searchByMacAddress(customerId, "", sortBy, emptySubstringPage5.getContext());
|
|
||||||
PaginationResponse<Client> emptySubstringPage7 = testInterface.searchByMacAddress(customerId, "", sortBy, emptySubstringPage6.getContext());
|
|
||||||
PaginationResponse<Client> emptySubstringPage8 = testInterface.searchByMacAddress(customerId, "", sortBy, emptySubstringPage7.getContext());
|
|
||||||
PaginationResponse<Client> emptySubstringPage9 = testInterface.searchByMacAddress(customerId, "", sortBy, emptySubstringPage8.getContext());
|
|
||||||
PaginationResponse<Client> emptySubstringPage10 = testInterface.searchByMacAddress(customerId, "", sortBy, emptySubstringPage9.getContext());
|
|
||||||
PaginationResponse<Client> emptySubstringPage11 = testInterface.searchByMacAddress(customerId, "", sortBy, emptySubstringPage10.getContext());
|
|
||||||
assertEquals(10, emptySubstringPage1.getItems().size());
|
|
||||||
assertEquals(10, emptySubstringPage2.getItems().size());
|
|
||||||
assertEquals(10, emptySubstringPage3.getItems().size());
|
|
||||||
assertEquals(10, emptySubstringPage4.getItems().size());
|
|
||||||
assertEquals(10, emptySubstringPage5.getItems().size());
|
|
||||||
assertEquals(10, emptySubstringPage6.getItems().size());
|
|
||||||
assertEquals(10, emptySubstringPage7.getItems().size());
|
|
||||||
assertEquals(10, emptySubstringPage8.getItems().size());
|
|
||||||
assertEquals(10, emptySubstringPage9.getItems().size());
|
|
||||||
assertEquals(10, emptySubstringPage10.getItems().size());
|
|
||||||
assertEquals(0, emptySubstringPage11.getItems().size());
|
|
||||||
|
|
||||||
PaginationResponse<Client> nullSubstringPage1 = testInterface.searchByMacAddress(customerId, null, sortBy, context);
|
|
||||||
PaginationResponse<Client> nullSubstringPage2 = testInterface.searchByMacAddress(customerId, null, sortBy, nullSubstringPage1.getContext());
|
|
||||||
PaginationResponse<Client> nullSubstringPage3 = testInterface.searchByMacAddress(customerId, null, sortBy, nullSubstringPage2.getContext());
|
|
||||||
PaginationResponse<Client> nullSubstringPage4 = testInterface.searchByMacAddress(customerId, null, sortBy, nullSubstringPage3.getContext());
|
|
||||||
PaginationResponse<Client> nullSubstringPage5 = testInterface.searchByMacAddress(customerId, null, sortBy, nullSubstringPage4.getContext());
|
|
||||||
PaginationResponse<Client> nullSubstringPage6 = testInterface.searchByMacAddress(customerId, null, sortBy, nullSubstringPage5.getContext());
|
|
||||||
PaginationResponse<Client> nullSubstringPage7 = testInterface.searchByMacAddress(customerId, null, sortBy, nullSubstringPage6.getContext());
|
|
||||||
PaginationResponse<Client> nullSubstringPage8 = testInterface.searchByMacAddress(customerId, null, sortBy, nullSubstringPage7.getContext());
|
|
||||||
PaginationResponse<Client> nullSubstringPage9 = testInterface.searchByMacAddress(customerId, null, sortBy, nullSubstringPage8.getContext());
|
|
||||||
PaginationResponse<Client> nullSubstringPage10 = testInterface.searchByMacAddress(customerId, null, sortBy, nullSubstringPage9.getContext());
|
|
||||||
PaginationResponse<Client> nullSubstringPage11 = testInterface.searchByMacAddress(customerId, null, sortBy, nullSubstringPage10.getContext());
|
|
||||||
assertEquals(10, nullSubstringPage1.getItems().size());
|
|
||||||
assertEquals(10, nullSubstringPage2.getItems().size());
|
|
||||||
assertEquals(10, nullSubstringPage3.getItems().size());
|
|
||||||
assertEquals(10, nullSubstringPage4.getItems().size());
|
|
||||||
assertEquals(10, nullSubstringPage5.getItems().size());
|
|
||||||
assertEquals(10, nullSubstringPage6.getItems().size());
|
|
||||||
assertEquals(10, nullSubstringPage7.getItems().size());
|
|
||||||
assertEquals(10, nullSubstringPage8.getItems().size());
|
|
||||||
assertEquals(10, nullSubstringPage9.getItems().size());
|
|
||||||
assertEquals(10, nullSubstringPage10.getItems().size());
|
|
||||||
assertEquals(0, nullSubstringPage11.getItems().size());
|
|
||||||
|
|
||||||
created_models.forEach(m -> testInterface.delete(m.getCustomerId(), m.getMacAddress()));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testClientPagination()
|
public void testClientPagination()
|
||||||
{
|
{
|
||||||
@@ -383,8 +175,12 @@ public abstract class BaseClientDatastoreTest {
|
|||||||
mdl.setCustomerId(customerId_1);
|
mdl.setCustomerId(customerId_1);
|
||||||
ClientInfoDetails details = new ClientInfoDetails();
|
ClientInfoDetails details = new ClientInfoDetails();
|
||||||
details.setAlias("qr_"+apNameIdx);
|
details.setAlias("qr_"+apNameIdx);
|
||||||
mdl.setDetails(details );
|
mdl.setDetails(details);
|
||||||
mdl.setMacAddress(new MacAddress((long)i));
|
if (i < 20) {
|
||||||
|
mdl.setMacAddress(new MacAddress("A1:FF:FF:FF:FF:" + Integer.toHexString(i)));
|
||||||
|
} else {
|
||||||
|
mdl.setMacAddress(new MacAddress("B1:FF:FF:FF:FF:" + Integer.toHexString(i)));
|
||||||
|
}
|
||||||
|
|
||||||
apNameIdx++;
|
apNameIdx++;
|
||||||
mdl = testInterface.create(mdl);
|
mdl = testInterface.create(mdl);
|
||||||
@@ -396,8 +192,8 @@ public abstract class BaseClientDatastoreTest {
|
|||||||
mdl.setCustomerId(customerId_2);
|
mdl.setCustomerId(customerId_2);
|
||||||
ClientInfoDetails details = new ClientInfoDetails();
|
ClientInfoDetails details = new ClientInfoDetails();
|
||||||
details.setAlias("qr_"+apNameIdx);
|
details.setAlias("qr_"+apNameIdx);
|
||||||
mdl.setDetails(details );
|
mdl.setDetails(details);
|
||||||
mdl.setMacAddress(new MacAddress((long)i));
|
mdl.setMacAddress(new MacAddress("B1:FF:FF:FF:FF:" + Integer.toHexString(i)));
|
||||||
|
|
||||||
apNameIdx++;
|
apNameIdx++;
|
||||||
mdl = testInterface.create(mdl);
|
mdl = testInterface.create(mdl);
|
||||||
@@ -410,13 +206,13 @@ public abstract class BaseClientDatastoreTest {
|
|||||||
sortBy.addAll(Arrays.asList(new ColumnAndSort("macAddress")));
|
sortBy.addAll(Arrays.asList(new ColumnAndSort("macAddress")));
|
||||||
|
|
||||||
PaginationContext<Client> context = new PaginationContext<>(10);
|
PaginationContext<Client> context = new PaginationContext<>(10);
|
||||||
PaginationResponse<Client> page1 = testInterface.getForCustomer(customerId_1, sortBy, context);
|
PaginationResponse<Client> page1 = testInterface.getForCustomer(customerId_1, null, sortBy, context);
|
||||||
PaginationResponse<Client> page2 = testInterface.getForCustomer(customerId_1, sortBy, page1.getContext());
|
PaginationResponse<Client> page2 = testInterface.getForCustomer(customerId_1, null, sortBy, page1.getContext());
|
||||||
PaginationResponse<Client> page3 = testInterface.getForCustomer(customerId_1, sortBy, page2.getContext());
|
PaginationResponse<Client> page3 = testInterface.getForCustomer(customerId_1, null, sortBy, page2.getContext());
|
||||||
PaginationResponse<Client> page4 = testInterface.getForCustomer(customerId_1, sortBy, page3.getContext());
|
PaginationResponse<Client> page4 = testInterface.getForCustomer(customerId_1, null, sortBy, page3.getContext());
|
||||||
PaginationResponse<Client> page5 = testInterface.getForCustomer(customerId_1, sortBy, page4.getContext());
|
PaginationResponse<Client> page5 = testInterface.getForCustomer(customerId_1, null, sortBy, page4.getContext());
|
||||||
PaginationResponse<Client> page6 = testInterface.getForCustomer(customerId_1, sortBy, page5.getContext());
|
PaginationResponse<Client> page6 = testInterface.getForCustomer(customerId_1, null, sortBy, page5.getContext());
|
||||||
PaginationResponse<Client> page7 = testInterface.getForCustomer(customerId_1, sortBy, page6.getContext());
|
PaginationResponse<Client> page7 = testInterface.getForCustomer(customerId_1, null, sortBy, page6.getContext());
|
||||||
|
|
||||||
//verify returned pages
|
//verify returned pages
|
||||||
assertEquals(10, page1.getItems().size());
|
assertEquals(10, page1.getItems().size());
|
||||||
@@ -448,10 +244,47 @@ public abstract class BaseClientDatastoreTest {
|
|||||||
page3.getItems().stream().forEach( ce -> actualPage3Strings.add(((ClientInfoDetails)ce.getDetails()).getAlias()) );
|
page3.getItems().stream().forEach( ce -> actualPage3Strings.add(((ClientInfoDetails)ce.getDetails()).getAlias()) );
|
||||||
|
|
||||||
assertEquals(expectedPage3Strings, actualPage3Strings);
|
assertEquals(expectedPage3Strings, actualPage3Strings);
|
||||||
|
|
||||||
|
|
||||||
|
// empty and null substring should return the same result
|
||||||
|
PaginationResponse<Client> page1EmptySubstring = testInterface.getForCustomer(customerId_1, "", sortBy, context);
|
||||||
|
PaginationResponse<Client> page2EmptySubstring = testInterface.getForCustomer(customerId_1, "", sortBy, page1EmptySubstring.getContext());
|
||||||
|
PaginationResponse<Client> page3EmptySubstring = testInterface.getForCustomer(customerId_1, "", sortBy, page2EmptySubstring.getContext());
|
||||||
|
PaginationResponse<Client> page4EmptySubstring = testInterface.getForCustomer(customerId_1, "", sortBy, page3EmptySubstring.getContext());
|
||||||
|
PaginationResponse<Client> page5EmptySubstring = testInterface.getForCustomer(customerId_1, "", sortBy, page4EmptySubstring.getContext());
|
||||||
|
|
||||||
|
//verify returned pages
|
||||||
|
assertEquals(10, page1EmptySubstring.getItems().size());
|
||||||
|
assertEquals(10, page2EmptySubstring.getItems().size());
|
||||||
|
assertEquals(10, page3EmptySubstring.getItems().size());
|
||||||
|
assertEquals(10, page4EmptySubstring.getItems().size());
|
||||||
|
assertEquals(10, page5EmptySubstring.getItems().size());
|
||||||
|
|
||||||
|
assertEquals(page1.getItems(), page1EmptySubstring.getItems());
|
||||||
|
assertEquals(page2.getItems(), page2EmptySubstring.getItems());
|
||||||
|
assertEquals(page3.getItems(), page3EmptySubstring.getItems());
|
||||||
|
assertEquals(page4.getItems(), page4EmptySubstring.getItems());
|
||||||
|
assertEquals(page5.getItems(), page5EmptySubstring.getItems());
|
||||||
|
|
||||||
|
// Test macAddress search
|
||||||
|
PaginationResponse<Client> page1SearchMac = testInterface.getForCustomer(customerId_1, "A1", sortBy, context);
|
||||||
|
PaginationResponse<Client> page2SearchMac = testInterface.getForCustomer(customerId_1, "A1", sortBy, page1SearchMac.getContext());
|
||||||
|
PaginationResponse<Client> page3SearchMac = testInterface.getForCustomer(customerId_1, "A1", sortBy, page2SearchMac.getContext());
|
||||||
|
|
||||||
|
//verify returned pages
|
||||||
|
assertEquals(10, page1SearchMac.getItems().size());
|
||||||
|
assertEquals(10, page2SearchMac.getItems().size());
|
||||||
|
assertEquals(0, page3SearchMac.getItems().size());
|
||||||
|
|
||||||
|
page1SearchMac.getItems().forEach(e -> assertEquals(customerId_1, e.getCustomerId()));
|
||||||
|
page2SearchMac.getItems().forEach(e -> assertEquals(customerId_1, e.getCustomerId()));
|
||||||
|
|
||||||
|
page1SearchMac.getItems().forEach(e -> assertTrue(e.getMacAddress().getAddressAsString().contains("A1".toLowerCase())));
|
||||||
|
page2SearchMac.getItems().forEach(e -> assertTrue(e.getMacAddress().getAddressAsString().contains("A1".toLowerCase())));
|
||||||
|
|
||||||
|
assertTrue(page3SearchMac.getContext().isLastPage());
|
||||||
|
|
||||||
//test first page of the results with empty sort order -> default sort order (by Id ascending)
|
//test first page of the results with empty sort order -> default sort order (by Id ascending)
|
||||||
PaginationResponse<Client> page1EmptySort = testInterface.getForCustomer(customerId_1, Collections.emptyList(), context);
|
PaginationResponse<Client> page1EmptySort = testInterface.getForCustomer(customerId_1, null, Collections.emptyList(), context);
|
||||||
assertEquals(10, page1EmptySort.getItems().size());
|
assertEquals(10, page1EmptySort.getItems().size());
|
||||||
|
|
||||||
List<String> expectedPage1EmptySortStrings = getClientPagination_ExpectedPage1EmptySortStrings();
|
List<String> expectedPage1EmptySortStrings = getClientPagination_ExpectedPage1EmptySortStrings();
|
||||||
@@ -461,7 +294,7 @@ public abstract class BaseClientDatastoreTest {
|
|||||||
assertEquals(expectedPage1EmptySortStrings, actualPage1EmptySortStrings);
|
assertEquals(expectedPage1EmptySortStrings, actualPage1EmptySortStrings);
|
||||||
|
|
||||||
//test first page of the results with null sort order -> default sort order (by Id ascending)
|
//test first page of the results with null sort order -> default sort order (by Id ascending)
|
||||||
PaginationResponse<Client> page1NullSort = testInterface.getForCustomer(customerId_1, null, context);
|
PaginationResponse<Client> page1NullSort = testInterface.getForCustomer(customerId_1, null, null, context);
|
||||||
assertEquals(10, page1NullSort.getItems().size());
|
assertEquals(10, page1NullSort.getItems().size());
|
||||||
|
|
||||||
List<String> expectedPage1NullSortStrings = new ArrayList<>(expectedPage1EmptySortStrings);
|
List<String> expectedPage1NullSortStrings = new ArrayList<>(expectedPage1EmptySortStrings);
|
||||||
@@ -472,7 +305,7 @@ public abstract class BaseClientDatastoreTest {
|
|||||||
|
|
||||||
|
|
||||||
//test first page of the results with sort descending order by a macAddress property
|
//test first page of the results with sort descending order by a macAddress property
|
||||||
PaginationResponse<Client> page1SingleSortDesc = testInterface.getForCustomer(customerId_1, Collections.singletonList(new ColumnAndSort("macAddress", SortOrder.desc)), context);
|
PaginationResponse<Client> page1SingleSortDesc = testInterface.getForCustomer(customerId_1, null, Collections.singletonList(new ColumnAndSort("macAddress", SortOrder.desc)), context);
|
||||||
assertEquals(10, page1SingleSortDesc.getItems().size());
|
assertEquals(10, page1SingleSortDesc.getItems().size());
|
||||||
|
|
||||||
List<String> expectedPage1SingleSortDescStrings = getClientPagination_ExpectedPage1SingleSortDescStrings();
|
List<String> expectedPage1SingleSortDescStrings = getClientPagination_ExpectedPage1SingleSortDescStrings();
|
||||||
@@ -787,17 +620,19 @@ public abstract class BaseClientDatastoreTest {
|
|||||||
if(i<10) {
|
if(i<10) {
|
||||||
mdl.setEquipmentId(equipmentId_1);
|
mdl.setEquipmentId(equipmentId_1);
|
||||||
mdl.setLocationId(locationId_1);
|
mdl.setLocationId(locationId_1);
|
||||||
|
mdl.setMacAddress(new MacAddress("A1:FF:FF:FF:FF:" + Integer.toHexString(i)));
|
||||||
} else if(i<20) {
|
} else if(i<20) {
|
||||||
mdl.setEquipmentId(equipmentId_2);
|
mdl.setEquipmentId(equipmentId_2);
|
||||||
mdl.setLocationId(locationId_2);
|
mdl.setLocationId(locationId_2);
|
||||||
|
mdl.setMacAddress(new MacAddress("A1:FF:FF:FF:FF:" + Integer.toHexString(i)));
|
||||||
} else {
|
} else {
|
||||||
mdl.setEquipmentId(testSequence.incrementAndGet());
|
mdl.setEquipmentId(testSequence.incrementAndGet());
|
||||||
|
mdl.setMacAddress(new MacAddress("B1:FF:FF:FF:FF:" + Integer.toHexString(i)));
|
||||||
}
|
}
|
||||||
|
|
||||||
ClientSessionDetails details = new ClientSessionDetails();
|
ClientSessionDetails details = new ClientSessionDetails();
|
||||||
details.setApFingerprint("qr_"+apNameIdx);
|
details.setApFingerprint("qr_"+apNameIdx);
|
||||||
mdl.setDetails(details );
|
mdl.setDetails(details );
|
||||||
mdl.setMacAddress(new MacAddress((long)i));
|
|
||||||
|
|
||||||
apNameIdx++;
|
apNameIdx++;
|
||||||
|
|
||||||
@@ -836,13 +671,13 @@ public abstract class BaseClientDatastoreTest {
|
|||||||
sortBy.addAll(Arrays.asList(new ColumnAndSort("macAddress")));
|
sortBy.addAll(Arrays.asList(new ColumnAndSort("macAddress")));
|
||||||
|
|
||||||
PaginationContext<ClientSession> context = new PaginationContext<>(10);
|
PaginationContext<ClientSession> context = new PaginationContext<>(10);
|
||||||
PaginationResponse<ClientSession> page1 = testInterface.getSessionsForCustomer(customerId_1, null, null, sortBy, context);
|
PaginationResponse<ClientSession> page1 = testInterface.getSessionsForCustomer(customerId_1, null, null, null, sortBy, context);
|
||||||
PaginationResponse<ClientSession> page2 = testInterface.getSessionsForCustomer(customerId_1, null, null, sortBy, page1.getContext());
|
PaginationResponse<ClientSession> page2 = testInterface.getSessionsForCustomer(customerId_1, null, null, null, sortBy, page1.getContext());
|
||||||
PaginationResponse<ClientSession> page3 = testInterface.getSessionsForCustomer(customerId_1, null, null, sortBy, page2.getContext());
|
PaginationResponse<ClientSession> page3 = testInterface.getSessionsForCustomer(customerId_1, null, null, null, sortBy, page2.getContext());
|
||||||
PaginationResponse<ClientSession> page4 = testInterface.getSessionsForCustomer(customerId_1, null, null, sortBy, page3.getContext());
|
PaginationResponse<ClientSession> page4 = testInterface.getSessionsForCustomer(customerId_1, null, null, null, sortBy, page3.getContext());
|
||||||
PaginationResponse<ClientSession> page5 = testInterface.getSessionsForCustomer(customerId_1, null, null, sortBy, page4.getContext());
|
PaginationResponse<ClientSession> page5 = testInterface.getSessionsForCustomer(customerId_1, null, null, null, sortBy, page4.getContext());
|
||||||
PaginationResponse<ClientSession> page6 = testInterface.getSessionsForCustomer(customerId_1, null, null, sortBy, page5.getContext());
|
PaginationResponse<ClientSession> page6 = testInterface.getSessionsForCustomer(customerId_1, null, null, null, sortBy, page5.getContext());
|
||||||
PaginationResponse<ClientSession> page7 = testInterface.getSessionsForCustomer(customerId_1, null, null, sortBy, page6.getContext());
|
PaginationResponse<ClientSession> page7 = testInterface.getSessionsForCustomer(customerId_1, null, null, null, sortBy, page6.getContext());
|
||||||
|
|
||||||
//verify returned pages
|
//verify returned pages
|
||||||
assertEquals(10, page1.getItems().size());
|
assertEquals(10, page1.getItems().size());
|
||||||
@@ -868,6 +703,26 @@ public abstract class BaseClientDatastoreTest {
|
|||||||
|
|
||||||
assertTrue(page6.getContext().isLastPage());
|
assertTrue(page6.getContext().isLastPage());
|
||||||
assertTrue(page7.getContext().isLastPage());
|
assertTrue(page7.getContext().isLastPage());
|
||||||
|
|
||||||
|
// when remote interface receives macSubstring = null, it will pass on macSubstring = "" instead.
|
||||||
|
PaginationResponse<ClientSession> page1EmptySubstring = testInterface.getSessionsForCustomer(customerId_1, null, null, "", sortBy, context);
|
||||||
|
PaginationResponse<ClientSession> page2EmptySubstring = testInterface.getSessionsForCustomer(customerId_1, null, null, "", sortBy, page1.getContext());
|
||||||
|
PaginationResponse<ClientSession> page3EmptySubstring = testInterface.getSessionsForCustomer(customerId_1, null, null, "", sortBy, page2.getContext());
|
||||||
|
PaginationResponse<ClientSession> page4EmptySubstring = testInterface.getSessionsForCustomer(customerId_1, null, null, "", sortBy, page3.getContext());
|
||||||
|
PaginationResponse<ClientSession> page5EmptySubstring = testInterface.getSessionsForCustomer(customerId_1, null, null, "", sortBy, page4.getContext());
|
||||||
|
|
||||||
|
//verify returned pages
|
||||||
|
assertEquals(10, page1EmptySubstring.getItems().size());
|
||||||
|
assertEquals(10, page2EmptySubstring.getItems().size());
|
||||||
|
assertEquals(10, page3EmptySubstring.getItems().size());
|
||||||
|
assertEquals(10, page4EmptySubstring.getItems().size());
|
||||||
|
assertEquals(10, page5EmptySubstring.getItems().size());
|
||||||
|
|
||||||
|
assertEquals(page1.getItems(), page1EmptySubstring.getItems());
|
||||||
|
assertEquals(page2.getItems(), page2EmptySubstring.getItems());
|
||||||
|
assertEquals(page3.getItems(), page3EmptySubstring.getItems());
|
||||||
|
assertEquals(page4.getItems(), page4EmptySubstring.getItems());
|
||||||
|
assertEquals(page5.getItems(), page5EmptySubstring.getItems());
|
||||||
|
|
||||||
Set<String> expectedAllPagesStrings = new HashSet<>();
|
Set<String> expectedAllPagesStrings = new HashSet<>();
|
||||||
for(int i=0; i<50; i++) {
|
for(int i=0; i<50; i++) {
|
||||||
@@ -888,10 +743,62 @@ public abstract class BaseClientDatastoreTest {
|
|||||||
page3.getItems().stream().forEach( ce -> actualPage3Strings.add(((ClientSessionDetails)ce.getDetails()).getApFingerprint()) );
|
page3.getItems().stream().forEach( ce -> actualPage3Strings.add(((ClientSessionDetails)ce.getDetails()).getApFingerprint()) );
|
||||||
|
|
||||||
assertEquals(expectedPage3Strings, actualPage3Strings);
|
assertEquals(expectedPage3Strings, actualPage3Strings);
|
||||||
|
|
||||||
|
|
||||||
|
// Test macAddress search
|
||||||
|
PaginationResponse<ClientSession> page1SearchMac = testInterface.getSessionsForCustomer(customerId_1, null, null, "A1", sortBy, context);
|
||||||
|
PaginationResponse<ClientSession> page2SearchMac = testInterface.getSessionsForCustomer(customerId_1, null, null, "A1", sortBy, page1SearchMac.getContext());
|
||||||
|
PaginationResponse<ClientSession> page3SearchMac = testInterface.getSessionsForCustomer(customerId_1, null, null, "A1", sortBy, page2SearchMac.getContext());
|
||||||
|
|
||||||
|
//verify returned pages
|
||||||
|
assertEquals(10, page1SearchMac.getItems().size());
|
||||||
|
assertEquals(10, page2SearchMac.getItems().size());
|
||||||
|
assertEquals(0, page3SearchMac.getItems().size());
|
||||||
|
page1SearchMac.getItems().forEach(e -> assertTrue(e.getMacAddress().getAddressAsString().contains("A1".toLowerCase())));
|
||||||
|
page2SearchMac.getItems().forEach(e -> assertTrue(e.getMacAddress().getAddressAsString().contains("A1".toLowerCase())));
|
||||||
|
|
||||||
|
// Test macAddress search with locationId
|
||||||
|
Set<Long> locationSearchSet = new HashSet<Long>(Arrays.asList(locationId_1));
|
||||||
|
PaginationResponse<ClientSession> page1SearchMacAndLocation = testInterface.getSessionsForCustomer(customerId_1, null, locationSearchSet, "A1", sortBy, context);
|
||||||
|
PaginationResponse<ClientSession> page2SearchMacAndLocation = testInterface.getSessionsForCustomer(customerId_1, null, locationSearchSet, "A1", sortBy, page1SearchMacAndLocation.getContext());
|
||||||
|
PaginationResponse<ClientSession> page3SearchMacAndLocation = testInterface.getSessionsForCustomer(customerId_1, null, locationSearchSet, "A1", sortBy, page2SearchMacAndLocation.getContext());
|
||||||
|
|
||||||
|
//verify returned pages
|
||||||
|
assertEquals(10, page1SearchMacAndLocation.getItems().size());
|
||||||
|
assertEquals(0, page2SearchMacAndLocation.getItems().size());
|
||||||
|
assertEquals(0, page3SearchMacAndLocation.getItems().size());
|
||||||
|
page1SearchMacAndLocation.getItems().forEach(e -> assertTrue(e.getMacAddress().getAddressAsString().contains("A1".toLowerCase())));
|
||||||
|
page1SearchMacAndLocation.getItems().forEach(e -> assertEquals(locationId_1, e.getLocationId()));
|
||||||
|
|
||||||
|
// Test macAddress search with equipmentId
|
||||||
|
Set<Long> equipmentSearchSet = new HashSet<Long>(Arrays.asList(equipmentId_1, equipmentId_2));
|
||||||
|
PaginationResponse<ClientSession> page1SearchMacAndEquipment = testInterface.getSessionsForCustomer(customerId_1, equipmentSearchSet, null, "A1", sortBy, context);
|
||||||
|
PaginationResponse<ClientSession> page2SearchMacAndEquipment = testInterface.getSessionsForCustomer(customerId_1, equipmentSearchSet, null, "A1", sortBy, page1SearchMacAndEquipment.getContext());
|
||||||
|
PaginationResponse<ClientSession> page3SearchMacAndEquipment = testInterface.getSessionsForCustomer(customerId_1, equipmentSearchSet, null, "A1", sortBy, page2SearchMacAndEquipment.getContext());
|
||||||
|
|
||||||
|
//verify returned pages
|
||||||
|
assertEquals(10, page1SearchMacAndEquipment.getItems().size());
|
||||||
|
assertEquals(10, page2SearchMacAndEquipment.getItems().size());
|
||||||
|
assertEquals(0, page3SearchMacAndEquipment.getItems().size());
|
||||||
|
page1SearchMacAndEquipment.getItems().forEach(e -> assertTrue(e.getMacAddress().getAddressAsString().contains("A1".toLowerCase())));
|
||||||
|
page1SearchMacAndEquipment.getItems().forEach(e -> assertTrue(equipmentSearchSet.contains(e.getEquipmentId())));
|
||||||
|
|
||||||
|
// Test macAddress search with equipmentId and locationId
|
||||||
|
PaginationResponse<ClientSession> page1SearchMacAndEquipmentAndLocation = testInterface.getSessionsForCustomer(customerId_1, equipmentSearchSet, locationSearchSet, "A1", sortBy, context);
|
||||||
|
PaginationResponse<ClientSession> page2SearchMacAndEquipmentAndLocation = testInterface.getSessionsForCustomer(customerId_1, equipmentSearchSet, locationSearchSet, "A1", sortBy, page1SearchMacAndEquipmentAndLocation.getContext());
|
||||||
|
PaginationResponse<ClientSession> page3SearchMacAndEquipmentAndLocation = testInterface.getSessionsForCustomer(customerId_1, equipmentSearchSet, locationSearchSet, "A1", sortBy, page2SearchMacAndEquipmentAndLocation.getContext());
|
||||||
|
|
||||||
|
//verify returned pages
|
||||||
|
assertEquals(10, page1SearchMacAndEquipmentAndLocation.getItems().size());
|
||||||
|
assertEquals(0, page2SearchMacAndEquipmentAndLocation.getItems().size());
|
||||||
|
assertEquals(0, page3SearchMacAndEquipmentAndLocation.getItems().size());
|
||||||
|
page1SearchMacAndEquipmentAndLocation.getItems().forEach(e -> assertTrue(e.getMacAddress().getAddressAsString().contains("A1".toLowerCase())));
|
||||||
|
page1SearchMacAndEquipmentAndLocation.getItems().forEach(e -> assertEquals(equipmentId_1, e.getEquipmentId()));
|
||||||
|
page1SearchMacAndEquipmentAndLocation.getItems().forEach(e -> assertEquals(locationId_1, e.getLocationId()));
|
||||||
|
|
||||||
|
|
||||||
//test first page of the results with empty sort order -> default sort order (by Id ascending)
|
//test first page of the results with empty sort order -> default sort order (by Id ascending)
|
||||||
PaginationResponse<ClientSession> page1EmptySort = testInterface.getSessionsForCustomer(customerId_1, null, null, Collections.emptyList(), context);
|
PaginationResponse<ClientSession> page1EmptySort = testInterface.getSessionsForCustomer(customerId_1, null, null, null, Collections.emptyList(), context);
|
||||||
assertEquals(10, page1EmptySort.getItems().size());
|
assertEquals(10, page1EmptySort.getItems().size());
|
||||||
|
|
||||||
List<String> expectedPage1EmptySortStrings = getClientSessionPagination_expectedPage1EmptySortStrings();
|
List<String> expectedPage1EmptySortStrings = getClientSessionPagination_expectedPage1EmptySortStrings();
|
||||||
@@ -901,7 +808,7 @@ public abstract class BaseClientDatastoreTest {
|
|||||||
assertEquals(expectedPage1EmptySortStrings, actualPage1EmptySortStrings);
|
assertEquals(expectedPage1EmptySortStrings, actualPage1EmptySortStrings);
|
||||||
|
|
||||||
//test first page of the results with null sort order -> default sort order (by Id ascending)
|
//test first page of the results with null sort order -> default sort order (by Id ascending)
|
||||||
PaginationResponse<ClientSession> page1NullSort = testInterface.getSessionsForCustomer(customerId_1, null, null, null, context);
|
PaginationResponse<ClientSession> page1NullSort = testInterface.getSessionsForCustomer(customerId_1, null, null, null, null, context);
|
||||||
assertEquals(10, page1NullSort.getItems().size());
|
assertEquals(10, page1NullSort.getItems().size());
|
||||||
|
|
||||||
List<String> expectedPage1NullSortStrings = getClientSessionPagination_expectedPage1EmptySortStrings();
|
List<String> expectedPage1NullSortStrings = getClientSessionPagination_expectedPage1EmptySortStrings();
|
||||||
@@ -912,7 +819,7 @@ public abstract class BaseClientDatastoreTest {
|
|||||||
|
|
||||||
|
|
||||||
//test first page of the results with sort descending order by a macAddress property
|
//test first page of the results with sort descending order by a macAddress property
|
||||||
PaginationResponse<ClientSession> page1SingleSortDesc = testInterface.getSessionsForCustomer(customerId_1, null, null, Collections.singletonList(new ColumnAndSort("macAddress", SortOrder.desc)), context);
|
PaginationResponse<ClientSession> page1SingleSortDesc = testInterface.getSessionsForCustomer(customerId_1, null, null, null, Collections.singletonList(new ColumnAndSort("macAddress", SortOrder.desc)), context);
|
||||||
assertEquals(10, page1SingleSortDesc.getItems().size());
|
assertEquals(10, page1SingleSortDesc.getItems().size());
|
||||||
|
|
||||||
List<String> expectedPage1SingleSortDescStrings = getClientSessionPagination_expectedPage1SingleSortDescStrings();
|
List<String> expectedPage1SingleSortDescStrings = getClientSessionPagination_expectedPage1SingleSortDescStrings();
|
||||||
@@ -922,8 +829,8 @@ public abstract class BaseClientDatastoreTest {
|
|||||||
assertEquals(expectedPage1SingleSortDescStrings, actualPage1SingleSortDescStrings);
|
assertEquals(expectedPage1SingleSortDescStrings, actualPage1SingleSortDescStrings);
|
||||||
|
|
||||||
//test the results for equipment_1 only
|
//test the results for equipment_1 only
|
||||||
PaginationResponse<ClientSession> page1Eq_1 = testInterface.getSessionsForCustomer(customerId_1, new HashSet<Long>(Arrays.asList(equipmentId_1)), null, Collections.emptyList(), context);
|
PaginationResponse<ClientSession> page1Eq_1 = testInterface.getSessionsForCustomer(customerId_1, new HashSet<Long>(Arrays.asList(equipmentId_1)), null, null, Collections.emptyList(), context);
|
||||||
PaginationResponse<ClientSession> page2Eq_1 = testInterface.getSessionsForCustomer(customerId_1, new HashSet<Long>(Arrays.asList(equipmentId_1)), null, Collections.emptyList(), page1Eq_1.getContext());
|
PaginationResponse<ClientSession> page2Eq_1 = testInterface.getSessionsForCustomer(customerId_1, new HashSet<Long>(Arrays.asList(equipmentId_1)), null, null, Collections.emptyList(), page1Eq_1.getContext());
|
||||||
|
|
||||||
assertEquals(10, page1Eq_1.getItems().size());
|
assertEquals(10, page1Eq_1.getItems().size());
|
||||||
assertEquals(0, page2Eq_1.getItems().size());
|
assertEquals(0, page2Eq_1.getItems().size());
|
||||||
@@ -937,8 +844,8 @@ public abstract class BaseClientDatastoreTest {
|
|||||||
assertEquals(expectedPage1Eq_1Strings, actualPage1Eq_1Strings);
|
assertEquals(expectedPage1Eq_1Strings, actualPage1Eq_1Strings);
|
||||||
|
|
||||||
//test the results for equipment_2 only
|
//test the results for equipment_2 only
|
||||||
PaginationResponse<ClientSession> page1Eq_2 = testInterface.getSessionsForCustomer(customerId_1, new HashSet<Long>(Arrays.asList(equipmentId_2)), null, Collections.emptyList(), context);
|
PaginationResponse<ClientSession> page1Eq_2 = testInterface.getSessionsForCustomer(customerId_1, new HashSet<Long>(Arrays.asList(equipmentId_2)), null, null, Collections.emptyList(), context);
|
||||||
PaginationResponse<ClientSession> page2Eq_2 = testInterface.getSessionsForCustomer(customerId_1, new HashSet<Long>(Arrays.asList(equipmentId_2)), null, Collections.emptyList(), page1Eq_2.getContext());
|
PaginationResponse<ClientSession> page2Eq_2 = testInterface.getSessionsForCustomer(customerId_1, new HashSet<Long>(Arrays.asList(equipmentId_2)), null, null, Collections.emptyList(), page1Eq_2.getContext());
|
||||||
|
|
||||||
assertEquals(10, page1Eq_2.getItems().size());
|
assertEquals(10, page1Eq_2.getItems().size());
|
||||||
assertEquals(0, page2Eq_2.getItems().size());
|
assertEquals(0, page2Eq_2.getItems().size());
|
||||||
@@ -953,9 +860,9 @@ public abstract class BaseClientDatastoreTest {
|
|||||||
|
|
||||||
|
|
||||||
//test the results for equipment_1 or equipment_2 only
|
//test the results for equipment_1 or equipment_2 only
|
||||||
PaginationResponse<ClientSession> page1Eq_1or2 = testInterface.getSessionsForCustomer(customerId_1, new HashSet<Long>(Arrays.asList(equipmentId_1, equipmentId_2)), null, Collections.emptyList(), context);
|
PaginationResponse<ClientSession> page1Eq_1or2 = testInterface.getSessionsForCustomer(customerId_1, new HashSet<Long>(Arrays.asList(equipmentId_1, equipmentId_2)), null, null, Collections.emptyList(), context);
|
||||||
PaginationResponse<ClientSession> page2Eq_1or2 = testInterface.getSessionsForCustomer(customerId_1, new HashSet<Long>(Arrays.asList(equipmentId_1, equipmentId_2)), null, Collections.emptyList(), page1Eq_1or2.getContext());
|
PaginationResponse<ClientSession> page2Eq_1or2 = testInterface.getSessionsForCustomer(customerId_1, new HashSet<Long>(Arrays.asList(equipmentId_1, equipmentId_2)), null, null, Collections.emptyList(), page1Eq_1or2.getContext());
|
||||||
PaginationResponse<ClientSession> page3Eq_1or2 = testInterface.getSessionsForCustomer(customerId_1, new HashSet<Long>(Arrays.asList(equipmentId_1, equipmentId_2)), null, Collections.emptyList(), page2Eq_1or2.getContext());
|
PaginationResponse<ClientSession> page3Eq_1or2 = testInterface.getSessionsForCustomer(customerId_1, new HashSet<Long>(Arrays.asList(equipmentId_1, equipmentId_2)), null, null, Collections.emptyList(), page2Eq_1or2.getContext());
|
||||||
|
|
||||||
assertEquals(10, page1Eq_1or2.getItems().size());
|
assertEquals(10, page1Eq_1or2.getItems().size());
|
||||||
assertEquals(10, page2Eq_1or2.getItems().size());
|
assertEquals(10, page2Eq_1or2.getItems().size());
|
||||||
@@ -981,8 +888,8 @@ public abstract class BaseClientDatastoreTest {
|
|||||||
//
|
//
|
||||||
|
|
||||||
//test the results for location_1 only
|
//test the results for location_1 only
|
||||||
page1Eq_1 = testInterface.getSessionsForCustomer(customerId_1, null, new HashSet<Long>(Arrays.asList(locationId_1)), Collections.emptyList(), context);
|
page1Eq_1 = testInterface.getSessionsForCustomer(customerId_1, null, new HashSet<Long>(Arrays.asList(locationId_1)), null, Collections.emptyList(), context);
|
||||||
page2Eq_1 = testInterface.getSessionsForCustomer(customerId_1, null, new HashSet<Long>(Arrays.asList(locationId_1)), Collections.emptyList(), page1Eq_1.getContext());
|
page2Eq_1 = testInterface.getSessionsForCustomer(customerId_1, null, new HashSet<Long>(Arrays.asList(locationId_1)), null, Collections.emptyList(), page1Eq_1.getContext());
|
||||||
|
|
||||||
assertEquals(10, page1Eq_1.getItems().size());
|
assertEquals(10, page1Eq_1.getItems().size());
|
||||||
assertEquals(0, page2Eq_1.getItems().size());
|
assertEquals(0, page2Eq_1.getItems().size());
|
||||||
@@ -996,8 +903,8 @@ public abstract class BaseClientDatastoreTest {
|
|||||||
assertEquals(expectedPage1Eq_1Strings, actualPage1Loc_1Strings);
|
assertEquals(expectedPage1Eq_1Strings, actualPage1Loc_1Strings);
|
||||||
|
|
||||||
//test the results for location_2 only
|
//test the results for location_2 only
|
||||||
page1Eq_2 = testInterface.getSessionsForCustomer(customerId_1, null, new HashSet<Long>(Arrays.asList(locationId_2)), Collections.emptyList(), context);
|
page1Eq_2 = testInterface.getSessionsForCustomer(customerId_1, null, new HashSet<Long>(Arrays.asList(locationId_2)), null, Collections.emptyList(), context);
|
||||||
page2Eq_2 = testInterface.getSessionsForCustomer(customerId_1, null, new HashSet<Long>(Arrays.asList(locationId_2)), Collections.emptyList(), page1Eq_2.getContext());
|
page2Eq_2 = testInterface.getSessionsForCustomer(customerId_1, null, new HashSet<Long>(Arrays.asList(locationId_2)), null, Collections.emptyList(), page1Eq_2.getContext());
|
||||||
|
|
||||||
assertEquals(10, page1Eq_2.getItems().size());
|
assertEquals(10, page1Eq_2.getItems().size());
|
||||||
assertEquals(0, page2Eq_2.getItems().size());
|
assertEquals(0, page2Eq_2.getItems().size());
|
||||||
@@ -1012,9 +919,9 @@ public abstract class BaseClientDatastoreTest {
|
|||||||
|
|
||||||
|
|
||||||
//test the results for location_1 or location_2 only
|
//test the results for location_1 or location_2 only
|
||||||
page1Eq_1or2 = testInterface.getSessionsForCustomer(customerId_1, null, new HashSet<Long>(Arrays.asList(locationId_1, locationId_2)), Collections.emptyList(), context);
|
page1Eq_1or2 = testInterface.getSessionsForCustomer(customerId_1, null, new HashSet<Long>(Arrays.asList(locationId_1, locationId_2)), null, Collections.emptyList(), context);
|
||||||
page2Eq_1or2 = testInterface.getSessionsForCustomer(customerId_1, null, new HashSet<Long>(Arrays.asList(locationId_1, locationId_2)), Collections.emptyList(), page1Eq_1or2.getContext());
|
page2Eq_1or2 = testInterface.getSessionsForCustomer(customerId_1, null, new HashSet<Long>(Arrays.asList(locationId_1, locationId_2)), null, Collections.emptyList(), page1Eq_1or2.getContext());
|
||||||
page3Eq_1or2 = testInterface.getSessionsForCustomer(customerId_1, null, new HashSet<Long>(Arrays.asList(locationId_1, locationId_2)), Collections.emptyList(), page2Eq_1or2.getContext());
|
page3Eq_1or2 = testInterface.getSessionsForCustomer(customerId_1, null, new HashSet<Long>(Arrays.asList(locationId_1, locationId_2)), null, Collections.emptyList(), page2Eq_1or2.getContext());
|
||||||
|
|
||||||
assertEquals(10, page1Eq_1or2.getItems().size());
|
assertEquals(10, page1Eq_1or2.getItems().size());
|
||||||
assertEquals(10, page2Eq_1or2.getItems().size());
|
assertEquals(10, page2Eq_1or2.getItems().size());
|
||||||
@@ -1036,8 +943,8 @@ public abstract class BaseClientDatastoreTest {
|
|||||||
assertEquals(expectedPage2Eq_1or2Strings, actualPage2Loc_1or2Strings);
|
assertEquals(expectedPage2Eq_1or2Strings, actualPage2Loc_1or2Strings);
|
||||||
|
|
||||||
//test the results for ( location_1 or location_2 ) and equipment_1only
|
//test the results for ( location_1 or location_2 ) and equipment_1only
|
||||||
page1Eq_1 = testInterface.getSessionsForCustomer(customerId_1, new HashSet<Long>(Arrays.asList(equipmentId_1)), new HashSet<Long>(Arrays.asList(locationId_1, locationId_2)), Collections.emptyList(), context);
|
page1Eq_1 = testInterface.getSessionsForCustomer(customerId_1, new HashSet<Long>(Arrays.asList(equipmentId_1)), new HashSet<Long>(Arrays.asList(locationId_1, locationId_2)), null, Collections.emptyList(), context);
|
||||||
page2Eq_1 = testInterface.getSessionsForCustomer(customerId_1, new HashSet<Long>(Arrays.asList(equipmentId_1)), new HashSet<Long>(Arrays.asList(locationId_1, locationId_2)), Collections.emptyList(), page1Eq_1.getContext());
|
page2Eq_1 = testInterface.getSessionsForCustomer(customerId_1, new HashSet<Long>(Arrays.asList(equipmentId_1)), new HashSet<Long>(Arrays.asList(locationId_1, locationId_2)), null, Collections.emptyList(), page1Eq_1.getContext());
|
||||||
|
|
||||||
assertEquals(10, page1Eq_1.getItems().size());
|
assertEquals(10, page1Eq_1.getItems().size());
|
||||||
assertEquals(0, page2Eq_1.getItems().size());
|
assertEquals(0, page2Eq_1.getItems().size());
|
||||||
@@ -1066,6 +973,63 @@ public abstract class BaseClientDatastoreTest {
|
|||||||
return new ArrayList<>(Arrays.asList(new String[]{"qr_49", "qr_48", "qr_47", "qr_46", "qr_45", "qr_44", "qr_43", "qr_42", "qr_41", "qr_40" }));
|
return new ArrayList<>(Arrays.asList(new String[]{"qr_49", "qr_48", "qr_47", "qr_46", "qr_45", "qr_44", "qr_43", "qr_42", "qr_41", "qr_40" }));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testClientSessionPaginationMaxItems()
|
||||||
|
{
|
||||||
|
//create 100 Client sessions
|
||||||
|
ClientSession mdl;
|
||||||
|
int customerId = (int) testSequence.incrementAndGet();
|
||||||
|
long locationId = testSequence.incrementAndGet();
|
||||||
|
|
||||||
|
int apNameIdx = 0;
|
||||||
|
|
||||||
|
List<ClientSession> sessionsToCreate = new ArrayList<>();
|
||||||
|
|
||||||
|
for(int i = 0; i< 10; i++){
|
||||||
|
mdl = new ClientSession();
|
||||||
|
mdl.setCustomerId(customerId);
|
||||||
|
mdl.setLocationId(locationId);
|
||||||
|
mdl.setEquipmentId(testSequence.incrementAndGet());
|
||||||
|
mdl.setMacAddress(new MacAddress("A1:FF:FF:FF:FF:FF"));
|
||||||
|
|
||||||
|
ClientSessionDetails details = new ClientSessionDetails();
|
||||||
|
details.setApFingerprint("qr_"+apNameIdx);
|
||||||
|
mdl.setDetails(details );
|
||||||
|
|
||||||
|
apNameIdx++;
|
||||||
|
|
||||||
|
sessionsToCreate.add(mdl);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ClientSession> createdList = testInterface.updateSessions(sessionsToCreate);
|
||||||
|
List<ClientSessionDetails> createdDetailsList = new ArrayList<>();
|
||||||
|
List<ClientSessionDetails> detailsToCreateList = new ArrayList<>();
|
||||||
|
|
||||||
|
sessionsToCreate.forEach(s -> detailsToCreateList.add(s.getDetails()));
|
||||||
|
createdList.forEach(s -> createdDetailsList.add(s.getDetails()));
|
||||||
|
assertEquals(detailsToCreateList, createdDetailsList);
|
||||||
|
|
||||||
|
PaginationContext<ClientSession> context = new PaginationContext<>(5);
|
||||||
|
PaginationResponse<ClientSession> page1 = testInterface.getSessionsForCustomer(customerId, null, new HashSet<Long>(Arrays.asList(locationId)), null, Collections.emptyList(), context);
|
||||||
|
|
||||||
|
assertEquals(5, page1.getItems().size());
|
||||||
|
|
||||||
|
page1 = testInterface.getSessionsForCustomer(customerId, null, null, "A1", Collections.emptyList(), context);
|
||||||
|
|
||||||
|
assertEquals(5, page1.getItems().size());
|
||||||
|
|
||||||
|
context = new PaginationContext<>(10);
|
||||||
|
page1 = testInterface.getSessionsForCustomer(customerId, null, new HashSet<Long>(Arrays.asList(locationId)), null, Collections.emptyList(), context);
|
||||||
|
|
||||||
|
assertEquals(10, page1.getItems().size());
|
||||||
|
|
||||||
|
context = new PaginationContext<>(20);
|
||||||
|
page1 = testInterface.getSessionsForCustomer(customerId, null, new HashSet<Long>(Arrays.asList(locationId)), null, Collections.emptyList(), context);
|
||||||
|
|
||||||
|
assertEquals(10, page1.getItems().size());
|
||||||
|
|
||||||
|
createdList.forEach(c -> testInterface.deleteSession(c.getCustomerId(), c.getEquipmentId(), c.getMacAddress()));
|
||||||
|
}
|
||||||
|
|
||||||
protected ClientSession createClientSessionObject() {
|
protected ClientSession createClientSessionObject() {
|
||||||
ClientSession result = new ClientSession();
|
ClientSession result = new ClientSession();
|
||||||
|
|||||||
1
client-datastore-inmemory/.gitignore
vendored
Normal file
1
client-datastore-inmemory/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -16,19 +15,19 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>base-datastore-inmemory</artifactId>
|
<artifactId>base-datastore-inmemory</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>client-datastore-interface</artifactId>
|
<artifactId>client-datastore-interface</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>client-datastore-common-test</artifactId>
|
<artifactId>client-datastore-common-test</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.telecominfraproject.wlan.client.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;
|
||||||
@@ -15,6 +16,7 @@ import org.springframework.context.annotation.Configuration;
|
|||||||
|
|
||||||
import com.telecominfraproject.wlan.client.datastore.ClientDatastore;
|
import com.telecominfraproject.wlan.client.datastore.ClientDatastore;
|
||||||
import com.telecominfraproject.wlan.client.info.models.ClientInfoDetails;
|
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.models.Client;
|
||||||
import com.telecominfraproject.wlan.client.session.models.ClientSession;
|
import com.telecominfraproject.wlan.client.session.models.ClientSession;
|
||||||
import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
|
import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
|
||||||
@@ -156,6 +158,11 @@ public class ClientDatastoreInMemory extends BaseInMemoryDatastore implements Cl
|
|||||||
//client is already cloned by the getOrNull method
|
//client is already cloned by the getOrNull method
|
||||||
return client;
|
return client;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void delete(long createdBeforeTimestamp) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Client> get(int customerId, Set<MacAddress> clientMacSet) {
|
public List<Client> get(int customerId, Set<MacAddress> clientMacSet) {
|
||||||
@@ -176,113 +183,6 @@ public class ClientDatastoreInMemory extends BaseInMemoryDatastore implements Cl
|
|||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public PaginationResponse<Client> searchByMacAddress(int customerId, String macSubstring,
|
|
||||||
final List<ColumnAndSort> sortBy, PaginationContext<Client> context) {
|
|
||||||
|
|
||||||
if(context == null) {
|
|
||||||
context = new PaginationContext<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
PaginationResponse<Client> ret = new PaginationResponse<>();
|
|
||||||
ret.setContext(context.clone());
|
|
||||||
|
|
||||||
if (ret.getContext().isLastPage()) {
|
|
||||||
// no more pages available according to the context
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Client> items = new LinkedList<>();
|
|
||||||
|
|
||||||
if(macSubstring != null) {
|
|
||||||
idToClientMap.forEach(
|
|
||||||
(k, c) -> {
|
|
||||||
if(k.customerId == customerId && k.mac.getAddressAsString().toLowerCase().contains(macSubstring.toLowerCase())) {
|
|
||||||
items.add(c.clone());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
idToClientMap.forEach(
|
|
||||||
(k, c) -> {
|
|
||||||
if(k.customerId == customerId) {
|
|
||||||
items.add(c.clone());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// apply sortBy columns
|
|
||||||
Collections.sort(items, new Comparator<Client>() {
|
|
||||||
@Override
|
|
||||||
public int compare(Client o1, Client o2) {
|
|
||||||
if (sortBy == null || sortBy.isEmpty()) {
|
|
||||||
// sort ascending by id by default
|
|
||||||
return o1.getMacAddress().compareTo(o2.getMacAddress());
|
|
||||||
} else {
|
|
||||||
int cmp;
|
|
||||||
for (ColumnAndSort column : sortBy) {
|
|
||||||
switch (column.getColumnName()) {
|
|
||||||
case "macAddress":
|
|
||||||
cmp = o1.getMacAddress().compareTo(o2.getMacAddress());
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
// skip unknown column
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cmp != 0) {
|
|
||||||
return (column.getSortOrder() == SortOrder.asc) ? cmp : (-cmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// now select only items for the requested page
|
|
||||||
// find first item to add
|
|
||||||
int fromIndex = 0;
|
|
||||||
if (context.getStartAfterItem() != null) {
|
|
||||||
for (Client mdl : items) {
|
|
||||||
fromIndex++;
|
|
||||||
if (mdl.getCustomerId() == context.getStartAfterItem().getCustomerId()
|
|
||||||
&& mdl.getMacAddress().equals(context.getStartAfterItem().getMacAddress())) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// find last item to add
|
|
||||||
int toIndexExclusive = fromIndex + context.getMaxItemsPerPage();
|
|
||||||
if (toIndexExclusive > items.size()) {
|
|
||||||
toIndexExclusive = items.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
// copy page items into result
|
|
||||||
List<Client> selectedItems = new ArrayList<>(context.getMaxItemsPerPage());
|
|
||||||
for (Client mdl : items.subList(fromIndex, toIndexExclusive)) {
|
|
||||||
selectedItems.add(mdl.clone());
|
|
||||||
}
|
|
||||||
|
|
||||||
ret.setItems(selectedItems);
|
|
||||||
|
|
||||||
// adjust context for the next page
|
|
||||||
ret.prepareForNextPage();
|
|
||||||
|
|
||||||
if(ret.getContext().getStartAfterItem()!=null) {
|
|
||||||
//this datastore is only interested in the last item's id, so we'll clear all other fields on the startAfterItem in the pagination context
|
|
||||||
Client newStartAfterItem = new Client();
|
|
||||||
newStartAfterItem.setCustomerId(ret.getContext().getStartAfterItem().getCustomerId());
|
|
||||||
newStartAfterItem.setMacAddress(ret.getContext().getStartAfterItem().getMacAddress());
|
|
||||||
ret.getContext().setStartAfterItem(newStartAfterItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Client> getBlockedClients(int customerId) {
|
public List<Client> getBlockedClients(int customerId) {
|
||||||
@@ -305,7 +205,7 @@ public class ClientDatastoreInMemory extends BaseInMemoryDatastore implements Cl
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PaginationResponse<Client> getForCustomer(int customerId,
|
public PaginationResponse<Client> getForCustomer(int customerId, String macSubstring,
|
||||||
final List<ColumnAndSort> sortBy, PaginationContext<Client> context) {
|
final List<ColumnAndSort> sortBy, PaginationContext<Client> context) {
|
||||||
|
|
||||||
if(context == null) {
|
if(context == null) {
|
||||||
@@ -328,8 +228,11 @@ public class ClientDatastoreInMemory extends BaseInMemoryDatastore implements Cl
|
|||||||
if (mdl.getCustomerId() != customerId) {
|
if (mdl.getCustomerId() != customerId) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
items.add(mdl);
|
if (macSubstring == null ||
|
||||||
|
mdl.getMacAddress().getAddressAsString().toLowerCase().contains(macSubstring.toLowerCase())) {
|
||||||
|
items.add(mdl);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// apply sortBy columns
|
// apply sortBy columns
|
||||||
@@ -466,6 +369,10 @@ public class ClientDatastoreInMemory extends BaseInMemoryDatastore implements Cl
|
|||||||
return clientSession.clone();
|
return clientSession.clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteSessions(long createdBeforeTimestamp) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ClientSession> getSessions(int customerId, Set<MacAddress> clientMacSet) {
|
public List<ClientSession> getSessions(int customerId, Set<MacAddress> clientMacSet) {
|
||||||
@@ -491,6 +398,7 @@ public class ClientDatastoreInMemory extends BaseInMemoryDatastore implements Cl
|
|||||||
public PaginationResponse<ClientSession> getSessionsForCustomer(int customerId,
|
public PaginationResponse<ClientSession> getSessionsForCustomer(int customerId,
|
||||||
Set<Long> equipmentIds,
|
Set<Long> equipmentIds,
|
||||||
Set<Long> locationIds,
|
Set<Long> locationIds,
|
||||||
|
String macSubstring,
|
||||||
final List<ColumnAndSort> sortBy, PaginationContext<ClientSession> context) {
|
final List<ColumnAndSort> sortBy, PaginationContext<ClientSession> context) {
|
||||||
|
|
||||||
if(context == null) {
|
if(context == null) {
|
||||||
@@ -520,7 +428,12 @@ public class ClientDatastoreInMemory extends BaseInMemoryDatastore implements Cl
|
|||||||
locationIds == null
|
locationIds == null
|
||||||
|| locationIds.isEmpty()
|
|| locationIds.isEmpty()
|
||||||
|| locationIds.contains(mdl.getLocationId())
|
|| locationIds.contains(mdl.getLocationId())
|
||||||
)
|
) &&
|
||||||
|
(
|
||||||
|
macSubstring == null
|
||||||
|
|| macSubstring.isEmpty()
|
||||||
|
|| mdl.getMacAddress().getAddressAsString().toLowerCase().contains(macSubstring.toLowerCase())
|
||||||
|
)
|
||||||
) {
|
) {
|
||||||
items.add(mdl);
|
items.add(mdl);
|
||||||
}
|
}
|
||||||
@@ -601,4 +514,56 @@ public class ClientDatastoreInMemory extends BaseInMemoryDatastore implements Cl
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ClientSessionCounts getSessionCounts(int customerId) {
|
||||||
|
ClientSessionCounts counts = new ClientSessionCounts();
|
||||||
|
counts.setCustomerId(customerId);
|
||||||
|
|
||||||
|
long totalCount = 0;
|
||||||
|
Map<String, Long> perEquipmentMap = new HashMap<>();
|
||||||
|
Map<String, Long> perOuiMap = new HashMap<>();
|
||||||
|
Map<String, Long> perRadioMap = new HashMap<>();
|
||||||
|
|
||||||
|
for (ClientSession session : idToClientSessionMap.values()) {
|
||||||
|
if (session.getCustomerId() == customerId) {
|
||||||
|
totalCount++;
|
||||||
|
String equipmentIdString = Long.toString(session.getEquipmentId());
|
||||||
|
Long cnt = perEquipmentMap.get(equipmentIdString);
|
||||||
|
if (cnt == null) {
|
||||||
|
cnt = 0L;
|
||||||
|
} else {
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
perEquipmentMap.put(equipmentIdString, cnt);
|
||||||
|
|
||||||
|
if (session.getOui() != null) {
|
||||||
|
cnt = perOuiMap.get(session.getOui());
|
||||||
|
if (cnt == null) {
|
||||||
|
cnt = 0L;
|
||||||
|
} else {
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
perOuiMap.put(session.getOui(), cnt);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (session.getDetails() != null && session.getDetails().getRadioType() != null) {
|
||||||
|
String radioTypeString = session.getDetails().getRadioType().toString();
|
||||||
|
cnt = perRadioMap.get(radioTypeString);
|
||||||
|
if (cnt == null) {
|
||||||
|
cnt = 0L;
|
||||||
|
} else {
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
perRadioMap.put(radioTypeString, cnt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
counts.setTotalCount(totalCount);
|
||||||
|
counts.setEquipmentCounts(perEquipmentMap);
|
||||||
|
counts.setOuiCounts(perOuiMap);
|
||||||
|
counts.setRadioCounts(perRadioMap);
|
||||||
|
return counts;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
1
client-datastore-interface/.gitignore
vendored
Normal file
1
client-datastore-interface/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<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">
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
<artifactId>tip-wlan-cloud-root-pom</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<relativePath>../../wlan-cloud-root</relativePath>
|
<relativePath>../../wlan-cloud-root</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@@ -16,12 +15,12 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>client-models</artifactId>
|
<artifactId>client-models</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.telecominfraproject.wlan</groupId>
|
<groupId>com.telecominfraproject.wlan</groupId>
|
||||||
<artifactId>base-exceptions</artifactId>
|
<artifactId>base-exceptions</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import com.telecominfraproject.wlan.client.info.models.ClientSessionCounts;
|
||||||
import com.telecominfraproject.wlan.client.models.Client;
|
import com.telecominfraproject.wlan.client.models.Client;
|
||||||
import com.telecominfraproject.wlan.client.session.models.ClientSession;
|
import com.telecominfraproject.wlan.client.session.models.ClientSession;
|
||||||
import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
|
import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
|
||||||
@@ -21,6 +22,7 @@ public interface ClientDatastore {
|
|||||||
Client getOrNull(int customerId, MacAddress clientMac);
|
Client getOrNull(int customerId, MacAddress clientMac);
|
||||||
Client update(Client client);
|
Client update(Client client);
|
||||||
Client delete(int customerId, MacAddress clientMac);
|
Client delete(int customerId, MacAddress clientMac);
|
||||||
|
void delete(long createdBeforeTimestamp);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves a list of Client records that which have their mac address in the provided set.
|
* Retrieves a list of Client records that which have their mac address in the provided set.
|
||||||
@@ -29,17 +31,9 @@ public interface ClientDatastore {
|
|||||||
* @return list of matching Client objects.
|
* @return list of matching Client objects.
|
||||||
*/
|
*/
|
||||||
List<Client> get(int customerId, Set<MacAddress> clientMacSet);
|
List<Client> get(int customerId, Set<MacAddress> clientMacSet);
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves a list of Client records that have mac addresses that match a given substring.
|
|
||||||
*
|
|
||||||
* @param macSubstring
|
|
||||||
* @return next page of matching Client objects.
|
|
||||||
*/
|
|
||||||
PaginationResponse<Client> searchByMacAddress(int customerId, String macSubstring, List<ColumnAndSort> sortBy, PaginationContext<Client> context);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <br>Retrieves all of the Client records that are mapped to the provided customerId.
|
* <br>Retrieves all of the Client records that are mapped to the provided customerId and optional macSubstring filter.
|
||||||
* Results are returned in pages.
|
* Results are returned in pages.
|
||||||
*
|
*
|
||||||
* <br>When changing sort order or filters, pagination should be restarted again from the first page.
|
* <br>When changing sort order or filters, pagination should be restarted again from the first page.
|
||||||
@@ -52,9 +46,10 @@ public interface ClientDatastore {
|
|||||||
*<li> "macAddress"
|
*<li> "macAddress"
|
||||||
*<br>
|
*<br>
|
||||||
* @param customerId
|
* @param customerId
|
||||||
|
* @param macSubstring
|
||||||
* @return next page of matching Client objects.
|
* @return next page of matching Client objects.
|
||||||
*/
|
*/
|
||||||
PaginationResponse<Client> getForCustomer(int customerId, List<ColumnAndSort> sortBy, PaginationContext<Client> context);
|
PaginationResponse<Client> getForCustomer(int customerId, String macSubstring, List<ColumnAndSort> sortBy, PaginationContext<Client> context);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param customerId
|
* @param customerId
|
||||||
@@ -79,7 +74,7 @@ public interface ClientDatastore {
|
|||||||
|
|
||||||
|
|
||||||
ClientSession deleteSession(int customerId, long equipmentId, MacAddress clientMac);
|
ClientSession deleteSession(int customerId, long equipmentId, MacAddress clientMac);
|
||||||
|
void deleteSessions(long createdBeforeTimestamp);
|
||||||
/**
|
/**
|
||||||
* Retrieves a list of Client sessions that which have their mac address in the provided set.
|
* Retrieves a list of Client sessions that which have their mac address in the provided set.
|
||||||
*
|
*
|
||||||
@@ -105,10 +100,18 @@ public interface ClientDatastore {
|
|||||||
* @param customerId
|
* @param customerId
|
||||||
* @param equipmentIds - set of equipment ids for which to retrieve session objects. Empty set or null means retrieve for all customer's equipment.
|
* @param equipmentIds - set of equipment ids for which to retrieve session objects. Empty set or null means retrieve for all customer's equipment.
|
||||||
* @param locationIds - set of location ids for which to retrieve session objects. Empty set or null means retrieve for all customer's locations.
|
* @param locationIds - set of location ids for which to retrieve session objects. Empty set or null means retrieve for all customer's locations.
|
||||||
|
* @param macSubstring - To match with MacAddress
|
||||||
*
|
*
|
||||||
* @return next page of matching Client session objects.
|
* @return next page of matching Client session objects.
|
||||||
*/
|
*/
|
||||||
PaginationResponse<ClientSession> getSessionsForCustomer(int customerId, Set<Long> equipmentIds, Set<Long> locationIds, List<ColumnAndSort> sortBy, PaginationContext<ClientSession> context);
|
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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user