use of io.datarouter.util.tuple.Pair in project datarouter by hotpads.
the class DailyDigestHandler method view.
private Mav view(DailyDigestType type) {
ZoneId zoneId = currentSessionInfoService.getZoneId(request);
var digestsWithContent = pluginInjector.scanInstances(DailyDigest.KEY).include(digest -> digest.getType() == type).map(dailyDigest -> new Pair<>(dailyDigest, dailyDigest.getPageContent(zoneId).orElse(null))).include(digestWithContent -> Objects.nonNull(digestWithContent.getRight())).sort(Comparator.comparing(Pair::getLeft, DailyDigest.COMPARATOR)).list();
ContainerTag<?> content;
if (digestsWithContent.isEmpty()) {
content = div("No content for the daily digest.").withClass("container-fluid");
} else {
ContainerTag<?> header = h2("Daily Digest - " + type.display);
ContainerTag<?> toc = ul(each(digestsWithContent, digestWithContent -> {
DailyDigest digest = digestWithContent.getLeft();
return li(a(digest.getTitle()).withHref("#" + digest.getId()));
}));
content = div(header, toc, each(digestsWithContent, digestWithContent -> div(digestWithContent.getRight()).withId(digestWithContent.getLeft().getId()))).withClass("container-fluid");
}
return pageFactory.startBuilder(request).withTitle("Daily Digest " + type.display).withContent(content).withRequires(DatarouterWebRequireJsV2.SORTTABLE).buildMav();
}
use of io.datarouter.util.tuple.Pair in project datarouter by hotpads.
the class SqsQueueRegistryService method getSqsQueuesForClient.
public Pair<List<Twin<String>>, List<String>> getSqsQueuesForClient(ClientId clientId) {
Set<String> knownQueuesUrls = new HashSet<>();
AmazonSQS sqs = sqsClientManager.getAmazonSqs(clientId);
List<? extends BaseSqsNode<?, ?, ?>> sqsNodes = Scanner.of(nodes.getPhysicalNodesForClient(clientId.getName())).map(NodeTool::extractSinglePhysicalNode).map(physicalNode -> (BaseSqsNode<?, ?, ?>) physicalNode).list();
List<Twin<String>> knownQueueUrlByName = Scanner.of(sqsNodes).map(BaseSqsNode::getQueueUrlAndName).map(Supplier::get).each(twin -> knownQueuesUrls.add(twin.getLeft())).list();
List<String> unreferencedQueues = Scanner.of(sqsNodes).map(BaseSqsNode::buildNamespace).distinct().map(sqs::listQueues).concatIter(ListQueuesResult::getQueueUrls).exclude(knownQueuesUrls::contains).map(queueUrl -> StringTool.getStringAfterLastOccurrence("/", queueUrl)).include(queueName -> sqsQueueExists(sqs, queueName)).list();
return new Pair<>(knownQueueUrlByName, unreferencedQueues);
}
use of io.datarouter.util.tuple.Pair in project datarouter by hotpads.
the class MemcachedWebInspector method getDetails.
protected Pair<Integer, DivTag> getDetails(ClientId clientId) {
Pair<Integer, DivTag> nodeCountByNodeTag = new Pair<>();
List<LiTag> socketAddresses = Scanner.of(memcachedOptions.getServers(clientId.getName())).map(InetSocketAddress::toString).map(TagCreator::li).list();
DivTag div = div(ul(socketAddresses.toArray(new ContainerTag[0])));
nodeCountByNodeTag.setLeft(socketAddresses.size());
nodeCountByNodeTag.setRight(div);
return nodeCountByNodeTag;
}
use of io.datarouter.util.tuple.Pair in project datarouter by hotpads.
the class LongRunningTasksHandler method longRunningTasks.
@Handler(defaultHandler = true)
Mav longRunningTasks(OptionalString name, OptionalString status) {
Mav mav = new Mav(files.jsp.admin.datarouter.tasktracker.longRunningTasksJsp);
String lowercaseNameSearch = name.map(String::toLowerCase).map(String::trim).orElse("");
boolean showAllStatuses = status.map(ALL_STATUSES_VALUE::equals).orElse(false);
LongRunningTaskStatus filteredStatus;
if (showAllStatuses) {
filteredStatus = null;
} else {
filteredStatus = status.map(LongRunningTaskStatus::fromPersistentStringStatic).orElse(LongRunningTaskStatus.RUNNING);
}
ZoneId zoneId = currentUserSessionInfoService.getZoneId(request);
List<LongRunningTaskJspDto> longRunningTasks = longRunningTaskDao.scan().include(task -> task.getKey().getName().toLowerCase().contains(lowercaseNameSearch)).include(task -> showAllStatuses || task.getJobExecutionStatus() == filteredStatus).map(task -> new LongRunningTaskJspDto(task, zoneId)).list();
Set<Pair<String, String>> statuses = Arrays.stream(LongRunningTaskStatus.values()).map(jobExecutionStatus -> new Pair<>(jobExecutionStatus.name(), jobExecutionStatus.getPersistentString())).collect(Collectors.toSet());
mav.put("longRunningTasks", longRunningTasks);
mav.put("statuses", statuses);
mav.put("allStatusesValue", ALL_STATUSES_VALUE);
mav.put("displayedStatus", showAllStatuses ? ALL_STATUSES_VALUE : filteredStatus.getPersistentString());
if (!showAllStatuses) {
mav.put("filteringStatusName", filteredStatus.name());
}
mav.put("nameSearch", name.orElse(""));
mav.put("legend", legend().renderFormatted());
return mav;
}
use of io.datarouter.util.tuple.Pair in project datarouter by hotpads.
the class HandlerTypingHelper method findMethodByName.
/**
* This methods goes through all methods who are named like methodName and tries to find the one that has the
* largest number of parameters. It generates the array of arguments at the same time.
*/
public Pair<Method, Object[]> findMethodByName(Collection<Method> possibleMethods, Class<? extends HandlerDecoder> handlerDecoderClass, HttpServletRequest request) {
Method method = null;
Object[] args = new Object[] {};
for (Method possibleMethod : possibleMethods) {
Class<? extends HandlerDecoder> decoderClass = handlerDecoderClass;
Class<? extends HandlerDecoder> methodDecoder = possibleMethod.getAnnotation(Handler.class).decoder();
if (!methodDecoder.equals(NullHandlerDecoder.class)) {
decoderClass = methodDecoder;
}
HandlerDecoder decoder = injector.getInstance(decoderClass);
Object[] newArgs;
String traceName = decoder.getClass().getSimpleName() + " decode";
try (var $ = TracerTool.startSpan(traceName, TraceSpanGroupType.SERIALIZATION)) {
newArgs = decoder.decode(request, possibleMethod);
}
if (newArgs == null) {
continue;
}
if (args.length < newArgs.length || args.length == 0) {
args = newArgs;
method = possibleMethod;
}
}
return new Pair<>(method, args);
}
Aggregations