Git Product home page Git Product logo

projectmanagementservice's Introduction

Build Status Coverage Status

Project Management Service

A Spring backend for the Project Management Service developed and maintained by Texas A&M University Libraries.

This is a service designed to interconnect our Library Service Status System with VersionOne and GitHub Services.

Table of contents

Deployment

For a quick and easy deployment using docker-compose consider using the Project Managment App Repo.

For advanced use cases, or when docker-compose is unavailable, the UI may be either started using docker directly or even manually started. This process is further described in the Deployment Guide.

Developer Documentation

Additional Resources

Please feel free to file any issues concerning Project Management Service to the issues section of the repository.

Any questions concerning Project Management Service can be directed to [email protected].

Copyright © 2022 Texas A&M University Libraries under the MIT License.

projectmanagementservice's People

Contributors

wwelling avatar rladdusaw avatar kaladay avatar jcreel avatar jsavell avatar jeremythuff avatar rmathew1011 avatar

Watchers

Michael Nichols avatar James Cloos avatar  avatar Douglas Hahn avatar  avatar Micah Cooper avatar Devang Mehta avatar  avatar Stephen Pampell avatar  avatar  avatar  avatar

projectmanagementservice's Issues

Add checks and report errors when attempting to delete models with foreign key constraints

When trying to delete Products, one can get unable to delete due to foreign key constraints.
The constraint itself is not very helpful from a user point of view.

Instead, add logic to test if a given model has an associated foreign key that would prevent deletion and then return a customized, more descriptive, and more user-friendly error message.

As an example, I tried to delete a Product.
I get the foreign key constraint error.
It is easy to forget that I have to delete the Internal Requests before deleting the Product.

A similar situation exists with Remote Projects.
I get a foreign key constraint error if I try to delete the Remote Project that has a Product associating with it.

Store LSSS requests in an internal queue

Do not immediately push requests to ProjectManagementSoftware endpoints. Maintain an internal queue of cards that can be managed and pushed individually. This requires a new management UI for the cards.

Refactor Sugar service

With the switch to the new case system we are no longer using sugar, and the service should be refactored to something more generic like a email ticketing service.

Safer caching/updating, such as clearing only after successfully receiving data

A network failure between cache clear and cache refresh would result in a seemingly broken site.
In my case, Github Products never showed up anymore, resulting in an incomplete sprint board.

There needs to be a safer way to handle the cache.
I suggest only clearing the cache after successfully receiving the requested data.

It may be this is an issue with, instead, the error handling.

Such as:

  • if getRemoteProject() fails, it will set a map regardless and will not have the expected map.

In which case:

  • This should either not set cache on any failures or use existing value for that key if failed instead of returning an empty map.

This issue may require research.

Version One connection exception with Tokens

com.versionone.apiclient.exceptions.ConnectionException: 
HTTP/1.1 401 Unauthorized error code: 401 Could not authenticate. The VersionOne credentials may be incorrect or the access tokens may have expired.
	at com.versionone.apiclient.V1Connector.manageErrors(V1Connector.java:375)
	at com.versionone.apiclient.V1Connector.getData(V1Connector.java:320)
	at com.versionone.apiclient.Services.retrieve(Services.java:135)
	at edu.tamu.app.service.manager.VersionOneService.getRemoteProject(VersionOneService.java:79)
	at edu.tamu.app.cache.service.RemoteProjectsScheduledCacheService.update(RemoteProjectsScheduledCacheService.java:55)
	at edu.tamu.app.cache.service.AbstractScheduledCacheService.schedule(AbstractScheduledCacheService.java:27)
	at edu.tamu.app.cache.service.RemoteProjectsScheduledCacheService.schedule(RemoteProjectsScheduledCacheService.java:41)
	at edu.tamu.app.model.repo.impl.RemoteProjectManagerRepoImpl.lambda$updateCache$0(RemoteProjectManagerRepoImpl.java:62)
	at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1626)
	at java.lang.Thread.run(Thread.java:748)

Status should have an order

The order of status on an issue is explicit by name semantically but still requires additional logic or statically ordering them by the consumer. If the status had an order on them, the consumer does not have to order them by some convention.

NULL Pointer exceptions on startup

Could be a side-effect of the VersionOne authentication 401.

java.lang.NullPointerException
  at edu.tamu.app.cache.service.ActiveSprintsScheduledCacheService.lambda$fetchActiveSprints$3(ActiveSprintsScheduledCacheService.java:94)
  at java.lang.Iterable.forEach(Iterable.java:75)
  at edu.tamu.app.cache.service.ActiveSprintsScheduledCacheService.fetchActiveSprints(ActiveSprintsScheduledCacheService.java:91)
  at edu.tamu.app.cache.service.ActiveSprintsScheduledCacheService.lambda$update$0(ActiveSprintsScheduledCacheService.java:46)
  at java.util.ArrayList.forEach(ArrayList.java:1259)
  at edu.tamu.app.cache.service.ActiveSprintsScheduledCacheService.update(ActiveSprintsScheduledCacheService.java:45)
  at edu.tamu.app.cache.service.AbstractScheduledCacheService.schedule(AbstractScheduledCacheService.java:27)
  at edu.tamu.app.cache.service.ActiveSprintsScheduledCacheService.schedule(ActiveSprintsScheduledCacheService.java:39)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65)
  at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
  at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  at java.lang.Thread.run(Thread.java:748)

NULL Pointer Exception loading products

[io-9000-exec-10] o.s.boot.web.support.ErrorPageFilter     : Forwarding to error page from request [/products/1] due to exception [null]

java.lang.NullPointerException: null
	at edu.tamu.weaver.response.ApiResponse.<init>(ApiResponse.java:42) ~[core-2.0.2.jar:na]
	at edu.tamu.app.controller.ProductController.getOne(ProductController.java:84) ~[classes/:na]
	at edu.tamu.app.controller.ProductController$$FastClassBySpringCGLIB$$f4f06e67.invoke(<generated>) ~[classes/:na]
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[spring-core-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:736) ~[spring-aop-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) ~[spring-aop-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:69) ~[spring-security-core-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) ~[spring-aop-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:671) ~[spring-aop-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at edu.tamu.app.controller.ProductController$$EnhancerBySpringCGLIB$$8628becb.getOne(<generated>) ~[classes/:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_172]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_172]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_172]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_172]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) ~[spring-web-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97) ~[spring-webmvc-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:854) ~[spring-webmvc-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:765) ~[spring-webmvc-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) ~[spring-webmvc-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) ~[spring-webmvc-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) ~[spring-webmvc-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) ~[spring-webmvc-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:635) ~[servlet-api.jar:na]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) ~[spring-webmvc-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) ~[servlet-api.jar:na]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) [catalina.jar:8.5.15]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:8.5.15]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) ~[tomcat-websocket.jar:8.5.15]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:8.5.15]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:8.5.15]
	at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:54) ~[spring-boot-1.5.22.RELEASE.jar:1.5.22.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:8.5.15]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:8.5.15]
	at org.springframework.web.servlet.resource.ResourceUrlEncodingFilter.doFilter(ResourceUrlEncodingFilter.java:63) ~[spring-webmvc-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:8.5.15]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:8.5.15]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) [spring-web-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:8.5.15]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:8.5.15]
	at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:111) ~[spring-boot-actuator-1.5.22.RELEASE.jar:1.5.22.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:8.5.15]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:8.5.15]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at edu.tamu.weaver.auth.filter.TokenAuthorizationFilter.doFilterInternal(TokenAuthorizationFilter.java:74) ~[auth-2.0.2.jar:na]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96) ~[spring-web-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177) ~[spring-security-web-4.2.13.RELEASE.jar:4.2.13.RELEASE]
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347) ~[spring-web-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263) ~[spring-web-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:8.5.15]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:8.5.15]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) ~[spring-web-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:8.5.15]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:8.5.15]
	at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:100) ~[spring-boot-actuator-1.5.22.RELEASE.jar:1.5.22.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:8.5.15]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:8.5.15]
	at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:128) [spring-boot-1.5.22.RELEASE.jar:1.5.22.RELEASE]
	at org.springframework.boot.web.support.ErrorPageFilter.access$000(ErrorPageFilter.java:66) [spring-boot-1.5.22.RELEASE.jar:1.5.22.RELEASE]
	at org.springframework.boot.web.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:103) [spring-boot-1.5.22.RELEASE.jar:1.5.22.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.25.RELEASE.jar:4.3.25.RELEASE]
	at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:121) [spring-boot-1.5.22.RELEASE.jar:1.5.22.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:8.5.15]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:8.5.15]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) [catalina.jar:8.5.15]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [catalina.jar:8.5.15]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) [catalina.jar:8.5.15]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [catalina.jar:8.5.15]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80) [catalina.jar:8.5.15]
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624) [catalina.jar:8.5.15]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [catalina.jar:8.5.15]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) [catalina.jar:8.5.15]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799) [tomcat-coyote.jar:8.5.15]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-coyote.jar:8.5.15]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861) [tomcat-coyote.jar:8.5.15]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455) [tomcat-coyote.jar:8.5.15]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-coyote.jar:8.5.15]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_172]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_172]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:8.5.15]
	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172]

PM Service Maintenance

  1. upgrade weaver
  2. update auth service
  3. update/verify build and ci

Update POM repositories:

    <repository>
      <id>tamu-releases</id>
      <url>https://artifacts.library.tamu.edu/repository/maven-releases/</url>
    </repository>

    <repository>
      <id>tamu-snapshots</id>
      <url>https://artifacts.library.tamu.edu/repository/maven-snapshots/</url>
    </repository>

Update Weaver Webservice Parent:

  <parent>
    <groupId>edu.tamu.weaver</groupId>
    <artifactId>webservice-parent</artifactId>
    <version>2.0.2</version>
  </parent>

Should be deployed to pre this sprint.

Duplicate V1 Projects on /sprints/active/ API endpoint

Duplicate entries in the cache to appear under the specific conditions:

  1. Create a new Product, with a non-V1 and a V1 Project.
  2. Save that Product.
  3. Make any edit (except for removing Projects) to the Product and save again.

For each save, a V1 project appears again (duplicate) so long as the first cache refresh cycle since the initial creation of the Product hasn't triggered.

On the first cache refresh cycle, the duplicates disappear and edits work normally.

Removing V1 from the Product and duplicates do not appear.

Adding V1 back to the Product and duplicates appear again for every save until the first cache refresh cycle.

Use Github user account login when Github user account name is unavailable

This is a request to use the Github account login as a fallback to the Github user name.

For example, my Github user account name is currently Kevin Day and my github user account login is kaladay.

This turns out to solve the perceived "bug" where the title/tooltip does not always show up.
It turns out not every user assigns their user account name.

Cleanup ServiceType Scaffolding

The ServiceType enum has a getScaffolding function that still has username/password values for the VersionOne case. We are no longer using username/password and the entire method might be unneeded, any outdated code should be removed.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.