Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into refactor/remove-pro…
Browse files Browse the repository at this point in the history
…p-types
  • Loading branch information
dennisoelkers committed Jan 30, 2025
2 parents 6147464 + 60ef68f commit ff92115
Show file tree
Hide file tree
Showing 75 changed files with 843 additions and 602 deletions.
5 changes: 5 additions & 0 deletions changelog/unreleased/issue-21351.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
type = "f"
message = "Add default auto refresh config on events and alerts page"

issues = ["21350"]
pulls = ["21351"]
5 changes: 5 additions & 0 deletions changelog/unreleased/issue-9368.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
type = "fixed"
message = "Fixed query validation with parameter usage. Parameters representing field names do not cause 'unknown field' warnings anymore."

issues = ["9368"]
pulls = ["21469"]
4 changes: 4 additions & 0 deletions changelog/unreleased/pr-21454.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
type = "a"
message = "Added metrics to the shared \"scheduler\" and \"daemonScheduler\" thread pools."

pulls = ["21454"]
19 changes: 19 additions & 0 deletions data-node/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -835,6 +835,25 @@
<groupId>com.mycila</groupId>
<artifactId>license-maven-plugin</artifactId>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<configuration>
<rules>
<RestrictImports>
<groups>
<group>
<reason>Data Node packages must be allowed for the data-node/ module.</reason>
<allowedImports>
<allowedImport>org.graylog.datanode.**</allowedImport>
</allowedImports>
</group>
</groups>
</RestrictImports>
</rules>
</configuration>
</plugin>
</plugins>
</build>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* along with this program. If not, see
* <http://www.mongodb.com/licensing/server-side-public-license>.
*/
package org.graylog.datanode;
package org.graylog.searchbackend.datanode;

import com.jayway.jsonpath.DocumentContext;
import com.jayway.jsonpath.JsonPath;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,8 @@
* along with this program. If not, see
* <http://www.mongodb.com/licensing/server-side-public-license>.
*/
package org.graylog.datanode;
package org.graylog.searchbackend.datanode;

import io.restassured.response.ValidatableResponse;
import org.graylog.testing.completebackend.Lifecycle;
import org.graylog.testing.completebackend.apis.GraylogApis;
import org.graylog.testing.containermatrix.SearchServer;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* along with this program. If not, see
* <http://www.mongodb.com/licensing/server-side-public-license>.
*/
package org.graylog.datanode;
package org.graylog.searchbackend.datanode;

import com.github.rholder.retry.RetryException;
import io.restassured.response.ValidatableResponse;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* along with this program. If not, see
* <http://www.mongodb.com/licensing/server-side-public-license>.
*/
package org.graylog.datanode;
package org.graylog.searchbackend.datanode;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.github.joschi.jadconfig.util.Duration;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* along with this program. If not, see
* <http://www.mongodb.com/licensing/server-side-public-license>.
*/
package org.graylog.datanode;
package org.graylog.searchbackend.datanode;

import io.restassured.response.ValidatableResponse;
import org.assertj.core.api.Assertions;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* along with this program. If not, see
* <http://www.mongodb.com/licensing/server-side-public-license>.
*/
package org.graylog.datanode;
package org.graylog.searchbackend.datanode;

import com.github.joschi.jadconfig.util.Duration;
import com.github.rholder.retry.RetryException;
Expand All @@ -33,10 +33,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.util.concurrent.ExecutionException;

@ContainerMatrixTestsConfiguration(serverLifecycle = Lifecycle.CLASS, searchVersions = SearchServer.DATANODE_DEV,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* along with this program. If not, see
* <http://www.mongodb.com/licensing/server-side-public-license>.
*/
package org.graylog.datanode;
package org.graylog.searchbackend.datanode;

import com.github.rholder.retry.Attempt;
import com.github.rholder.retry.RetryException;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* along with this program. If not, see
* <http://www.mongodb.com/licensing/server-side-public-license>.
*/
package org.graylog.elasticsearch.e2e;
package org.graylog.searchbackend.elasticsearch.e2e;

import org.graylog.testing.completebackend.apis.GraylogApis;
import org.graylog.testing.containermatrix.annotations.ContainerMatrixTest;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,9 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.graylog.grn.GRN;
import org.graylog.plugins.views.audit.ViewsAuditEventTypes;
import org.graylog.plugins.views.search.permissions.SearchUser;
import org.graylog2.audit.jersey.AuditEvent;
import org.graylog2.rest.models.PaginatedResponse;

import jakarta.inject.Inject;

import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;

import jakarta.ws.rs.DELETE;
import jakarta.ws.rs.DefaultValue;
import jakarta.ws.rs.GET;
Expand All @@ -41,6 +32,11 @@
import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.MediaType;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.graylog.plugins.views.audit.ViewsAuditEventTypes;
import org.graylog.plugins.views.search.permissions.SearchUser;
import org.graylog2.audit.jersey.AuditEvent;
import org.graylog2.rest.models.PaginatedResponse;

import java.util.Optional;

Expand All @@ -60,8 +56,8 @@ public FavoritesResource(final FavoritesService favoritesService) {

@GET
@ApiOperation("Get the Favorites for the Start Page for the user")
public PaginatedResponse<Favorite> getFavoriteItems(@ApiParam(name = "page") @QueryParam("page") @DefaultValue("1") int page,
@ApiParam(name = "per_page") @QueryParam("per_page") @DefaultValue("5") int perPage,
public PaginatedResponse<Favorite> getFavoriteItems(@ApiParam(name = "page") @QueryParam("page") @DefaultValue("1") @Min(1) int page,
@ApiParam(name = "per_page") @QueryParam("per_page") @DefaultValue("5") @Min(1) int perPage,
@ApiParam(name = "type") @QueryParam("type") Optional<String> type,
@Context SearchUser searchUser) {
return favoritesService.findFavoritesFor(searchUser, type, page, perPage);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
import com.mongodb.BasicDBObject;
import com.mongodb.DuplicateKeyException;
import com.mongodb.MongoException;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Indexes;
Expand All @@ -30,7 +30,6 @@
import org.graylog.plugins.views.startpage.recentActivities.RecentActivityEvent;
import org.graylog.plugins.views.startpage.title.StartPageItemTitleRetriever;
import org.graylog2.database.MongoCollections;
import org.graylog2.database.PaginatedDbService;
import org.graylog2.database.PaginatedList;
import org.graylog2.database.utils.MongoUtils;
import org.graylog2.rest.models.PaginatedResponse;
Expand Down Expand Up @@ -73,9 +72,11 @@ public PaginatedResponse<Favorite> findFavoritesFor(final SearchUser searchUser,
.map(title -> new Favorite(i, title))
)
.flatMap(Optional::stream)
.skip(perPage * Math.max(0L, page - 1))
.limit(perPage)
.toList();

return PaginatedResponse.create("favorites", new PaginatedList<>(PaginatedDbService.getPage(items, page, perPage), items.size(), page, perPage));
return PaginatedResponse.create("favorites", new PaginatedList<>(items, items.size(), page, perPage));
}

public void save(FavoritesForUserDTO favorite) {
Expand Down Expand Up @@ -129,8 +130,11 @@ public Optional<FavoritesForUserDTO> create(final FavoritesForUserDTO favorite)
try {
final var result = db.insertOne(favorite);
return mongoUtils.getById(MongoUtils.insertedId(result));
} catch (DuplicateKeyException e) {
throw new IllegalStateException("Unable to create a Favorites collection, collection with this id already exists : " + favorite.id());
} catch (MongoException e) {
if (MongoUtils.isDuplicateKeyError(e)) {
throw new IllegalStateException("Unable to create favorites. Favorites with this id already exist: " + favorite.id());
}
throw e;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/
package org.graylog.plugins.views.search.validation.validators;

import jakarta.inject.Singleton;
import org.graylog.plugins.views.search.engine.QueryPosition;
import org.graylog.plugins.views.search.rest.MappedFieldTypeDTO;
import org.graylog.plugins.views.search.validation.ParsedTerm;
Expand All @@ -26,8 +27,6 @@
import org.graylog.plugins.views.search.validation.ValidationType;
import org.graylog.plugins.views.search.validation.validators.util.UnknownFieldsListLimiter;

import jakarta.inject.Singleton;

import java.util.List;
import java.util.Map;
import java.util.Set;
Expand Down Expand Up @@ -66,6 +65,7 @@ public List<ValidationMessage> validate(final ValidationContext context) {
List<ParsedTerm> identifyUnknownFields(final Set<String> availableFields, final List<ParsedTerm> terms) {
final Map<String, List<ParsedTerm>> groupedByField = terms.stream()
.filter(t -> !t.isDefaultField())
.filter(term -> !isParameter(term.getRealFieldName()))
.filter(term -> !SEARCHABLE_ES_FIELDS.contains(term.getRealFieldName()))
.filter(term -> !RESERVED_SETTABLE_FIELDS.contains(term.getRealFieldName()))
.filter(term -> !availableFields.contains(term.getRealFieldName()))
Expand All @@ -74,4 +74,8 @@ List<ParsedTerm> identifyUnknownFields(final Set<String> availableFields, final

return unknownFieldsListLimiter.filterElementsContainingUsefulInformation(groupedByField);
}

private boolean isParameter(final String term) {
return term.startsWith("$") && term.endsWith("$");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
*/
package org.graylog.plugins.views.search.views;

import com.mongodb.DuplicateKeyException;
import com.mongodb.MongoException;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Sorts;
Expand Down Expand Up @@ -226,8 +226,11 @@ public ViewDTO save(ViewDTO viewDTO) {
try {
final var save = collection.insertOne(requirementsForView(viewDTO));
return mongoUtils.getById(MongoUtils.insertedId(save)).orElseThrow(() -> new IllegalStateException("Unable to retrieve saved View!"));
} catch (DuplicateKeyException e) {
throw new IllegalStateException("Unable to save view, it already exists.");
} catch (MongoException e) {
if (MongoUtils.isDuplicateKeyError(e)) {
throw new IllegalStateException("Unable to save view, it already exists.");
}
throw e;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
import com.google.common.annotations.VisibleForTesting;
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
import com.mongodb.DuplicateKeyException;
import com.mongodb.MongoException;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Indexes;
Expand Down Expand Up @@ -59,8 +59,11 @@ Optional<LastOpenedForUserDTO> findForUser(final String userId) {
public void create(final LastOpenedForUserDTO lastOpenedItems) {
try {
db.insertOne(lastOpenedItems);
} catch (DuplicateKeyException e) {
throw new IllegalStateException("Unable to create a last opened collection, collection with this id already exists : " + lastOpenedItems.id());
} catch (MongoException e) {
if (MongoUtils.isDuplicateKeyError(e)) {
throw new IllegalStateException("Unable to create record of last opened items. Record with this id already exists : " + lastOpenedItems.id());
}
throw e;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.auto.value.AutoValue;
import org.graylog2.database.MongoEntity;
import org.mongojack.Id;
import org.mongojack.ObjectId;

Expand All @@ -27,7 +28,7 @@
import java.util.List;

@AutoValue
public abstract class ContentStreamUserSettings {
public abstract class ContentStreamUserSettings implements MongoEntity {

public static final String FIELD_USER_ID = "user_id";
public static final String FIELD_CONTENT_ENABLED = "content_stream_enabled";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,42 +16,41 @@
*/
package org.graylog2.contentstream.db;

import org.bson.types.ObjectId;
import org.graylog2.bindings.providers.MongoJackObjectMapperProvider;
import org.graylog2.database.MongoConnection;
import org.mongojack.DBQuery;
import org.mongojack.JacksonDBCollection;

import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.ReplaceOptions;
import jakarta.inject.Inject;
import org.graylog2.database.MongoCollections;
import org.graylog2.database.utils.MongoUtils;

import java.util.Optional;

import static org.graylog2.telemetry.user.db.TelemetryUserSettingsDto.FIELD_USER_ID;
import static org.graylog2.contentstream.db.ContentStreamUserSettings.FIELD_USER_ID;

public class DBContentStreamUserSettingsService {

public static final String COLLECTION_NAME = "content_stream_user_settings";

private final JacksonDBCollection<ContentStreamUserSettings, ObjectId> db;
private final MongoCollection<ContentStreamUserSettings> collection;

@Inject
public DBContentStreamUserSettingsService(MongoConnection mongoConnection,
MongoJackObjectMapperProvider mapper) {
this.db = JacksonDBCollection.wrap(mongoConnection.getDatabase().getCollection(COLLECTION_NAME),
ContentStreamUserSettings.class,
ObjectId.class,
mapper.get());
public DBContentStreamUserSettingsService(MongoCollections mongoCollections) {
collection = mongoCollections.collection(COLLECTION_NAME, ContentStreamUserSettings.class);
}

public Optional<ContentStreamUserSettings> findByUserId(String userId) {
return Optional.ofNullable(db.findOne(DBQuery.is(FIELD_USER_ID, userId)));
return Optional.ofNullable(collection.find(Filters.eq(FIELD_USER_ID, userId)).first());
}

public void save(ContentStreamUserSettings dto) {
db.save(dto);
if (dto.id() == null) {
collection.insertOne(dto);
} else {
collection.replaceOne(MongoUtils.idEq(dto.id()), dto, new ReplaceOptions().upsert(true));
}
}

public void delete(String userId) {
db.remove(DBQuery.is(FIELD_USER_ID, userId));
collection.deleteMany(Filters.eq(FIELD_USER_ID, userId));
}
}
Loading

0 comments on commit ff92115

Please sign in to comment.