summaryrefslogtreecommitdiff
path: root/src/main/java/com/android/vts/servlet/ShowGcsLogServlet.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/android/vts/servlet/ShowGcsLogServlet.java')
-rw-r--r--src/main/java/com/android/vts/servlet/ShowGcsLogServlet.java320
1 files changed, 0 insertions, 320 deletions
diff --git a/src/main/java/com/android/vts/servlet/ShowGcsLogServlet.java b/src/main/java/com/android/vts/servlet/ShowGcsLogServlet.java
deleted file mode 100644
index ad5e871..0000000
--- a/src/main/java/com/android/vts/servlet/ShowGcsLogServlet.java
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * Copyright (c) 2018 Google Inc. All Rights Reserved.
- *
- * 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.android.vts.servlet;
-
-import com.android.vts.util.GcsHelper;
-import com.google.appengine.api.memcache.ErrorHandlers;
-import com.google.appengine.api.memcache.MemcacheService;
-import com.google.appengine.api.memcache.MemcacheServiceFactory;
-import com.google.auth.oauth2.ServiceAccountCredentials;
-import com.google.cloud.storage.Blob;
-import com.google.cloud.storage.Bucket;
-import com.google.cloud.storage.Storage;
-import com.google.cloud.storage.Storage.BlobListOption;
-import com.google.cloud.storage.StorageOptions;
-import com.google.gson.Gson;
-import org.apache.commons.io.IOUtils;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.logging.Level;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-
-/**
- * A GCS log servlet read log zip file from Google Cloud Storage bucket and show the content in it
- * from the zip file by unarchiving it
- */
-@SuppressWarnings("serial")
-public class ShowGcsLogServlet extends BaseServlet {
-
- private static final String GCS_LOG_JSP = "WEB-INF/jsp/show_gcs_log.jsp";
-
- /** Google Cloud Storage project's key file to access the storage */
- private static String GCS_KEY_FILE;
- /** Google Cloud Storage project's default bucket name for vtslab test result files */
- private static String GCS_BUCKET_NAME;
- /** Google Cloud Storage project's default bucket name for vtslab infra log files */
- private static String GCS_INFRA_LOG_BUCKET_NAME;
-
- /**
- * This is the key file to access vtslab-gcs project. It will allow the dashboard to have a full
- * control of the bucket.
- */
- private InputStream keyFileInputStream;
-
- /** This is the instance of java google storage library */
- private Storage storage;
-
- /** This is the instance of App Engine memcache service java library */
- private MemcacheService syncCache = MemcacheServiceFactory.getMemcacheService();
-
- /** GCS Test Report Bucket instance */
- private Bucket vtsReportBucket;
-
- /** GCS Infra Log Bucket instance */
- private Bucket vtsInfraLogBucket;
-
- @Override
- public void init(ServletConfig cfg) throws ServletException {
- super.init(cfg);
-
- GCS_KEY_FILE = systemConfigProp.getProperty("gcs.keyFile");
- GCS_BUCKET_NAME = systemConfigProp.getProperty("gcs.bucketName");
- GCS_INFRA_LOG_BUCKET_NAME = systemConfigProp.getProperty("gcs.infraLogBucketName");
-
- String keyFilePath = "keys/" + GCS_KEY_FILE;
-
- byte[] keyFileByteArray = new byte[0];
- try {
- keyFileByteArray =
- IOUtils.toByteArray(
- this.getClass().getClassLoader().getResourceAsStream(keyFilePath));
- } catch (IOException e) {
- e.printStackTrace();
- }
- this.keyFileInputStream = new ByteArrayInputStream(keyFileByteArray);
- InputStream vtsReportInputStream = new ByteArrayInputStream(keyFileByteArray);
- InputStream vtsInfraInputStream = new ByteArrayInputStream(keyFileByteArray);
-
- Optional<Storage> optionalVtsReportStorage = GcsHelper.getStorage(vtsReportInputStream);
- if (optionalVtsReportStorage.isPresent()) {
- this.storage = optionalVtsReportStorage.get();
- this.vtsReportBucket = storage.get(GCS_BUCKET_NAME);
- } else {
- logger.log(Level.SEVERE, "Error on getting storage instance!");
- throw new ServletException("Creating storage instance exception!");
- }
-
- Optional<Storage> optionalVtsInfraStorage = GcsHelper.getStorage(vtsInfraInputStream);
- if (optionalVtsInfraStorage.isPresent()) {
- this.storage = optionalVtsInfraStorage.get();
- this.vtsInfraLogBucket = storage.get(GCS_INFRA_LOG_BUCKET_NAME);
- } else {
- logger.log(Level.SEVERE, "Error on getting storage instance!");
- throw new ServletException("Creating storage instance exception!");
- }
- syncCache.setErrorHandler(ErrorHandlers.getConsistentLogAndContinue(Level.INFO));
- }
-
- @Override
- public PageType getNavParentType() {
- return PageType.TOT;
- }
-
- @Override
- public List<Page> getBreadcrumbLinks(HttpServletRequest request) {
- return null;
- }
-
- @Override
- public void doGetHandler(HttpServletRequest request, HttpServletResponse response)
- throws IOException {
- if (keyFileInputStream == null) {
- request.setAttribute("error_title", "GCS Key file Error");
- request.setAttribute("error_message", "The GCS Key file is not existed!");
- RequestDispatcher dispatcher = request.getRequestDispatcher(ERROR_MESSAGE_JSP);
- try {
- dispatcher.forward(request, response);
- } catch (ServletException e) {
- logger.log(Level.SEVERE, "Servlet Excpetion caught : ", e);
- }
- } else {
- String pathInfo = request.getPathInfo();
- if (Objects.nonNull(pathInfo)) {
- if (pathInfo.equalsIgnoreCase("/download")) {
- downloadHandler(request, response);
- } else {
- logger.log(Level.INFO, "Path Info => " + pathInfo);
- logger.log(Level.WARNING, "Unknown path access!");
- }
- } else {
- defaultHandler(request, response);
- }
- }
- }
-
- private void downloadHandler(HttpServletRequest request, HttpServletResponse response)
- throws IOException {
- String file = request.getParameter("file") == null ? "/" : request.getParameter("file");
- Path filePathInfo = Paths.get(file);
-
- Blob blobFile = vtsInfraLogBucket.get(filePathInfo.toString());
-
- if (blobFile.exists()) {
- response.setContentType("application/octet-stream");
- response.setContentLength(blobFile.getSize().intValue());
- response.setHeader(
- "Content-Disposition",
- "attachment; filename=\"" + filePathInfo.getFileName() + "\"");
-
- response.getOutputStream().write(blobFile.getContent());
- } else {
- request.setAttribute("error_title", "Infra Log File Not Found");
- request.setAttribute("error_message", "Please contact the administrator!");
- RequestDispatcher dispatcher = request.getRequestDispatcher(ERROR_MESSAGE_JSP);
- try {
- dispatcher.forward(request, response);
- } catch (ServletException e) {
- logger.log(Level.SEVERE, "Servlet Excpetion caught : ", e);
- }
- }
- }
-
- private void defaultHandler(HttpServletRequest request, HttpServletResponse response)
- throws IOException {
-
- String action =
- request.getParameter("action") == null ? "read" : request.getParameter("action");
- String path = request.getParameter("path") == null ? "/" : request.getParameter("path");
- String entry = request.getParameter("entry") == null ? "" : request.getParameter("entry");
- Path pathInfo = Paths.get(path);
-
- List<String> dirList = new ArrayList<>();
- List<String> fileList = new ArrayList<>();
- List<String> entryList = new ArrayList<>();
- Map<String, Object> resultMap = new HashMap<>();
- String entryContent = "";
-
- if (pathInfo.toString().endsWith(".zip")) {
-
- Blob blobFile = (Blob) this.syncCache.get(path.toString());
- if (blobFile == null) {
- blobFile = vtsReportBucket.get(path);
- this.syncCache.put(path.toString(), blobFile);
- }
-
- if (action.equalsIgnoreCase("read")) {
- InputStream blobInputStream = new ByteArrayInputStream(blobFile.getContent());
- ZipInputStream zipInputStream = new ZipInputStream(blobInputStream);
-
- ZipEntry zipEntry;
- while ((zipEntry = zipInputStream.getNextEntry()) != null) {
- if (zipEntry.isDirectory()) {
-
- } else {
- if (entry.length() > 0) {
- logger.log(Level.INFO, "param entry => " + entry);
- if (zipEntry.getName().equals(entry)) {
- logger.log(Level.INFO, "matched !!!! " + zipEntry.getName());
- entryContent =
- IOUtils.toString(
- zipInputStream, StandardCharsets.UTF_8.name());
- }
- } else {
- entryList.add(zipEntry.getName());
- }
- }
- }
- resultMap.put("entryList", entryList);
- resultMap.put("entryContent", entryContent);
-
- String json = new Gson().toJson(resultMap);
- response.setContentType("application/json");
- response.setCharacterEncoding("UTF-8");
- response.getWriter().write(json);
- } else {
- response.setContentType("application/octet-stream");
- response.setContentLength(blobFile.getSize().intValue());
- response.setHeader(
- "Content-Disposition",
- "attachment; filename=\"" + pathInfo.getFileName() + "\"");
-
- response.getOutputStream().write(blobFile.getContent());
- }
-
- } else {
-
- logger.log(Level.INFO, "path info => " + pathInfo);
- logger.log(Level.INFO, "path name count => " + pathInfo.getNameCount());
-
- BlobListOption[] listOptions;
- if (pathInfo.getNameCount() == 0) {
- listOptions = new BlobListOption[] {BlobListOption.currentDirectory()};
- } else {
- String prefixPathString = path.endsWith("/") ? path : path.concat("/");
- if (pathInfo.getNameCount() <= 1) {
- dirList.add("/");
- } else {
- dirList.add(getParentDirPath(prefixPathString));
- }
-
- listOptions =
- new BlobListOption[] {
- BlobListOption.currentDirectory(),
- BlobListOption.prefix(prefixPathString)
- };
- }
-
- Iterable<Blob> blobIterable = vtsReportBucket.list(listOptions).iterateAll();
- Iterator<Blob> blobIterator = blobIterable.iterator();
- while (blobIterator.hasNext()) {
- Blob blob = blobIterator.next();
- logger.log(Level.INFO, "blob name => " + blob);
- if (blob.isDirectory()) {
- logger.log(Level.INFO, "directory name => " + blob.getName());
- dirList.add(blob.getName());
- } else {
- logger.log(Level.INFO, "file name => " + blob.getName());
- fileList.add(Paths.get(blob.getName()).getFileName().toString());
- }
- }
-
- response.setStatus(HttpServletResponse.SC_OK);
- request.setAttribute("entryList", entryList);
- request.setAttribute("dirList", dirList);
- request.setAttribute("fileList", fileList);
- request.setAttribute("path", path);
- RequestDispatcher dispatcher = request.getRequestDispatcher(GCS_LOG_JSP);
- try {
- dispatcher.forward(request, response);
- } catch (ServletException e) {
- logger.log(Level.SEVERE, "Servlet Excpetion caught : ", e);
- }
- }
- }
-
- private String getParentDirPath(String fileOrDirPath) {
- boolean endsWithSlashCheck = fileOrDirPath.endsWith(File.separator);
- return fileOrDirPath.substring(
- 0,
- fileOrDirPath.lastIndexOf(
- File.separatorChar,
- endsWithSlashCheck
- ? fileOrDirPath.length() - 2
- : fileOrDirPath.length() - 1));
- }
-}