use of org.graylog.plugins.sidecar.rest.models.Collector in project graylog2-server by Graylog2.
the class AdministrationResource method administration.
@POST
@Timed
@ApiOperation(value = "Lists existing Sidecar registrations including compatible sidecars using pagination")
@RequiresPermissions({ SidecarRestPermissions.SIDECARS_READ, SidecarRestPermissions.COLLECTORS_READ, SidecarRestPermissions.CONFIGURATIONS_READ })
@NoAuditEvent("this is not changing any data")
public SidecarListResponse administration(@ApiParam(name = "JSON body", required = true) @Valid @NotNull AdministrationRequest request) {
final String sort = Sidecar.FIELD_NODE_NAME;
final String order = "asc";
final String mappedQuery = sidecarStatusMapper.replaceStringStatusSearchQuery(request.query());
SearchQuery searchQuery;
try {
searchQuery = searchQueryParser.parse(mappedQuery);
} catch (IllegalArgumentException e) {
throw new BadRequestException("Invalid argument in search query: " + e.getMessage());
}
final long total = sidecarService.count();
final Optional<Predicate<Sidecar>> filters = administrationFiltersFactory.getFilters(request.filters());
final List<Collector> collectors = getCollectors(request.filters());
final PaginatedList<Sidecar> sidecars = sidecarService.findPaginated(searchQuery, filters.orElse(null), request.page(), request.perPage(), sort, order);
final List<SidecarSummary> sidecarSummaries = sidecarService.toSummaryList(sidecars, activeSidecarFilter);
final List<SidecarSummary> summariesWithCollectors = sidecarSummaries.stream().map(collector -> {
final List<String> compatibleCollectors = collectors.stream().filter(c -> c.nodeOperatingSystem().equalsIgnoreCase(collector.nodeDetails().operatingSystem())).map(Collector::id).collect(Collectors.toList());
return collector.toBuilder().collectors(compatibleCollectors).build();
}).filter(collectorSummary -> !filters.isPresent() || collectorSummary.collectors().size() > 0).collect(Collectors.toList());
return SidecarListResponse.create(request.query(), sidecars.pagination(), total, false, sort, order, summariesWithCollectors, request.filters());
}
use of org.graylog.plugins.sidecar.rest.models.Collector in project graylog2-server by Graylog2.
the class CollectorResource method copyCollector.
@POST
@Path("/{id}/{name}")
@RequiresPermissions({ SidecarRestPermissions.COLLECTORS_READ, SidecarRestPermissions.COLLECTORS_CREATE })
@ApiOperation(value = "Copy a collector")
@AuditEvent(type = SidecarAuditEventTypes.COLLECTOR_CLONE)
public Response copyCollector(@ApiParam(name = "id", required = true) @PathParam("id") String id, @ApiParam(name = "name", required = true) @PathParam("name") String name) throws NotFoundException, BadRequestException {
final Collector collector = collectorService.copy(id, name);
final ValidationResult validationResult = validate(collector);
if (validationResult.failed()) {
return Response.status(Response.Status.BAD_REQUEST).entity(validationResult).build();
}
etagService.invalidateAll();
collectorService.save(collector);
return Response.accepted().build();
}
use of org.graylog.plugins.sidecar.rest.models.Collector in project graylog2-server by Graylog2.
the class CollectorResource method validate.
private ValidationResult validate(Collector toValidate) {
final Optional<Collector> collectorOptional;
final Collector collector;
final ValidationResult validation = new ValidationResult();
if (toValidate.name().isEmpty()) {
validation.addError("name", "Collector name cannot be empty.");
} else if (!validateCollectorName(toValidate.name())) {
validation.addError("name", "Collector name can only contain the following characters: A-Z,a-z,0-9,_,-,.");
}
if (toValidate.executablePath().isEmpty()) {
validation.addError("executable_path", "Collector binary path cannot be empty.");
} else if (!validatePath(toValidate.executablePath())) {
validation.addError("executable_path", "Collector binary path cannot contain the following characters: ; * ? \" < > | &");
}
if (toValidate.nodeOperatingSystem() != null) {
if (!validateOperatingSystem(toValidate.nodeOperatingSystem())) {
validation.addError("node_operating_system", "Operating system can only be 'linux' or 'windows'.");
}
if (!validateServiceType(toValidate.serviceType(), toValidate.nodeOperatingSystem())) {
validation.addError("service_type", "Linux collectors only support 'Foreground execution' while Windows collectors additionally support 'Windows service'.");
}
collectorOptional = Optional.ofNullable(collectorService.findByNameAndOs(toValidate.name(), toValidate.nodeOperatingSystem()));
} else {
collectorOptional = Optional.ofNullable(collectorService.findByName(toValidate.name()));
}
if (collectorOptional.isPresent()) {
collector = collectorOptional.get();
if (!collector.id().equals(toValidate.id())) {
// a collector exists with a different id, so the name is already in use, fail validation
validation.addError("name", "Collector \"" + toValidate.name() + "\" already exists for the \"" + collector.nodeOperatingSystem() + "\" operating system.");
}
}
return validation;
}
use of org.graylog.plugins.sidecar.rest.models.Collector in project graylog2-server by Graylog2.
the class CollectorResource method createCollector.
@POST
@RequiresPermissions(SidecarRestPermissions.COLLECTORS_CREATE)
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "Create a new collector")
@AuditEvent(type = SidecarAuditEventTypes.COLLECTOR_CREATE)
public Response createCollector(@ApiParam(name = "JSON body", required = true) @Valid @NotNull Collector request) throws BadRequestException {
Collector collector = collectorService.fromRequest(request);
final ValidationResult validationResult = validate(collector);
if (validationResult.failed()) {
return Response.status(Response.Status.BAD_REQUEST).entity(validationResult).build();
}
etagService.invalidateAll();
return Response.ok().entity(collectorService.save(collector)).build();
}
use of org.graylog.plugins.sidecar.rest.models.Collector in project graylog2-server by Graylog2.
the class SidecarCollectorFacade method exportEntity.
@Override
public Optional<Entity> exportEntity(EntityDescriptor entityDescriptor, EntityDescriptorIds entityDescriptorIds) {
final ModelId modelId = entityDescriptor.id();
final Collector collector = collectorService.find(modelId.id());
if (isNull(collector)) {
LOG.debug("Couldn't find collector {}", entityDescriptor);
return Optional.empty();
}
return Optional.of(exportNativeEntity(collector, entityDescriptorIds));
}
Aggregations