Skip to content

Commit 1f98278

Browse files
committed
Fix log trimmer
1 parent 3a3c769 commit 1f98278

1 file changed

Lines changed: 24 additions & 7 deletions

File tree

lib/geo/log_trimmer.ex

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ defmodule Geo.LogTrimmer do
6565
}
6666

6767
max_size_bytes = parse_size(@max_file_size)
68-
Logger.info("LogTrimmer: Started for #{log_file}, Trimming every #{div(@trim_interval, 60_000)} minutes, Max file size: #{max_size_bytes} bytes (#{@max_file_size}), Trim to #{@max_log_lines} lines")
68+
Logger.info("LogTrimmer: Started for #{log_file}, Trimming every #{div(@trim_interval, 60_000)} minutes, Maximum file size: #{max_size_bytes} bytes (#{@max_file_size}), Trimming to #{@max_log_lines} lines")
6969

7070
{:ok, state}
7171
end
@@ -122,13 +122,18 @@ defmodule Geo.LogTrimmer do
122122
# Check file size first
123123
%{size: file_size} = File.stat!(log_file)
124124
max_size_bytes = parse_size(@max_file_size)
125+
126+
Logger.debug("LogTrimmer: Checking #{log_file} - File size: #{file_size} bytes, Max size: #{max_size_bytes} bytes")
125127

126128
if file_size <= max_size_bytes do
129+
Logger.debug("LogTrimmer: File size (#{file_size} bytes) is under limit (#{max_size_bytes} bytes), skipping trim")
127130
{:ok, :no_trim_needed}
128131
else
129132
content = File.read!(log_file)
130133
lines = String.split(content, "\n")
131134
line_count = length(lines)
135+
136+
Logger.debug("LogTrimmer: File has #{line_count} lines, max allowed: #{@max_log_lines}")
132137

133138
if line_count > @max_log_lines do
134139
# Keep only the last @max_log_lines lines
@@ -141,12 +146,15 @@ defmodule Geo.LogTrimmer do
141146
File.rename!(temp_file, log_file)
142147

143148
lines_removed = line_count - @max_log_lines
149+
Logger.debug("LogTrimmer: Trimmed #{log_file} - Removed #{lines_removed} lines, kept #{@max_log_lines} lines")
144150
{:ok, :trimmed, lines_removed}
145151
else
152+
Logger.debug("LogTrimmer: Line count (#{line_count}) is under limit (#{@max_log_lines}), no trim needed")
146153
{:ok, :no_trim_needed}
147154
end
148155
end
149156
else
157+
Logger.debug("LogTrimmer: File #{log_file} does not exist")
150158
{:ok, :no_trim_needed}
151159
end
152160
rescue
@@ -157,15 +165,16 @@ defmodule Geo.LogTrimmer do
157165

158166
defp parse_size(size_string) do
159167
# Parse strings like "5 MB", "10 GB", "500 KB", "2 G", "1024 K" into bytes
168+
# Default to bytes when no unit is specified
160169
case Regex.run(~r/^(\d+(?:\.\d+)?)\s*(B|K|KB|M|MB|G|GB|T|TB)?$/i, size_string) do
170+
[_, number_str] ->
171+
# No unit specified, default to bytes
172+
parse_number(number_str)
173+
161174
[_, number_str, unit] ->
162-
number = if String.contains?(number_str, ".") do
163-
String.to_float(number_str)
164-
else
165-
String.to_integer(number_str)
166-
end
175+
number = parse_number(number_str)
167176

168-
multiplier = case String.upcase(unit || "B") do
177+
multiplier = case String.upcase(unit) do
169178
"B" -> 1
170179
"K" -> 1_024
171180
"KB" -> 1_024
@@ -183,4 +192,12 @@ defmodule Geo.LogTrimmer do
183192
raise ArgumentError, "Invalid size format: #{size_string}"
184193
end
185194
end
195+
196+
defp parse_number(number_str) do
197+
if String.contains?(number_str, ".") do
198+
String.to_float(number_str)
199+
else
200+
String.to_integer(number_str)
201+
end
202+
end
186203
end

0 commit comments

Comments
 (0)