use of io.datarouter.web.requirejs.DatarouterWebRequireJsV2 in project datarouter by hotpads.
the class S3BucketHandler method index.
@Handler(defaultHandler = true)
public Mav index(@Param(P_client) String client, @Param(P_bucket) String bucket, @Param(P_prefix) OptionalString prefix, @Param(P_after) OptionalString after, @Param(P_offset) OptionalInteger offset, @Param(P_limit) OptionalInteger limit, @Param(P_currentDirectory) OptionalBoolean currentDirectory, @Param(P_delimiter) OptionalString delimiter) {
var form = new HtmlForm().withMethod("get");
form.addTextField().withDisplay("Client").withName(P_client).withPlaceholder("theClientName").withValue(client);
form.addTextField().withDisplay("Bucket").withName(P_bucket).withPlaceholder("the.bucket.name").withValue(bucket);
form.addTextField().withDisplay("Prefix").withName(P_prefix).withValue(prefix.orElse(""));
form.addTextField().withDisplay("After").withName(P_after).withValue(after.orElse(""));
form.addTextField().withDisplay("Offset").withName(P_offset).withValue(offset.orElse(0) + "");
form.addTextField().withDisplay("Limit").withName(P_limit).withValue(limit.orElse(100) + "");
form.addTextField().withDisplay("Delimiter").withName(P_delimiter).withValue(delimiter.orElse(""));
form.addCheckboxField().withDisplay("currentDirectory").withName(P_currentDirectory).withChecked(currentDirectory.orElse(false));
form.addButton().withDisplay("Submit").withValue("");
var htmlForm = Bootstrap4FormHtml.render(form).withClass("card card-body bg-light");
ClientId clientId = clients.getClientId(client);
DatarouterS3Client s3Client = s3ClientManager.getClient(clientId);
List<DirectoryDto> objects = s3Client.scanSubdirectories(bucket, prefix.orElse(null), after.orElse(null), delimiter.orElse(null), limit.orElse(100), currentDirectory.orElse(false)).list();
int sizePadding = sizePadding(objects);
ContainerTag<?> table = new J2HtmlTable<DirectoryDto>().withClasses("sortable table table-sm table-striped my-4 border").withHtmlColumn("Key", object -> {
String name = object.name;
if (object.isDirectory) {
return td(makePrefixLink(client, bucket, name, "/"));
}
return td(name);
}).withHtmlColumn("Directory", object -> {
boolean isDirectory = object.isDirectory;
if (isDirectory) {
String href = new URIBuilder().setPath(request.getContextPath() + paths.datarouter.clients.awsS3.countObjects.toSlashedString()).addParameter(P_client, client).addParameter(P_bucket, bucket).addParameter(P_prefix, object.name).toString();
return td(a("true, view count").withHref(href));
}
return td(String.valueOf(isDirectory));
}).withHtmlColumn("Size", object -> {
String commas = NumberFormatter.addCommas(object.size);
String padded = StringTool.pad(commas, ' ', sizePadding);
String escaped = padded.replaceAll(" ", " ");
return td(rawHtml(escaped));
}).withColumn("Last Modified", object -> object.lastModified).withColumn("Storage Class", object -> object.storageClass).build(objects);
ContainerTag<?> tableWrapper = table.withStyle("font-family:monospace; font-size:.9em;");
var content = div(htmlForm, h4(bucket), tableWrapper).withClass("container-fluid my-4");
return pageFactory.startBuilder(request).withTitle("S3 Bucket").withRequires(DatarouterWebRequireJsV2.SORTTABLE).withContent(content).buildMav();
}
use of io.datarouter.web.requirejs.DatarouterWebRequireJsV2 in project datarouter by hotpads.
the class JobletHandler method list.
@Handler
private Mav list(@Param(PARAM_whereStatus) OptionalString pStatus, @Param(PARAM_type) OptionalString pType) {
Scanner<JobletRequest> requests = jobletRequestDao.scan();
if (pStatus.isPresent() && pType.isPresent()) {
JobletStatus status = JobletStatus.fromPersistentStringStatic(pStatus.get());
requests = requests.include(request -> status == request.getStatus()).include(request -> request.getKey().getType().equals(pType.get()));
} else if (pStatus.isPresent() && pType.isEmpty()) {
JobletStatus status = JobletStatus.fromPersistentStringStatic(pStatus.get());
requests = requests.include(request -> status == request.getStatus());
} else if (pStatus.isEmpty() && pType.isPresent()) {
requests = requests.include(request -> request.getKey().getType().equals(pType.get()));
}
Collection<JobletSummary> summaries = JobletSummary.summarizeByTypeExecutionOrderStatus(requests);
return pageFactory.startBuilder(request).withTitle(TITLE).withRequires(DatarouterWebRequireJsV2.SORTTABLE).withContent(makeContent(summaries)).buildMav();
}
use of io.datarouter.web.requirejs.DatarouterWebRequireJsV2 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.web.requirejs.DatarouterWebRequireJsV2 in project datarouter by hotpads.
the class MetricLinksHandler method view.
@Handler
public Mav view() {
List<ContainerTag<DivTag>> tags = pluginInjector.scanInstances(MetricLinkPage.KEY).sort(Comparator.comparing(MetricLinkPage::getHtmlName)).exclude(page -> page.getMetricLinks().isEmpty()).map(this::makeContent).collect(Collectors.toList());
DivTag content = div(each(tags, item -> TagCreator.div(item)));
return pageFactory.startBuilder(request).withTitle("Metric Links").withContent(content).withRequires(DatarouterWebRequireJsV2.SORTTABLE).buildMav();
}
Aggregations