From dd09fb907b27b53ccf113e1a28a24d0af404a11a Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Sat, 20 Sep 2025 09:49:06 +0300 Subject: [PATCH] Track both content and cache size --- lib/music_library/application.ex | 2 +- lib/music_library/assets.ex | 27 ++++++++++++++++++++++++++- lib/music_library/assets/cache.ex | 8 -------- lib/music_library_web/telemetry.ex | 6 ++++-- 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/lib/music_library/application.ex b/lib/music_library/application.ex index 85aaaf2f..785ede11 100644 --- a/lib/music_library/application.ex +++ b/lib/music_library/application.ex @@ -12,11 +12,11 @@ defmodule MusicLibrary.Application do _ = Assets.Cache.new() children = [ - MusicLibraryWeb.Telemetry, MusicLibrary.Vault, MusicLibrary.Repo, MusicLibrary.ErrorRepo, MusicLibrary.BackgroundRepo, + MusicLibraryWeb.Telemetry, {Oban, Application.fetch_env!(:music_library, Oban)}, {Ecto.Migrator, repos: Application.fetch_env!(:music_library, :ecto_repos), skip: skip_migrations?()}, diff --git a/lib/music_library/assets.ex b/lib/music_library/assets.ex index 68d3a157..9a6c0176 100644 --- a/lib/music_library/assets.ex +++ b/lib/music_library/assets.ex @@ -1,7 +1,9 @@ defmodule MusicLibrary.Assets do - alias MusicLibrary.Assets.Asset + alias MusicLibrary.Assets.{Asset, Cache} alias MusicLibrary.Repo + import Ecto.Query + @doc """ Store any file type - the responsibility to correctly populate format and properties is left to the caller. @@ -28,4 +30,27 @@ defmodule MusicLibrary.Assets do def get!(hash) do Repo.get!(Asset, hash) end + + def total_content_size do + q = + from p in Asset, select: sum(fragment("length(content)")) + + Repo.one(q) + end + + def track_total_content_size do + :telemetry.execute( + [:music_library, :assets], + %{content_size: total_content_size()}, + %{} + ) + end + + def track_total_cache_size do + :telemetry.execute( + [:music_library, :assets], + %{cache_size: Cache.total_content_size()}, + %{} + ) + end end diff --git a/lib/music_library/assets/cache.ex b/lib/music_library/assets/cache.ex index f5a38dd1..00dfd362 100644 --- a/lib/music_library/assets/cache.ex +++ b/lib/music_library/assets/cache.ex @@ -23,14 +23,6 @@ defmodule MusicLibrary.Assets.Cache do ) end - def track_total_content_size do - :telemetry.execute( - [:music_library, :assets, :cache], - %{total_content_size: total_content_size()}, - %{} - ) - end - def prune(older_than_seconds) do threshold = DateTime.utc_now() diff --git a/lib/music_library_web/telemetry.ex b/lib/music_library_web/telemetry.ex index 87025d63..619fac48 100644 --- a/lib/music_library_web/telemetry.ex +++ b/lib/music_library_web/telemetry.ex @@ -116,7 +116,8 @@ defmodule MusicLibraryWeb.Telemetry do ), # Assets - summary("music_library.assets.cache.total_content_size", unit: {:byte, :kilobyte}), + summary("music_library.assets.cache_size", unit: {:byte, :kilobyte}), + summary("music_library.assets.content_size", unit: {:byte, :megabyte}), # VM Metrics summary("vm.memory.total", unit: {:byte, :megabyte}), @@ -128,7 +129,8 @@ defmodule MusicLibraryWeb.Telemetry do defp periodic_measurements do [ - {MusicLibrary.Assets.Cache, :track_total_content_size, []} + {MusicLibrary.Assets, :track_total_cache_size, []}, + {MusicLibrary.Assets, :track_total_content_size, []} # A module, function and arguments to be invoked periodically. # This function must call :telemetry.execute/3 and a metric must be added above. # {MusicLibraryWeb, :count_users, []}