mirror of
https://github.com/portainer/portainer.git
synced 2025-08-02 12:25:22 +02:00
feat(endpoints): filter endpoints by a list of types (#5308)
* feat(endpoints): filter endpoints by a list of types * docs(endpoints): update api docs for endpoint list
This commit is contained in:
parent
bd47bb8cdc
commit
7b2269fbba
5 changed files with 20 additions and 12 deletions
|
@ -26,7 +26,7 @@ import (
|
||||||
// @param search query string false "Search query"
|
// @param search query string false "Search query"
|
||||||
// @param groupId query int false "List endpoints of this group"
|
// @param groupId query int false "List endpoints of this group"
|
||||||
// @param limit query int false "Limit results to this value"
|
// @param limit query int false "Limit results to this value"
|
||||||
// @param type query int false "List endpoints of this type"
|
// @param types query []int false "List endpoints of this type"
|
||||||
// @param tagIds query []int false "search endpoints with these tags (depends on tagsPartialMatch)"
|
// @param tagIds query []int false "search endpoints with these tags (depends on tagsPartialMatch)"
|
||||||
// @param tagsPartialMatch query bool false "If true, will return endpoint which has one of tagIds, if false (or missing) will return only endpoints that has all the tags"
|
// @param tagsPartialMatch query bool false "If true, will return endpoint which has one of tagIds, if false (or missing) will return only endpoints that has all the tags"
|
||||||
// @param endpointIds query []int false "will return only these endpoints"
|
// @param endpointIds query []int false "will return only these endpoints"
|
||||||
|
@ -46,7 +46,9 @@ func (handler *Handler) endpointList(w http.ResponseWriter, r *http.Request) *ht
|
||||||
|
|
||||||
groupID, _ := request.RetrieveNumericQueryParameter(r, "groupId", true)
|
groupID, _ := request.RetrieveNumericQueryParameter(r, "groupId", true)
|
||||||
limit, _ := request.RetrieveNumericQueryParameter(r, "limit", true)
|
limit, _ := request.RetrieveNumericQueryParameter(r, "limit", true)
|
||||||
endpointType, _ := request.RetrieveNumericQueryParameter(r, "type", true)
|
|
||||||
|
var endpointTypes []int
|
||||||
|
request.RetrieveJSONQueryParameter(r, "types", &endpointTypes, true)
|
||||||
|
|
||||||
var tagIDs []portainer.TagID
|
var tagIDs []portainer.TagID
|
||||||
request.RetrieveJSONQueryParameter(r, "tagIds", &tagIDs, true)
|
request.RetrieveJSONQueryParameter(r, "tagIds", &tagIDs, true)
|
||||||
|
@ -98,8 +100,8 @@ func (handler *Handler) endpointList(w http.ResponseWriter, r *http.Request) *ht
|
||||||
filteredEndpoints = filterEndpointsBySearchCriteria(filteredEndpoints, endpointGroups, tagsMap, search)
|
filteredEndpoints = filterEndpointsBySearchCriteria(filteredEndpoints, endpointGroups, tagsMap, search)
|
||||||
}
|
}
|
||||||
|
|
||||||
if endpointType != 0 {
|
if endpointTypes != nil {
|
||||||
filteredEndpoints = filterEndpointsByType(filteredEndpoints, portainer.EndpointType(endpointType))
|
filteredEndpoints = filterEndpointsByTypes(filteredEndpoints, endpointTypes)
|
||||||
}
|
}
|
||||||
|
|
||||||
if tagIDs != nil {
|
if tagIDs != nil {
|
||||||
|
@ -212,11 +214,16 @@ func endpointGroupMatchSearchCriteria(endpoint *portainer.Endpoint, endpointGrou
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func filterEndpointsByType(endpoints []portainer.Endpoint, endpointType portainer.EndpointType) []portainer.Endpoint {
|
func filterEndpointsByTypes(endpoints []portainer.Endpoint, endpointTypes []int) []portainer.Endpoint {
|
||||||
filteredEndpoints := make([]portainer.Endpoint, 0)
|
filteredEndpoints := make([]portainer.Endpoint, 0)
|
||||||
|
|
||||||
|
typeSet := map[portainer.EndpointType]bool{}
|
||||||
|
for _, endpointType := range endpointTypes {
|
||||||
|
typeSet[portainer.EndpointType(endpointType)] = true
|
||||||
|
}
|
||||||
|
|
||||||
for _, endpoint := range endpoints {
|
for _, endpoint := range endpoints {
|
||||||
if endpoint.Type == endpointType {
|
if typeSet[endpoint.Type] {
|
||||||
filteredEndpoints = append(filteredEndpoints, endpoint)
|
filteredEndpoints = append(filteredEndpoints, endpoint)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,7 @@ export class EdgeGroupFormController {
|
||||||
async getDynamicEndpointsAsync() {
|
async getDynamicEndpointsAsync() {
|
||||||
const { pageNumber, limit, search } = this.endpoints.state;
|
const { pageNumber, limit, search } = this.endpoints.state;
|
||||||
const start = (pageNumber - 1) * limit + 1;
|
const start = (pageNumber - 1) * limit + 1;
|
||||||
const query = { search, type: 4, tagIds: this.model.TagIds, tagsPartialMatch: this.model.PartialMatch };
|
const query = { search, types: [4], tagIds: this.model.TagIds, tagsPartialMatch: this.model.PartialMatch };
|
||||||
|
|
||||||
const response = await this.EndpointService.endpoints(start, limit, query);
|
const response = await this.EndpointService.endpoints(start, limit, query);
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@ export class EditEdgeStackViewController {
|
||||||
|
|
||||||
async getPaginatedEndpointsAsync(lastId, limit, search) {
|
async getPaginatedEndpointsAsync(lastId, limit, search) {
|
||||||
try {
|
try {
|
||||||
const query = { search, type: 4, endpointIds: this.stackEndpointIds };
|
const query = { search, types: [4], endpointIds: this.stackEndpointIds };
|
||||||
const { value, totalCount } = await this.EndpointService.endpoints(lastId, limit, query);
|
const { value, totalCount } = await this.EndpointService.endpoints(lastId, limit, query);
|
||||||
const endpoints = _.map(value, (endpoint) => {
|
const endpoints = _.map(value, (endpoint) => {
|
||||||
const status = this.stack.Status[endpoint.Id];
|
const status = this.stack.Status[endpoint.Id];
|
||||||
|
|
|
@ -56,7 +56,7 @@ class AssoicatedEndpointsSelectorController {
|
||||||
|
|
||||||
async getEndpointsAsync() {
|
async getEndpointsAsync() {
|
||||||
const { start, search, limit } = this.getPaginationData('available');
|
const { start, search, limit } = this.getPaginationData('available');
|
||||||
const query = { search, type: 4 };
|
const query = { search, types: [4] };
|
||||||
|
|
||||||
const response = await this.EndpointService.endpoints(start, limit, query);
|
const response = await this.EndpointService.endpoints(start, limit, query);
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ class AssoicatedEndpointsSelectorController {
|
||||||
let response = { value: [], totalCount: 0 };
|
let response = { value: [], totalCount: 0 };
|
||||||
if (this.endpointIds.length > 0) {
|
if (this.endpointIds.length > 0) {
|
||||||
const { start, search, limit } = this.getPaginationData('associated');
|
const { start, search, limit } = this.getPaginationData('associated');
|
||||||
const query = { search, type: 4, endpointIds: this.endpointIds };
|
const query = { search, types: [4], endpointIds: this.endpointIds };
|
||||||
|
|
||||||
response = await this.EndpointService.endpoints(start, limit, query);
|
response = await this.EndpointService.endpoints(start, limit, query);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,11 +17,12 @@ angular.module('portainer.app').factory('EndpointService', [
|
||||||
return Endpoints.get({ id: endpointID }).$promise;
|
return Endpoints.get({ id: endpointID }).$promise;
|
||||||
};
|
};
|
||||||
|
|
||||||
service.endpoints = function (start, limit, { search, type, tagIds, endpointIds, tagsPartialMatch } = {}) {
|
service.endpoints = function (start, limit, { search, types, tagIds, endpointIds, tagsPartialMatch } = {}) {
|
||||||
if (tagIds && !tagIds.length) {
|
if (tagIds && !tagIds.length) {
|
||||||
return Promise.resolve({ value: [], totalCount: 0 });
|
return Promise.resolve({ value: [], totalCount: 0 });
|
||||||
}
|
}
|
||||||
return Endpoints.query({ start, limit, search, type, tagIds: JSON.stringify(tagIds), endpointIds: JSON.stringify(endpointIds), tagsPartialMatch }).$promise;
|
return Endpoints.query({ start, limit, search, types: JSON.stringify(types), tagIds: JSON.stringify(tagIds), endpointIds: JSON.stringify(endpointIds), tagsPartialMatch })
|
||||||
|
.$promise;
|
||||||
};
|
};
|
||||||
|
|
||||||
service.snapshotEndpoints = function () {
|
service.snapshotEndpoints = function () {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue