Skip to content

Commit

Permalink
Cloud compatibility annotation (#19054)
Browse files Browse the repository at this point in the history
* refactor static cloud compatibility check

* cloud compat annotation

(cherry picked from commit fd427cd)
  • Loading branch information
patrickmann committed Apr 15, 2024
1 parent 5ccef19 commit 58d92ac
Show file tree
Hide file tree
Showing 7 changed files with 51 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,12 @@
import org.graylog2.plugin.LocalMetricRegistry;
import org.graylog2.plugin.ServerStatus;
import org.graylog2.plugin.configuration.Configuration;
import org.graylog2.plugin.inputs.CloudCompatible;
import org.graylog2.plugin.inputs.MessageInput;
import org.graylog2.plugin.inputs.annotations.ConfigClass;
import org.graylog2.plugin.inputs.annotations.FactoryClass;

@CloudCompatible
public class CloudTrailInput extends MessageInput {
private static final String NAME = "AWS CloudTrail";

Expand Down Expand Up @@ -66,12 +68,12 @@ public Descriptor() {
super(NAME, false, "");
}

public static boolean isCloudCompatible() {
return true;
public boolean isForwarderCompatible() {
return false;
}

public static boolean isForwarderCompatible() {
return false;
public boolean isCloudCompatible() {
return true;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import org.graylog2.plugin.configuration.fields.DropdownField;
import org.graylog2.plugin.configuration.fields.NumberField;
import org.graylog2.plugin.configuration.fields.TextField;
import org.graylog2.plugin.inputs.CloudCompatible;
import org.graylog2.plugin.inputs.MessageInput;
import org.graylog2.plugin.inputs.annotations.ConfigClass;
import org.graylog2.plugin.inputs.annotations.FactoryClass;
Expand All @@ -39,6 +40,7 @@
/**
* General AWS input for all types of supported AWS logs.
*/
@CloudCompatible
public class AWSInput extends MessageInput {

public static final String NAME = "AWS Kinesis/CloudWatch";
Expand Down Expand Up @@ -89,7 +91,7 @@ public Descriptor() {
super(NAME, false, "");
}

public static boolean isCloudCompatible() {
public boolean isCloudCompatible() {
return true;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,12 @@
import org.graylog2.contentpacks.model.entities.references.ValueReference;
import org.graylog2.contentpacks.model.entities.references.ValueType;
import org.graylog2.contentpacks.model.parameters.Parameter;
import org.graylog2.plugin.inputs.CloudCompatible;
import org.graylog2.plugin.streams.Stream;
import org.graylog2.utilities.Graphs;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.lang.reflect.Method;
import java.time.Instant;
import java.util.Collection;
import java.util.Collections;
Expand Down Expand Up @@ -145,17 +145,11 @@ private ContentPackInstallation installContentPack(ContentPackV1 contentPack,
final EntityWithExcerptFacade facade = entityFacades.getOrDefault(entity.type(), UnsupportedEntityFacade.INSTANCE);

if (configuration.isCloud() && entity.type().equals(INPUT_V1) && entity instanceof EntityV1 entityV1) {
boolean isCloudCompatible = true;
final InputEntity inputEntity = objectMapper.convertValue(entityV1.data(), InputEntity.class);
try {
final Method isCloudCompatibleMethod =
Class.forName(inputEntity.type().asString() + "$Descriptor").getMethod("isCloudCompatible");
isCloudCompatible = (boolean) isCloudCompatibleMethod.invoke(null);
} catch (Exception e) {
LOG.info("Failed to invoke Descriptor.isCloudCompatible() for {}", inputEntity.type().asString());
}
if (!isCloudCompatible) {
LOG.warn("Ignoring incompatible input {} in cloud", inputEntity.type().asString());
String className = inputEntity.type().asString();
Class inputClass = Class.forName(className);
if (inputClass.getAnnotation(CloudCompatible.class) == null) {
LOG.warn("Ignoring incompatible input {} in cloud", className);
continue;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import org.graylog2.plugin.ServerStatus;
import org.graylog2.plugin.configuration.Configuration;
import org.graylog2.plugin.configuration.ConfigurationException;
import org.graylog2.plugin.inputs.CloudCompatible;
import org.graylog2.plugin.inputs.MessageInput;

import static org.graylog2.inputs.transports.HttpPollTransport.CK_CONTENT_TYPE;
Expand All @@ -35,6 +36,7 @@
import static org.graylog2.inputs.transports.HttpPollTransport.POST;
import static org.graylog2.inputs.transports.HttpPollTransport.PUT;

@CloudCompatible
public class JsonPathInput extends MessageInput {

private static final String NAME = "JSON path value from HTTP API";
Expand Down Expand Up @@ -69,7 +71,7 @@ public Descriptor() {
super(NAME, false, DocsHelper.PAGE_SENDING_JSONPATH.toString());
}

public static boolean isCloudCompatible() {
public boolean isCloudCompatible() {
return true;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,10 @@
import org.graylog2.plugin.LocalMetricRegistry;
import org.graylog2.plugin.ServerStatus;
import org.graylog2.plugin.configuration.Configuration;
import org.graylog2.plugin.inputs.CloudCompatible;
import org.graylog2.plugin.inputs.MessageInput;

@CloudCompatible
public class FakeHttpMessageInput extends MessageInput {

private static final String NAME = "Random HTTP message generator";
Expand Down Expand Up @@ -60,7 +62,7 @@ public Descriptor() {
super(NAME, false, "");
}

public static boolean isCloudCompatible() {
public boolean isCloudCompatible() {
return true;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
* Copyright (C) 2020 Graylog, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the Server Side Public License, version 1,
* as published by MongoDB, Inc.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* Server Side Public License for more details.
*
* You should have received a copy of the Server Side Public License
* along with this program. If not, see
* <http://www.mongodb.com/licensing/server-side-public-license>.
*/
package org.graylog2.plugin.inputs;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface CloudCompatible {
}
Original file line number Diff line number Diff line change
Expand Up @@ -417,11 +417,11 @@ public void setNodeId(String nodeId) {
}

public boolean isCloudCompatible() {
return Descriptor.isCloudCompatible();
return descriptor.isCloudCompatible();
}

public boolean isForwarderCompatible() {
return Descriptor.isForwarderCompatible();
return descriptor.isForwarderCompatible();
}

public interface Factory<M> {
Expand Down Expand Up @@ -470,11 +470,11 @@ protected Descriptor(String name, boolean exclusive, String linkToDocs) {
super(name, exclusive, linkToDocs);
}

public static boolean isCloudCompatible() {
public boolean isCloudCompatible() {
return false;
}

public static boolean isForwarderCompatible() {
public boolean isForwarderCompatible() {
return true;
}
}
Expand Down

0 comments on commit 58d92ac

Please sign in to comment.