use of com.epam.pipeline.entity.user.ExtendedRole 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.user.ExtendedRole 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.user.ExtendedRole in project cloud-pipeline by epam.
the class NotificationManagerTest method setUp.
@Before
@SuppressWarnings("unchecked")
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
admin = new PipelineUser("admin");
userDao.createUser(admin, Collections.singletonList(DefaultRoles.ROLE_ADMIN.getId()));
testOwner = new PipelineUser("testOwner");
userDao.createUser(testOwner, Collections.emptyList());
testUser1 = new PipelineUser("TestUser1");
userDao.createUser(testUser1, Collections.emptyList());
testUser2 = new PipelineUser("TestUser2");
userDao.createUser(testUser2, Collections.emptyList());
longRunningTemplate = createTemplate(1L, "testTemplate");
longRunningSettings = createSettings(NotificationType.LONG_RUNNING, longRunningTemplate.getId(), 1L, 1L);
issueTemplate = createTemplate(3L, "issueTemplate");
issueSettings = createSettings(NotificationType.NEW_ISSUE, issueTemplate.getId(), -1L, -1L);
issueCommentTemplate = createTemplate(4L, "issueCommentTemplate");
issueCommentSettings = createSettings(NotificationType.NEW_ISSUE_COMMENT, issueCommentTemplate.getId(), -1L, -1L);
createTemplate(NotificationType.IDLE_RUN.getId(), "idle-run-template");
createSettings(NotificationType.IDLE_RUN, NotificationType.IDLE_RUN.getId(), -1, -1);
longRunnging = new PipelineRun();
DateTime date = DateTime.now(DateTimeZone.UTC).minus(Duration.standardMinutes(6));
longRunnging.setStartDate(date.toDate());
longRunnging.setStatus(TaskStatus.RUNNING);
longRunnging.setOwner(admin.getUserName());
longRunnging.setPodId("longRunning");
when(pipelineRunManager.loadRunningAndTerminatedPipelineRuns()).thenReturn(Collections.singletonList(longRunnging));
when(pipelineRunManager.loadPipelineRun(org.mockito.Matchers.any())).thenReturn(longRunnging);
when(kubernetesManager.getKubernetesClient()).thenReturn(mockClient);
ExtendedRole noAdmins = new ExtendedRole();
noAdmins.setUsers(Collections.emptyList());
Pod mockPod = mock(Pod.class);
PodStatus podStatus = new PodStatus(null, null, "hostIp", "", "", "podIp", "bla-bla", "5 o'clock");
podMetadata = new ObjectMeta();
podMetadata.setLabels(Collections.emptyMap());
when(mockPod.getStatus()).thenReturn(podStatus);
when(mockPod.getMetadata()).thenReturn(podMetadata);
MixedOperation<Pod, PodList, DoneablePod, PodResource<Pod, DoneablePod>> mockPods = new KubernetesTestUtils.MockPods().mockNamespace(Matchers.any(String.class)).mockWithName(Matchers.any(String.class)).mockPod(mockPod).and().getMockedEntity();
when(mockClient.pods()).thenReturn(mockPods);
}
use of com.epam.pipeline.entity.user.ExtendedRole in project cloud-pipeline by epam.
the class NotificationManager method notifyRunStatusChanged.
@Transactional(propagation = Propagation.REQUIRED)
public void notifyRunStatusChanged(PipelineRun pipelineRun) {
NotificationSettings runStatusSettings = notificationSettingsManager.load(NotificationType.PIPELINE_RUN_STATUS);
if (runStatusSettings == null || !runStatusSettings.isEnabled()) {
LOGGER.info("No template configured for pipeline run status changes notifications or it was disabled!");
return;
}
NotificationMessage message = new NotificationMessage();
message.setTemplate(new NotificationTemplate(runStatusSettings.getTemplateId()));
message.setTemplateParameters(PipelineRunMapper.map(pipelineRun, null));
List<Long> ccUserIds = getKeepInformedUserIds(runStatusSettings);
if (runStatusSettings.isKeepInformedAdmins()) {
ExtendedRole extendedRole = roleManager.loadRoleWithUsers(DefaultRoles.ROLE_ADMIN.getId());
ccUserIds.addAll(extendedRole.getUsers().stream().map(PipelineUser::getId).collect(Collectors.toList()));
}
message.setCopyUserIds(ccUserIds);
if (runStatusSettings.isKeepInformedOwner()) {
PipelineUser pipelineOwner = userManager.loadUserByName(pipelineRun.getOwner());
message.setToUserId(pipelineOwner.getId());
}
monitoringNotificationDao.createMonitoringNotification(message);
}
use of com.epam.pipeline.entity.user.ExtendedRole in project cloud-pipeline by epam.
the class RoleDaoTest method testLoadRolesWithUsers.
@Test
public void testLoadRolesWithUsers() {
roleDao.createRole(TEST_ROLE);
Collection<Role> roles = roleDao.loadAllRoles(true);
assertEquals(EXPECTED_DEFAULT_ROLES_NUMBER + 1, roles.size());
assertTrue(roles.stream().anyMatch(role -> role.getName().equals(TEST_ROLE)));
roles.forEach(role -> {
ExtendedRole extendedRole = (ExtendedRole) role;
if (extendedRole.equals(DefaultRoles.ROLE_ADMIN.getRole())) {
assertEquals(1, extendedRole.getUsers().size());
} else if (extendedRole.equals(DefaultRoles.ROLE_USER.getRole())) {
assertTrue(CollectionUtils.isEmpty(extendedRole.getUsers()));
} else if (extendedRole.getName().equals(TEST_ROLE)) {
assertTrue(CollectionUtils.isEmpty(extendedRole.getUsers()));
}
});
}
Aggregations