Search in sources :

Example 11 with Pair

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();
}
Also used : CurrentUserSessionInfoService(io.datarouter.web.user.session.CurrentUserSessionInfoService) PluginInjector(io.datarouter.plugin.PluginInjector) Mav(io.datarouter.web.handler.mav.Mav) TagCreator.each(j2html.TagCreator.each) TagCreator.a(j2html.TagCreator.a) TagCreator.h2(j2html.TagCreator.h2) ZoneId(java.time.ZoneId) ContainerTag(j2html.tags.ContainerTag) Objects(java.util.Objects) Inject(javax.inject.Inject) DatarouterWebRequireJsV2(io.datarouter.web.requirejs.DatarouterWebRequireJsV2) DailyDigestType(io.datarouter.web.digest.DailyDigest.DailyDigestType) BaseHandler(io.datarouter.web.handler.BaseHandler) TagCreator.li(j2html.TagCreator.li) Bootstrap4PageFactory(io.datarouter.web.html.j2html.bootstrap4.Bootstrap4PageFactory) Comparator(java.util.Comparator) Pair(io.datarouter.util.tuple.Pair) TagCreator.div(j2html.TagCreator.div) TagCreator.ul(j2html.TagCreator.ul) ZoneId(java.time.ZoneId) Pair(io.datarouter.util.tuple.Pair)

Example 12 with Pair

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);
}
Also used : Twin(io.datarouter.util.tuple.Twin) Scanner(io.datarouter.scanner.Scanner) NodeTool(io.datarouter.storage.node.NodeTool) Set(java.util.Set) ListQueuesResult(com.amazonaws.services.sqs.model.ListQueuesResult) Singleton(javax.inject.Singleton) StringTool(io.datarouter.util.string.StringTool) Supplier(java.util.function.Supplier) HashSet(java.util.HashSet) Inject(javax.inject.Inject) SqsClientManager(io.datarouter.aws.sqs.SqsClientManager) List(java.util.List) QueueDoesNotExistException(com.amazonaws.services.sqs.model.QueueDoesNotExistException) ClientId(io.datarouter.storage.client.ClientId) AmazonSQS(com.amazonaws.services.sqs.AmazonSQS) BaseSqsNode(io.datarouter.aws.sqs.BaseSqsNode) DatarouterNodes(io.datarouter.storage.node.DatarouterNodes) Pair(io.datarouter.util.tuple.Pair) ListQueuesResult(com.amazonaws.services.sqs.model.ListQueuesResult) AmazonSQS(com.amazonaws.services.sqs.AmazonSQS) Twin(io.datarouter.util.tuple.Twin) NodeTool(io.datarouter.storage.node.NodeTool) BaseSqsNode(io.datarouter.aws.sqs.BaseSqsNode) Supplier(java.util.function.Supplier) HashSet(java.util.HashSet) Pair(io.datarouter.util.tuple.Pair)

Example 13 with Pair

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;
}
Also used : DivTag(j2html.tags.specialized.DivTag) LiTag(j2html.tags.specialized.LiTag) InetSocketAddress(java.net.InetSocketAddress) Pair(io.datarouter.util.tuple.Pair)

Example 14 with Pair

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;
}
Also used : LongRunningTaskStatus(io.datarouter.tasktracker.scheduler.LongRunningTaskStatus) Arrays(java.util.Arrays) CurrentUserSessionInfoService(io.datarouter.web.user.session.CurrentUserSessionInfoService) DateTool(io.datarouter.util.DateTool) Date(java.util.Date) OptionalString(io.datarouter.web.handler.types.optional.OptionalString) Inject(javax.inject.Inject) NumberFormatter(io.datarouter.util.number.NumberFormatter) Duration(java.time.Duration) DatarouterTaskTrackerFiles(io.datarouter.tasktracker.config.DatarouterTaskTrackerFiles) Mav(io.datarouter.web.handler.mav.Mav) Set(java.util.Set) StringTool(io.datarouter.util.string.StringTool) Collectors(java.util.stream.Collectors) ZoneId(java.time.ZoneId) ContainerTag(j2html.tags.ContainerTag) ZonedDateFormatterTool(io.datarouter.util.time.ZonedDateFormatterTool) List(java.util.List) LongRunningTaskDao(io.datarouter.tasktracker.storage.LongRunningTaskDao) J2HtmlLegendTable(io.datarouter.web.html.j2html.J2HtmlLegendTable) BaseHandler(io.datarouter.web.handler.BaseHandler) Optional(java.util.Optional) Pair(io.datarouter.util.tuple.Pair) TagCreator.div(j2html.TagCreator.div) LongRunningTask(io.datarouter.tasktracker.storage.LongRunningTask) Mav(io.datarouter.web.handler.mav.Mav) ZoneId(java.time.ZoneId) OptionalString(io.datarouter.web.handler.types.optional.OptionalString) LongRunningTaskStatus(io.datarouter.tasktracker.scheduler.LongRunningTaskStatus) Pair(io.datarouter.util.tuple.Pair) BaseHandler(io.datarouter.web.handler.BaseHandler)

Example 15 with Pair

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);
}
Also used : NullHandlerDecoder(io.datarouter.web.handler.BaseHandler.NullHandlerDecoder) Handler(io.datarouter.web.handler.BaseHandler.Handler) Method(java.lang.reflect.Method) NullHandlerDecoder(io.datarouter.web.handler.BaseHandler.NullHandlerDecoder) Pair(io.datarouter.util.tuple.Pair)

Aggregations

Pair (io.datarouter.util.tuple.Pair)16 List (java.util.List)9 Inject (javax.inject.Inject)8 Scanner (io.datarouter.scanner.Scanner)7 ArrayList (java.util.ArrayList)6 Collectors (java.util.stream.Collectors)6 Optional (java.util.Optional)5 Logger (org.slf4j.Logger)5 LoggerFactory (org.slf4j.LoggerFactory)5 DatarouterInjector (io.datarouter.inject.DatarouterInjector)4 ClientId (io.datarouter.storage.client.ClientId)3 StringTool (io.datarouter.util.string.StringTool)3 BaseHandler (io.datarouter.web.handler.BaseHandler)3 Mav (io.datarouter.web.handler.mav.Mav)3 CurrentUserSessionInfoService (io.datarouter.web.user.session.CurrentUserSessionInfoService)3 TagCreator.div (j2html.TagCreator.div)3 ZoneId (java.time.ZoneId)3 Collections (java.util.Collections)3 Date (java.util.Date)3 Function (java.util.function.Function)3