Browser item timeout is ignored

XMLWordPrintable

    • Type: Problem report
    • Resolution: Unresolved
    • Priority: Trivial
    • None
    • Affects Version/s: 7.0.24
    • Component/s: Server (S)
    • None
    • Environment:
      * Zabbix server 7.0.24, Alpine Linux (Docker)
      * Selenium Standalone Chromium 4.20.0
      * Chromium 124.0.6367.78
    • Support backlog
    • 1

      The configured Browser item timeout is ignored for WebDriver page loads, so a hanging site can block browser.navigate() for up to 300 seconds per call instead of the expected 60 seconds.

      Steps to reproduce:

      1. Configure Zabbix server with WebDriverURL pointing to a Selenium instance and StartBrowserPollers=1
      2. Set up a target HTTP server that delays responses indefinitely (or longer than 300s)
        services:
          slow-http:
            image: python:3.12-alpine
            restart: unless-stopped
            command:
              - python3
              - -c
              - |
                import http.server, time, os
                delay = int(os.environ.get('DELAY_SECONDS', '600'))
                class SlowHandler(http.server.BaseHTTPRequestHandler):
                    def do_GET(self):
                        print(f'Got request for {self.path}, sleeping {delay}s...', flush=True)
                        time.sleep(delay)
                        self.send_response(200)
                        self.send_header('Content-Type', 'text/html')
                        self.end_headers()
                        self.wfile.write(b'<html><body>Finally responded</body></html>')
                    def log_message(self, format, *args):
                        print(f'{self.client_address[0]} - {format % args}', flush=True)
                http.server.HTTPServer(('0.0.0.0', 8888), SlowHandler).serve_forever()
            ports:
              - "8888:8888"
            environment:
              DELAY_SECONDS: "600"
        
      3. Create a host monitored directly by the Zabbix server
      4. Create a Browser item with Timeout: 60s

        and the following script:
          var browser = new Browser(Browser.chromeOptions());
          try {
           browser.navigate("http://slow-target:8888/");
           var result = {title: browser.getTitle()};
          } catch(e) {
           var result = {error: e.message};
          } finally {
           browser.navigate("http://slow-target:8888/logout");
           return JSON.stringify(result);
          }
          
      5. Wait for the browser poller to pick up the item

      Result:

      Expected:
      Timeout after 60s

            Assignee:
            Zabbix Development Team
            Reporter:
            Michal Kudlacz
            Votes:
            1 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated: