Skip to content

Commit 184440d

Browse files
committed
XPack info and usage improvements. #3764
1 parent 91e3255 commit 184440d

File tree

4 files changed

+210
-6
lines changed

4 files changed

+210
-6
lines changed

src/Nest/XPack/Info/XPackInfo/XPackInfoResponse.cs

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,25 +44,40 @@ public class MinimalLicenseInformation
4444

4545
public class XPackFeatures
4646
{
47-
[DataMember(Name ="graph")]
47+
[DataMember(Name = "ccr")]
48+
public XPackFeature Ccr { get; internal set; }
49+
50+
[DataMember(Name = "graph")]
4851
public XPackFeature Graph { get; internal set; }
4952

50-
[DataMember(Name ="ml")]
53+
[DataMember(Name = "ilm")]
54+
public XPackFeature Ilm { get; internal set; }
55+
56+
[DataMember(Name = "logstash")]
57+
public XPackFeature Logstash { get; internal set; }
58+
59+
[DataMember(Name = "ml")]
5160
public XPackFeature MachineLearning { get; internal set; }
5261

53-
[DataMember(Name ="monitoring")]
62+
[DataMember(Name = "monitoring")]
5463
public XPackFeature Monitoring { get; internal set; }
5564

56-
[DataMember(Name ="security")]
65+
[DataMember(Name = "rollup")]
66+
public XPackFeature Rollup { get; internal set; }
67+
68+
[DataMember(Name = "security")]
5769
public XPackFeature Security { get; internal set; }
5870

59-
[DataMember(Name ="watcher")]
71+
[DataMember(Name = "sql")]
72+
public XPackFeature Sql { get; internal set; }
73+
74+
[DataMember(Name = "watcher")]
6075
public XPackFeature Watcher { get; internal set; }
6176
}
6277

6378
public class XPackFeature
6479
{
65-
[DataMember(Name ="available")]
80+
[DataMember(Name = "available")]
6681
public bool Available { get; internal set; }
6782

6883
[DataMember(Name ="description")]

src/Nest/XPack/Info/XPackUsage/XPackUsageResponse.cs

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,58 @@
33

44
namespace Nest
55
{
6+
public class QueryUsage
7+
{
8+
[DataMember(Name = "total")]
9+
public int Total { get; internal set; }
10+
11+
[DataMember(Name = "paging")]
12+
public int Paging { get; internal set; }
13+
14+
[DataMember(Name = "failed")]
15+
public int Failed { get; internal set; }
16+
17+
[DataMember(Name = "count")]
18+
public int? Count { get; internal set; }
19+
}
20+
21+
public class CcrUsage : XPackUsage
22+
{
23+
[DataMember(Name = "auto_follow_patterns_count")]
24+
public int AutoFollowPatternsCount { get; internal set; }
25+
26+
[DataMember(Name = "follower_indices_count")]
27+
public int FollowerIndicesCount { get; internal set; }
28+
}
29+
30+
public class SqlUsage : XPackUsage
31+
{
32+
[DataMember(Name = "features")]
33+
public IReadOnlyDictionary<string, int> Features { get; set; } = EmptyReadOnly<string, int>.Dictionary;
34+
35+
[DataMember(Name = "queries")]
36+
public IReadOnlyDictionary<string, QueryUsage> Queries { get; set; } = EmptyReadOnly<string, QueryUsage>.Dictionary;
37+
}
638
public class XPackUsageResponse : ResponseBase
739
{
40+
[DataMember(Name = "sql")]
41+
public SqlUsage Sql { get; internal set; }
42+
43+
[DataMember(Name = "rollup")]
44+
public XPackUsage Rollup { get; internal set; }
45+
46+
[DataMember(Name = "ccr")]
47+
public CcrUsage Ccr { get; internal set; }
48+
849
[DataMember(Name = "watcher")]
950
public AlertingUsage Alerting { get; internal set; }
1051

1152
[DataMember(Name = "graph")]
1253
public XPackUsage Graph { get; internal set; }
1354

55+
[DataMember(Name = "logstash")]
56+
public XPackUsage Logstash { get; internal set; }
57+
1458
[DataMember(Name = "ml")]
1559
public MachineLearningUsage MachineLearning { get; internal set; }
1660

@@ -44,6 +88,9 @@ public class SecurityUsage : XPackUsage
4488
[DataMember(Name = "realms")]
4589
public IReadOnlyDictionary<string, RealmUsage> Realms { get; internal set; } = EmptyReadOnly<string, RealmUsage>.Dictionary;
4690

91+
[DataMember(Name = "role_mapping")]
92+
public IReadOnlyDictionary<string, RoleMappingUsage> RoleMapping { get; internal set; } = EmptyReadOnly<string, RoleMappingUsage>.Dictionary;
93+
4794
[DataMember(Name = "roles")]
4895
public IReadOnlyDictionary<string, RoleUsage> Roles { get; internal set; } = EmptyReadOnly<string, RoleUsage>.Dictionary;
4996

@@ -53,6 +100,15 @@ public class SecurityUsage : XPackUsage
53100
[DataMember(Name = "system_key")]
54101
public SecurityFeatureToggle SystemKey { get; internal set; }
55102

103+
public class RoleMappingUsage
104+
{
105+
[DataMember(Name = "enabled")]
106+
public int Enabled { get; internal set; }
107+
108+
[DataMember(Name = "size")]
109+
public int Size { get; internal set; }
110+
}
111+
56112
public class AuditUsage : SecurityFeatureToggle
57113
{
58114
[DataMember(Name = "outputs")]
@@ -116,12 +172,24 @@ public class AlertingUsage : XPackUsage
116172
[DataMember(Name = "execution")]
117173
public AlertingExecution Execution { get; internal set; }
118174

175+
[DataMember(Name = "watch")]
176+
public AlertingInput Watch { get; internal set; }
177+
119178
public class AlertingExecution
120179
{
121180
[DataMember(Name = "actions")]
122181
public IReadOnlyDictionary<string, ExecutionAction> Actions { get; internal set; } = EmptyReadOnly<string, ExecutionAction>.Dictionary;
123182
}
124183

184+
public class AlertingInput
185+
{
186+
[DataMember(Name = "input")]
187+
public IReadOnlyDictionary<string, AlertingCount> Input { get; internal set; } = EmptyReadOnly<string, AlertingCount>.Dictionary;
188+
189+
[DataMember(Name = "trigger")]
190+
public IReadOnlyDictionary<string, AlertingCount> Trigger { get; internal set; } = EmptyReadOnly<string, AlertingCount>.Dictionary;
191+
}
192+
125193
public class ExecutionAction
126194
{
127195
[DataMember(Name = "total")]
@@ -143,6 +211,9 @@ public class AlertingCount
143211

144212
public class MonitoringUsage : XPackUsage
145213
{
214+
[DataMember(Name = "collection_enabled")]
215+
public bool CollectionEnabled { get; internal set; }
216+
146217
[DataMember(Name = "enabled_exporters")]
147218
public IReadOnlyDictionary<string, long> EnabledExporters { get; set; } = EmptyReadOnly<string, long>.Dictionary;
148219
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
using System.Threading.Tasks;
2+
using Elastic.Xunit.XunitPlumbing;
3+
using FluentAssertions;
4+
using Nest;
5+
using Tests.Core.ManagedElasticsearch.Clusters;
6+
using Tests.Framework;
7+
using Tests.Framework.EndpointTests.TestState;
8+
using Tests.Framework.Integration;
9+
10+
namespace Tests.XPack.Info
11+
{
12+
[SkipVersion("<6.8.0", "All APIs exist in Elasticsearch 6.8.0")]
13+
public class XPackInfoApiTests : CoordinatedIntegrationTestBase<XPackCluster>
14+
{
15+
private const string XPackInfoStep = nameof(XPackInfoStep);
16+
private const string XPackUsageStep = nameof(XPackUsageStep);
17+
18+
public XPackInfoApiTests(XPackCluster cluster, EndpointUsage usage) : base(new CoordinatedUsage(cluster, usage)
19+
{
20+
{
21+
XPackInfoStep, u => u.Calls<XPackInfoDescriptor, XPackInfoRequest, IXPackInfoRequest, XPackInfoResponse>(
22+
v => new XPackInfoRequest(),
23+
(v, d) => d,
24+
(v, c, f) => c.XPack.Info(f),
25+
(v, c, f) => c.XPack.InfoAsync(f),
26+
(v, c, r) => c.XPack.Info(r),
27+
(v, c, r) => c.XPack.InfoAsync(r)
28+
)
29+
},
30+
{
31+
XPackUsageStep, u => u.Calls<XPackUsageDescriptor, XPackUsageRequest, IXPackUsageRequest, XPackUsageResponse>(
32+
v => new XPackUsageRequest(),
33+
(v, d) => d,
34+
(v, c, f) => c.XPack.Usage(f),
35+
(v, c, f) => c.XPack.UsageAsync(f),
36+
(v, c, r) => c.XPack.Usage(r),
37+
(v, c, r) => c.XPack.UsageAsync(r)
38+
)
39+
}
40+
}) { }
41+
42+
[I] public async Task XPackInfoResponse() => await Assert<XPackInfoResponse>(XPackInfoStep, (v, r) =>
43+
{
44+
r.IsValid.Should().BeTrue();
45+
r.ApiCall.HttpStatusCode.Should().Be(200);
46+
47+
r.Build.Should().NotBeNull();
48+
r.Features.Should().NotBeNull();
49+
r.Features.Ccr.Should().NotBeNull();
50+
r.Features.Graph.Should().NotBeNull();
51+
r.Features.Ilm.Should().NotBeNull();
52+
r.Features.Logstash.Should().NotBeNull();
53+
r.Features.MachineLearning.Should().NotBeNull();
54+
r.Features.MachineLearning.NativeCodeInformation.Should().NotBeNull();
55+
r.Features.Monitoring.Should().NotBeNull();
56+
r.Features.Rollup.Should().NotBeNull();
57+
r.Features.Security.Should().NotBeNull();
58+
r.Features.Sql.Should().NotBeNull();
59+
r.Features.Watcher.Should().NotBeNull();
60+
r.License.Should().NotBeNull();
61+
});
62+
63+
[I] public async Task XPackUsageResponse() => await Assert<XPackUsageResponse>(XPackUsageStep, (v, r) =>
64+
{
65+
r.IsValid.Should().BeTrue();
66+
r.ApiCall.HttpStatusCode.Should().Be(200);
67+
68+
r.Ccr.Should().NotBeNull();
69+
r.Graph.Should().NotBeNull();
70+
r.Logstash.Should().NotBeNull();
71+
r.MachineLearning.Should().NotBeNull();
72+
r.MachineLearning.Datafeeds.Should().NotBeNull();
73+
r.MachineLearning.Jobs.Should().NotBeNull();
74+
r.Monitoring.Should().NotBeNull();
75+
r.Monitoring.EnabledExporters.Should().NotBeNull();
76+
r.Rollup.Should().NotBeNull();
77+
r.Security.Should().NotBeNull();
78+
r.Security.Roles.Should().NotBeNull();
79+
r.Security.Realms.Should().NotBeNull();
80+
r.Security.RoleMapping.Should().NotBeNull();
81+
r.Sql.Should().NotBeNull();
82+
r.Sql.Features.Should().NotBeNull();
83+
r.Sql.Queries.Should().NotBeNull();
84+
r.Alerting.Should().NotBeNull();
85+
r.Alerting.Count.Should().NotBeNull();
86+
r.Alerting.Execution.Should().NotBeNull();
87+
r.Alerting.Watch.Should().NotBeNull();
88+
});
89+
}
90+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using System.Threading.Tasks;
2+
using Elastic.Xunit.XunitPlumbing;
3+
using Nest;
4+
using Tests.Framework;
5+
using static Tests.Framework.UrlTester;
6+
7+
namespace Tests.XPack.Info
8+
{
9+
public class XPackInfoUrlTests : UrlTestsBase
10+
{
11+
[U] public override async Task Urls()
12+
{
13+
await GET("/_xpack")
14+
.Fluent(c => c.XPack.Info())
15+
.Request(c => c.XPack.Info())
16+
.FluentAsync(c => c.XPack.InfoAsync())
17+
.RequestAsync(c => c.XPack.InfoAsync())
18+
;
19+
20+
await GET("/_xpack/usage")
21+
.Fluent(c => c.XPack.Usage())
22+
.Request(c => c.XPack.Usage())
23+
.FluentAsync(c => c.XPack.UsageAsync())
24+
.RequestAsync(c => c.XPack.UsageAsync())
25+
;
26+
}
27+
}
28+
}

0 commit comments

Comments
 (0)