jenkinsci/build-monitor-plugin

Missing style.css file

michelgasser opened this issue · 10 comments

Something is broken with the build-monitor-plugin. See the attached screenshot. It seems like the request for the actual stylesheet gets a 404 response which then leaves us with a monitor view that is not really readable.

image

Hi @michelgasser and thanks for reporting this.
Have you tried loading the file at https://{your-jeknins-server}/build-monitor-plugin/style.css directly?

If so, does the content seem right?
Since the MIME type is described as text/html perhaps there's some proxy server between you and your Jenkins that's serving an error page instead of the CSS? (just guessing here)

I can't find the style.css file on the file system either:

[root@ci-std-i _data]# find plugins/build-monitor-plugin/ -name style.css
[root@ci-std-i _data]#

Here is the list of all *.css files:

[root@ci-std-i _data]# find plugins/build-monitor-plugin/ -name *.css
plugins/build-monitor-plugin/vendor/angular-slider-5.4.0/rzslider.css
plugins/build-monitor-plugin/vendor/angular-slider-5.4.0/rzslider.min.css
plugins/build-monitor-plugin/styles/angular-slider.css
plugins/build-monitor-plugin/styles/bootstrap-combined.2.3.2.min.css
plugins/build-monitor-plugin/styles/normalize.css
plugins/build-monitor-plugin/themes/industrial.css
[root@ci-std-i _data]#

same here.
log:

2021-11-21 12:54:06.251+0000 [id=207]   WARNING h.i.i.InstallUncaughtExceptionHandler#handleException: Caught unhandled exception with ID 0c77f7ac-cb7a-4385-8414-dc4fc0e7ddcb
java.lang.NoSuchMethodError: com.github.sommeri.less4j.core.parser.LessLexer.getEOFToken()Lorg/antlr/runtime/Token;
        at com.github.sommeri.less4j.core.parser.LessLexer.nextToken(LessLexer.java:249)
        at com.github.sommeri.less4j.core.parser.CollectorTokenSource.nextToken(ANTLRParser.java:202)
        at com.github.sommeri.less4j.core.parser.CollectorTokenSource.nextToken(ANTLRParser.java:183)
        at org.antlr.runtime.BufferedTokenStream.fetch(BufferedTokenStream.java:133)
        at org.antlr.runtime.BufferedTokenStream.sync(BufferedTokenStream.java:127)
        at org.antlr.runtime.CommonTokenStream.consume(CommonTokenStream.java:67)
        at org.antlr.runtime.BaseRecognizer.match(BaseRecognizer.java:106)
        at com.github.sommeri.less4j.core.parser.LessParser.imports(LessParser.java:1678)
        at com.github.sommeri.less4j.core.parser.LessParser.top_level_element(LessParser.java:4869)
        at com.github.sommeri.less4j.core.parser.LessParser.styleSheet(LessParser.java:1194)
        at com.github.sommeri.less4j.core.parser.ANTLRParser$InputType$6.parseTree(ANTLRParser.java:168)
        at com.github.sommeri.less4j.core.parser.ANTLRParser.parse(ANTLRParser.java:72)
        at com.github.sommeri.less4j.core.parser.ANTLRParser.parseStyleSheet(ANTLRParser.java:36)
        at com.github.sommeri.less4j.core.ThreadUnsafeLessCompiler.toAntlrTree(ThreadUnsafeLessCompiler.java:127)
        at com.github.sommeri.less4j.core.ThreadUnsafeLessCompiler.doCompile(ThreadUnsafeLessCompiler.java:101)
        at com.github.sommeri.less4j.core.ThreadUnsafeLessCompiler.compile(ThreadUnsafeLessCompiler.java:85)
        at com.github.sommeri.less4j.core.ThreadUnsafeLessCompiler.compile(ThreadUnsafeLessCompiler.java:59)
        at com.github.sommeri.less4j.core.DefaultLessCompiler.compile(DefaultLessCompiler.java:50)
        at com.smartcodeltd.jenkinsci.plugin.assetbundler.filters.LessCSS.cssFrom(LessCSS.java:79)
        at com.smartcodeltd.jenkinsci.plugin.assetbundler.filters.LessCSS.compiledAndCachedIfNeeded(LessCSS.java:65)
        at com.smartcodeltd.jenkinsci.plugin.assetbundler.filters.LessCSS.sendCSS(LessCSS.java:54)
        at com.smartcodeltd.jenkinsci.plugin.assetbundler.filters.LessCSS.doFilter(LessCSS.java:45)
        at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:153)
        at jenkins.security.ResourceDomainFilter.doFilter(ResourceDomainFilter.java:80)
        at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:153)
        at jenkins.telemetry.impl.UserLanguages$AcceptLanguageFilter.doFilter(UserLanguages.java:128)
        at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:153)
        at jenkins.metrics.impl.MetricsFilter.doFilter(MetricsFilter.java:125)
        at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:153)
        at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:159)
        at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
        at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
        at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:117)
        at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
        at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
        at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:92)
        at jenkins.security.AcegiSecurityExceptionFilter.doFilter(AcegiSecurityExceptionFilter.java:52)
        at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)
        at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:53)
        at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)
        at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)
        at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)
        at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)
        at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)
        at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)
        at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:133)
        at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:92)
        at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)
        at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218)
        at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212)
        at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)
        at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:97)
        at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)
        at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)
        at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)
        at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:62)
        at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)
        at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:109)
        at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171)
        at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
        at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
        at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:51)
        at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
        at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
        at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:85)
        at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
        at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
        at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)
        at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
        at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
        at jenkins.security.SuspiciousRequestFilter.doFilter(SuspiciousRequestFilter.java:35)
        at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
        at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:578)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
        at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
        at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
        at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1434)
        at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501)
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
        at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1349)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
        at org.eclipse.jetty.server.Server.handle(Server.java:516)
        at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:388)
        at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:633)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:380)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
        at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
        at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:386)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
        at java.lang.Thread.run(Thread.java:748)
basil commented

What version are you all using? I can't reproduce any problems with the latest version (1.13+build.202111201725).

On my jenkins test server I just installed the latest version 1.13+build.202111201725 and I have the same problem.
But otherwise I cannot reproduce the problem with the acceptance tests on the branch release-1.13+build.202111201725.

I have the same error in the logs

java.lang.NoSuchMethodError: 'org.antlr.runtime.Token com.github.sommeri.less4j.core.parser.LessLexer.getEOFToken()'
...

I'll try to investigate the problem tonight. I suspect there is a conflict with another plugin.

basil commented

Interesting. I suppose another plugin earlier on the class path could be providing a conflicting version of Less4j/Antlr? What is the output of

find ${JENKINS_HOME}/plugins -name 'less4j*.jar'
find ${JENKINS_HOME}/plugins -name 'antlr*.jar'

?

basil commented

Obviously providing me with steps to reproduce the problem would help, as I cannot reproduce the issue on a real Jenkins installation with the latest version. Another thing to try would be installing various recent releases from https://plugins.jenkins.io/build-monitor-plugin/#releases and letting me know which release the problem started occurring.

@basil Let me have a look at it, less4j is very old and use an old version of antlr. I think it would be better to transform less to css at compile time instead of runtime and get rid of less4j completely.