<div dir="ltr">It looks like folsom (which it looks like folsomite wraps, correct me if I'm wrong), will do this for you already: <a href="https://github.com/boundary/folsom/blob/master/src/folsom_metrics.erl#L210">https://github.com/boundary/folsom/blob/master/src/folsom_metrics.erl#L210</a><div>
<br></div><div>You'll still have to wrap those calls with instrumentation. However, you could also write your own wrapper function just once, maybe something like this:</div><div><br></div><div><div><font face="courier new, monospace">pool_instrument(Pool, Fun, TotalMetric, CheckoutMetric, InternalMetric) -></font></div>
<div><font face="courier new, monospace">    folsom:histogram_timed_update(TotalMetric, fun pool_instrument/4, </font></div><div><font face="courier new, monospace">                                  [Pool, Fun, CheckoutMetric, InternalMetric]).</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">pool_instrument(Pool, Fun, CheckoutMetric, InternalMetric) -></font></div><div><font face="courier new, monospace">    Worker = folsom:histogram_timed_update(CheckoutMetric, </font></div>
<div><font face="courier new, monospace">                                           poolboy, checkout, [Pool, true, Timeout]),</font></div><div><font face="courier new, monospace">    try</font></div><div><font face="courier new, monospace">        folsom:histogram_timed_update(InternalMetric, Fun, [Worker])</font></div>
<div><font face="courier new, monospace">    after</font></div><div><font face="courier new, monospace">        ok = poolboy:checkin(Pool, Worker)</font></div><div><font face="courier new, monospace">    end.</font></div>
</div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, May 30, 2014 at 10:02 AM, Roger Lipscombe <span dir="ltr"><<a href="mailto:roger@differentpla.net" target="_blank">roger@differentpla.net</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">We're using poolboy and pgsql. I'd like to report (to graphite; we're<br>
using folsomite) the time taken for the gen_server and database calls.<br>
<br>
When you use poolboy, you provide it with a worker (usually a<br>
gen_server), and call it like this:<br>
<br>
    poolboy:transaction(?POOL, fun(W) -> gen_server:call(W, {equery,<br>
Stmt}) end).<br>
<br>
I'd like to instrument this -- without having to add too much wrapper<br>
code -- such that I get measurements of:<br>
<br>
- How long the overall transaction took.<br>
- How much of that was spent waiting for poolboy to get an available worker.<br>
- How much of that was spent waiting on the database.<br>
<br>
I could decorate the code with timer:tc calls everywhere, but that<br>
gets ugly really quickly. Is there a better way?<br>
<br>
Thanks,<br>
Roger.<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>Sean Cribbs <<a href="mailto:sean@basho.com" target="_blank">sean@basho.com</a>><div>Software Engineer</div><div>Basho Technologies, Inc.</div><div><a href="http://basho.com/" target="_blank">http://basho.com/</a></div>

</div>