[Monitoring] Add "collection_enabled" to usage (elastic/x-pack-elasticsearch#4128)
This adds an indicator to Monitoring's portion of X-Pack usage whether or not collection is actually enabled. It's no longer enough to have an exporter defined by default to know if monitoring is actually running. Original commit: elastic/x-pack-elasticsearch@b2eb881d61
This commit is contained in:
parent
132ac6ef52
commit
91401fcb83
|
@ -5,6 +5,7 @@
|
|||
*/
|
||||
package org.elasticsearch.xpack.core.monitoring;
|
||||
|
||||
import org.elasticsearch.Version;
|
||||
import org.elasticsearch.common.Nullable;
|
||||
import org.elasticsearch.common.io.stream.StreamInput;
|
||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||
|
@ -18,19 +19,24 @@ import java.util.Map;
|
|||
|
||||
public class MonitoringFeatureSetUsage extends XPackFeatureSet.Usage {
|
||||
|
||||
private static final String ENABLED_EXPORTERS_XFIELD = "enabled_exporters";
|
||||
|
||||
@Nullable
|
||||
private Boolean collectionEnabled;
|
||||
@Nullable
|
||||
private Map<String, Object> exporters;
|
||||
|
||||
public MonitoringFeatureSetUsage(StreamInput in) throws IOException {
|
||||
super(in);
|
||||
exporters = in.readMap();
|
||||
if (in.getVersion().onOrAfter(Version.V_6_3_0)) {
|
||||
collectionEnabled = in.readOptionalBoolean();
|
||||
}
|
||||
}
|
||||
|
||||
public MonitoringFeatureSetUsage(boolean available, boolean enabled, Map<String, Object> exporters) {
|
||||
public MonitoringFeatureSetUsage(boolean available, boolean enabled,
|
||||
boolean collectionEnabled, Map<String, Object> exporters) {
|
||||
super(XPackField.MONITORING, available, enabled);
|
||||
this.exporters = exporters;
|
||||
this.collectionEnabled = collectionEnabled;
|
||||
}
|
||||
|
||||
public Map<String, Object> getExporters() {
|
||||
|
@ -41,13 +47,19 @@ public class MonitoringFeatureSetUsage extends XPackFeatureSet.Usage {
|
|||
public void writeTo(StreamOutput out) throws IOException {
|
||||
super.writeTo(out);
|
||||
out.writeMap(exporters);
|
||||
if (out.getVersion().onOrAfter(Version.V_6_3_0)) {
|
||||
out.writeOptionalBoolean(collectionEnabled);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void innerXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
super.innerXContent(builder, params);
|
||||
if (collectionEnabled != null) {
|
||||
builder.field("collection_enabled", collectionEnabled);
|
||||
}
|
||||
if (exporters != null) {
|
||||
builder.field(ENABLED_EXPORTERS_XFIELD, exporters);
|
||||
builder.field("enabled_exporters", exporters);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -109,6 +109,7 @@ public class Monitoring extends Plugin implements ActionPlugin {
|
|||
modules.add(b -> {
|
||||
XPackPlugin.bindFeatureSet(b, MonitoringFeatureSet.class);
|
||||
if (transportClientMode || enabled == false) {
|
||||
b.bind(MonitoringService.class).toProvider(Providers.of(null));
|
||||
b.bind(Exporters.class).toProvider(Providers.of(null));
|
||||
}
|
||||
});
|
||||
|
|
|
@ -23,12 +23,17 @@ import java.util.Map;
|
|||
public class MonitoringFeatureSet implements XPackFeatureSet {
|
||||
|
||||
private final boolean enabled;
|
||||
private final MonitoringService monitoring;
|
||||
private final XPackLicenseState licenseState;
|
||||
private final Exporters exporters;
|
||||
|
||||
@Inject
|
||||
public MonitoringFeatureSet(Settings settings, @Nullable XPackLicenseState licenseState, @Nullable Exporters exporters) {
|
||||
public MonitoringFeatureSet(Settings settings,
|
||||
@Nullable MonitoringService monitoring,
|
||||
@Nullable XPackLicenseState licenseState,
|
||||
@Nullable Exporters exporters) {
|
||||
this.enabled = XPackSettings.MONITORING_ENABLED.get(settings);
|
||||
this.monitoring = monitoring;
|
||||
this.licenseState = licenseState;
|
||||
this.exporters = exporters;
|
||||
}
|
||||
|
@ -60,7 +65,9 @@ public class MonitoringFeatureSet implements XPackFeatureSet {
|
|||
|
||||
@Override
|
||||
public void usage(ActionListener<XPackFeatureSet.Usage> listener) {
|
||||
listener.onResponse(new MonitoringFeatureSetUsage(available(), enabled(), exportersUsage(exporters)));
|
||||
final boolean collectionEnabled = monitoring != null && monitoring.isMonitoringActive();
|
||||
|
||||
listener.onResponse(new MonitoringFeatureSetUsage(available(), enabled(), collectionEnabled, exportersUsage(exporters)));
|
||||
}
|
||||
|
||||
static Map<String, Object> exportersUsage(Exporters exporters) {
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
*/
|
||||
package org.elasticsearch.xpack.monitoring;
|
||||
|
||||
import org.elasticsearch.Version;
|
||||
import org.elasticsearch.action.support.PlainActionFuture;
|
||||
import org.elasticsearch.common.bytes.BytesReference;
|
||||
import org.elasticsearch.common.io.stream.BytesStreamOutput;
|
||||
|
@ -21,7 +22,6 @@ import org.elasticsearch.xpack.monitoring.exporter.Exporter;
|
|||
import org.elasticsearch.xpack.monitoring.exporter.Exporters;
|
||||
import org.elasticsearch.xpack.monitoring.exporter.http.HttpExporter;
|
||||
import org.elasticsearch.xpack.monitoring.exporter.local.LocalExporter;
|
||||
import org.junit.Before;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
@ -36,39 +36,36 @@ import static org.mockito.Mockito.when;
|
|||
|
||||
public class MonitoringFeatureSetTests extends ESTestCase {
|
||||
|
||||
private XPackLicenseState licenseState;
|
||||
private Exporters exporters;
|
||||
private final MonitoringService monitoring = mock(MonitoringService.class);
|
||||
private final XPackLicenseState licenseState = mock(XPackLicenseState.class);
|
||||
private final Exporters exporters = mock(Exporters.class);
|
||||
|
||||
@Before
|
||||
public void init() throws Exception {
|
||||
licenseState = mock(XPackLicenseState.class);
|
||||
exporters = mock(Exporters.class);
|
||||
}
|
||||
|
||||
public void testAvailable() throws Exception {
|
||||
MonitoringFeatureSet featureSet = new MonitoringFeatureSet(Settings.EMPTY, licenseState, exporters);
|
||||
public void testAvailable() {
|
||||
MonitoringFeatureSet featureSet = new MonitoringFeatureSet(Settings.EMPTY, monitoring, licenseState, exporters);
|
||||
boolean available = randomBoolean();
|
||||
when(licenseState.isMonitoringAllowed()).thenReturn(available);
|
||||
assertThat(featureSet.available(), is(available));
|
||||
}
|
||||
|
||||
public void testEnabledSetting() throws Exception {
|
||||
public void testEnabledSetting() {
|
||||
boolean enabled = randomBoolean();
|
||||
Settings.Builder settings = Settings.builder();
|
||||
settings.put("xpack.monitoring.enabled", enabled);
|
||||
MonitoringFeatureSet featureSet = new MonitoringFeatureSet(settings.build(), licenseState, exporters);
|
||||
MonitoringFeatureSet featureSet = new MonitoringFeatureSet(settings.build(), monitoring, licenseState, exporters);
|
||||
assertThat(featureSet.enabled(), is(enabled));
|
||||
}
|
||||
|
||||
public void testEnabledDefault() throws Exception {
|
||||
MonitoringFeatureSet featureSet = new MonitoringFeatureSet(Settings.EMPTY, licenseState, exporters);
|
||||
public void testEnabledDefault() {
|
||||
MonitoringFeatureSet featureSet = new MonitoringFeatureSet(Settings.EMPTY, monitoring, licenseState, exporters);
|
||||
assertThat(featureSet.enabled(), is(true));
|
||||
}
|
||||
|
||||
public void testUsage() throws Exception {
|
||||
|
||||
List<Exporter> exporterList = new ArrayList<>();
|
||||
// anything prior to 6.3 does not include collection_enabled (so defaults it to null)
|
||||
final Version serializedVersion = randomFrom(Version.CURRENT, Version.V_6_3_0, Version.V_6_2_2);
|
||||
final boolean collectionEnabled = randomBoolean();
|
||||
int localCount = randomIntBetween(0, 5);
|
||||
List<Exporter> exporterList = new ArrayList<>();
|
||||
for (int i = 0; i < localCount; i++) {
|
||||
Exporter exporter = mockExporter(LocalExporter.TYPE, true);
|
||||
exporterList.add(exporter);
|
||||
|
@ -97,12 +94,14 @@ public class MonitoringFeatureSetTests extends ESTestCase {
|
|||
}
|
||||
}
|
||||
when(exporters.iterator()).thenReturn(exporterList.iterator());
|
||||
when(monitoring.isMonitoringActive()).thenReturn(collectionEnabled);
|
||||
|
||||
MonitoringFeatureSet featureSet = new MonitoringFeatureSet(Settings.EMPTY, licenseState, exporters);
|
||||
MonitoringFeatureSet featureSet = new MonitoringFeatureSet(Settings.EMPTY, monitoring, licenseState, exporters);
|
||||
PlainActionFuture<Usage> future = new PlainActionFuture<>();
|
||||
featureSet.usage(future);
|
||||
XPackFeatureSet.Usage monitoringUsage = future.get();
|
||||
BytesStreamOutput out = new BytesStreamOutput();
|
||||
out.setVersion(serializedVersion);
|
||||
monitoringUsage.writeTo(out);
|
||||
XPackFeatureSet.Usage serializedUsage = new MonitoringFeatureSetUsage(out.bytes().streamInput());
|
||||
for (XPackFeatureSet.Usage usage : Arrays.asList(monitoringUsage, serializedUsage)) {
|
||||
|
@ -113,6 +112,11 @@ public class MonitoringFeatureSetTests extends ESTestCase {
|
|||
usage.toXContent(builder, ToXContent.EMPTY_PARAMS);
|
||||
source = ObjectPath.createFromXContent(builder.contentType().xContent(), BytesReference.bytes(builder));
|
||||
}
|
||||
if (usage == monitoringUsage || serializedVersion.onOrAfter(Version.V_6_3_0)) {
|
||||
assertThat(source.evaluate("collection_enabled"), is(collectionEnabled));
|
||||
} else {
|
||||
assertThat(source.evaluate("collection_enabled"), is(nullValue()));
|
||||
}
|
||||
assertThat(source.evaluate("enabled_exporters"), is(notNullValue()));
|
||||
if (localCount > 0) {
|
||||
assertThat(source.evaluate("enabled_exporters.local"), is(localCount));
|
||||
|
|
|
@ -198,9 +198,8 @@ public class ClusterStatsCollectorTests extends BaseCollectorTestCase {
|
|||
when(indexNameExpressionResolver.concreteIndices(clusterState, IndicesOptions.lenientExpandOpen(), "apm-*"))
|
||||
.thenReturn(indices);
|
||||
|
||||
// Baz - Changed from Logstash to Monitoring featureset
|
||||
final XPackUsageResponse xPackUsageResponse = new XPackUsageResponse(
|
||||
singletonList(new MonitoringFeatureSetUsage(true, true, null)));
|
||||
singletonList(new MonitoringFeatureSetUsage(true, true, false, null)));
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
final ActionFuture<XPackUsageResponse> xPackUsageFuture = (ActionFuture<XPackUsageResponse>) mock(ActionFuture.class);
|
||||
|
|
|
@ -254,7 +254,7 @@ public class ClusterStatsMonitoringDocTests extends BaseMonitoringDocTestCase<Cl
|
|||
.maxNodes(2)
|
||||
.build();
|
||||
|
||||
final List<XPackFeatureSet.Usage> usages = singletonList(new MonitoringFeatureSetUsage(false, true, null));
|
||||
final List<XPackFeatureSet.Usage> usages = singletonList(new MonitoringFeatureSetUsage(false, true, false, null));
|
||||
|
||||
final NodeInfo mockNodeInfo = mock(NodeInfo.class);
|
||||
when(mockNodeInfo.getVersion()).thenReturn(Version.V_6_0_0_alpha2);
|
||||
|
@ -556,7 +556,8 @@ public class ClusterStatsMonitoringDocTests extends BaseMonitoringDocTestCase<Cl
|
|||
+ "\"xpack\":{"
|
||||
+ "\"monitoring\":{"
|
||||
+ "\"available\":false,"
|
||||
+ "\"enabled\":true"
|
||||
+ "\"enabled\":true,"
|
||||
+ "\"collection_enabled\":false"
|
||||
+ "}"
|
||||
+ "}"
|
||||
+ "}"
|
||||
|
|
Loading…
Reference in New Issue