X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=blobdiff_plain;f=blueprints%2Fcommon%2Feliot-ui%2Fbe%2Fsrc%2Feliotk8sclient%2Fsrc%2Fmain%2Fjava%2Fcom%2Feliot%2Feliotbe%2Feliotk8sclient%2Fservice%2FAppServiceHandler.java;fp=blueprints%2Fcommon%2Feliot-ui%2Fbe%2Fsrc%2Feliotk8sclient%2Fsrc%2Fmain%2Fjava%2Fcom%2Feliot%2Feliotbe%2Feliotk8sclient%2Fservice%2FAppServiceHandler.java;h=406f064f9bedb8635b7b3c7145b837bd0d57b318;hb=7d9494640272f23b5358f11e6e8faebb1a57240a;hp=0000000000000000000000000000000000000000;hpb=7e4a1bc460881fb10ea8993da83f0956f8cf3463;p=eliot.git diff --git a/blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/service/AppServiceHandler.java b/blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/service/AppServiceHandler.java new file mode 100644 index 0000000..406f064 --- /dev/null +++ b/blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/service/AppServiceHandler.java @@ -0,0 +1,157 @@ +/* + * Copyright 2020 Huawei Technologies Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.eliot.eliotbe.eliotk8sclient.service; + + +import org.apache.tomcat.util.http.fileupload.FileUploadException; +import com.eliot.eliotbe.eliotk8sclient.AppException; +import com.eliot.eliotbe.eliotk8sclient.common.AppConstants; +import org.apache.tomcat.util.http.fileupload.FileUtils; +import org.joda.time.LocalDate; +import org.joda.time.LocalDateTime; +import org.joda.time.LocalTime; +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.stereotype.Component; +import org.springframework.util.StringUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.lang.System; +import java.io.File; +@Component +public class AppServiceHandler { + + public static final Logger logger = LoggerFactory.getLogger(AppServiceHandler.class); + + @Autowired + private AppService appService; + + /** + * Upload deployment file. + * @param file file + * @return + */ + public ResponseEntity> uploadDeployment(MultipartFile file) + throws IOException { + try { + validateFile(file, AppConstants.MAX_CONFIG_SIZE, ""); + } catch (FileUploadException | NullPointerException e) { + Map response = new HashMap<>(); + response.put("error",e.getMessage()); + return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST); + } + + String destination = appService.getPackageBasePath() + LocalDate.now().toString() + + LocalTime.now().getMillisOfSecond() +"/"; + File destinationfile = new File(destination); +/* if (file.exists()) { + FileUtils.cleanDirectory(file); + FileUtils.deleteDirectory(file); + }*/ + boolean isMk = destinationfile.mkdir(); + if (!isMk) { + logger.info("package directory creation failed"); + } + + logger.info("destination path is set"); + + String deploymentPathWithFile = null; + + deploymentPathWithFile = storeDeployFile(destination,file); + + appService.instantiateApplication(deploymentPathWithFile); + + Map response = new HashMap<>(); + response.put("Application Deployed","OK"); + return new ResponseEntity<>(response, HttpStatus.OK); + } + + private boolean checkK8sConfigFile(Path k8sConfig) { + if (!k8sConfig.toFile().isFile() || !k8sConfig.toFile().exists()) { + logger.error("Config file does not exist..."); + return false; + } + return true; + } + + private String storeDeployFile(String basePath, MultipartFile file) throws IOException { + // Get the file and save it somewhere + byte[] bytes = file.getBytes(); + + //String packageDir = getPackageDirName(AppConstants.MAX_PACKAGE_DIR_SIZE); + Path path = Paths.get(basePath + file.getOriginalFilename()); + // Path path = Paths.get("~/"); + Files.write(path, bytes); + String deploymentFilePath; + return deploymentFilePath = basePath+ file.getOriginalFilename(); + } + + private Path loadK8sConfigFilePath(String basePath) { + return Paths.get(basePath + ""); + } + +/* private String getPackageDirName(int size) { + final String allowed = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + + SecureRandom sr = new SecureRandom(); + StringBuilder sb = new StringBuilder(size); + for (int i = 0; i < size; i++) { + sb.append(allowed.charAt(sr.nextInt(allowed.length()))); + } + return sb.toString(); + }*/ + + /** + * Validate MultipartFile. + * + * @param file file + * @param fileSize file size for validation + * @param extension file extension + * @throws FileUploadException on exception throws + */ + public void validateFile(MultipartFile file, long fileSize, String extension) throws FileUploadException { + if (file == null) { + throw new FileUploadException("file is null"); + } + + if (file.isEmpty()) { + throw new FileUploadException("file is empty"); + } else if (!extension.isEmpty() + && null != file.getOriginalFilename() && !file.getOriginalFilename().endsWith(extension)) { + throw new FileUploadException("package format not supported"); + } else if (file.getSize() > fileSize) { + throw new FileUploadException("file size not in the limit"); + } + } + private ResponseEntity> createErrorResponse(String error) { + Map response = new HashMap<>(); + response.put("error", error); + response.put("status", HttpStatus.INTERNAL_SERVER_ERROR.toString()); + return new ResponseEntity<>(response, HttpStatus.INTERNAL_SERVER_ERROR); + } +}