Skip to content

Commit 78fdde5

Browse files
Merge pull request #56 from RADAR-base/release-0.2.1
Release 0.2.1
2 parents f83a284 + b18da3e commit 78fdde5

File tree

14 files changed

+187
-59
lines changed

14 files changed

+187
-59
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,6 @@ smtp.env
2525

2626
/out/
2727
/libs/
28+
29+
# Distribution
30+
/radar-backend-*

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,4 @@ COPY --from=builder /code/radar-backend-*/lib/* /usr/lib/
4747
# Load topics validator
4848
COPY ./src/main/docker/radar-backend-init /usr/bin
4949

50-
CMD ["radar-backend-init"]
50+
ENTRYPOINT ["radar-backend-init"]

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ plugins {
1111
//---------------------------------------------------------------------------//
1212

1313
group = 'org.radarcns'
14-
version = '0.2.0'
14+
version = '0.2.1'
1515
ext.description = 'Kafka backend for processing device data.'
1616

1717
mainClassName = 'org.radarcns.RadarBackend'

radar.yml

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,14 @@ rest_proxy:
4343

4444
#======================== Battery level monitor ========================#
4545
battery_monitor:
46+
notify: # Each project can have a number of email addresses
47+
- project_id: s1
48+
email_address:
49+
- test@thehyve.nl
50+
- project_id: s2
51+
email_address:
52+
- radar@thehyve.nl
4653
level: LOW
47-
email_address:
48-
- radar@thehyve.nl
4954
email_host: localhost
5055
email_port: 25
5156
email_user: no-reply@radarcns.org
@@ -54,8 +59,13 @@ battery_monitor:
5459

5560
#======================= Disconnection monitor==========================#
5661
disconnect_monitor:
57-
email_address:
58-
- test@thehyve.nl
62+
notify:
63+
- project_id: s1
64+
email_address:
65+
- test@thehyve.nl
66+
- project_id: s2
67+
email_address:
68+
- radar@thehyve.nl
5969
email_host: localhost
6070
email_port: 25
6171
email_user: no-reply@radarcns.org

src/integrationTest/resources/org/radarcns/kafka/radar.yml

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,19 @@ schema_registry:
4141
protocol: http
4242

4343
battery_monitor:
44+
notify:
45+
- project_id: test
46+
email_address:
47+
- notifier@email
4448
level: LOW
45-
email_address:
46-
- notifier@email
4749
topics:
4850
- android_empatica_e4_battery_level
4951

5052
disconnect_monitor:
51-
email_address:
52-
- notifier2@email
53+
notify:
54+
- project_id: test
55+
email_address:
56+
- notifier@email
5357
email_host: localhost
5458
email_port: 25
5559
email_user: sender@email

src/main/java/org/radarcns/config/MonitorConfig.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
* POJO representing a monitor configuration
2424
*/
2525
public class MonitorConfig {
26-
@JsonProperty("email_address")
27-
private List<String> emailAddress;
26+
@JsonProperty("notify")
27+
private List<NotifyConfig> notifyConfig;
2828

2929
@JsonProperty("email_host")
3030
private String emailHost;
@@ -43,12 +43,12 @@ public class MonitorConfig {
4343
@JsonProperty("message")
4444
private String message = null;
4545

46-
public List<String> getEmailAddress() {
47-
return emailAddress;
46+
public List<NotifyConfig> getNotifyConfig() {
47+
return notifyConfig;
4848
}
4949

50-
public void setEmailAddress(List<String> emailAddress) {
51-
this.emailAddress = emailAddress;
50+
public void setNotifyConfig(List<NotifyConfig> notifyConfig) {
51+
this.notifyConfig = notifyConfig;
5252
}
5353

5454
public List<String> getTopics() {
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package org.radarcns.config;
2+
3+
import com.fasterxml.jackson.annotation.JsonCreator;
4+
import com.fasterxml.jackson.annotation.JsonProperty;
5+
6+
import java.util.List;
7+
8+
9+
/**
10+
* POJO to store each email Notification configuration.
11+
*/
12+
public class NotifyConfig {
13+
@JsonProperty("project_id")
14+
private String projectId;
15+
16+
@JsonProperty("email_address")
17+
private List<String> emailAddress;
18+
19+
@JsonCreator
20+
public NotifyConfig(@JsonProperty("project_id") String projectId,
21+
@JsonProperty("email_address") List<String> emailAddress) {
22+
this.projectId = projectId;
23+
this.emailAddress = emailAddress;
24+
}
25+
26+
public String getProjectId() {
27+
return projectId;
28+
}
29+
30+
public void setProjectId(String projectId) {
31+
this.projectId = projectId;
32+
}
33+
34+
public List<String> getEmailAddress() {
35+
return emailAddress;
36+
}
37+
38+
public void setEmailAddress(List<String> emailAddress) {
39+
this.emailAddress = emailAddress;
40+
}
41+
}

src/main/java/org/radarcns/monitor/BatteryLevelMonitor.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.radarcns.kafka.ObservationKey;
3232
import org.radarcns.monitor.BatteryLevelMonitor.BatteryLevelState;
3333
import org.radarcns.util.EmailSender;
34+
import org.radarcns.util.EmailSenders;
3435
import org.radarcns.util.RadarSingletonFactory;
3536
import org.slf4j.Logger;
3637
import org.slf4j.LoggerFactory;
@@ -43,7 +44,7 @@ public class BatteryLevelMonitor extends
4344
AbstractKafkaMonitor<GenericRecord, GenericRecord, BatteryLevelState> {
4445
private static final Logger logger = LoggerFactory.getLogger(BatteryLevelMonitor.class);
4546

46-
private final EmailSender sender;
47+
private final EmailSenders senders;
4748
private final Status minLevel;
4849
private final long logInterval;
4950
private long messageNumber;
@@ -52,19 +53,19 @@ public class BatteryLevelMonitor extends
5253
* BatteryLevelMonitor constructor.
5354
* @param radar RADAR properties
5455
* @param topics topics to monitor, each of which has a "batteryLevel" value field
55-
* @param sender email sender for notifications, null if no notifications should be sent.
56+
* @param senders email sender for notifications, null if no notifications should be sent.
5657
* @param minLevel minimum battery level, below which a notification should be sent
5758
* @param logInterval every how many messages to log, 0 for no log messages
5859
*/
5960
public BatteryLevelMonitor(RadarPropertyHandler radar, Collection<String> topics,
60-
EmailSender sender, Status minLevel, long logInterval) {
61+
EmailSenders senders, Status minLevel, long logInterval) {
6162
super(radar, topics, "battery_monitors", "1", new BatteryLevelState());
6263

6364
Properties props = new Properties();
6465
props.setProperty(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "latest");
6566
configure(props);
6667

67-
this.sender = sender;
68+
this.senders = senders;
6869
this.minLevel = minLevel == null ? Status.CRITICAL : minLevel;
6970
this.logInterval = logInterval;
7071
}
@@ -108,6 +109,9 @@ protected void evaluateRecord(ConsumerRecord<GenericRecord, GenericRecord> recor
108109
}
109110

110111
private void updateStatus(ObservationKey key, Status status) {
112+
113+
// Don't report if no email address for this projectId
114+
EmailSender sender = senders.getEmailSenderForProject(key.getProjectId());
111115
if (sender == null) {
112116
return;
113117
}

src/main/java/org/radarcns/monitor/DisconnectMonitor.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import org.radarcns.kafka.ObservationKey;
4343
import org.radarcns.monitor.DisconnectMonitor.DisconnectMonitorState;
4444
import org.radarcns.util.EmailSender;
45+
import org.radarcns.util.EmailSenders;
4546
import org.radarcns.util.Monitor;
4647
import org.slf4j.Logger;
4748
import org.slf4j.LoggerFactory;
@@ -56,7 +57,7 @@ public class DisconnectMonitor extends AbstractKafkaMonitor<
5657

5758
private final ScheduledExecutorService scheduler;
5859
private final long timeUntilReportedMissing;
59-
private final EmailSender sender;
60+
private final EmailSenders senders;
6061
private final Format dayFormat;
6162
private final int numRepetitions;
6263
private final long repeatInterval;
@@ -65,9 +66,9 @@ public class DisconnectMonitor extends AbstractKafkaMonitor<
6566
private final String message;
6667

6768
public DisconnectMonitor(RadarPropertyHandler radar, Collection<String> topics, String groupId,
68-
EmailSender sender) {
69+
EmailSenders senders) {
6970
super(radar, topics, groupId, "1", new DisconnectMonitorState());
70-
this.sender = sender;
71+
this.senders = senders;
7172
this.dayFormat = DateFormat.getDateTimeInstance(
7273
DateFormat.MEDIUM, DateFormat.SHORT, Locale.US);
7374
this.scheduler = Executors.newSingleThreadScheduledExecutor();
@@ -169,6 +170,13 @@ private void scheduleRepetition(final String key, final MissingRecordsReport rep
169170

170171
private void reportMissing(String keyString, MissingRecordsReport report) {
171172
ObservationKey key = getStateStore().stringToKey(keyString);
173+
174+
// Don't report if no email address for this projectId
175+
EmailSender sender = senders.getEmailSenderForProject(key.getProjectId());
176+
if(sender == null) {
177+
return;
178+
}
179+
172180
long timeout = report.getTimeout();
173181
logger.info("Device {} timeout {} (message {} of {}). Reporting it missing.", key,
174182
timeout, report.getMessageNumber(), numRepetitions);
@@ -202,6 +210,14 @@ private void reportMissing(String keyString, MissingRecordsReport report) {
202210
}
203211

204212
private void reportRecovered(ObservationKey key, long reportedMissingTime) {
213+
214+
// Don't report if no email address for this projectId
215+
EmailSender sender = senders.getEmailSenderForProject(key.getProjectId());
216+
if(sender == null) {
217+
return;
218+
}
219+
220+
205221
logger.info("Device {} seen again. Reporting it recovered.", key);
206222
try {
207223
Date reportedMissingDate = new Date(reportedMissingTime);

src/main/java/org/radarcns/monitor/KafkaMonitorFactory.java

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,9 @@
2424
import java.util.List;
2525
import java.util.Locale;
2626
import java.util.stream.Collectors;
27-
import org.radarcns.config.BatteryMonitorConfig;
28-
import org.radarcns.config.DisconnectMonitorConfig;
29-
import org.radarcns.config.MonitorConfig;
30-
import org.radarcns.config.RadarBackendOptions;
31-
import org.radarcns.config.RadarPropertyHandler;
32-
import org.radarcns.config.SourceStatisticsMonitorConfig;
33-
import org.radarcns.util.EmailSender;
27+
28+
import org.radarcns.config.*;
29+
import org.radarcns.util.EmailSenders;
3430
import org.slf4j.Logger;
3531
import org.slf4j.LoggerFactory;
3632

@@ -106,7 +102,7 @@ private KafkaMonitor createBatteryLevelMonitor() throws IOException {
106102
}
107103

108104
BatteryLevelMonitor.Status minLevel = BatteryLevelMonitor.Status.CRITICAL;
109-
EmailSender sender = getSender(config);
105+
EmailSenders senders = getSenders(config);
110106
Collection<String> topics = getTopics(config, "android_empatica_e4_battery_level");
111107

112108
if (config.getLevel() != null) {
@@ -121,7 +117,7 @@ private KafkaMonitor createBatteryLevelMonitor() throws IOException {
121117
}
122118
long logInterval = config.getLogInterval();
123119

124-
return new BatteryLevelMonitor(properties, topics, sender, minLevel, logInterval);
120+
return new BatteryLevelMonitor(properties, topics, senders, minLevel, logInterval);
125121
}
126122

127123
private KafkaMonitor createDisconnectMonitor()
@@ -131,16 +127,15 @@ private KafkaMonitor createDisconnectMonitor()
131127
logger.warn("Disconnect monitor is not configured. Cannot start it.");
132128
return null;
133129
}
134-
EmailSender sender = getSender(config);
130+
EmailSenders senders = getSenders(config);
135131
Collection<String> topics = getTopics(config, "android_empatica_e4_temperature");
136-
return new DisconnectMonitor(properties, topics, "disconnect_monitor", sender);
132+
return new DisconnectMonitor(properties, topics, "disconnect_monitor", senders);
137133
}
138134

139-
private EmailSender getSender(MonitorConfig config) throws IOException {
140-
if (config != null && config.getEmailAddress() != null) {
141-
return new EmailSender(config.getEmailHost(), config.getEmailPort(),
142-
config.getEmailUser(),
143-
config.getEmailAddress());
135+
136+
private EmailSenders getSenders(MonitorConfig config) throws IOException {
137+
if (config != null && config.getNotifyConfig() != null) {
138+
return EmailSenders.parseConfig(config);
144139
}
145140
return null;
146141
}

0 commit comments

Comments
 (0)