summaryrefslogtreecommitdiff
path: root/robusta_krr/formatters
diff options
context:
space:
mode:
authorПавел Жуков <33721692+LeaveMyYard@users.noreply.github.com>2023-02-24 17:27:02 +0200
committerПавел Жуков <33721692+LeaveMyYard@users.noreply.github.com>2023-02-24 17:27:02 +0200
commitd65125aeafb4679929a64e2beac72aee379a36f6 (patch)
treef4bcd19b66b23671d05e9c816e03f66a9ec9404d /robusta_krr/formatters
parent2998e2781c99fe63185a90f1591451c3593d9aed (diff)
Implement more formatters, fix verbose flag
Diffstat (limited to 'robusta_krr/formatters')
-rw-r--r--robusta_krr/formatters/__init__.py2
-rw-r--r--robusta_krr/formatters/table.py42
-rw-r--r--robusta_krr/formatters/text.py20
-rw-r--r--robusta_krr/formatters/yaml.py4
4 files changed, 46 insertions, 22 deletions
diff --git a/robusta_krr/formatters/__init__.py b/robusta_krr/formatters/__init__.py
index ca0b95d..cdb12bb 100644
--- a/robusta_krr/formatters/__init__.py
+++ b/robusta_krr/formatters/__init__.py
@@ -1,3 +1,3 @@
from .json import JSONFormatter
-from .text import TextFormatter
+from .table import TableFormatter
from .yaml import YAMLFormatter
diff --git a/robusta_krr/formatters/table.py b/robusta_krr/formatters/table.py
new file mode 100644
index 0000000..df2fb88
--- /dev/null
+++ b/robusta_krr/formatters/table.py
@@ -0,0 +1,42 @@
+from __future__ import annotations
+
+from robusta_krr.core.formatters import BaseFormatter
+from robusta_krr.core.result import Result, ResourceType
+
+from rich.table import Table
+
+
+class TableFormatter(BaseFormatter):
+ """Formatter for text output."""
+
+ __display_name__ = "table"
+
+ def format(self, result: Result) -> Table:
+ """Format the result as text.
+
+ :param result: The result to format.
+ :type result: :class:`core.result.Result`
+ :returns: The formatted results.
+ :rtype: str
+ """
+
+ table = Table(show_header=True, header_style="bold magenta", title=f"Scan result ({result.score} points)")
+
+ table.add_column("Number", justify="right", style="dim", no_wrap=True)
+ table.add_column("Name", style="cyan")
+ for resource in ResourceType:
+ table.add_column(f"{resource.name} Requests", style="green")
+ table.add_column(f"{resource.name} Limits", style="green")
+
+ for i, item in enumerate(result.scans):
+ table.add_row(
+ str(i),
+ f"{item.object.kind} {item.object.namespace}/{item.object.name}",
+ *[
+ f"{getattr(item.current, selector)[resource]} -> {getattr(item.recommended, selector)[resource]}"
+ for resource in ResourceType
+ for selector in ["requests", "limits"]
+ ],
+ )
+
+ return table
diff --git a/robusta_krr/formatters/text.py b/robusta_krr/formatters/text.py
deleted file mode 100644
index fa66bcb..0000000
--- a/robusta_krr/formatters/text.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from __future__ import annotations
-
-from robusta_krr.core.formatters import BaseFormatter
-from robusta_krr.core.result import Result
-
-
-class TextFormatter(BaseFormatter):
- """Formatter for text output."""
-
- __display_name__ = "text"
-
- def format(self, result: Result) -> str:
- """Format the result as text.
-
- :param result: The result to format.
- :type result: :class:`core.result.Result`
- :returns: The formatted results.
- :rtype: str
- """
- return "Example result."
diff --git a/robusta_krr/formatters/yaml.py b/robusta_krr/formatters/yaml.py
index 3ab1fa3..b9d7ca4 100644
--- a/robusta_krr/formatters/yaml.py
+++ b/robusta_krr/formatters/yaml.py
@@ -2,6 +2,8 @@ from __future__ import annotations
from robusta_krr.core.formatters import BaseFormatter
from robusta_krr.core.result import Result
+import yaml
+import json
class YAMLFormatter(BaseFormatter):
@@ -17,4 +19,4 @@ class YAMLFormatter(BaseFormatter):
:returns: The formatted results.
:rtype: str
"""
- raise NotImplementedError
+ return yaml.dump(json.loads(result.json()), sort_keys=False)