use of com.epam.pipeline.entity.notification.NotificationMessage in project cloud-pipeline by epam.
the class NotificationManager method notifyLongRunningTask.
/**
* Internal method for creating notification message that selecting appropriate email template from db,
* serialize PipelineRun to key-value object and save it to notification_queue table.
* @param run
* @param settings defines, if a long initialization or long running message template should be used
*/
@Transactional(propagation = Propagation.REQUIRED)
public void notifyLongRunningTask(PipelineRun run, NotificationSettings settings) {
LOGGER.debug(messageHelper.getMessage(MessageConstants.INFO_NOTIFICATION_SUBMITTED, run.getPodId()));
NotificationMessage notificationMessage = new NotificationMessage();
if (settings.isKeepInformedOwner()) {
PipelineUser pipelineOwner = userManager.loadUserByName(run.getOwner());
notificationMessage.setToUserId(pipelineOwner.getId());
}
List<Long> ccUserIds = getKeepInformedUserIds(settings);
if (settings.isKeepInformedAdmins()) {
ExtendedRole extendedRole = roleManager.loadRoleWithUsers(DefaultRoles.ROLE_ADMIN.getId());
ccUserIds.addAll(extendedRole.getUsers().stream().map(PipelineUser::getId).collect(Collectors.toList()));
}
notificationMessage.setCopyUserIds(ccUserIds);
notificationMessage.setTemplate(new NotificationTemplate(settings.getTemplateId()));
if (notificationMessage.getTemplate() == null) {
LOGGER.error(messageHelper.getMessage(MessageConstants.ERROR_NOTIFICATION_NOT_FOUND, settings.getTemplateId()));
}
notificationMessage.setTemplateParameters(PipelineRunMapper.map(run, settings.getThreshold()));
monitoringNotificationDao.createMonitoringNotification(notificationMessage);
}
use of com.epam.pipeline.entity.notification.NotificationMessage in project cloud-pipeline by epam.
the class NotificationManager method notifyIdleRuns.
/**
* Issues a notification of an idle Pipeline Run for multiple runs.
*
* @param pipelineCpuRatePairs a list of pairs of PipelineRun and Double cpu usage rate value
* @param notificationType a type of notification to be issued. Supported types are IDLE_RUN, IDLE_RUN_PAUSED,
* IDLE_RUN_STOPPED
* @throws IllegalArgumentException if notificationType is not from IDLE_RUN group
*/
@Transactional(propagation = Propagation.REQUIRED)
public void notifyIdleRuns(List<Pair<PipelineRun, Double>> pipelineCpuRatePairs, NotificationType notificationType) {
if (CollectionUtils.isEmpty(pipelineCpuRatePairs)) {
return;
}
Assert.isTrue(NotificationSettings.NotificationGroup.IDLE_RUN == notificationType.getGroup(), "Only IDLE_RUN group notification types are allowed");
NotificationSettings idleRunSettings = notificationSettingsManager.load(notificationType);
if (idleRunSettings == null || !idleRunSettings.isEnabled()) {
LOGGER.info("No template configured for idle pipeline run notifications or it was disabled!");
return;
}
List<Long> ccUserIds = getKeepInformedUserIds(idleRunSettings);
if (idleRunSettings.isKeepInformedAdmins()) {
ExtendedRole extendedRole = roleManager.loadRoleWithUsers(DefaultRoles.ROLE_ADMIN.getId());
ccUserIds.addAll(extendedRole.getUsers().stream().map(PipelineUser::getId).collect(Collectors.toList()));
}
double idleCpuLevel = preferenceManager.getPreference(SystemPreferences.SYSTEM_IDLE_CPU_THRESHOLD_PERCENT);
Map<String, PipelineUser> pipelineOwners = userManager.loadUsersByNames(pipelineCpuRatePairs.stream().map(p -> p.getLeft().getOwner()).collect(Collectors.toList())).stream().collect(Collectors.toMap(PipelineUser::getUserName, user -> user));
List<NotificationMessage> messages = pipelineCpuRatePairs.stream().map(pair -> {
NotificationMessage message = new NotificationMessage();
message.setTemplate(new NotificationTemplate(idleRunSettings.getTemplateId()));
message.setTemplateParameters(PipelineRunMapper.map(pair.getLeft(), null));
message.getTemplateParameters().put("idleCpuLevel", idleCpuLevel);
message.getTemplateParameters().put("cpuRate", pair.getRight() * PERCENT);
message.setToUserId(pipelineOwners.getOrDefault(pair.getLeft().getOwner(), new PipelineUser()).getId());
message.setCopyUserIds(ccUserIds);
return message;
}).collect(Collectors.toList());
monitoringNotificationDao.createMonitoringNotifications(messages);
}
use of com.epam.pipeline.entity.notification.NotificationMessage in project cloud-pipeline by epam.
the class NotificationManager method toMessage.
private NotificationMessage toMessage(final NotificationMessageVO messageVO) {
final NotificationMessage message = new NotificationMessage();
message.setSubject(messageVO.getSubject());
message.setBody(messageVO.getBody());
message.setTemplateParameters(messageVO.getParameters());
final List<Long> copyUserIds = Optional.ofNullable(messageVO.getCopyUsers()).orElseGet(Collections::emptyList).stream().map(this::getUserByName).map(PipelineUser::getId).collect(Collectors.toList());
message.setCopyUserIds(copyUserIds);
message.setToUserId(getUserByName(messageVO.getToUser()).getId());
return message;
}
use of com.epam.pipeline.entity.notification.NotificationMessage in project cloud-pipeline by epam.
the class NotificationManagerTest method testNotifyIssueComment.
@Test
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Throwable.class)
public void testNotifyIssueComment() {
Pipeline pipeline = createPipeline(testOwner);
Issue issue = createIssue(testUser2, pipeline);
issueDao.createIssue(issue);
IssueComment comment = new IssueComment();
comment.setIssueId(issue.getId());
comment.setText("Notify @TestUser1");
comment.setAuthor(testUser2.getUserName());
notificationManager.notifyIssueComment(comment, issue, comment.getText());
List<NotificationMessage> messages = monitoringNotificationDao.loadAllNotifications();
Assert.assertEquals(1, messages.size());
NotificationMessage message = messages.get(0);
Assert.assertEquals(testUser2.getId(), message.getToUserId());
Assert.assertEquals(issueCommentTemplate.getId(), message.getTemplate().getId());
Assert.assertTrue(message.getCopyUserIds().stream().anyMatch(id -> id.equals(testUser1.getId())));
Assert.assertTrue(message.getCopyUserIds().stream().anyMatch(id -> id.equals(testOwner.getId())));
updateKeepInformedOwner(issueCommentSettings, false);
notificationManager.notifyIssueComment(comment, issue, comment.getText());
messages = monitoringNotificationDao.loadAllNotifications();
Assert.assertEquals(2, messages.size());
Assert.assertNull(messages.get(1).getToUserId());
}
use of com.epam.pipeline.entity.notification.NotificationMessage in project cloud-pipeline by epam.
the class NotificationManagerTest method testWontNotifyAdminsIfConfigured.
@Test
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Throwable.class)
public void testWontNotifyAdminsIfConfigured() {
NotificationSettings settings = notificationSettingsDao.loadNotificationSettings(1L);
settings.setKeepInformedAdmins(false);
notificationSettingsDao.updateNotificationSettings(settings);
notificationManager.notifyLongRunningTask(longRunnging, settings);
List<NotificationMessage> messages = monitoringNotificationDao.loadAllNotifications();
Assert.assertEquals(1, messages.size());
Assert.assertEquals(admin.getId(), messages.get(0).getToUserId());
Assert.assertTrue(messages.get(0).getCopyUserIds().isEmpty());
Assert.assertEquals(longRunningTemplate.getId(), messages.get(0).getTemplate().getId());
settings.setKeepInformedAdmins(false);
settings.setInformedUserIds(Collections.singletonList(userDao.loadUserByName("admin").getId()));
notificationSettingsDao.updateNotificationSettings(settings);
notificationManager.notifyLongRunningTask(longRunnging, settings);
messages = monitoringNotificationDao.loadAllNotifications();
Assert.assertTrue(messages.get(messages.size() - 1).getCopyUserIds().contains(admin.getId()));
}
Aggregations