19
19
public class NetProvider : Provider {
20
20
private uint64[] lastdata;
21
21
private uint64 lasttime;
22
private string[] devicefields;
24
private static string[] fields(out string[] devices) {
28
devices = GTop.get_netlist(out netlist);
30
string[] result = new string[3 + 2 * netlist.number];
34
for (uint j = 0; j < netlist.number; ++j) {
35
var device = devices[j];
36
result[3 + 2 * j] = @"$device.down";
37
result[3 + 2 * j + 1] = @"$device.up";
23
42
public NetProvider() {
24
base("net", {"down", "up", "local"}, 's');
44
base("net", fields(out devices), 's');
45
this.devicefields = devices;
27
48
public override void update() {
28
uint64[] newdata = new uint64[3];
49
uint64[] newdata = new uint64[keys.length];
29
50
uint64 newtime = get_monotonic_time();
32
52
GTop.NetList netlist;
33
devices = GTop.get_netlist(out netlist);
53
string[] devices = GTop.get_netlist(out netlist);
34
54
debug("Netlist: %u entries", netlist.number);
35
55
for (uint i = 0; i < netlist.number; ++i) {
56
var device = devices[i];
36
57
GTop.NetLoad netload;
37
GTop.get_netload(out netload, devices[i]);
38
debug("Netload: " + devices[i]);
58
GTop.get_netload(out netload, device);
59
debug("Netload: " + device);
39
60
debug(" flags: %x", (uint32)netload.flags);
40
61
debug(" if flags: %x", (uint32)netload.if_flags);
41
62
debug(" mtu: " + netload.mtu.to_string());
55
76
((netload.if_flags & (1L << GTop.IFFlags.RUNNING)) == 0)) {
56
77
// TODO: transient high differences when shut down
57
78
debug(" down or not running");
58
} else if (FileUtils.test("/sys/class/net/%s/device".printf(devices[i]), FileTest.EXISTS)) {
79
} else if (FileUtils.test("/sys/class/net/%s/device".printf(device), FileTest.EXISTS)) {
59
80
newdata[0] += netload.bytes_in;
60
81
newdata[1] += netload.bytes_out;
61
82
debug(" existing device link");
93
for (uint j = 0, isize = devicefields.length; j < isize; ++j) {
94
if (devicefields[j] == device) {
95
newdata[3 + j * 2] = netload.bytes_in;
96
newdata[3 + j * 2 + 1] = netload.bytes_out;
74
102
if (this.lastdata.length != 0) {