Implements a comprehensive admin dashboard for monitoring block storage Features: - Live metrics dashboard with HTMX auto-refresh - Prometheus datasource integration via Aetos pattern - Storage pool monitoring with capacity visualization - Capacity forecast using predict_linear() to identify pools at risk - Chart.js doughnut chart for volume/snapshot distribution - Responsive UI with Bootstrap grid layout - Configuration management via centralized config module - Support for both fake (development) and Prometheus datasources The capacity prediction feature analyzes 7 days of historical data to forecast when storage pools will run out of space within 30 days, helping administrators proactively manage storage resources. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> Change-Id: I3dc2676d0d247df242a16df5f32c219ee0d29f53 Signed-off-by: Victoria Martinez de la Cruz <victoria@redhat.com>
86 lines
2.5 KiB
TOML
86 lines
2.5 KiB
TOML
[build-system]
|
|
requires = ["pbr>=6.0.0", "setuptools>=64.0.0"]
|
|
build-backend = "pbr.build"
|
|
|
|
[project]
|
|
name = "grian-ui"
|
|
description = "A horizon dashboard plugin for telemetry visualization"
|
|
readme = "README.rst"
|
|
authors = [
|
|
{name = "OpenStack", email = "openstack-discuss@lists.openstack.org"},
|
|
]
|
|
requires-python = ">=3.11"
|
|
license = "Apache-2.0"
|
|
classifiers = [
|
|
"Environment :: OpenStack",
|
|
"Intended Audience :: Information Technology",
|
|
"Intended Audience :: System Administrators",
|
|
"Operating System :: POSIX :: Linux",
|
|
"Development Status :: 2 - Pre-Alpha",
|
|
"Programming Language :: Python",
|
|
"Programming Language :: Python :: Implementation :: CPython",
|
|
"Programming Language :: Python :: 3 :: Only",
|
|
"Programming Language :: Python :: 3",
|
|
"Programming Language :: Python :: 3.11",
|
|
"Programming Language :: Python :: 3.12",
|
|
"Programming Language :: Python :: 3.13",
|
|
"Programming Language :: Python :: 3.14",
|
|
]
|
|
dynamic = ["version"]
|
|
keywords = ["openstack", "horizon", "telemetry"]
|
|
|
|
[project.urls]
|
|
Homepage = "https://opendev.org/openstack/grian-ui"
|
|
Documentation = "https://docs.openstack.org/grian-ui/latest/"
|
|
Repository = "https://opendev.org/openstack/grian-ui"
|
|
Issues = "https://bugs.launchpad.net/grian-ui"
|
|
Changelog = "https://docs.openstack.org/releasenotes/grian-ui/"
|
|
|
|
[tool.stestr]
|
|
test_path = "./tests/grian_ui_tests/unit"
|
|
top_dir = "./"
|
|
|
|
[tool.ruff]
|
|
line-length = 79
|
|
target-version = "py310"
|
|
|
|
[tool.ruff.lint]
|
|
select = ["E4", "E7", "E9", "F", "G", "I", "LOG", "S", "UP", "W", "C90"]
|
|
external = ["H"]
|
|
ignore = [
|
|
# asserts used for type narrowing only
|
|
"S101",
|
|
# S104 Possible binding to all interfaces
|
|
"S104",
|
|
# S105/S106 Possible hardcoded password
|
|
"S105",
|
|
"S106",
|
|
# S110 try-except-pass — logged elsewhere
|
|
"S110",
|
|
# UP031 % format — defer f-string migration to a later pass
|
|
"UP031",
|
|
# UP032 f-string — defer migration to a later pass
|
|
"UP032",
|
|
]
|
|
|
|
[tool.ruff.lint.per-file-ignores]
|
|
"tests/grian_ui_tests/*" = ["S"]
|
|
"src/grian_ui/datasource/fake.py" = ["S311"]
|
|
|
|
[tool.ruff.lint.isort]
|
|
known-first-party = ["grian_ui"]
|
|
force-single-line = true
|
|
lines-after-imports = 2
|
|
lines-between-types = 1
|
|
section-order = ["future", "standard-library", "third-party", "first-party"]
|
|
# this is the default but just being explicit about the behavior
|
|
# in case that ever changes.
|
|
force-sort-within-sections = false
|
|
|
|
[tool.ruff.lint.mccabe]
|
|
max-complexity = 20
|
|
|
|
[tool.ruff.format]
|
|
quote-style = "preserve"
|
|
docstring-code-format = true
|