/*
* This file is part of the Cerebro distribution.
* (https://github.com/voyages-sncf-technologies/cerebro)
* Copyright (C) 2017 VSCT.
*
* Cerebro is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, version 3 of the License.
*
* Cerebro is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.vsct.supervision.notification.email;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.velocity.app.VelocityEngine;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.ui.velocity.VelocityEngineUtils;
import com.vsct.supervision.config.CerebroConfiguration;
import com.vsct.supervision.seyren.api.Alarm;
import com.vsct.supervision.seyren.api.Subscription;
import com.vsct.supervision.seyren.api.SubscriptionType;
@Service
public class NotificationHandler {
private final Sender sender;
private final CerebroConfiguration configuration;
private VelocityEngine velocityEngine;
@Autowired
public NotificationHandler(Sender sender, CerebroConfiguration configuration) {
this.sender = sender;
this.configuration = configuration;
initVelocityEngine();
}
private void send(String title, String text, List<String> recipients){
if(this.configuration.isUpdateNotificationsEnable()) {
sender.send(title, text, recipients);
}
}
public void sendAlarmHasBeenModified(Alarm alarm) {
Map<String, String> model = new HashMap<>();
model.put("status", "changed");
model.put("alert", alarm.getName());
model.put("link", configuration.getDashboardBaseUrl() + "/notifications/" + alarm.getId());
String text = processTemplate("alarmModified.vm", model);
send("One of your alerts has been changed", text, getRecipients(alarm));
}
public void sendAlarmHasBeenDeactivated(Alarm alarm) {
Map<String, String> model = new HashMap<>();
model.put("status", "disabled");
model.put("alert", alarm.getName());
model.put("link", configuration.getDashboardBaseUrl() + "/notifications/" + alarm.getId());
String text = processTemplate("alarmModified.vm", model);
send("One of your alerts has been disabled", text, getRecipients(alarm));
}
public String processTemplate(String templateName, Map model){
return VelocityEngineUtils.mergeTemplateIntoString(
velocityEngine, "templates/"+templateName, "UTF-8", model);
}
private List<String> getRecipients(Alarm alarm){
return alarm.getSubscriptions()
.stream()
.filter(subscription -> subscription.getType() == SubscriptionType.EMAIL && subscription.isEnabled())
.map(Subscription::getTarget)
.collect(Collectors.toList());
}
private void initVelocityEngine(){
velocityEngine = new VelocityEngine(sender.getProperties());
velocityEngine.init();
}
}