com.github.estuaryoss.agent.api.CommandParallelApiController Maven / Gradle / Ivy
package com.github.estuaryoss.agent.api;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.estuaryoss.agent.component.About;
import com.github.estuaryoss.agent.component.ClientRequest;
import com.github.estuaryoss.agent.component.CommandRunner;
import com.github.estuaryoss.agent.constants.ApiResponseCode;
import com.github.estuaryoss.agent.constants.ApiResponseMessage;
import com.github.estuaryoss.agent.constants.DateTimeConstants;
import com.github.estuaryoss.agent.exception.ApiException;
import com.github.estuaryoss.agent.model.api.ApiResponse;
import com.github.estuaryoss.agent.model.api.CommandDescription;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@Api(tags = {"estuary-agent"})
@RestController
public class CommandParallelApiController implements CommandParallelApi {
private static final Logger log = LoggerFactory.getLogger(CommandParallelApiController.class);
private final ObjectMapper objectMapper;
private final HttpServletRequest request;
@Autowired
private CommandRunner commandRunner;
@Autowired
private ClientRequest clientRequest;
@Autowired
private About about;
@Autowired
public CommandParallelApiController(ObjectMapper objectMapper, HttpServletRequest request) {
this.objectMapper = objectMapper;
this.request = request;
}
public ResponseEntity commandPost(@ApiParam(value = "Commands to run. E.g. ls -lrt", required = true) @Valid @RequestBody String commands) throws IOException {
String commandsStripped = commands.replace("\r\n", "\n").stripLeading().stripTrailing();
List commandsList = Arrays.asList(commandsStripped.split("\n"))
.stream().map(elem -> elem.stripLeading().stripTrailing()).collect(Collectors.toList());
log.debug("Executing commands: " + commandsList.toString());
CommandDescription commandDescription;
try {
commandDescription = commandRunner.runCommandsParallel(commandsList.toArray(new String[0]));
} catch (Exception e) {
throw new ApiException(ApiResponseCode.COMMAND_EXEC_FAILURE.getCode(),
ApiResponseMessage.getMessage(ApiResponseCode.COMMAND_EXEC_FAILURE.getCode()));
}
return new ResponseEntity<>(ApiResponse.builder()
.code(ApiResponseCode.SUCCESS.getCode())
.message(ApiResponseMessage.getMessage(ApiResponseCode.SUCCESS.getCode()))
.description(commandDescription)
.name(about.getAppName())
.version(about.getVersion())
.timestamp(LocalDateTime.now().format(DateTimeConstants.PATTERN))
.path(clientRequest.getRequestUri())
.build(), HttpStatus.OK);
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy