/usr/share/sysdig/chisels/topcontainers_cpu.lua is in sysdig 0.8.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | --[[
Copyright (C) 2013-2015 Draios inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2 as
published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
--]]
-- Chisel description
description = "Show the top containers defined by the highest CPU utilization."
short_description = "Top containers by CPU usage"
category = "CPU Usage"
-- Chisel argument list
args = {}
require "common"
terminal = require "ansiterminal"
grtable = {}
islive = false
fkeys = {}
vizinfo =
{
key_fld = {"container.name"},
key_desc = {"container.name"},
value_fld = "thread.exectime",
value_desc = "CPU%",
value_units = "timepct",
top_number = 10,
output_format = "normal"
}
-- Initialization callback
function on_init()
-- Request the fields we need
for i, name in ipairs(vizinfo.key_fld) do
fkeys[i] = chisel.request_field(name)
end
-- Request the fields we need
fvalue = chisel.request_field(vizinfo.value_fld)
fcpu = chisel.request_field("thread.cpu")
chisel.set_filter("evt.type=procinfo")
return true
end
-- Final chisel initialization
function on_capture_start()
islive = sysdig.is_live()
vizinfo.output_format = sysdig.get_output_format()
if islive then
chisel.set_interval_s(1)
if vizinfo.output_format ~= "json" then
terminal.clearscreen()
terminal.hidecursor()
end
end
return true
end
-- Event parsing callback
function on_event()
local key = nil
local kv = nil
for i, fld in ipairs(fkeys) do
kv = evt.field(fld)
if kv == nil then
return
end
if key == nil then
key = kv
else
key = key .. "\001\001" .. evt.field(fld)
end
end
local cpu = evt.field(fcpu)
if grtable[key] == nil then
grtable[key] = cpu * 10000000
else
grtable[key] = grtable[key] + (cpu * 10000000)
end
return true
end
-- Periodic timeout callback
function on_interval(ts_s, ts_ns, delta)
if vizinfo.output_format ~= "json" then
terminal.clearscreen()
terminal.moveto(0, 0)
end
print_sorted_table(grtable, ts_s, 0, delta, vizinfo)
-- Clear the table
grtable = {}
return true
end
-- Called by the engine at the end of the capture (Ctrl-C)
function on_capture_end(ts_s, ts_ns, delta)
if islive and vizinfo.output_format ~= "json" then
terminal.clearscreen()
terminal.moveto(0 ,0)
terminal.showcursor()
return true
end
print_sorted_table(grtable, ts_s, 0, delta, vizinfo)
return true
end
|