| defmodule Plausible.Ingestion.Counters.BufferTest do |
| use Plausible.DataCase, async: true |
| alias Plausible.Ingestion.Counters.Buffer |
|
|
| test "10s buckets are created from input datetime" do |
| |
| |
|
|
| test_input = [ |
| %{input: ~N[2023-02-14 01:00:00], bucket: ~U[2023-02-14 01:00:00Z]}, |
| %{input: ~N[2023-02-14 01:00:02], bucket: ~U[2023-02-14 01:00:00Z]}, |
| %{input: ~N[2023-02-14 01:00:05], bucket: ~U[2023-02-14 01:00:00Z]}, |
| %{input: ~N[2023-02-14 01:00:09], bucket: ~U[2023-02-14 01:00:00Z]}, |
| %{input: ~N[2023-02-14 01:00:09.123456], bucket: ~U[2023-02-14 01:00:00Z]}, |
| %{input: ~N[2023-02-14 01:00:10], bucket: ~U[2023-02-14 01:00:10Z]}, |
| %{input: ~N[2023-02-14 01:00:59], bucket: ~U[2023-02-14 01:00:50Z]}, |
| %{input: ~N[2023-02-14 01:20:09], bucket: ~U[2023-02-14 01:20:00Z]} |
| ] |
|
|
| for t <- test_input do |
| assert Buffer.bucket_10s(t.input) == DateTime.to_unix(t.bucket), |
| "#{t.input} must fall into #{t.bucket} but got #{Buffer.bucket_10s(t.input) |> DateTime.from_unix!()}" |
| end |
| end |
|
|
| test "aggregates metrics every 10 seconds", %{test: test} do |
| |
| |
| |
| |
|
|
| timestamps = [ |
| ~N[2023-02-14 01:00:59], |
| ~N[2023-02-14 01:01:01], |
| ~N[2023-02-14 01:01:03], |
| ~N[2023-02-14 01:01:09] |
| ] |
|
|
| buffer = Buffer.new(test) |
|
|
| for ts <- timestamps do |
| Buffer.aggregate(buffer, "metric", "example.com", ts, 0) |
| end |
|
|
| assert [ |
| {bucket1, "metric", "example.com", 0, 1}, |
| {bucket2, "metric", "example.com", 0, 3} |
| ] = Buffer.flush(buffer) |
|
|
| assert bucket2 - bucket1 == 10 |
| end |
|
|
| test "allows flushing only complete buckets", %{test: test} do |
| |
| |
| |
| |
| |
| |
|
|
| timestamps = [ |
| ~N[2023-02-14 01:00:59], |
| ~N[2023-02-14 01:01:01], |
| ~N[2023-02-14 01:01:03], |
| ~N[2023-02-14 01:01:09] |
| ] |
|
|
| buffer = Buffer.new(test) |
|
|
| for ts <- timestamps do |
| Buffer.aggregate(buffer, "metric", "example.com", ts, 0) |
| end |
|
|
| assert [] = Buffer.flush(buffer, ~U[2023-02-14 01:00:59.999999Z]) |
| assert [{_, _, _, 0, 1}] = Buffer.flush(buffer, ~U[2023-02-14 01:01:00.999999Z]) |
| assert [] = Buffer.flush(buffer, ~U[2023-02-14 01:01:05.999999Z]) |
| assert [{_, _, _, 0, 3}] = Buffer.flush(buffer, ~U[2023-02-14 01:01:11.999999Z]) |
| end |
|
|
| test "allows setting tracker script version", %{test: test} do |
| buffer = Buffer.new(test) |
|
|
| Buffer.aggregate(buffer, "metric", "example.com", ~N[2023-02-14 01:00:59], 137) |
| assert [{_, "metric", "example.com", 137, 1}] = Buffer.flush(buffer) |
| end |
| end |
|
|