diff --git a/README.md b/README.md
index 6df91ca9..93cd35ec 100644
--- a/README.md
+++ b/README.md
@@ -30,7 +30,7 @@
Request Feature
·
Support
-
Like KRR? Please ⭐ this repository to show your support!
+
Like KRR? Please ⭐ this repository to show your support!
@@ -119,7 +119,7 @@ Read more about [how KRR works](#how-krr-works)
-## Installation
+## Installation
### Requirements
@@ -130,7 +130,7 @@ KRR requires Prometheus 2.26+, [kube-state-metrics](https://github.com/kubernete
No setup is required if you use kube-prometheus-stack or Robusta's Embedded Prometheus.
If you have a different setup, make sure the following metrics exist:
-
+
- `container_cpu_usage_seconds_total`
- `container_memory_working_set_bytes`
- `kube_replicaset_owner`
@@ -179,7 +179,7 @@ You can install using brew (see above) on [WSL2](https://docs.brew.sh/Homebrew-o
Airgapped Installation (Offline Environments)
-
+
You can download pre-built binaries from Releases or use the prebuilt Docker container. For example, the container for version 1.8.3 is:
```
@@ -258,7 +258,7 @@ We highly recommend using the [free Robusta SaaS platform](https://platform.robu
Basic usage
-
+
```sh
krr simple
```
@@ -266,7 +266,7 @@ krr simple
Tweak the recommendation algorithm (strategy)
-
+
Most helpful flags:
- `--cpu-min` Sets the minimum recommended cpu value in millicores
@@ -347,6 +347,7 @@ Currently KRR ships with a few formatters to represent the scan data:
- `yaml`
- `pprint` - data representation from python's pprint library
- `csv` - export data to a csv file in the current directory
+- `html`
To run a strategy with a selected formatter, add a `-f` flag. Usually this should be combined with `--fileoutput ` to write clean output to file without logs:
diff --git a/robusta_krr/core/runner.py b/robusta_krr/core/runner.py
index 76e1474a..9a8b1a81 100644
--- a/robusta_krr/core/runner.py
+++ b/robusta_krr/core/runner.py
@@ -120,8 +120,8 @@ def _process_result(self, result: Result) -> None:
file_name = settings.slack_output
with open(file_name, "w") as target_file:
- # don't use rich when writing a csv to avoid line wrapping etc
- if settings.format == "csv":
+ # don't use rich when writing a csv or html to avoid line wrapping etc
+ if settings.format == "csv" or settings.format == "html":
target_file.write(formatted)
else:
console = Console(file=target_file, width=settings.width)
diff --git a/robusta_krr/formatters/__init__.py b/robusta_krr/formatters/__init__.py
index e34a25f1..7e1d1641 100644
--- a/robusta_krr/formatters/__init__.py
+++ b/robusta_krr/formatters/__init__.py
@@ -3,3 +3,4 @@
from .table import table
from .yaml import yaml
from .csv import csv
+from .html import html
diff --git a/robusta_krr/formatters/html.py b/robusta_krr/formatters/html.py
new file mode 100644
index 00000000..a028d969
--- /dev/null
+++ b/robusta_krr/formatters/html.py
@@ -0,0 +1,12 @@
+from rich.console import Console
+
+from robusta_krr.core.abstract import formatters
+from robusta_krr.core.models.result import Result
+from .table import table
+
+@formatters.register("html")
+def html(result: Result) -> str:
+ console = Console(record=True)
+ table_output = table(result)
+ console.print(table_output)
+ return console.export_html(inline_styles=True)