-record(beam_stats_msg_statsd_gauge,
- { name :: binary()
+ { name :: iolist()
, value :: non_neg_integer()
}).
-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).
%% ============================================================================
--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."),
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).
%% 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."),
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).
-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
]).
++ 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().
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().
-export(
[ of_msg_graphite/1
- , to_bin/1
+ , to_iolist/1
]).
-define(T, #?MODULE).
, 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">>].