{"id":13581502,"url":"https://github.com/vk-en/fioplot-bs","last_synced_at":"2026-01-14T14:33:38.726Z","repository":{"id":41110967,"uuid":"507926047","full_name":"vk-en/fioplot-bs","owner":"vk-en","description":"fioplot-bs is a utility that allows you to create graphs and xlsx tables based on the results of the performance testing utility - FIO.","archived":false,"fork":false,"pushed_at":"2022-08-01T10:31:22.000Z","size":1270,"stargazers_count":13,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-06T10:42:51.459Z","etag":null,"topics":["bandwidth","fio","fio-benchmark-test","fio-plot","fio-report","fio-test-content-library","fio-tool","fiograph","fioplot","golang","performance-analysis","performance-barchart","performance-metrics","performance-reports","performance-visualization","plot","visualization-performance"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vk-en.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-06-27T13:43:22.000Z","updated_at":"2025-02-24T01:19:51.000Z","dependencies_parsed_at":"2022-07-21T04:48:54.374Z","dependency_job_id":null,"html_url":"https://github.com/vk-en/fioplot-bs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/vk-en/fioplot-bs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vk-en%2Ffioplot-bs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vk-en%2Ffioplot-bs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vk-en%2Ffioplot-bs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vk-en%2Ffioplot-bs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vk-en","download_url":"https://codeload.github.com/vk-en/fioplot-bs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vk-en%2Ffioplot-bs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28423512,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T13:30:50.153Z","status":"ssl_error","status_checked_at":"2026-01-14T13:29:08.907Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bandwidth","fio","fio-benchmark-test","fio-plot","fio-report","fio-test-content-library","fio-tool","fiograph","fioplot","golang","performance-analysis","performance-barchart","performance-metrics","performance-reports","performance-visualization","plot","visualization-performance"],"created_at":"2024-08-01T15:02:03.729Z","updated_at":"2026-01-14T14:33:38.708Z","avatar_url":"https://github.com/vk-en.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# fioplot-bs\n\n\u003cp align=\"center\"\u003e\u003cimg width=\"650\" src=\"./fioplot-bs.svg\" alt=\"fioplot-bs logo\"\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/vk-en/fioplot-bs/actions/workflows/build.yml\"\u003e\u003cimg src=\"https://github.com/vk-en/fioplot-bs/actions/workflows/build.yml/badge.svg\" alt=\"Build Status\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://goreportcard.com/report/github.com/vk-en/fioplot-bs\"\u003e\u003cimg src=\"https://goreportcard.com/badge/github.com/vk-en/fioplot-bs\" alt=\"Go Report Card\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://opensource.org/licenses/BSD-3-Clause\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-bsd-orange.svg\" alt=\"Licenses\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://pkg.go.dev/github.com/vk-en/fioplot-bs\"\u003e\u003cimg src=\"https://img.shields.io/badge/go.dev-reference-007d9c?logo=go\u0026logoColor=white\" alt=\"go.dev\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n## Introduction\n\nfioplot-bs is a utility that allows you to create graphs and xlsx tables based\non the results of the performance testing utility - [FIO](https://fio.readthedocs.io/en/latest/fio_doc.html).\n\n## Features and functionality\n\n1. Compares the results of different tests with the same patterns, creating a general report.\n\n   \u003e This is very convenient if you compare the performance of different software solutions using the same hardware and the same testing patterns (fio config). How it works will be written in the _\"How it works\"_ section.\n\n2. Generates CSV tables for each test for visual convenience.\n\n   \u003e Basic functionality. Generates a CSV table for each \\*.json file with FIO results.\n\n3. Able to work with log files.\n\n   \u003e In the current version of the program, it is not yet possible to generate graphs for results from different tests with common patterns. But it is possible to turn the log files for bandwich and latency obtained from FIO into visual diagrams for a specific test. This is useful for finding/analyzing/detecting latency and performance spikes. Also, there is no support yet for pattern charts with joint randrw/rw loads. Since the resolution of the images has been increased, the time of plotting has also increased.\n\n4. Draws graphs and charts in various formats.\n\n   \u003e At the moment, graphs and charts can be created in the following formats: `.png` and `.svg`\n\n5. Able to generate reports with a graphical representation in the form of xlsx tables.\n   \u003e This is done for the convenience of uploading results to cloud storages, such as google drive. Such a report has a separate page for each type (Performance, IOPS, Latency, and so on), as well as a separate page with graphs from data from all pages.\n\n## How it works\n\n### Preparation and dependencies\n\nTo build and run the utility, you need the golang package on your system (you can download it on [the official website here](https://go.dev/dl/)).\n\n### Installation\n\n```bash\ngit clone https://github.com/vk-en/fioplot-bs.git\n\ncd fioplot-bs\n\ngo build -v\n\n./fioplot-bs -h\n```\n\n### Example usage\n\nBefore you need this utility, you need to perform the required testing using the FIO utility.\nFor this test, you need to run the FIO command with the options: `--output-format=normal,json --output=TestA.json` or just `--output-format=json --output=TestB.json`. For example:\n\n```bash\nfio /fio_config.cfg --output-format=normal,json --output=TestA.json\n```\n\n\u003e Where `/fio_config.cfg` this is configuration for tests. How to create test configurations for FIO can be [found here](https://fio.readthedocs.io/en/latest/fio_doc.html#job-file-format).\n\nFurther, when the results are already available, you can put them in one directory and specify this directory in fioplot-bs as the directory where the results are stored in the form of JSON (For example: --catalog=/home/fioResults/).\n\nExpected file tree for the directory with FIO results from which graphs/charts and reports will be built:\n\n```bash\nls -l /home/fioResults/\n\u003e -rw-r--r--  1 user  staff  899793 Apr  7 07:18 TestA.json\n\u003e -rw-r--r--  1 user  staff  899234 Apr  7 09:10 TestB.json\n\u003e -rw-r--r--  1 user  staff  812257 Apr  7 11:20 TestC.json\n\u003e drwxr-xr-x 87 user  staff    2784 Apr 29 17:49 LogsTestA\n\u003e drwxr-xr-x 87 user  staff    2784 Apr 29 17:49 LogsTestB\n\u003e drwxr-xr-x 87 user  staff    2784 Apr 29 17:49 LogsTestC\n```\n\nWhere the logs directories looks something like this:\n\n```bash\nls -l /home/fioResults/LogsTestA\n\n\u003e -rw-r--r--  1 user  staff  14658 Dec 13  2021 write-64k-0_bw.376.log\n\u003e -rw-r--r--  1 user  staff  15219 Dec 13  2021 write-64k-0_clat.376.log\n\u003e -rw-r--r--  1 user  staff  13221 Dec 13  2021 write-64k-0_iops.376.log\n\u003e -rw-r--r--  1 user  staff  15220 Dec 13  2021 write-64k-0_lat.376.log\n\u003e -rw-r--r--  1 user  staff  13959 Dec 13  2021 write-64k-0_slat.376.log\n...\n\n```\n\n**fioplot-bs usage example:**\n\n```bash\n./fioplot-bs --name=MyFirstTest --catalog=/home/fioResults --loggraphs\n```\n\nWhere:\n\n- `--name` - Specifies the common name of the test (Ex. `Comparison-of-market-storage-leaders`). Specified **without** spaces. And serves as the name of the directory where the results will be generated\n\n- `--catalog` - The directory where you put the results from different tests as JSON files and folders with logs(if have). (The extension must also be `*.json`)\n\n- `--loggraphs` - The flag for creating graphs from log files. If you don't have logging files, don't specify it.\n\nUpon successful completion, a directory with results will appear with the following hierarchy:\n\n```text\nMyFirstTest/\n├── bar-charts\n│   └── ...\n├── csv-tables\n│   └── ...\n├── log-graphs\n│   └── ...\n└── MyFirstTest.xlsx\n```\n\n**Random sample from graph and charts for example:**\n\n\u003ca href=\"img/bw-example.png\"\u003e\u003cp align=\"left\"\u003e\u003cimg width=\"950\" src=\"img/bw-example.png\" alt=\"fioplot-bs example\"\u003e\u003c/p\u003e\u003c/a\u003e\n\n\u003ca href=\"img/slat-example.png\"\u003e\u003cp align=\"left\"\u003e\u003cimg width=\"950\" src=\"img/slat-example.png\" alt=\"fioplot-bs example\"\u003e\u003c/p\u003e\u003c/a\u003e\n\n\u003ca href=\"https://svgshare.com/i/ihA.svg\"\u003e\u003cp align=\"left\"\u003e\u003cimg width=\"950\" src=\"https://svgshare.com/i/ihA.svg\" alt=\"fioplot-bs example\"\u003e\u003c/p\u003e\u003c/a\u003e\n\nYou can also see the entire list of available options and commands by running the command:\n\n```bash\n./fioplot-bs --help\n```\n\n## For Developers\n\n### Get packages\n\n```bash\ngo get github.com/vk-en/fioplot-bs/pkg/barchart\ngo get github.com/vk-en/fioplot-bs/pkg/xlsxchart\ngo get github.com/vk-en/fioplot-bs/pkg/csvtable\n```\n\n### Example with code\n\nHere is a minimal example usage that will create charts or report.\n\n```go\npackage main\n\nimport (\n    \"fmt\"\n    \"strings\"\n\n    \"github.com/vk-en/fioplot-bs/pkg/barchart\"\n    \"github.com/vk-en/fioplot-bs/pkg/csvtable\"\n)\n\nfunc main() {\n    var csvFiles []string\n    var jsonFiles []string{\"TestA.json\", \"TestB.json\", \"TestC.json\"}\n\n    for _, json := range jsonFiles {\n        csvFileName := strings.Replace(json, \".json\", \".csv\", -1)\n        if err := csvtable.ConvertJSONtoCSV(json, csvFileName); err != nil {\n            fmt.Println(err)\n        return\n        }\n        csvFiles = append(csvFiles, csvFileName)\n    }\n\n    if err := barchart.CreateBarCharts(csvFiles, \"MyFirstBarCharts\", \"/home/MyReport/\", \"svg\"); err != nil {\n        fmt.Printf(\"could not create barCharts.\\n Error: %v\\n\", err)\n    } else {\n        fmt.Println(\"Results and graphs were generated successfully!\")\n    }\n}\n```\n\n## Problems\n\n- Inaccurate merging of log files, sometimes there is a slight difference between streams in time. It is necessary to implement rounding to the second. For this reason, the data on the graph may not always match the description below it.\n\n## Contributing\n\nContributions are welcome! Open a pull request to fix a bug, or open an issue to discuss a new feature or change.\n\n## Licenses\n\nThis program is under the terms of the BSD 3-Clause License. See [https://opensource.org/licenses/BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause).\n\ngopher.{ai,svg,png} was created by [Takuya Ueda](https://twitter.com/tenntenn). Licensed under the [Creative Commons 3.0 Attributions license](http://creativecommons.org/licenses/by/3.0/).\n\nThis utilities uses packages [Gonum Plot](https://github.com/gonum/plot) to generate barcharts and graphs. \"Gonum Plot\" licensed under the [BSD 3-Clause License](https://opensource.org/licenses/BSD-3-Clause).\n\nThis utilities uses package [Excelize](https://github.com/qax-os/excelize) to generate xlsx file. \"Excelize\" licensed under the [BSD 3-Clause License](https://opensource.org/licenses/BSD-3-Clause).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvk-en%2Ffioplot-bs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvk-en%2Ffioplot-bs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvk-en%2Ffioplot-bs/lists"}