diff options
author | Young Gyu Park <younggyu@google.com> | 2018-03-19 16:08:48 +0900 |
---|---|---|
committer | Young Gyu Park <younggyu@google.com> | 2018-03-20 14:26:24 +0900 |
commit | b73a5e5d5967996b8b075021014c351fc76b0d62 (patch) | |
tree | c0be1b5fbe3bf32d680623505f561be1c3d26284 | |
parent | d7557ead04451532e9f0dc6987f1633d7f44af38 (diff) | |
download | dashboard-b73a5e5d5967996b8b075021014c351fc76b0d62.tar.gz |
Adding new library and entity class for the new API
Test: Tested with browser on my local dev machine
Bug: 75494170
Change-Id: Icdcbf44a4d163c29f6452c14ee3f3bdd72997c38
12 files changed, 213 insertions, 17 deletions
@@ -25,7 +25,7 @@ <properties> <app.id>s~google.com:android-vts-staging</app.id> <app.version>4</app.version> - <appengine.version>1.9.62</appengine.version> + <appengine.version>1.9.63</appengine.version> <appengine.clientID></appengine.clientID> <appengine.serviceClientID></appengine.serviceClientID> @@ -52,8 +52,9 @@ <dependency> <groupId>javax.servlet</groupId> - <artifactId>jsp-api</artifactId> - <version>2.0</version> + <artifactId>javax.servlet-api</artifactId> + <version>3.0.1</version> + <scope>provided</scope> </dependency> <dependency> @@ -77,7 +78,7 @@ <dependency> <groupId>com.google.cloud</groupId> <artifactId>google-cloud</artifactId> - <version>0.8.0</version> + <version>0.39.0-alpha</version> </dependency> <dependency> @@ -87,6 +88,18 @@ </dependency> <dependency> + <groupId>com.googlecode.objectify</groupId> + <artifactId>objectify</artifactId> + <version>6.0b1</version> + </dependency> + + <dependency> + <groupId>org.json</groupId> + <artifactId>json</artifactId> + <version>20180130</version> + </dependency> + + <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.6</version> @@ -116,6 +129,13 @@ <version>v1-rev136-1.23.0</version> </dependency> + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <version>1.16.20</version> + <scope>provided</scope> + </dependency> + <!-- Test Dependencies --> <dependency> <groupId>junit</groupId> diff --git a/src/main/java/com/android/vts/config/ObjectifyListener.java b/src/main/java/com/android/vts/config/ObjectifyListener.java new file mode 100644 index 0000000..8857764 --- /dev/null +++ b/src/main/java/com/android/vts/config/ObjectifyListener.java @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * 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.config; + +import com.android.vts.entity.TestLogSummaryEntity; +import com.googlecode.objectify.ObjectifyService; + +import javax.servlet.ServletContext; +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; +import javax.servlet.annotation.WebListener; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** The @WebListener annotation for registering a class as a listener of a web application. */ +@WebListener +/** + * Initializing Objectify Service at the container start up before any web components like servlet + * get initialized. + */ +public class ObjectifyListener implements ServletContextListener { + + private static final Logger logger = Logger.getLogger(ObjectifyListener.class.getName()); + + /** Receives notification that the web application initialization process is starting. + * This function will register Entity classes for objectify. + */ + @Override + public void contextInitialized(ServletContextEvent servletContextEvent) { + ObjectifyService.init(); + ObjectifyService.register(TestLogSummaryEntity.class); + logger.log(Level.INFO, "Value Initialized from context."); + } + + /** Receives notification that the ServletContext is about to be shut down. */ + @Override + public void contextDestroyed(ServletContextEvent servletContextEvent) { + ServletContext servletContext = servletContextEvent.getServletContext(); + logger.log(Level.INFO, "Value deleted from context."); + } +} diff --git a/src/main/java/com/android/vts/config/ObjectifyWebFilter.java b/src/main/java/com/android/vts/config/ObjectifyWebFilter.java new file mode 100644 index 0000000..3813d0b --- /dev/null +++ b/src/main/java/com/android/vts/config/ObjectifyWebFilter.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * 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.config; + +import com.googlecode.objectify.ObjectifyFilter; + +import javax.servlet.annotation.WebFilter; + +/** Annotation used to declare a servlet filter. */ +@WebFilter(urlPatterns = {"/*"}) +/** + * Servlet filter for objectify library. Objectify requires a filter to clean up any thread-local + * transaction contexts and pending asynchronous operations that remain at the end of a request. + */ +public class ObjectifyWebFilter extends ObjectifyFilter {} diff --git a/src/main/java/com/android/vts/entity/TestLogSummaryEntity.java b/src/main/java/com/android/vts/entity/TestLogSummaryEntity.java new file mode 100644 index 0000000..787295c --- /dev/null +++ b/src/main/java/com/android/vts/entity/TestLogSummaryEntity.java @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * 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.entity; + +import com.googlecode.objectify.annotation.Cache; +import com.googlecode.objectify.annotation.Entity; +import com.googlecode.objectify.annotation.Id; +import com.googlecode.objectify.annotation.Index; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.Date; + +import static com.googlecode.objectify.ObjectifyService.ofy; + +/** Entity Class for saving Test Log Summary */ +@Cache +@Entity +@EqualsAndHashCode(of = "id") +@NoArgsConstructor +public class TestLogSummaryEntity { + + /** Test Log Summary id */ + @Id Long id; + + /** Test Log Summary branch information */ + @Index @Getter @Setter String branch; + + /** Test Log Summary build target information */ + @Index @Getter @Setter String target; + + /** Test Log Summary build ID information */ + @Index @Getter @Setter String build_id; + + /** Test Log Summary system finrgerprint information */ + @Getter @Setter String system_fingerprint; + + /** Test Log Summary vendor fingerprint information */ + @Getter @Setter String vendor_fingerprint; + + /** Test Log Summary test count for success information */ + @Index @Getter @Setter int pass; + + /** Test Log Summary test count for failure information */ + @Index @Getter @Setter int fail; + + /** When this record was created or updated */ + @Index @Getter Date updated; + + /** Construction function for TestLogSummaryEntity Class */ + public TestLogSummaryEntity( + Long id, + String branch, + String target, + String build_id, + String system_fingerprint, + String vendor_fingerprint, + int pass, + int fail) { + this.id = id; + this.branch = branch; + this.target = target; + this.build_id = build_id; + this.system_fingerprint = system_fingerprint; + this.vendor_fingerprint = vendor_fingerprint; + this.pass = pass; + this.fail = fail; + } + + /** Saving function for the instance of this class */ + private void save() { + this.updated = new Date(); + ofy().defer().save().entity(this); + } +} diff --git a/src/main/java/com/android/vts/servlet/ShowCoverageOverviewServlet.java b/src/main/java/com/android/vts/servlet/ShowCoverageOverviewServlet.java index d011c02..f9240c0 100644 --- a/src/main/java/com/android/vts/servlet/ShowCoverageOverviewServlet.java +++ b/src/main/java/com/android/vts/servlet/ShowCoverageOverviewServlet.java @@ -96,7 +96,7 @@ public class ShowCoverageOverviewServlet extends BaseServlet { if (timeFilter != null) { testFilter = Query.CompositeFilterOperator.and(testFilter, timeFilter); } - Map<String, Object> parameterMap = request.getParameterMap(); + Map<String, String[]> parameterMap = request.getParameterMap(); List<Query.Filter> userTestFilters = FilterUtil.getUserTestFilters(parameterMap); userTestFilters.add(0, testFilter); Query.Filter userDeviceFilter = FilterUtil.getUserDeviceFilter(parameterMap); diff --git a/src/main/java/com/android/vts/servlet/ShowGcsLogServlet.java b/src/main/java/com/android/vts/servlet/ShowGcsLogServlet.java index 7921ba6..abde1f4 100644 --- a/src/main/java/com/android/vts/servlet/ShowGcsLogServlet.java +++ b/src/main/java/com/android/vts/servlet/ShowGcsLogServlet.java @@ -205,7 +205,8 @@ public class ShowGcsLogServlet extends BaseServlet { }; } - Iterator<Blob> blobIterator = vtsReportBucket.list(listOptions).iterateAll(); + 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); diff --git a/src/main/java/com/android/vts/servlet/ShowGreenReleaseServlet.java b/src/main/java/com/android/vts/servlet/ShowGreenReleaseServlet.java index 194f410..9564ed2 100644 --- a/src/main/java/com/android/vts/servlet/ShowGreenReleaseServlet.java +++ b/src/main/java/com/android/vts/servlet/ShowGreenReleaseServlet.java @@ -212,8 +212,8 @@ public class ShowGreenReleaseServlet extends BaseServlet { Map<String, List<TestPlanRunEntity>> allTestPlanRunEntityMap = new HashMap<>(); deviceBuildInfoList.forEach( deviceBuildInfo -> { - Map<String, Object> paramMap = - new HashMap<String, Object>() { + Map<String, String[]> paramMap = + new HashMap<String, String[]>() { { put("branch", new String[] {branchKey}); put( diff --git a/src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java b/src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java index 4eb4078..357ef27 100644 --- a/src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java +++ b/src/main/java/com/android/vts/servlet/ShowPlanReleaseServlet.java @@ -143,7 +143,7 @@ public class ShowPlanReleaseServlet extends BaseServlet { Filter testPlanRunFilter = FilterUtil.getTimeFilter( testPlanKey, TestPlanRunEntity.KIND, startTime, endTime, typeFilter); - Map<String, Object> parameterMap = request.getParameterMap(); + Map<String, String[]> parameterMap = request.getParameterMap(); List<Filter> userTestFilters = FilterUtil.getUserTestFilters(parameterMap); userTestFilters.add(0, testPlanRunFilter); diff --git a/src/main/java/com/android/vts/servlet/ShowProfilingOverviewServlet.java b/src/main/java/com/android/vts/servlet/ShowProfilingOverviewServlet.java index 0b28197..558654e 100644 --- a/src/main/java/com/android/vts/servlet/ShowProfilingOverviewServlet.java +++ b/src/main/java/com/android/vts/servlet/ShowProfilingOverviewServlet.java @@ -74,7 +74,7 @@ public class ShowProfilingOverviewServlet extends BaseServlet { // Create a query for test runs matching the time window filter - Map<String, Object> parameterMap = request.getParameterMap(); + Map<String, String[]> parameterMap = request.getParameterMap(); boolean hasBranchFilter = parameterMap.containsKey(FilterUtil.FilterKey.BRANCH.getValue()); Filter deviceFilter; if (hasBranchFilter) { diff --git a/src/main/java/com/android/vts/servlet/ShowTableServlet.java b/src/main/java/com/android/vts/servlet/ShowTableServlet.java index 3a5b9ae..0afaadf 100644 --- a/src/main/java/com/android/vts/servlet/ShowTableServlet.java +++ b/src/main/java/com/android/vts/servlet/ShowTableServlet.java @@ -155,7 +155,7 @@ public class ShowTableServlet extends BaseServlet { FilterUtil.getTimeFilter( testKey, TestRunEntity.KIND, startTime, endTime, typeFilter); - Map<String, Object> parameterMap = request.getParameterMap(); + Map<String, String[]> parameterMap = request.getParameterMap(); List<Filter> userTestFilters = FilterUtil.getUserTestFilters(parameterMap); userTestFilters.add(0, testFilter); Filter userDeviceFilter = FilterUtil.getUserDeviceFilter(parameterMap); diff --git a/src/main/java/com/android/vts/servlet/ShowTreeServlet.java b/src/main/java/com/android/vts/servlet/ShowTreeServlet.java index ca395b1..0338bf9 100644 --- a/src/main/java/com/android/vts/servlet/ShowTreeServlet.java +++ b/src/main/java/com/android/vts/servlet/ShowTreeServlet.java @@ -165,7 +165,7 @@ public class ShowTreeServlet extends BaseServlet { FilterUtil.getTimeFilter( testKey, TestRunEntity.KIND, startTime, endTime, typeFilter); - Map<String, Object> parameterMap = request.getParameterMap(); + Map<String, String[]> parameterMap = request.getParameterMap(); List<Filter> userTestFilters = FilterUtil.getUserTestFilters(parameterMap); userTestFilters.add(0, testFilter); Filter userDeviceFilter = FilterUtil.getUserDeviceFilter(parameterMap); diff --git a/src/main/java/com/android/vts/util/FilterUtil.java b/src/main/java/com/android/vts/util/FilterUtil.java index ebdb479..1c7a441 100644 --- a/src/main/java/com/android/vts/util/FilterUtil.java +++ b/src/main/java/com/android/vts/util/FilterUtil.java @@ -204,7 +204,7 @@ public class FilterUtil { * @param key The key whose value to get. * @return The first value associated with the provided key. */ - public static String getFirstParameter(Map<String, Object> parameterMap, String key) { + public static String getFirstParameter(Map<String, String[]> parameterMap, String key) { String[] values = (String[]) parameterMap.get(key); if (values.length == 0) return null; return values[0]; @@ -216,7 +216,7 @@ public class FilterUtil { * @param parameterMap The key-value map of url parameters. * @return A filter with the values from the user search parameters. */ - public static Filter getUserDeviceFilter(Map<String, Object> parameterMap) { + public static Filter getUserDeviceFilter(Map<String, String[]> parameterMap) { Filter deviceFilter = null; for (String key : parameterMap.keySet()) { if (!FilterKey.isDeviceKey(key)) continue; @@ -239,7 +239,7 @@ public class FilterUtil { * @param parameterMap The key-value map of url parameters. * @return A list of filters, each having at most one inequality filter. */ - public static List<Filter> getUserTestFilters(Map<String, Object> parameterMap) { + public static List<Filter> getUserTestFilters(Map<String, String[]> parameterMap) { List<Filter> userFilters = new ArrayList<>(); for (String key : parameterMap.keySet()) { if (!FilterKey.isTestKey(key)) continue; @@ -520,11 +520,11 @@ public class FilterUtil { * @param request The request whose attributes to set. * @param parameterMap The map from key to (Object) String[] value whose entries to parse. */ - public static void setAttributes(HttpServletRequest request, Map<String, Object> parameterMap) { + public static void setAttributes(HttpServletRequest request, Map<String, String[]> parameterMap) { for (String key : parameterMap.keySet()) { if (!FilterKey.isDeviceKey(key) && !FilterKey.isTestKey(key)) continue; FilterKey filterKey = FilterKey.parse(key); - String[] values = (String[]) parameterMap.get(key); + String[] values = parameterMap.get(key); if (values.length == 0) continue; String stringValue = values[0]; request.setAttribute(filterKey.keyString, new Gson().toJson(stringValue)); |