Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
ea42e84
Add stats endpoint to GeoIpDownloader
probakowski Mar 11, 2021
e970fb8
Fix testRetentionWithMultipleRepositories Failure (#70202)
original-brownbear Mar 11, 2021
639516f
Fix overflow in GeoTileGridTiler (#70222)
iverase Mar 11, 2021
d8857ab
[Transform] deprecate "transform.node" node attribute (#70234)
Mar 11, 2021
45982bf
Add unit test for shard bulk stats reporting (#70254)
andreidan Mar 11, 2021
87bf8b4
Track query stats bug (#70273)
ywelsch Mar 11, 2021
735ae3f
[RollupV2] Move rollup metadata to field mappings (#69921)
csoulios Mar 11, 2021
5dc54d6
Support specifying multiple templates names in delete composable inde…
martijnvg Mar 11, 2021
a618750
Fix rollover alias definition in templates validation (#70259)
andreidan Mar 11, 2021
626f957
disable bwc tests for backporting #70094
martijnvg Mar 11, 2021
fe98f22
Completely disallow setting negative size in search (#70209)
Mar 11, 2021
57da6e4
add nodes info, add action/transport action
probakowski Mar 15, 2021
357874c
Merge remote-tracking branch 'origin/master' into geoip-stats
probakowski Mar 15, 2021
c5cff96
imports
probakowski Mar 15, 2021
2beb7ac
fix executor initialization
probakowski Mar 15, 2021
a8bb20a
tests
probakowski Mar 17, 2021
5d51fe5
tests
probakowski Mar 18, 2021
e987c2c
Merge remote-tracking branch 'origin/master' into geoip-stats
probakowski Mar 18, 2021
cf76992
tests
probakowski Mar 18, 2021
3c70773
add HLRC endpoints
probakowski Mar 18, 2021
a18ad2a
rename + tests
probakowski Mar 18, 2021
88eac42
tests
probakowski Mar 18, 2021
e5381ba
build fix?
probakowski Mar 18, 2021
d759e2e
build fix?
probakowski Mar 18, 2021
1b57a5b
test fix
probakowski Mar 18, 2021
bd9f53e
fix test
probakowski Mar 18, 2021
f9c0cfb
test fix
probakowski Mar 18, 2021
0e0505d
imports
probakowski Mar 18, 2021
7649852
test
probakowski Mar 18, 2021
d0140cf
Merge branch 'master' into geoip-stats
elasticmachine Mar 18, 2021
a1ced72
make yaml test to be more permisive
probakowski Mar 23, 2021
07436e0
Merge branch 'master' into geoip-stats
elasticmachine Mar 23, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions client/rest-high-level/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@ dependencies {
testImplementation(project(':x-pack:plugin:core')) {
exclude group: 'org.elasticsearch', module: 'elasticsearch-rest-high-level-client'
}
testImplementation(project(':modules:ingest-geoip')) {
exclude group: 'com.fasterxml.jackson.core', module: 'jackson-annotations'
}
testImplementation(project(':x-pack:plugin:eql'))
}

Expand Down Expand Up @@ -84,6 +87,8 @@ tasks.named("check").configure {
testClusters.all {
testDistribution = 'DEFAULT'
systemProperty 'es.scripting.update.ctx_in_params', 'false'
systemProperty 'es.geoip_v2_feature_flag_enabled', 'true'
setting 'geoip.downloader.enabled', 'false'
setting 'reindex.remote.whitelist', '[ "[::1]:*", "127.0.0.1:*" ]'
setting 'xpack.license.self_generated.type', 'trial'
setting 'xpack.security.enabled', 'true'
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,222 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/

package org.elasticsearch.client;

import org.elasticsearch.common.ParseField;
import org.elasticsearch.common.collect.Tuple;
import org.elasticsearch.common.xcontent.ConstructingObjectParser;
import org.elasticsearch.common.xcontent.ToXContentObject;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentParser;

import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;

import static org.elasticsearch.common.xcontent.ConstructingObjectParser.constructorArg;
import static org.elasticsearch.common.xcontent.ConstructingObjectParser.optionalConstructorArg;

public class GeoIpStatsResponse implements ToXContentObject {

@SuppressWarnings("unchecked")
private static final ConstructingObjectParser<GeoIpStatsResponse, Void> PARSER = new ConstructingObjectParser<>("geoip_stats", a -> {
Map<String, Object> stats = (Map<String, Object>) a[0];
List<Tuple<String, NodeInfo>> nodes = (List<Tuple<String, NodeInfo>>) a[1];

return new GeoIpStatsResponse((int) stats.get("successful_downloads"), (int) stats.get("failed_downloads"),
((Number) stats.get("total_download_time")).longValue(), (int) stats.get("databases_count"), (int) stats.get("skipped_updates"),
nodes.stream().collect(Collectors.toMap(Tuple::v1, Tuple::v2)));
});

static {
PARSER.declareObject(constructorArg(), (p, c) -> p.map(), new ParseField("stats"));
PARSER.declareNamedObjects(constructorArg(), (p, c, name) -> Tuple.tuple(name, NodeInfo.PARSER.apply(p, c)),
new ParseField("nodes"));
}

private final int successfulDownloads;
private final int failedDownloads;
private final long totalDownloadTime;
private final int databasesCount;
private final int skippedDownloads;
private final Map<String, NodeInfo> nodes;

public GeoIpStatsResponse(int successfulDownloads, int failedDownloads, long totalDownloadTime, int databasesCount,
int skippedDownloads, Map<String, NodeInfo> nodes) {
this.successfulDownloads = successfulDownloads;
this.failedDownloads = failedDownloads;
this.totalDownloadTime = totalDownloadTime;
this.databasesCount = databasesCount;
this.skippedDownloads = skippedDownloads;
this.nodes = nodes;
}

public int getSuccessfulDownloads() {
return successfulDownloads;
}

public int getFailedDownloads() {
return failedDownloads;
}

public long getTotalDownloadTime() {
return totalDownloadTime;
}

public int getDatabasesCount() {
return databasesCount;
}

public int getSkippedDownloads() {
return skippedDownloads;
}

public Map<String, NodeInfo> getNodes() {
return nodes;
}

public static GeoIpStatsResponse fromXContent(XContentParser parser) {
return PARSER.apply(parser, null);
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
GeoIpStatsResponse that = (GeoIpStatsResponse) o;
return successfulDownloads == that.successfulDownloads
&& failedDownloads == that.failedDownloads
&& totalDownloadTime == that.totalDownloadTime
&& databasesCount == that.databasesCount
&& skippedDownloads == that.skippedDownloads
&& nodes.equals(that.nodes);
}

@Override
public int hashCode() {
return Objects.hash(successfulDownloads, failedDownloads, totalDownloadTime, databasesCount, skippedDownloads, nodes);
}

@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
builder.startObject("stats");
{
builder.field("successful_downloads", successfulDownloads);
builder.field("failed_downloads", failedDownloads);
builder.field("skipped_updates", skippedDownloads);
builder.field("total_download_time", totalDownloadTime);
builder.field("databases_count", databasesCount);
}
builder.endObject();
builder.field("nodes", nodes);
builder.endObject();
return builder;
}

public static final class NodeInfo implements ToXContentObject {
@SuppressWarnings("unchecked")
private static final ConstructingObjectParser<NodeInfo, Void> PARSER = new ConstructingObjectParser<>("node_info", a -> {
List<DatabaseInfo> databases = (List<DatabaseInfo>) a[1];
return new NodeInfo((Collection<String>) a[0], databases.stream().collect(Collectors.toMap(DatabaseInfo::getName,
Function.identity())));
});

static {
PARSER.declareStringArray(optionalConstructorArg(), new ParseField("files_in_temp"));
PARSER.declareObjectArray(optionalConstructorArg(), DatabaseInfo.PARSER, new ParseField("databases"));
}

private final List<String> filesInTemp;
private final Map<String, DatabaseInfo> databases;

public NodeInfo(Collection<String> filesInTemp, Map<String, DatabaseInfo> databases) {
this.filesInTemp = List.copyOf(filesInTemp);
this.databases = Map.copyOf(databases);
}

public List<String> getFilesInTemp() {
return filesInTemp;
}

public Map<String, DatabaseInfo> getDatabases() {
return databases;
}

@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
builder.field("files_in_temp", filesInTemp);
builder.field("databases", databases.entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.map(Map.Entry::getValue)
.collect(Collectors.toList()));
builder.endObject();
return builder;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
NodeInfo nodeInfo = (NodeInfo) o;
return filesInTemp.equals(nodeInfo.filesInTemp) && databases.equals(nodeInfo.databases);
}

@Override
public int hashCode() {
return Objects.hash(filesInTemp, databases);
}
}

public static final class DatabaseInfo implements ToXContentObject {

private static final ConstructingObjectParser<DatabaseInfo, Void> PARSER = new ConstructingObjectParser<>("database_info",
a -> new DatabaseInfo((String) a[0]));

static {
PARSER.declareString(constructorArg(), new ParseField("name"));
}

private final String name;

public DatabaseInfo(String name) {
this.name = name;
}

public String getName() {
return name;
}

@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
builder.field("name", name);
builder.endObject();
return builder;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
DatabaseInfo that = (DatabaseInfo) o;
return name.equals(that.name);
}

@Override
public int hashCode() {
return Objects.hash(name);
}
}
}
Loading