use of org.springframework.boot.actuate.endpoint.annotation.ReadOperation in project cas by apereo.
the class LoggingConfigurationEndpoint method configuration.
/**
* Configuration map.
*
* @return the map
*/
@ReadOperation
@Operation(summary = "Get logging configuration report")
public Map<String, Object> configuration() {
val configuredLoggers = new HashSet<>();
getLoggerConfigurations().forEach(config -> {
val loggerMap = new HashMap<String, Object>();
loggerMap.put("name", StringUtils.defaultIfBlank(config.getName(), LOGGER_NAME_ROOT));
loggerMap.put("state", config.getState());
if (config.getPropertyList() != null) {
loggerMap.put("properties", config.getPropertyList());
}
loggerMap.put("additive", config.isAdditive());
loggerMap.put("level", config.getLevel().name());
val appenders = new HashSet<>();
config.getAppenders().keySet().stream().map(key -> config.getAppenders().get(key)).forEach(appender -> {
val builder = new ToStringBuilder(this, ToStringStyle.JSON_STYLE);
builder.append("name", appender.getName());
builder.append("state", appender.getState());
builder.append("layoutFormat", appender.getLayout().getContentFormat());
builder.append("layoutContentType", appender.getLayout().getContentType());
if (appender instanceof FileAppender) {
builder.append(FILE_PARAM, ((FileAppender) appender).getFileName());
builder.append(FILE_PATTERN_PARAM, "(none)");
}
if (appender instanceof RandomAccessFileAppender) {
builder.append(FILE_PARAM, ((RandomAccessFileAppender) appender).getFileName());
builder.append(FILE_PATTERN_PARAM, "(none)");
}
if (appender instanceof RollingFileAppender) {
builder.append(FILE_PARAM, ((RollingFileAppender) appender).getFileName());
builder.append(FILE_PATTERN_PARAM, ((RollingFileAppender) appender).getFilePattern());
}
if (appender instanceof MemoryMappedFileAppender) {
builder.append(FILE_PARAM, ((MemoryMappedFileAppender) appender).getFileName());
builder.append(FILE_PATTERN_PARAM, "(none)");
}
if (appender instanceof RollingRandomAccessFileAppender) {
builder.append(FILE_PARAM, ((RollingRandomAccessFileAppender) appender).getFileName());
builder.append(FILE_PATTERN_PARAM, ((RollingRandomAccessFileAppender) appender).getFilePattern());
}
appenders.add(builder.build());
});
loggerMap.put("appenders", appenders);
configuredLoggers.add(loggerMap);
});
val responseMap = new HashMap<String, Object>();
responseMap.put("loggers", configuredLoggers);
val loggers = getActiveLoggersInFactory();
responseMap.put("activeLoggers", loggers.values());
return responseMap;
}
use of org.springframework.boot.actuate.endpoint.annotation.ReadOperation in project cas by apereo.
the class StatisticsEndpoint method handle.
/**
* Gets availability times of the server.
*
* @return the availability
*/
@ReadOperation
@Operation(summary = "Get a report of CAS statistics")
public Map<String, Object> handle() {
val model = new HashMap<String, Object>();
val diff = Duration.between(this.upTimeStartDate, ZonedDateTime.now(ZoneOffset.UTC));
model.put("upTime", diff.getSeconds());
val runtime = Runtime.getRuntime();
model.put("totalMemory", FileUtils.byteCountToDisplaySize(runtime.totalMemory()));
model.put("maxMemory", FileUtils.byteCountToDisplaySize(runtime.maxMemory()));
model.put("freeMemory", FileUtils.byteCountToDisplaySize(runtime.freeMemory()));
val unexpiredTgts = new AtomicInteger();
val unexpiredSts = new AtomicInteger();
val expiredTgts = new AtomicInteger();
val expiredSts = new AtomicInteger();
val tickets = this.centralAuthenticationService.getObject().getTickets(ticket -> true);
tickets.forEach(Unchecked.consumer(ticket -> {
if (ticket instanceof ServiceTicket) {
if (ticket.isExpired()) {
this.centralAuthenticationService.getObject().deleteTicket(ticket.getId());
expiredSts.incrementAndGet();
} else {
unexpiredSts.incrementAndGet();
}
} else {
if (ticket.isExpired()) {
this.centralAuthenticationService.getObject().deleteTicket(ticket.getId());
expiredTgts.incrementAndGet();
} else {
unexpiredTgts.incrementAndGet();
}
}
}));
model.put("unexpiredTgts", unexpiredTgts);
model.put("unexpiredSts", unexpiredSts);
model.put("expiredTgts", expiredTgts);
model.put("expiredSts", expiredSts);
return model;
}
use of org.springframework.boot.actuate.endpoint.annotation.ReadOperation in project cas by apereo.
the class AuditLogEndpoint method getAuditLog.
/**
* Gets Audit log for passed interval.
*
* @param interval - Interval subtracted from current time
* @return the auditlog
*/
@ReadOperation
@SuppressWarnings("JavaUtilDate")
@Operation(summary = "Provide a report of the audit log using a given interval", parameters = { @Parameter(name = "interval", description = "Accepts the duration syntax, such as PT1H") })
public Set<AuditActionContext> getAuditLog(@Selector final String interval) {
if (StringUtils.isBlank(interval)) {
val sinceDate = LocalDate.now(ZoneId.systemDefault()).minusDays(casProperties.getAudit().getEngine().getNumberOfDaysInHistory());
return auditTrailManager.getObject().getAuditRecordsSince(sinceDate);
}
val duration = Beans.newDuration(interval);
val sinceTime = new Date(new Date().getTime() - duration.toMillis());
val days = duration.toDays();
val sinceDate = LocalDate.now(ZoneId.systemDefault()).minusDays(days + 1);
return auditTrailManager.getObject().getAuditRecordsSince(sinceDate).stream().filter(a -> a.getWhenActionWasPerformed().after(sinceTime)).collect(Collectors.toSet());
}
use of org.springframework.boot.actuate.endpoint.annotation.ReadOperation in project cas by apereo.
the class SpringWebflowEndpoint method getReport.
/**
* Get SWF report.
*
* @param flowId the flow id
* @param stateId the state id
* @return JSON representing the current state of SWF.
*/
@ReadOperation
@Operation(summary = "Get Spring webflow report using an optional flow id", parameters = { @Parameter(name = "flowId"), @Parameter(name = "stateId") })
public Map<?, ?> getReport(@Nullable final String flowId, @Nullable final String stateId) {
val jsonMap = new LinkedHashMap<String, Object>();
val executionPlan = applicationContext.getBean(CasWebflowExecutionPlan.BEAN_NAME, CasWebflowExecutionPlan.class);
executionPlan.execute();
val map = applicationContext.getBeansOfType(FlowDefinitionRegistry.class);
map.forEach((k, value) -> Arrays.stream(value.getFlowDefinitionIds()).filter(currentId -> StringUtils.isBlank(flowId) || flowId.equalsIgnoreCase(currentId)).forEach(id -> {
val flowDefinition = (Flow) value.getFlowDefinition(id);
val flowDetails = new LinkedHashMap<String, Object>();
flowDetails.put("startState", flowDefinition.getStartState().getId());
val startActions = StreamSupport.stream(flowDefinition.getStartActionList().spliterator(), false).map(SpringWebflowEndpoint::convertActionToString).collect(Collectors.toList());
if (!startActions.isEmpty()) {
flowDetails.put("startActions", startActions);
}
val states = new LinkedHashMap<String, Map>();
Arrays.stream(flowDefinition.getStateIds()).filter(st -> StringUtils.isBlank(stateId) || RegexUtils.find(stateId, st)).forEach(st -> {
val stateMap = getStateDetails(flowDefinition, st);
states.put(st, stateMap);
});
flowDetails.put("states", states);
flowDetails.put("possibleOutcomes", flowDefinition.getPossibleOutcomes());
flowDetails.put("stateCount", flowDefinition.getStateCount());
var acts = StreamSupport.stream(flowDefinition.getEndActionList().spliterator(), false).map(SpringWebflowEndpoint::convertActionToString).collect(Collectors.toList());
if (!acts.isEmpty()) {
flowDetails.put("endActions", acts);
}
acts = StreamSupport.stream(flowDefinition.getGlobalTransitionSet().spliterator(), false).map(tr -> tr.getId() + " -> " + tr.getTargetStateId() + " @ " + tr.getExecutionCriteria().toString()).collect(Collectors.toList());
if (!acts.isEmpty()) {
flowDetails.put("globalTransitions", acts);
}
acts = Arrays.stream(flowDefinition.getExceptionHandlerSet().toArray()).map(Object::toString).collect(Collectors.toList());
if (!acts.isEmpty()) {
flowDetails.put("exceptionHandlers", acts);
}
val vars = Arrays.stream(flowDefinition.getVariables()).map(FlowVariable::getName).collect(Collectors.joining(","));
if (StringUtils.isNotBlank(vars)) {
flowDetails.put("variables", vars);
}
jsonMap.put(id, flowDetails);
}));
return jsonMap;
}
use of org.springframework.boot.actuate.endpoint.annotation.ReadOperation in project cas by apereo.
the class CasResolveAttributesReportEndpoint method resolvePrincipalAttributes.
/**
* Resolve principal attributes map.
*
* @param uid the uid
* @return the map
*/
@ReadOperation
@Operation(summary = "Resolve principal attributes for user", parameters = { @Parameter(name = "uid", required = true) })
public Map<String, Object> resolvePrincipalAttributes(@Selector final String uid) {
val p = defaultPrincipalResolver.getObject().resolve(new BasicIdentifiableCredential(uid));
val map = new HashMap<String, Object>();
map.put("uid", p.getId());
map.put("attributes", p.getAttributes());
return map;
}
Aggregations