snipt

Ctrl+h for KB shortcuts

Ruby

"Top" for file system

#!/usr/bin/env ruby

data_read = ''
process_times = Hash.new(0.0)

# Clear screen
print 27.chr + '[2J'

# Open a pipe to fs_usage for file calls.
data = IO.popen('fs_usage -wf filesys')

while true

  # Keep responsive to fs_usage output by reading 10 times per second.
  10.times do
    sleep 0.1

    data_read << data.read_nonblock(1048576) rescue ''
    lines = data_read.split("\n",-1)
    data_read = lines.pop.to_s

    lines.each do |line|
      elapsed,process = line[138..148],line[152..-1]
      process_times[process] += elapsed.to_f
    end
  end
  
  # Jump up to the top of the screen and print the header.
  print 27.chr + '[f'
  puts "PROCESS".ljust(30) + ' ' + 'TIME'
  puts "------------------------------ ---------"

  # Print in order of which used the most time.
  process_times.sort { |a,b| b[1] <=> a[1] }[0..19].each do |name,time|
    puts name[0,30].ljust(30) + ' ' + sprintf('%0.6f',time).rjust(9,'0')
  end

  # Clear the times for the next loop.
  process_times.each_key { |k| process_times[k] = 0.0 }

end
https://snipt.net/embed/593ae7ae2b079695f2846a2c236e694e/
/raw/593ae7ae2b079695f2846a2c236e694e/
593ae7ae2b079695f2846a2c236e694e
rb
Ruby
42
2019-05-23T03:07:19
True
False
False
/api/public/snipt/868/
top-for-file-system
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><a href="#L-1"> 1</a> <a href="#L-2"> 2</a> <a href="#L-3"> 3</a> <a href="#L-4"> 4</a> <a href="#L-5"> 5</a> <a href="#L-6"> 6</a> <a href="#L-7"> 7</a> <a href="#L-8"> 8</a> <a href="#L-9"> 9</a> <a href="#L-10">10</a> <a href="#L-11">11</a> <a href="#L-12">12</a> <a href="#L-13">13</a> <a href="#L-14">14</a> <a href="#L-15">15</a> <a href="#L-16">16</a> <a href="#L-17">17</a> <a href="#L-18">18</a> <a href="#L-19">19</a> <a href="#L-20">20</a> <a href="#L-21">21</a> <a href="#L-22">22</a> <a href="#L-23">23</a> <a href="#L-24">24</a> <a href="#L-25">25</a> <a href="#L-26">26</a> <a href="#L-27">27</a> <a href="#L-28">28</a> <a href="#L-29">29</a> <a href="#L-30">30</a> <a href="#L-31">31</a> <a href="#L-32">32</a> <a href="#L-33">33</a> <a href="#L-34">34</a> <a href="#L-35">35</a> <a href="#L-36">36</a> <a href="#L-37">37</a> <a href="#L-38">38</a> <a href="#L-39">39</a> <a href="#L-40">40</a> <a href="#L-41">41</a></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span id="L-1"><a name="L-1"></a><span class="ch">#!/usr/bin/env ruby</span> </span><span id="L-2"><a name="L-2"></a> </span><span id="L-3"><a name="L-3"></a><span class="n">data_read</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span> </span><span id="L-4"><a name="L-4"></a><span class="n">process_times</span> <span class="o">=</span> <span class="no">Hash</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="mi">0</span><span class="o">.</span><span class="mi">0</span><span class="p">)</span> </span><span id="L-5"><a name="L-5"></a> </span><span id="L-6"><a name="L-6"></a><span class="c1"># Clear screen</span> </span><span id="L-7"><a name="L-7"></a><span class="nb">print</span> <span class="mi">27</span><span class="o">.</span><span class="n">chr</span> <span class="o">+</span> <span class="s1">&#39;[2J&#39;</span> </span><span id="L-8"><a name="L-8"></a> </span><span id="L-9"><a name="L-9"></a><span class="c1"># Open a pipe to fs_usage for file calls.</span> </span><span id="L-10"><a name="L-10"></a><span class="n">data</span> <span class="o">=</span> <span class="no">IO</span><span class="o">.</span><span class="n">popen</span><span class="p">(</span><span class="s1">&#39;fs_usage -wf filesys&#39;</span><span class="p">)</span> </span><span id="L-11"><a name="L-11"></a> </span><span id="L-12"><a name="L-12"></a><span class="k">while</span> <span class="kp">true</span> </span><span id="L-13"><a name="L-13"></a> </span><span id="L-14"><a name="L-14"></a> <span class="c1"># Keep responsive to fs_usage output by reading 10 times per second.</span> </span><span id="L-15"><a name="L-15"></a> <span class="mi">10</span><span class="o">.</span><span class="n">times</span> <span class="k">do</span> </span><span id="L-16"><a name="L-16"></a> <span class="nb">sleep</span> <span class="mi">0</span><span class="o">.</span><span class="mi">1</span> </span><span id="L-17"><a name="L-17"></a> </span><span id="L-18"><a name="L-18"></a> <span class="n">data_read</span> <span class="o">&lt;&lt;</span> <span class="n">data</span><span class="o">.</span><span class="n">read_nonblock</span><span class="p">(</span><span class="mi">1048576</span><span class="p">)</span> <span class="k">rescue</span> <span class="s1">&#39;&#39;</span> </span><span id="L-19"><a name="L-19"></a> <span class="n">lines</span> <span class="o">=</span> <span class="n">data_read</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> </span><span id="L-20"><a name="L-20"></a> <span class="n">data_read</span> <span class="o">=</span> <span class="n">lines</span><span class="o">.</span><span class="n">pop</span><span class="o">.</span><span class="n">to_s</span> </span><span id="L-21"><a name="L-21"></a> </span><span id="L-22"><a name="L-22"></a> <span class="n">lines</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">line</span><span class="o">|</span> </span><span id="L-23"><a name="L-23"></a> <span class="n">elapsed</span><span class="p">,</span><span class="n">process</span> <span class="o">=</span> <span class="n">line</span><span class="o">[</span><span class="mi">138</span><span class="o">..</span><span class="mi">148</span><span class="o">]</span><span class="p">,</span><span class="n">line</span><span class="o">[</span><span class="mi">152</span><span class="o">..-</span><span class="mi">1</span><span class="o">]</span> </span><span id="L-24"><a name="L-24"></a> <span class="n">process_times</span><span class="o">[</span><span class="n">process</span><span class="o">]</span> <span class="o">+=</span> <span class="n">elapsed</span><span class="o">.</span><span class="n">to_f</span> </span><span id="L-25"><a name="L-25"></a> <span class="k">end</span> </span><span id="L-26"><a name="L-26"></a> <span class="k">end</span> </span><span id="L-27"><a name="L-27"></a> </span><span id="L-28"><a name="L-28"></a> <span class="c1"># Jump up to the top of the screen and print the header.</span> </span><span id="L-29"><a name="L-29"></a> <span class="nb">print</span> <span class="mi">27</span><span class="o">.</span><span class="n">chr</span> <span class="o">+</span> <span class="s1">&#39;[f&#39;</span> </span><span id="L-30"><a name="L-30"></a> <span class="nb">puts</span> <span class="s2">&quot;PROCESS&quot;</span><span class="o">.</span><span class="n">ljust</span><span class="p">(</span><span class="mi">30</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span> <span class="s1">&#39;TIME&#39;</span> </span><span id="L-31"><a name="L-31"></a> <span class="nb">puts</span> <span class="s2">&quot;------------------------------ ---------&quot;</span> </span><span id="L-32"><a name="L-32"></a> </span><span id="L-33"><a name="L-33"></a> <span class="c1"># Print in order of which used the most time.</span> </span><span id="L-34"><a name="L-34"></a> <span class="n">process_times</span><span class="o">.</span><span class="n">sort</span> <span class="p">{</span> <span class="o">|</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="o">|</span> <span class="n">b</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span> <span class="o">&lt;=&gt;</span> <span class="n">a</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span> <span class="p">}</span><span class="o">[</span><span class="mi">0</span><span class="o">..</span><span class="mi">19</span><span class="o">].</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="nb">name</span><span class="p">,</span><span class="n">time</span><span class="o">|</span> </span><span id="L-35"><a name="L-35"></a> <span class="nb">puts</span> <span class="nb">name</span><span class="o">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">30</span><span class="o">].</span><span class="n">ljust</span><span class="p">(</span><span class="mi">30</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span> <span class="nb">sprintf</span><span class="p">(</span><span class="s1">&#39;%0.6f&#39;</span><span class="p">,</span><span class="n">time</span><span class="p">)</span><span class="o">.</span><span class="n">rjust</span><span class="p">(</span><span class="mi">9</span><span class="p">,</span><span class="s1">&#39;0&#39;</span><span class="p">)</span> </span><span id="L-36"><a name="L-36"></a> <span class="k">end</span> </span><span id="L-37"><a name="L-37"></a> </span><span id="L-38"><a name="L-38"></a> <span class="c1"># Clear the times for the next loop.</span> </span><span id="L-39"><a name="L-39"></a> <span class="n">process_times</span><span class="o">.</span><span class="n">each_key</span> <span class="p">{</span> <span class="o">|</span><span class="n">k</span><span class="o">|</span> <span class="n">process_times</span><span class="o">[</span><span class="n">k</span><span class="o">]</span> <span class="o">=</span> <span class="mi">0</span><span class="o">.</span><span class="mi">0</span> <span class="p">}</span> </span><span id="L-40"><a name="L-40"></a> </span><span id="L-41"><a name="L-41"></a><span class="k">end</span> </span></pre></div> </td></tr></table>
ruby