Use iolists, where appropriate
authorPaul Oliver <puzza007@gmail.com>
Mon, 28 Sep 2015 16:04:16 +0000 (18:04 +0200)
committerPaul Oliver <puzza007@gmail.com>
Tue, 29 Sep 2015 12:17:28 +0000 (14:17 +0200)
include/beam_stats_msg_statsd_gauge.hrl
src/beam_stats_consumer_graphite.erl
src/beam_stats_consumer_statsd.erl
src/beam_stats_msg_graphite.erl
src/beam_stats_msg_statsd_gauge.erl

index 445c8a7..415f2a7 100644 (file)
@@ -1,4 +1,4 @@
 -record(beam_stats_msg_statsd_gauge,
-    { name  :: binary()
+    { name  :: iolist()
     , value :: non_neg_integer()
     }).
index 5122479..9f13a66 100644 (file)
@@ -52,7 +52,7 @@ init(Options) ->
 -spec consume(beam_stats_consumer:queue(), state()) ->
     state().
 consume(Q, #state{}=State1) ->
-    Payload = beam_stats_queue_to_binary(Q),
+    Payload = beam_stats_queue_to_iolists(Q),
     State2 = try_to_connect_if_no_socket(State1),
     try_to_send(State2, Payload).
 
@@ -64,7 +64,7 @@ terminate(#state{sock=SockOpt}) ->
 
 %% ============================================================================
 
--spec try_to_send(state(), binary()) ->
+-spec try_to_send(state(), iolist()) ->
     state().
 try_to_send(#state{sock=none}=State, _) ->
     ?log_error("Sending failed. No socket in state."),
@@ -105,14 +105,13 @@ try_to_connect_if_no_socket(
             State#state{sock = none}
     end.
 
--spec beam_stats_queue_to_binary(beam_stats_consumer:queue()) ->
-    binary().
-beam_stats_queue_to_binary(Q) ->
-    Bins = [beam_stats_to_bins(B) || B <- queue:to_list(Q)],
-    iolist_to_binary(Bins).
+-spec beam_stats_queue_to_iolists(beam_stats_consumer:queue()) ->
+    [iolist()].
+beam_stats_queue_to_iolists(Q) ->
+    [beam_stats_to_iolist(B) || B <- queue:to_list(Q)].
 
--spec beam_stats_to_bins(beam_stats:t()) ->
-    [binary()].
-beam_stats_to_bins(#beam_stats{}=BeamStats) ->
+-spec beam_stats_to_iolist(beam_stats:t()) ->
+    [iolist()].
+beam_stats_to_iolist(#beam_stats{}=BeamStats) ->
     Msgs = beam_stats_msg_graphite:of_beam_stats(BeamStats),
-    lists:map(fun beam_stats_msg_graphite:to_bin/1, Msgs).
+    lists:map(fun beam_stats_msg_graphite:to_iolist/1, Msgs).
index 644fb63..18be072 100644 (file)
@@ -86,13 +86,13 @@ terminate(#state{sock=SockOpt}) ->
 %% Transport
 %% ============================================================================
 
--spec try_to_connect_and_send(binary(), state()) ->
+-spec try_to_connect_and_send(iolist(), state()) ->
     state().
-try_to_connect_and_send(<<Payload/binary>>, #state{}=State1) ->
+try_to_connect_and_send(Payload, #state{}=State1) ->
     State2 = try_to_connect_if_no_socket(State1),
     try_to_send(State2, Payload).
 
--spec try_to_send(state(), binary()) ->
+-spec try_to_send(state(), iolist()) ->
     state().
 try_to_send(#state{sock=none}=State, _) ->
     ?log_error("Sending failed. No socket in state."),
@@ -141,18 +141,17 @@ try_to_connect_if_no_socket(#state{sock=none, src_port=SrcPort}=State) ->
     non_neg_integer(),
     hope_option:t(binary())
 ) ->
-    [binary()].
+    [iolist()].
 beam_stats_queue_to_packets(Q, NumMsgsPerPacket, StaticNodeNameOpt) ->
-    MsgBins = lists:append([beam_stats_to_bins(B, StaticNodeNameOpt) || B <- queue:to_list(Q)]),
-    MsgBinsChucks = hope_list:divide(MsgBins, NumMsgsPerPacket),
-    lists:map(fun erlang:iolist_to_binary/1, MsgBinsChucks).
+    MsgIOLists = lists:append([beam_stats_to_iolists(B, StaticNodeNameOpt) || B <- queue:to_list(Q)]),
+    hope_list:divide(MsgIOLists, NumMsgsPerPacket).
 
--spec beam_stats_to_bins(beam_stats:t(), hope_option:t(binary())) ->
-    [binary()].
-beam_stats_to_bins(#beam_stats{node_id=NodeID}=BeamStats, StaticNodeNameOpt) ->
+-spec beam_stats_to_iolists(beam_stats:t(), hope_option:t(binary())) ->
+    [iolist()].
+beam_stats_to_iolists(#beam_stats{node_id=NodeID}=BeamStats, StaticNodeNameOpt) ->
     NodeIDBinDefault = beam_stats_msg_graphite:node_id_to_bin(NodeID),
     NodeIDBin = hope_option:get(StaticNodeNameOpt, NodeIDBinDefault),
     MsgsGraphite = beam_stats_msg_graphite:of_beam_stats(BeamStats, NodeIDBin),
     MsgsStatsD =
         lists:map(fun beam_stats_msg_statsd_gauge:of_msg_graphite/1, MsgsGraphite),
-    lists:map(fun beam_stats_msg_statsd_gauge:to_bin/1, MsgsStatsD).
+    lists:map(fun beam_stats_msg_statsd_gauge:to_iolist/1, MsgsStatsD).
index 6939653..d33e450 100644 (file)
@@ -14,8 +14,8 @@
 -export(
     [ of_beam_stats/1
     , of_beam_stats/2
-    , to_bin/1
-    , path_to_bin/1
+    , to_iolist/1
+    , path_to_iolist/1
     , node_id_to_bin/1
     ]).
 
@@ -64,25 +64,25 @@ of_beam_stats(#beam_stats
         ++ of_processes(Processes, NodeID, Ts),
     lists:map(fun path_prefix_schema_version/1, Msgs).
 
--spec to_bin(t()) ->
-    binary().
-to_bin(
+-spec to_iolist(t()) ->
+    iolist().
+to_iolist(
     ?T
     { path      = Path
     , value     = Value
     , timestamp = Timestamp
     }
 ) ->
-    PathBin = path_to_bin(Path),
+    PathIOList = path_to_iolist(Path),
     ValueBin = integer_to_binary(Value),
     TimestampInt = timestamp_to_integer(Timestamp),
     TimestampBin = integer_to_binary(TimestampInt),
-    <<PathBin/binary, " ", ValueBin/binary, " ", TimestampBin/binary>>.
+    [PathIOList, <<" ">>, ValueBin, <<" ">>, TimestampBin].
 
--spec path_to_bin([binary()]) ->
-    binary().
-path_to_bin(Path) ->
-    bin_join(Path, <<".">>).
+-spec path_to_iolist([binary()]) ->
+    iolist().
+path_to_iolist(Path) ->
+    interleave(Path, <<".">>).
 
 -spec node_id_to_bin(node()) ->
     binary().
@@ -109,13 +109,12 @@ path_prefix(?T{path=Path}=T, <<Prefix/binary>>) ->
 schema_version() ->
     <<"beam_stats_v0">>.
 
--spec bin_join([binary()], binary()) ->
-    binary().
-bin_join([]                         , <<_/binary>>  ) -> <<>>;
-bin_join([<<B/binary>> | []]        , <<_/binary>>  ) -> B;
-bin_join([<<B/binary>> | [_|_]=Bins], <<Sep/binary>>) ->
-    BinsBin = bin_join(Bins, Sep),
-    <<B/binary, Sep/binary, BinsBin/binary>>.
+-spec interleave(iolist(), iodata()) ->
+    iolist().
+interleave([], _) -> [];
+interleave([X], _) -> [X];
+interleave([X|Xs], Sep) ->
+    [X, Sep | interleave(Xs, Sep)].
 
 -spec timestamp_to_integer(erlang:timestamp()) ->
     non_neg_integer().
index 8da0198..4f4c533 100644 (file)
@@ -9,7 +9,7 @@
 
 -export(
     [ of_msg_graphite/1
-    , to_bin/1
+    , to_iolist/1
     ]).
 
 -define(T, #?MODULE).
@@ -26,24 +26,24 @@ of_msg_graphite(
     , timestamp = _Timestamp
     }
 ) ->
-    PathBin = beam_stats_msg_graphite:path_to_bin(Path),
-    cons(PathBin, Value).
+    PathIOList = beam_stats_msg_graphite:path_to_iolist(Path),
+    cons(PathIOList, Value).
 
--spec cons(binary(), non_neg_integer()) ->
+-spec cons(iolist(), non_neg_integer()) ->
     t().
-cons(<<Name/binary>>, Value) ->
+cons(Name, Value) ->
     ?T
     { name  = Name
     , value = Value
     }.
 
--spec to_bin(t()) ->
-    binary().
-to_bin(
+-spec to_iolist(t()) ->
+    iolist().
+to_iolist(
     ?T
-    { name  = <<Name/binary>>
+    { name  = Name
     , value = Value
     }
 ) when Value >= 0 ->
     ValueBin = integer_to_binary(Value),
-    << Name/binary, ":", ValueBin/binary, "|g\n">>.
+    [Name, <<":">>, ValueBin, <<"|g\n">>].
This page took 0.037487 seconds and 4 git commands to generate.