Skip to content
Merged
Show file tree
Hide file tree
Changes from 20 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
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
Original file line number Diff line number Diff line change
Expand Up @@ -882,7 +882,8 @@ public void testApiNamingConventions() throws Exception {
"cluster.delete_weighted_routing",
"cluster.put_decommission_awareness",
"cluster.get_decommission_awareness",
"cluster.delete_decommission_awareness", };
"cluster.delete_decommission_awareness",
"wlm_stats_list" };
List<String> booleanReturnMethods = Arrays.asList("security.enable_user", "security.disable_user", "security.change_password");
Set<String> deprecatedMethods = new HashSet<>();
deprecatedMethods.add("indices.force_merge");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
{
"wlm_stats_list": {
"stability": "experimental",
"documentation": {
"url": "https://docs.opensearch.org/docs/latest/tuning-your-cluster/availability-and-recovery/workload-management/wlm-feature-overview/",
"description": "This API endpoint returns a list of WLM stats with pagination support."
},
"url": {
"paths": [
{
"path": "/_list/wlm_stats",
"methods": ["GET"]
}
]
},
"params": {
"size": {
"type": "int",
"required": false,
"description": "Number of results per page"
},
"next_token": {
"type": "string",
"required": false,
"description": "Pagination token for next page"
},
"sort": {
"type": "string",
"required": false,
"description": "Sort field"
},
"order": {
"type": "string",
"required": false,
"description": "Sort order (asc or desc)"
},
"v": {
"type": "boolean",
"required": false,
"description": "Whether to include headers"
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
---
"Custom size param still returns headers":
- do:
wlm_stats_list:
size: 1
v: true
- is_true: $body
- match:
$body: /TOTAL_REJECTIONS/

---
"Sort by node_id asc does not error":
- do:
wlm_stats_list:
sort: node_id
order: asc
- is_true: $body
- match:
$body: /DEFAULT_WORKLOAD_GROUP/

---
"Sort by workload_group_id desc does not error":
- do:
wlm_stats_list:
sort: workload_group
order: desc
- is_true: $body
- match:
$body: /DEFAULT_WORKLOAD_GROUP/

---
"Invalid sort field returns error":
- do:
catch: bad_request
wlm_stats_list:
sort: memory_usage
order: desc
- match:
error.reason: "Invalid value for 'sort'. Allowed: 'node_id', 'workload_group'"

---
"Invalid sort order returns error":
- do:
catch: bad_request
wlm_stats_list:
order: upside_down
- match:
error.reason: "Invalid value for 'order'. Allowed: 'asc', 'desc'"
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public class WlmStatsResponse extends BaseNodesResponse<WlmStats> implements ToX
super(in);
}

WlmStatsResponse(ClusterName clusterName, List<WlmStats> nodes, List<FailedNodeException> failures) {
public WlmStatsResponse(ClusterName clusterName, List<WlmStats> nodes, List<FailedNodeException> failures) {
super(clusterName, nodes, failures);
}

Expand Down
51 changes: 51 additions & 0 deletions server/src/main/java/org/opensearch/action/pagination/SortBy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/*
* SPDX-License-Identifier: Apache-2.0
*
* The OpenSearch Contributors require contributions made to
* this file be licensed under the Apache-2.0 license or a
* compatible open source license.
*/

package org.opensearch.action.pagination;

import org.opensearch.wlm.stats.WlmStats;

import java.util.Comparator;
import java.util.Locale;

/**
* Represents the different fields by which WLM statistics can be sorted.
*/
public enum SortBy {
WORKLOAD_GROUP {
@Override
public Comparator<WlmStats> getComparator() {
return Comparator.comparing(
(WlmStats wlmStats) -> wlmStats.getWorkloadGroupStats().getStats().isEmpty()
? ""
: wlmStats.getWorkloadGroupStats().getStats().keySet().iterator().next()
).thenComparing(wlmStats -> wlmStats.getNode().getId());
}
},
NODE_ID {
@Override
public Comparator<WlmStats> getComparator() {
return Comparator.comparing((WlmStats wlmStats) -> wlmStats.getNode().getId())
.thenComparing(
wlmStats -> wlmStats.getWorkloadGroupStats().getStats().isEmpty()
? ""
: wlmStats.getWorkloadGroupStats().getStats().keySet().iterator().next()
);
}
};

public abstract Comparator<WlmStats> getComparator();

public static SortBy fromString(String input) {
try {
return SortBy.valueOf(input.toUpperCase(Locale.ROOT));
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException("Invalid sort field: " + input + ". Allowed values: workload_group, node_id");
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
* SPDX-License-Identifier: Apache-2.0
*
* The OpenSearch Contributors require contributions made to
* this file be licensed under the Apache-2.0 license or a
* compatible open source license.
*/

package org.opensearch.action.pagination;

import org.opensearch.wlm.stats.WlmStats;

import java.util.Comparator;
import java.util.Locale;

/**
* Represents the sort order for WLM statistics.
* The sort order can be either ascending or descending.
*/
public enum SortOrder {
ASC {
@Override
public Comparator<WlmStats> apply(Comparator<WlmStats> baseComparator) {
return baseComparator;
}
},
DESC {
@Override
public Comparator<WlmStats> apply(Comparator<WlmStats> baseComparator) {
return baseComparator.reversed();
}
};

public abstract Comparator<WlmStats> apply(Comparator<WlmStats> baseComparator);

public static SortOrder fromString(String input) {
try {
return SortOrder.valueOf(input.toUpperCase(Locale.ROOT));
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException("Invalid sort order: " + input + ". Allowed values: asc, desc");
}
}
}
Loading
Loading