package io.cattle.platform.host.stats.api;
import io.cattle.platform.core.constants.AccountConstants;
import io.cattle.platform.core.constants.HostConstants;
import io.cattle.platform.core.constants.InstanceConstants;
import io.cattle.platform.core.constants.ProjectConstants;
import io.cattle.platform.core.model.Account;
import io.cattle.platform.core.model.Host;
import io.cattle.platform.core.model.Instance;
import io.cattle.platform.core.model.Service;
import io.cattle.platform.docker.constants.DockerHostConstants;
import io.cattle.platform.host.stats.utils.StatsConstants;
import io.github.ibuildthecloud.gdapi.context.ApiContext;
import io.github.ibuildthecloud.gdapi.model.Resource;
import io.github.ibuildthecloud.gdapi.request.ApiRequest;
import io.github.ibuildthecloud.gdapi.response.ResourceOutputFilter;
import java.util.ArrayList;
import java.util.List;
public class StatsOutputFilter implements ResourceOutputFilter {
@Override
public Resource filter(ApiRequest request, Object original, Resource converted) {
boolean add = false;
boolean hostStats = false;
boolean containerStats = false;
boolean project = false;
if (original instanceof Host && DockerHostConstants.KIND_DOCKER.equals(((Host) original).getKind())) {
add = true;
hostStats = true;
containerStats = true;
} else if (original instanceof Instance && InstanceConstants.CONTAINER_LIKE.contains(((Instance) original).getKind())) {
containerStats = true;
add = true;
} else if (original instanceof Account && AccountConstants.PROJECT_KIND.equals(((Account) original).getKind())) {
project = true;
} else if (original instanceof Service) {
containerStats = true;
}
if (add) {
converted.getLinks().put(StatsConstants.LINK_STATS, ApiContext.getUrlBuilder().resourceLink(converted, StatsConstants.LINK_STATS));
}
if (hostStats) {
converted.getLinks().put(StatsConstants.HOST_STATS, ApiContext.getUrlBuilder().resourceLink(converted, StatsConstants.HOST_STATS));
}
if (containerStats) {
converted.getLinks().put(StatsConstants.CONTAINER_STATS, ApiContext.getUrlBuilder().resourceLink(converted, StatsConstants.CONTAINER_STATS));
}
if (project) {
converted.getLinks().put(StatsConstants.HOST_STATS,
ApiContext.getUrlBuilder().resourceLink(converted, "projects/" + converted.getId() + "/" + StatsConstants.HOST_STATS));
}
return converted;
}
@Override
public String[] getTypes() {
List<String> types = new ArrayList<>(InstanceConstants.CONTAINER_LIKE);
types.add(HostConstants.TYPE);
types.add(ProjectConstants.TYPE);
types.add("service");
types.add("loadBalancerService");
return types.toArray(new String[types.size()]);
}
@Override
public Class<?>[] getTypeClasses() {
return new Class<?>[] {};
}
}