Current section

Files

Jump to
new_relic_agent lib new_relic util priority_queue.ex
Raw

lib/new_relic/util/priority_queue.ex

defmodule NewRelic.Util.PriorityQueue do
# This is a simple PriorityQueue based on erlang's gb_trees used to
# keep the highest priority events when we reach max harvest size
@moduledoc false
def new() do
:gb_trees.empty()
end
def insert({size, _} = tree, max_size, key, value) when size >= max_size do
{_k, _v, tree} =
{key, System.system_time()}
|> :gb_trees.insert(value, tree)
|> :gb_trees.take_smallest()
tree
end
def insert(tree, _max_size, key, value) do
{key, System.system_time()}
|> :gb_trees.insert(value, tree)
end
def values(tree) do
:gb_trees.values(tree)
end
def list(tree) do
:gb_trees.to_list(tree)
end
end