package org.apereo.cas.monitor.config; import org.apereo.cas.configuration.CasConfigurationProperties; import org.apereo.cas.configuration.model.core.monitor.MonitorProperties; import org.apereo.cas.monitor.HealthCheckMonitor; import org.apereo.cas.monitor.MemoryMonitor; import org.apereo.cas.monitor.Monitor; import org.apereo.cas.monitor.SessionMonitor; import org.apereo.cas.ticket.registry.TicketRegistry; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; /** * This is {@link CasCoreMonitorConfiguration}. * * @author Misagh Moayyed * @since 5.0.0 */ @Configuration("casCoreMonitorConfiguration") @EnableConfigurationProperties(CasConfigurationProperties.class) public class CasCoreMonitorConfiguration { @Autowired @Qualifier("ticketRegistry") private TicketRegistry ticketRegistry; @Autowired private CasConfigurationProperties casProperties; @Autowired private ConfigurableApplicationContext applicationContext; @ConditionalOnMissingBean(name = "healthCheckMonitor") @Bean public Monitor healthCheckMonitor() { final Map<String, Monitor> beans = applicationContext.getBeansOfType(Monitor.class, false, true); final Set<Monitor> monitors = beans.entrySet().stream() .map(Map.Entry::getValue) .collect(Collectors.toSet()); final int freeMemThreshold = casProperties.getMonitor().getFreeMemThreshold(); if (freeMemThreshold > 0) { monitors.add(new MemoryMonitor(freeMemThreshold)); } final MonitorProperties.Warn warn = casProperties.getMonitor().getSt().getWarn(); if (warn.getThreshold() > 0) { final SessionMonitor bean = new SessionMonitor(ticketRegistry, warn.getThreshold(), warn.getThreshold()); monitors.add(bean); } return new HealthCheckMonitor(monitors); } }