diff --git a/tools/deployment/common/kibana-selenium.sh b/tools/deployment/common/kibana-selenium.sh new file mode 100755 index 000000000..a23115e18 --- /dev/null +++ b/tools/deployment/common/kibana-selenium.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +export KIBANA_USER="admin" +export KIBANA_PASSWORD="changeme" +export KIBANA_LOGSTASH_URI="kibana.osh-infra.svc.cluster.local/app/kibana#/discover?_g=()&_a=(columns:!(_source),index:'logstash-*',interval:auto,query:(match_all:()),sort:!('@timestamp',desc))" +export KIBANA_KERNEL_URI="kibana.osh-infra.svc.cluster.local/app/kibana#/discover?_g=()&_a=(columns:!(_source),index:'kernel-*',interval:auto,query:(match_all:()),sort:!('@timestamp',desc))" +export KIBANA_JOURNAL_URI="kibana.osh-infra.svc.cluster.local/app/kibana#/discover?_g=()&_a=(columns:!(_source),index:'journal-*',interval:auto,query:(match_all:()),sort:!('@timestamp',desc))" +python tools/gate/selenium/kibanaSelenium.py diff --git a/tools/deployment/multinode/kibana-selenium.sh b/tools/deployment/multinode/kibana-selenium.sh new file mode 120000 index 000000000..d5114e2cc --- /dev/null +++ b/tools/deployment/multinode/kibana-selenium.sh @@ -0,0 +1 @@ +../common/kibana-selenium.sh \ No newline at end of file diff --git a/tools/deployment/osh-infra-logging/kibana-selenium.sh b/tools/deployment/osh-infra-logging/kibana-selenium.sh new file mode 120000 index 000000000..d5114e2cc --- /dev/null +++ b/tools/deployment/osh-infra-logging/kibana-selenium.sh @@ -0,0 +1 @@ +../common/kibana-selenium.sh \ No newline at end of file diff --git a/tools/gate/selenium/kibanaSelenium.py b/tools/gate/selenium/kibanaSelenium.py new file mode 100644 index 000000000..d17527f72 --- /dev/null +++ b/tools/gate/selenium/kibanaSelenium.py @@ -0,0 +1,88 @@ +import logging +import os +import sys +from selenium import webdriver +from selenium.webdriver.common.by import By +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.support import expected_conditions as EC +from selenium.webdriver.chrome.options import Options +from selenium.common.exceptions import TimeoutException +from threading import Thread + +logger = logging.getLogger('Kibana Selenium Tests') +logger.setLevel(logging.DEBUG) +ch = logging.StreamHandler() +ch.setLevel(logging.DEBUG) +formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') + +ch.setFormatter(formatter) +logger.addHandler(ch) + +# Get Grafana admin user name +if "KIBANA_USER" in os.environ: + kibana_user = os.environ['KIBANA_USER'] + logger.info('Found Kibana username') +else: + logger.critical('Kibana username environment variable not set') + sys.exit(1) + +if "KIBANA_PASSWORD" in os.environ: + kibana_password = os.environ['KIBANA_PASSWORD'] + logger.info('Found Kibana password') +else: + logger.critical('Kibana password environment variable not set') + sys.exit(1) + +if "KIBANA_JOURNAL_URI" in os.environ: + kibana_journal_uri = os.environ['KIBANA_JOURNAL_URI'] + logger.info('Found Kibana Journal URI') +else: + logger.critical('Kibana Journal URI environment variable not set') + sys.exit(1) + +if "KIBANA_KERNEL_URI" in os.environ: + kibana_kernel_uri = os.environ['KIBANA_KERNEL_URI'] + logger.info('Found Kibana Kernel URI') +else: + logger.critical('Kibana Kernel URI environment variable not set') + sys.exit(1) + +if "KIBANA_LOGSTASH_URI" in os.environ: + kibana_logstash_uri = os.environ['KIBANA_LOGSTASH_URI'] + logger.info('Found Kibana Logstash URI') +else: + logger.critical('Kibana Logstash URI environment variable not set') + sys.exit(1) + +options = Options() +options.add_argument('--headless') +options.add_argument('--no-sandbox') +options.add_argument('--window-size=1920x1080') + +browser = webdriver.Chrome('/etc/selenium/chromedriver', chrome_options=options) +url = "http://{0}:{1}@{2}".format(kibana_user, kibana_password, kibana_journal_uri) +browser.get(url) + +WebDriverWait(browser, 60).until( + EC.presence_of_element_located((By.XPATH, '//*[@id="kibana-body"]/div[1]/div/div/div[3]/discover-app/div/div[2]/div[2]/div/div[2]/div[2]/doc-table/div/table/tbody/tr[1]/td[2]')) +) +browser.save_screenshot('/tmp/artifacts/Kibana_JournalIndex.png') + +browser = webdriver.Chrome('/etc/selenium/chromedriver', chrome_options=options) +url = "http://{0}:{1}@{2}".format(kibana_user, kibana_password, kibana_kernel_uri) +browser.get(url) + +WebDriverWait(browser, 60).until( + EC.presence_of_element_located((By.XPATH, '//*[@id="kibana-body"]/div[1]/div/div/div[3]/discover-app/div/div[2]/div[2]/div/div[2]/div[2]/doc-table/div/table/tbody/tr[1]/td[2]')) +) +browser.save_screenshot('/tmp/artifacts/Kibana_KernelIndex.png') + +browser = webdriver.Chrome('/etc/selenium/chromedriver', chrome_options=options) +url = "http://{0}:{1}@{2}".format(kibana_user, kibana_password, kibana_logstash_uri) +browser.get(url) + +WebDriverWait(browser, 60).until( + EC.presence_of_element_located((By.XPATH, '//*[@id="kibana-body"]/div[1]/div/div/div[3]/discover-app/div/div[2]/div[2]/div/div[2]/div[2]/doc-table/div/table/tbody/tr[1]/td[2]')) +) + +browser.save_screenshot('/tmp/artifacts/Kibana_LogstashIndex.png') diff --git a/zuul.d/jobs.yaml b/zuul.d/jobs.yaml index 7fce1ed3a..38420c4e9 100644 --- a/zuul.d/jobs.yaml +++ b/zuul.d/jobs.yaml @@ -65,6 +65,7 @@ - ./tools/deployment/multinode/grafana-selenium.sh - ./tools/deployment/multinode/nagios-selenium.sh - ./tools/deployment/multinode/prometheus-selenium.sh + - ./tools/deployment/multinode/kibana-selenium.sh - job: name: openstack-helm-infra-tenant-ceph @@ -128,6 +129,7 @@ - ./tools/deployment/osh-infra-logging/055-elasticsearch-ldap.sh - ./tools/deployment/osh-infra-logging/060-fluent-logging.sh - ./tools/deployment/osh-infra-logging/070-kibana.sh + - ./tools/deployment/osh-infra-logging/kibana-selenium.sh - job: name: openstack-helm-infra-aio-monitoring