diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index d437f9899c..69b0934530 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -68,3 +68,22 @@ jobs: with: name: body path: ci-benchmark/body.md + + - name: Generate BMF JSON + working-directory: ci-benchmark + run: python generate_bmf_json.py wrk-output.txt + + - uses: bencherdev/bencher@main + - name: Push to Bencher.dev + run: | + bencher run \ + --project tailcall \ + --token '${{ secrets.BENCHER_API_TOKEN }}' \ + --branch '${{ github.head_ref }}' \ + --branch-start-point '${{ github.base_ref }}' \ + --branch-start-point-hash '${{ github.base_sha }}' \ + --testbed ubuntu-latest \ + --adapter json \ + --err \ + --file "results.json" + --github-actions '${{ secrets.GITHUB_TOKEN }}' \ diff --git a/ci-benchmark/generate_bmf_json.py b/ci-benchmark/generate_bmf_json.py new file mode 100644 index 0000000000..b7b837dd14 --- /dev/null +++ b/ci-benchmark/generate_bmf_json.py @@ -0,0 +1,33 @@ +import json +import re + +def parse_wrk_output(file_path): + data = {} + with open(file_path, 'r') as file: + content = file.readlines() + for line in content: + if "Latency" in line: + # Example: Latency 88.0ms, 87.42ms, 88.88ms + match = re.search(r"Latency (\d+\.\d+)ms, (\d+\.\d+)ms, (\d+\.\d+)ms", line) + if match: + data['latency'] = float(match.group(1)) + data['latency_lower'] = float(match.group(2)) + data['latency_upper'] = float(match.group(3)) + return data + +def generate_bmf_json(data): + bmf_json = { + "my_benchmark": { + "latency": { + "value": data["latency"], + "lower_value": data["latency_lower"], + "upper_value": data["latency_upper"] + } + } + } + return bmf_json +# Example usage +wrk_data = parse_wrk_output('wrk_output.txt') +bmf_data = generate_bmf_json(wrk_data) +with open('results.json', 'w') as f: + json.dump(bmf_data, f, indent=4)