From dfb2d16ba9993d6700159b4e1903b64a4998d499 Mon Sep 17 00:00:00 2001 From: Jannis Mattheis Date: Tue, 14 Jun 2022 15:39:55 +0200 Subject: [PATCH] Add README --- .github/example.png | Bin 0 -> 44107 bytes README.md | 83 ++++++++++++++++++++++++++++++++++++++++++-- config.example.yml | 36 +++++++++++++++++++ 3 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 .github/example.png create mode 100644 config.example.yml diff --git a/.github/example.png b/.github/example.png new file mode 100644 index 0000000000000000000000000000000000000000..bf8fd6091fb29ac47777e712bc3bedaf70c64e26 GIT binary patch literal 44107 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 m$x%gNl4pCHj= 16 and a recent version of Yarn. +1. Install [oapi-codegen](https://github.com/deepmap/oapi-codegen) + ```bash + $ go install github.com/deepmap/oapi-codegen/cmd/oapi-codegen@v1.11.0 + ``` +1. Build the UI: + ```bash + $ (cd ui && yarn install && yarn build) + ``` +1. Run code generators (this downloads the swagger artifacts and generates the + server methods from the openapi spec) + ```bash + $ go generate ./... + ``` +1. Build with Go: + ```bash + $ go build + ``` + +## Config + +In the config the projects and dashboards are defined. See [example config with +comments](./config.example.yml). + +## API + +The API is documented via OpenAPI3, you can view the [raw spec](./openapi.yaml) +or +[swagger ui](https://editor.swagger.io/?url=https://raw.githubusercontent.com/FACT-Finder/perfably/main/openapi.yaml). +The Swagger UI is also served on `/docs/` on a running Perfably instance. diff --git a/config.example.yml b/config.example.yml new file mode 100644 index 0000000..1490be6 --- /dev/null +++ b/config.example.yml @@ -0,0 +1,36 @@ +# projects is a map from project name to an object when doing API calls, the +# project name inside the path must exist in this config. Projects doesn't +# share metrics. +projects: + example: + # Each project has a list of dashboards + dashboards: + - name: Overview + charts: + # The name of the Dashboard + - name: Request Durations + # (optional) The unit of the metrics in the dashboard. If set, the + # UI will dynamically select an appropriate unit to convert all + # metrics to. + # + # supported units: ns(nano seconds), us(microsecond), + # ms(millisecond), s(second), m(minute), h(hour) + unit: ms + # The metrics that the chart should contain. + metrics: + - add.avg + - delete.avg + - update.avg + - name: "code coverage" + metrics: + - loc.total + - loc.covered + other: + dashboards: + - name: Overview + charts: + - name: "Other request durations" + unit: ms + metrics: + - insert.avg + - delete.avg