@@ -6,25 +6,32 @@ defmodule RealtimeWeb.MetricsController do
66
77 # We give more memory and time to collect metrics from all nodes as this is a lot of work
88 def index ( conn , _ ) do
9- { time , metrics } = :timer . tc ( fn -> metrics ( [ Node . self ( ) | Node . list ( ) ] ) end , :millisecond )
9+ conn =
10+ conn
11+ |> put_resp_content_type ( "text/plain" )
12+ |> send_chunked ( 200 )
13+
14+ { time , conn } = :timer . tc ( fn -> metrics ( [ Node . self ( ) | Node . list ( ) ] , conn ) end , :millisecond )
1015 Logger . info ( "Collected cluster metrics in #{ time } milliseconds" )
1116
1217 conn
13- |> put_resp_content_type ( "text/plain" )
14- |> send_resp ( 200 , metrics )
1518 end
1619
1720 def region ( conn , % { "region" => region } ) do
21+ conn =
22+ conn
23+ |> put_resp_content_type ( "text/plain" )
24+ |> send_chunked ( 200 )
25+
1826 nodes = Realtime.Nodes . region_nodes ( region )
19- { time , metrics } = :timer . tc ( fn -> metrics ( nodes ) end , :millisecond )
27+
28+ { time , conn } = :timer . tc ( fn -> metrics ( nodes , conn ) end , :millisecond )
2029 Logger . info ( "Collected metrics for region #{ region } in #{ time } milliseconds" )
2130
2231 conn
23- |> put_resp_content_type ( "text/plain" )
24- |> send_resp ( 200 , metrics )
2532 end
2633
27- defp metrics ( nodes ) do
34+ defp metrics ( nodes , conn ) do
2835 bump_max_heap_size ( )
2936 timeout = Application . fetch_env! ( :realtime , :metrics_rpc_timeout )
3037
@@ -35,14 +42,16 @@ defmodule RealtimeWeb.MetricsController do
3542 end ,
3643 timeout: :infinity
3744 )
38- |> Enum . reduce ( [ ] , fn { _ , { node , response } } , acc ->
45+ |> Enum . reduce ( conn , fn { _ , { node , response } } , acc_conn ->
3946 case response do
4047 { :error , :rpc_error , reason } ->
4148 Logger . error ( "Cannot fetch metrics from the node #{ inspect ( node ) } because #{ inspect ( reason ) } " )
42- acc
49+ acc_conn
4350
4451 metrics ->
45- [ metrics | acc ]
52+ { :ok , acc_conn } = chunk ( acc_conn , metrics )
53+ :erlang . garbage_collect ( )
54+ acc_conn
4655 end
4756 end )
4857 end
0 commit comments