package io.cattle.platform.docker.api;
import io.cattle.platform.api.action.ActionHandler;
import io.cattle.platform.archaius.util.ArchaiusUtil;
import io.cattle.platform.core.model.Host;
import io.cattle.platform.core.model.Instance;
import io.cattle.platform.docker.api.model.ContainerLogs;
import io.cattle.platform.docker.api.model.HostAccess;
import io.cattle.platform.docker.constants.DockerInstanceConstants;
import io.cattle.platform.docker.util.DockerUtils;
import io.cattle.platform.host.model.HostApiAccess;
import io.cattle.platform.host.service.HostApiService;
import io.cattle.platform.object.ObjectManager;
import io.cattle.platform.util.type.CollectionUtils;
import io.github.ibuildthecloud.gdapi.request.ApiRequest;
import java.util.Map;
import javax.inject.Inject;
import com.netflix.config.DynamicStringProperty;
public class ContainerLogsActionHandler implements ActionHandler {
private static final DynamicStringProperty HOST_LOGS_PATH = ArchaiusUtil.getString("host.logs.path");
HostApiService apiService;
ObjectManager objectManager;
@Override
public String getName() {
return "instance.logs";
}
@Override
public Object perform(String name, Object obj, ApiRequest request) {
Host host = null;
Instance container = null;
if (obj instanceof Instance) {
container = (Instance) obj;
host = DockerUtils.getHostFromContainer(objectManager, container, null);
}
if (host == null) {
return null;
}
ContainerLogs logs = request.proxyRequestObject(ContainerLogs.class);
String dockerId = DockerUtils.getDockerIdentifier(container);
Map<String, Object> data = CollectionUtils.asMap(DockerInstanceConstants.DOCKER_CONTAINER, dockerId, "Lines", logs.getLines(), "Follow",
logs.getFollow());
HostApiAccess apiAccess = apiService.getAccess(request, host.getId(), CollectionUtils.asMap("logs", data), HOST_LOGS_PATH.get());
if (apiAccess == null) {
return null;
}
HostAccess access = new HostAccess(apiAccess.getUrl(), apiAccess.getAuthenticationToken());
return access;
}
public HostApiService getApiService() {
return apiService;
}
@Inject
public void setApiService(HostApiService apiService) {
this.apiService = apiService;
}
public ObjectManager getObjectManager() {
return objectManager;
}
@Inject
public void setObjectManager(ObjectManager objectManager) {
this.objectManager = objectManager;
}
}