6 comments

Simone,

Quite cool! I am sure many of the users will find this useful.
Looking forward to the updates!

Some quick notes and suggesitons in rundom order:
- makes sense to check-in build.properties without local paths, probably with all the lines commented
- can also check-in IDEA-generated dependenciesgraph.xml Ant script to allow building from command line
- can add artifact dependencies with another color
- I've used to drawing the dependencies in opposite directions (from using to the dependency), but that can be a personal preference.
- would be cool to preserve the layout once it is changed by the user

If you want, we can setup a build for the plugin on our demo server.

0

Hi Yegor, feedback very appreciated. It's my first experiment with TC plugins as well as Java.

  • about artifacts, that's what I thought, but I couldn't find a way to get them from the API
  • about the layout, I've relied on a force-directed layout supplied by this project which gets automatically generated and changes each time (not nice for large dependency graphs). I'm also evaluating Cytoscape, would you go with a custom written layout instead?
0
> about artifacts, that's what I thought, but I couldn't find a way to get them from the API

SBuildType.getArtifactDependencies is probably the way to go.


> would you go with a custom written layout instead?


I am not yet ready to suggest some approach here.
Seems, the layout can either be:
- unmodifiable (and then it should be good enough by default and the nodes should probably be not draggable)
- modifiable (and then it should be preserved between the sessions (probably per-user))

A logical way here seems to start with the unmodifiable one and then allow modifications and persisting them.

0

Simone,

Could you please let me know where this new tab with the dependency graph should show up? I have istalled your plugin, but cannot see any changes to the TeamCity GUI (most likely missing something simple). Thanks in advance.

P.S. Good work by the way, was a bit surprised TeamCity does not supply such a graph out of the box.

0

Hi, the tab should be among the project's tabs, but please take into account that I've only done very preliminar work on this, it's not really usable.

0

Simone:  Do you have any plans on continuing your work with this?  I've built the version currently avaliable in your repository and this doesn't appear to currently be working with TeamCity 8.0.4 (build 27616).  If I try and go to the tab, I get a blank page and loading the URL manually exposes this stacktrace:

Trace: java.lang.NullPointerException
     at dependenciesGraph.server.ProjectDependenciesController.ComputeDependencies(ProjectDependenciesController.java:67)
     at dependenciesGraph.server.ProjectDependenciesController.doHandle(ProjectDependenciesController.java:46)
     at jetbrains.buildServer.controllers.BaseController.handleRequestInternal(BaseController.java:73)
     at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
     at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
     at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
     at jetbrains.buildServer.maintenance.TeamCityDispatcherServlet.service(TeamCityDispatcherServlet.java:21)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
     at jetbrains.buildServer.web.ParametersProviderCalculationContextFilter.doFilter(ParametersProviderCalculationContextFilter.java:2)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
     at jetbrains.buildServer.web.DisableSessionIdFromUrlFilter.doFilter(DisableSessionIdFromUrlFilter.java:2)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
     at jetbrains.buildServer.web.DiagnosticFilter.doFilter(DiagnosticFilter.java:69)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
     at jetbrains.buildServer.web.ResponseFragmentFilter.doFilter(ResponseFragmentFilter.java:4)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
     at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
     at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
     at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1686)
     at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
     at java.lang.Thread.run(Unknown Source)
0

Please sign in to leave a comment.