Skip to content

Commit

Permalink
Making REST resources sharable between server and radio code base.
Browse files Browse the repository at this point in the history
Moving necessary classes into one of the shared modules (this leads to
changing a lot of files due to changed package names).
Moving server's RestResource base class to shared module.
Moving InputTypesResource as first shared REST resource to shared
module.
Adding dummy UserService implementation to radio module.
  • Loading branch information
dennisoelkers committed Jan 8, 2015
1 parent 0d538b9 commit 10aa654
Show file tree
Hide file tree
Showing 120 changed files with 294 additions and 216 deletions.
Expand Up @@ -14,9 +14,10 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with Graylog2. If not, see <http://www.gnu.org/licenses/>. * along with Graylog2. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.graylog2.database; package org.graylog2.plugin.database;


import org.graylog2.plugin.database.Persisted; import org.graylog2.plugin.database.Persisted;
import org.graylog2.plugin.database.ValidationException;
import org.graylog2.plugin.database.validators.ValidationResult; import org.graylog2.plugin.database.validators.ValidationResult;
import org.graylog2.plugin.database.validators.Validator; import org.graylog2.plugin.database.validators.Validator;


Expand Down
Expand Up @@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with Graylog2. If not, see <http://www.gnu.org/licenses/>. * along with Graylog2. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.graylog2.database; package org.graylog2.plugin.database;


import org.graylog2.plugin.database.validators.ValidationResult; import org.graylog2.plugin.database.validators.ValidationResult;


Expand Down
Expand Up @@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with Graylog2. If not, see <http://www.gnu.org/licenses/>. * along with Graylog2. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.graylog2.users; package org.graylog2.plugin.database.users;


import org.graylog2.plugin.database.Persisted; import org.graylog2.plugin.database.Persisted;
import org.joda.time.DateTimeZone; import org.joda.time.DateTimeZone;
Expand Down
Expand Up @@ -35,11 +35,14 @@
import org.graylog2.radio.inputs.PersistedInputsImpl; import org.graylog2.radio.inputs.PersistedInputsImpl;
import org.graylog2.radio.system.activities.NullActivityWriter; import org.graylog2.radio.system.activities.NullActivityWriter;
import org.graylog2.radio.transports.RadioTransport; import org.graylog2.radio.transports.RadioTransport;
import org.graylog2.radio.users.NullUserServiceImpl;
import org.graylog2.shared.bindings.providers.ObjectMapperProvider; import org.graylog2.shared.bindings.providers.ObjectMapperProvider;
import org.graylog2.shared.buffers.processors.ProcessBufferProcessor; import org.graylog2.shared.buffers.processors.ProcessBufferProcessor;
import org.graylog2.shared.inputs.PersistedInputs; import org.graylog2.shared.inputs.PersistedInputs;
import org.graylog2.shared.journal.NoopJournalModule; import org.graylog2.shared.journal.NoopJournalModule;
import org.graylog2.shared.security.ShiroSecurityBinding;
import org.graylog2.shared.system.activities.ActivityWriter; import org.graylog2.shared.system.activities.ActivityWriter;
import org.graylog2.shared.users.UserService;


import javax.ws.rs.container.ContainerResponseFilter; import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.container.DynamicFeature; import javax.ws.rs.container.DynamicFeature;
Expand Down Expand Up @@ -71,6 +74,7 @@ protected void configure() {
private void bindInterfaces() { private void bindInterfaces() {
bind(ActivityWriter.class).to(NullActivityWriter.class); bind(ActivityWriter.class).to(NullActivityWriter.class);
bind(PersistedInputs.class).to(PersistedInputsImpl.class); bind(PersistedInputs.class).to(PersistedInputsImpl.class);
bind(UserService.class).to(NullUserServiceImpl.class);
} }


private void bindEventBusListeners() { private void bindEventBusListeners() {
Expand Down Expand Up @@ -108,6 +112,7 @@ private void bindTransport() {
private void bindDynamicFeatures() { private void bindDynamicFeatures() {
TypeLiteral<Class<? extends DynamicFeature>> type = new TypeLiteral<Class<? extends DynamicFeature>>(){}; TypeLiteral<Class<? extends DynamicFeature>> type = new TypeLiteral<Class<? extends DynamicFeature>>(){};
Multibinder<Class<? extends DynamicFeature>> setBinder = Multibinder.newSetBinder(binder(), type); Multibinder<Class<? extends DynamicFeature>> setBinder = Multibinder.newSetBinder(binder(), type);
setBinder.addBinding().toInstance(ShiroSecurityBinding.class);
} }


private void bindContainerResponseFilters() { private void bindContainerResponseFilters() {
Expand Down
Expand Up @@ -36,6 +36,7 @@
import org.graylog2.shared.inputs.NoSuchInputTypeException; import org.graylog2.shared.inputs.NoSuchInputTypeException;
import org.graylog2.shared.inputs.PersistedInputs; import org.graylog2.shared.inputs.PersistedInputs;
import org.graylog2.rest.models.system.inputs.requests.InputLaunchRequest; import org.graylog2.rest.models.system.inputs.requests.InputLaunchRequest;
import org.graylog2.shared.rest.resources.system.inputs.responses.InputTypesSummary;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;


Expand Down Expand Up @@ -112,15 +113,15 @@ public InputsList list() {
@GET @GET
@Timed @Timed
@Path("/{inputId}") @Path("/{inputId}")
public String single(@PathParam("inputId") String inputId) { public InputSummary single(@PathParam("inputId") String inputId) {
final MessageInput input = inputRegistry.getRunningInput(inputId); final MessageInput input = inputRegistry.getRunningInput(inputId);


if (input == null) { if (input == null) {
LOG.info("Input [{}] not found.", inputId); LOG.info("Input [{}] not found.", inputId);
throw new NotFoundException(); throw new NotFoundException();
} }


return json(InputSummary.create(input.getTitle(), return InputSummary.create(input.getTitle(),
input.getPersistId(), input.getPersistId(),
input.isGlobal(), input.isGlobal(),
input.getName(), input.getName(),
Expand All @@ -131,7 +132,7 @@ public String single(@PathParam("inputId") String inputId) {
input.getCreatorUserId(), input.getCreatorUserId(),
input.getAttributesWithMaskedPasswords(), input.getAttributesWithMaskedPasswords(),
input.getStaticFields() input.getStaticFields()
)); );


} }


Expand Down Expand Up @@ -186,7 +187,7 @@ public Response launch(String body) {
"input_id", inputId, "input_id", inputId,
"persist_id", inputId); "persist_id", inputId);


return Response.accepted().entity(json(result)).build(); return Response.accepted().entity(result).build();
} }




Expand All @@ -208,42 +209,6 @@ public Response terminate(@PathParam("inputId") String inputId) {
return Response.accepted().build(); return Response.accepted().build();
} }


@GET
@Timed
@Path("/types")
public String types() {
final Map<String, Object> result = Maps.newHashMap();
final Map<String, InputDescription> availableInputs = messageInputFactory.getAvailableInputs();
final Map<String, String> inputs = Maps.newHashMap();
for (final String key : availableInputs.keySet()) {
inputs.put(key, availableInputs.get(key).getName());
}

result.put("types", inputs);

return json(result);
}

@GET
@Timed
@Path("/types/{inputType}")
public String info(@PathParam("inputType") String inputType) {
final Map<String, InputDescription> availableInputs = messageInputFactory.getAvailableInputs();
if (!availableInputs.containsKey(inputType)) {
LOG.error("Unknown input type {} requested.", inputType);
throw new WebApplicationException(Response.Status.NOT_FOUND);
}
final InputDescription description = availableInputs.get(inputType);
final Map<String, Object> result = Maps.newHashMap();
result.put("type", inputType);
result.put("name", description.getName());
result.put("is_exclusive", description.isExclusive());
result.put("requested_configuration", description.getRequestedConfiguration());
result.put("link_to_docs", description.getLinkToDocs());

return json(result);
}

@POST @POST
@Timed @Timed
@Path("/{inputId}/launch") @Path("/{inputId}/launch")
Expand Down
@@ -0,0 +1,80 @@
package org.graylog2.radio.users;

import org.graylog2.plugin.database.Persisted;
import org.graylog2.plugin.database.ValidationException;
import org.graylog2.plugin.database.users.User;
import org.graylog2.plugin.database.validators.ValidationResult;
import org.graylog2.plugin.database.validators.Validator;
import org.graylog2.shared.security.ldap.LdapEntry;
import org.graylog2.shared.security.ldap.LdapSettings;
import org.graylog2.shared.users.UserService;

import java.util.List;
import java.util.Map;

public class NullUserServiceImpl implements UserService {
@Override
public User load(String username) {
return null;
}

@Override
public User create() {
return null;
}

@Override
public List<User> loadAll() {
return null;
}

@Override
public User syncFromLdapEntry(LdapEntry userEntry, LdapSettings ldapSettings, String username) {
return null;
}

@Override
public void updateFromLdap(User user, LdapEntry userEntry, LdapSettings ldapSettings, String username) {

}

@Override
public User getAdminUser() {
return null;
}

@Override
public <T extends Persisted> int destroy(T model) {
return 0;
}

@Override
public <T extends Persisted> int destroyAll(Class<T> modelClass) {
return 0;
}

@Override
public <T extends Persisted> String save(T model) throws ValidationException {
return null;
}

@Override
public <T extends Persisted> String saveWithoutValidation(T model) {
return null;
}

@Override
public <T extends Persisted> Map<String, List<ValidationResult>> validate(T model, Map<String, Object> fields) {
return null;
}

@Override
public <T extends Persisted> Map<String, List<ValidationResult>> validate(T model) {
return null;
}

@Override
public Map<String, List<ValidationResult>> validate(Map<String, Validator> validators, Map<String, Object> fields) {
return null;
}
}
Expand Up @@ -243,11 +243,11 @@ public Map<String, InputTypeSummaryResponse> getAllInputTypeInformation() throws
} }


public Map<String, String> getInputTypes() throws IOException, APIException { public Map<String, String> getInputTypes() throws IOException, APIException {
return api.path(routes.radio().InputsResource().types(), InputTypesResponse.class).radio(this).execute().types; return api.path(routes.radio().InputTypesResource().types(), InputTypesResponse.class).radio(this).execute().types;
} }


public InputTypeSummaryResponse getInputTypeInformation(String type) throws IOException, APIException { public InputTypeSummaryResponse getInputTypeInformation(String type) throws IOException, APIException {
return api.path(routes.radio().InputsResource().info(type), InputTypeSummaryResponse.class).radio(this).execute(); return api.path(routes.radio().InputTypesResource().info(type), InputTypeSummaryResponse.class).radio(this).execute();
} }


public List<Input> getInputs() { public List<Input> getInputs() {
Expand Down
Expand Up @@ -37,6 +37,7 @@
import org.graylog2.restroutes.internal.RouteClassGenerator; import org.graylog2.restroutes.internal.RouteClassGenerator;
import org.graylog2.restroutes.internal.RouteClass; import org.graylog2.restroutes.internal.RouteClass;
import org.graylog2.restroutes.internal.RouterGenerator; import org.graylog2.restroutes.internal.RouterGenerator;
import org.graylog2.shared.rest.resources.RestResource;


import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
Expand All @@ -50,7 +51,7 @@ public class GenerateRoutes {


public static void main(String[] argv) { public static void main(String[] argv) {
// Just "touching" class in server jar so it gets loaded. // Just "touching" class in server jar so it gets loaded.
org.graylog2.rest.resources.RestResource resource = null; RestResource resource = null;
org.graylog2.radio.rest.resources.RestResource radioResource = null; org.graylog2.radio.rest.resources.RestResource radioResource = null;


JCodeModel codeModel = new JCodeModel(); JCodeModel codeModel = new JCodeModel();
Expand All @@ -63,9 +64,12 @@ public static void main(String[] argv) {
System.exit(-1); System.exit(-1);
} }


final List<RouteClass> sharedRouteClassList = new ResourceRoutesParser("org.graylog2.shared.rest.resources").buildClasses();

final ResourceRoutesParser parser = new ResourceRoutesParser("org.graylog2.rest.resources"); final ResourceRoutesParser parser = new ResourceRoutesParser("org.graylog2.rest.resources");


final List<RouteClass> routeClassList = parser.buildClasses(); final List<RouteClass> routeClassList = parser.buildClasses();
routeClassList.addAll(sharedRouteClassList);


final RouteClassGenerator generator = new RouteClassGenerator(packagePrefix, codeModel); final RouteClassGenerator generator = new RouteClassGenerator(packagePrefix, codeModel);


Expand All @@ -83,6 +87,7 @@ public static void main(String[] argv) {


final ResourceRoutesParser radioParser = new ResourceRoutesParser("org.graylog2.radio.rest.resources"); final ResourceRoutesParser radioParser = new ResourceRoutesParser("org.graylog2.radio.rest.resources");
final List<RouteClass> radioRouteClassList = radioParser.buildClasses(); final List<RouteClass> radioRouteClassList = radioParser.buildClasses();
radioRouteClassList.addAll(sharedRouteClassList);
final RouteClassGenerator radioGenerator = new RouteClassGenerator(packagePrefix + ".radio", codeModel); final RouteClassGenerator radioGenerator = new RouteClassGenerator(packagePrefix + ".radio", codeModel);
final RouterGenerator radioRouterGenerator = new RouterGenerator(radioRouter, radioGenerator, JMod.PUBLIC); final RouterGenerator radioRouterGenerator = new RouterGenerator(radioRouter, radioGenerator, JMod.PUBLIC);
radioRouterGenerator.build(radioRouteClassList); radioRouterGenerator.build(radioRouteClassList);
Expand Down
1 change: 0 additions & 1 deletion graylog2-server/pom.xml
Expand Up @@ -294,7 +294,6 @@
<dependency> <dependency>
<groupId>com.wordnik</groupId> <groupId>com.wordnik</groupId>
<artifactId>swagger-annotations</artifactId> <artifactId>swagger-annotations</artifactId>
<version>${swagger.version}</version>
</dependency> </dependency>
</dependencies> </dependencies>


Expand Down
Expand Up @@ -16,7 +16,7 @@
*/ */
package org.graylog2.alarmcallbacks; package org.graylog2.alarmcallbacks;


import org.graylog2.database.PersistedService; import org.graylog2.plugin.database.PersistedService;
import org.graylog2.plugin.streams.Stream; import org.graylog2.plugin.streams.Stream;


import java.util.List; import java.util.List;
Expand Down
Expand Up @@ -16,7 +16,7 @@
*/ */
package org.graylog2.alerts; package org.graylog2.alerts;


import org.graylog2.database.PersistedService; import org.graylog2.plugin.database.PersistedService;
import org.graylog2.plugin.alarms.AlertCondition; import org.graylog2.plugin.alarms.AlertCondition;
import org.graylog2.plugin.streams.Stream; import org.graylog2.plugin.streams.Stream;
import org.graylog2.rest.resources.streams.alerts.requests.CreateConditionRequest; import org.graylog2.rest.resources.streams.alerts.requests.CreateConditionRequest;
Expand Down
Expand Up @@ -23,7 +23,7 @@
import org.graylog2.plugin.configuration.Configuration; import org.graylog2.plugin.configuration.Configuration;
import org.graylog2.plugin.streams.Stream; import org.graylog2.plugin.streams.Stream;
import org.graylog2.streams.StreamRuleService; import org.graylog2.streams.StreamRuleService;
import org.graylog2.users.UserService; import org.graylog2.shared.users.UserService;


import javax.inject.Inject; import javax.inject.Inject;
import java.util.Collections; import java.util.Collections;
Expand Down
Expand Up @@ -28,8 +28,8 @@
import org.graylog2.plugin.alarms.transports.TransportConfigurationException; import org.graylog2.plugin.alarms.transports.TransportConfigurationException;
import org.graylog2.plugin.streams.Stream; import org.graylog2.plugin.streams.Stream;
import org.graylog2.streams.StreamRuleService; import org.graylog2.streams.StreamRuleService;
import org.graylog2.users.User; import org.graylog2.plugin.database.users.User;
import org.graylog2.users.UserService; import org.graylog2.shared.users.UserService;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
Expand Down
Expand Up @@ -46,7 +46,7 @@
import org.graylog2.streams.*; import org.graylog2.streams.*;
import org.graylog2.system.activities.SystemMessageService; import org.graylog2.system.activities.SystemMessageService;
import org.graylog2.system.activities.SystemMessageServiceImpl; import org.graylog2.system.activities.SystemMessageServiceImpl;
import org.graylog2.users.UserService; import org.graylog2.shared.users.UserService;
import org.graylog2.users.UserServiceImpl; import org.graylog2.users.UserServiceImpl;


/** /**
Expand Down
Expand Up @@ -65,7 +65,7 @@
import org.graylog2.rest.NotFoundExceptionMapper; import org.graylog2.rest.NotFoundExceptionMapper;
import org.graylog2.rest.RestAccessLogFilter; import org.graylog2.rest.RestAccessLogFilter;
import org.graylog2.rest.ValidationExceptionMapper; import org.graylog2.rest.ValidationExceptionMapper;
import org.graylog2.security.ShiroSecurityBinding; import org.graylog2.shared.security.ShiroSecurityBinding;
import org.graylog2.security.ShiroSecurityContextFactory; import org.graylog2.security.ShiroSecurityContextFactory;
import org.graylog2.security.ldap.LdapConnector; import org.graylog2.security.ldap.LdapConnector;
import org.graylog2.security.ldap.LdapSettingsImpl; import org.graylog2.security.ldap.LdapSettingsImpl;
Expand Down
Expand Up @@ -19,7 +19,7 @@
import org.graylog2.security.ldap.LdapConnector; import org.graylog2.security.ldap.LdapConnector;
import org.graylog2.security.ldap.LdapSettingsService; import org.graylog2.security.ldap.LdapSettingsService;
import org.graylog2.security.realm.LdapUserAuthenticator; import org.graylog2.security.realm.LdapUserAuthenticator;
import org.graylog2.users.UserService; import org.graylog2.shared.users.UserService;


import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Provider; import javax.inject.Provider;
Expand Down
Expand Up @@ -26,7 +26,7 @@
import org.graylog2.dashboards.DashboardService; import org.graylog2.dashboards.DashboardService;
import org.graylog2.dashboards.widgets.InvalidWidgetConfigurationException; import org.graylog2.dashboards.widgets.InvalidWidgetConfigurationException;
import org.graylog2.database.NotFoundException; import org.graylog2.database.NotFoundException;
import org.graylog2.database.ValidationException; import org.graylog2.plugin.database.ValidationException;
import org.graylog2.indexer.searches.Searches; import org.graylog2.indexer.searches.Searches;
import org.graylog2.indexer.searches.timeranges.AbsoluteRange; import org.graylog2.indexer.searches.timeranges.AbsoluteRange;
import org.graylog2.indexer.searches.timeranges.InvalidRangeParametersException; import org.graylog2.indexer.searches.timeranges.InvalidRangeParametersException;
Expand Down
Expand Up @@ -23,7 +23,7 @@
import org.graylog2.bindings.providers.MongoJackObjectMapperProvider; import org.graylog2.bindings.providers.MongoJackObjectMapperProvider;
import org.graylog2.database.MongoConnection; import org.graylog2.database.MongoConnection;
import org.graylog2.database.NotFoundException; import org.graylog2.database.NotFoundException;
import org.graylog2.users.User; import org.graylog2.plugin.database.users.User;
import org.mongojack.DBCursor; import org.mongojack.DBCursor;
import org.mongojack.DBQuery; import org.mongojack.DBQuery;
import org.mongojack.JacksonDBCollection; import org.mongojack.JacksonDBCollection;
Expand Down
Expand Up @@ -16,7 +16,7 @@
*/ */
package org.graylog2.cluster; package org.graylog2.cluster;


import org.graylog2.database.PersistedService; import org.graylog2.plugin.database.PersistedService;
import org.graylog2.plugin.system.NodeId; import org.graylog2.plugin.system.NodeId;


import java.net.URI; import java.net.URI;
Expand Down
Expand Up @@ -24,7 +24,7 @@
import org.graylog2.Configuration; import org.graylog2.Configuration;
import org.graylog2.database.MongoConnection; import org.graylog2.database.MongoConnection;
import org.graylog2.database.PersistedServiceImpl; import org.graylog2.database.PersistedServiceImpl;
import org.graylog2.database.ValidationException; import org.graylog2.plugin.database.ValidationException;
import org.graylog2.plugin.Tools; import org.graylog2.plugin.Tools;
import org.graylog2.plugin.system.NodeId; import org.graylog2.plugin.system.NodeId;


Expand Down

0 comments on commit 10aa654

Please sign in to comment.