mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-11-09 16:18:34 +01:00
87 lines
2.7 KiB
Nix
87 lines
2.7 KiB
Nix
{ lib, pkgs, ... }:
|
|
|
|
{
|
|
name = "prometheus-ui";
|
|
|
|
nodes = {
|
|
browser =
|
|
{ config, pkgs, ... }:
|
|
{
|
|
environment.systemPackages =
|
|
let
|
|
prometheusSeleniumScript =
|
|
pkgs.writers.writePython3Bin "prometheus-selenium-script"
|
|
{
|
|
libraries = with pkgs.python3Packages; [ selenium ];
|
|
}
|
|
''
|
|
from selenium import webdriver
|
|
from selenium.webdriver.common.by import By
|
|
from selenium.webdriver.firefox.options import Options
|
|
from selenium.webdriver.support.ui import WebDriverWait
|
|
|
|
options = Options()
|
|
options.add_argument("--headless")
|
|
service = webdriver.FirefoxService(executable_path="${lib.getExe pkgs.geckodriver}") # noqa: E501
|
|
|
|
driver = webdriver.Firefox(options=options, service=service)
|
|
driver.implicitly_wait(10)
|
|
driver.get("http://prometheus:9090/")
|
|
|
|
wait = WebDriverWait(driver, 60)
|
|
|
|
assert len(driver.find_elements(By.CLASS_NAME, "mantine-AppShell-header")) > 0 # noqa: E501
|
|
assert len(driver.find_elements(By.CLASS_NAME, "mantine-AppShell-main")) > 0 # noqa: E501
|
|
|
|
driver.close()
|
|
'';
|
|
in
|
|
with pkgs;
|
|
[
|
|
curl
|
|
firefox-unwrapped
|
|
geckodriver
|
|
prometheusSeleniumScript
|
|
];
|
|
};
|
|
|
|
prometheus =
|
|
{ config, pkgs, ... }:
|
|
{
|
|
networking.firewall.allowedTCPPorts = [ config.services.prometheus.port ];
|
|
|
|
services.prometheus = {
|
|
enable = true;
|
|
globalConfig.scrape_interval = "2s";
|
|
scrapeConfigs = [
|
|
{
|
|
job_name = "prometheus";
|
|
static_configs = [
|
|
{
|
|
targets = [
|
|
"prometheus1:${toString config.services.prometheus.port}"
|
|
"prometheus2:${toString config.services.prometheus.port}"
|
|
];
|
|
}
|
|
];
|
|
}
|
|
];
|
|
};
|
|
};
|
|
};
|
|
|
|
testScript = ''
|
|
prometheus.wait_for_unit("prometheus")
|
|
prometheus.wait_for_open_port(9090)
|
|
prometheus.wait_until_succeeds("curl -sSf http://localhost:9090/-/healthy")
|
|
|
|
browser.systemctl("start network-online.target")
|
|
browser.wait_for_unit("network-online.target")
|
|
|
|
browser.succeed("curl -kLs http://prometheus:9090/query | grep 'Prometheus Time Series Collection and Processing Server'")
|
|
|
|
# Ensure the application is actually rendered by the Javascript
|
|
browser.succeed("PYTHONUNBUFFERED=1 prometheus-selenium-script")
|
|
'';
|
|
}
|