~indicator-multiload/indicator-multiload/trunk

« back to all changes in this revision

Viewing changes to src/netprovider.vala

  • Committer: Michael Hofmann
  • Date: 2013-05-02 12:26:47 UTC
  • Revision ID: mh21@mh21.de-20130502122647-22zq0lf9fq5ck3ta
Support for variables like cpu0.idle. Net provider vars net.*.{down,up}.

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
public class NetProvider : Provider {
20
20
    private uint64[] lastdata;
21
21
    private uint64 lasttime;
 
22
    private string[] devicefields;
 
23
 
 
24
    private static string[] fields(out string[] devices) {
 
25
        GTop.init();
 
26
 
 
27
        GTop.NetList netlist;
 
28
        devices = GTop.get_netlist(out netlist);
 
29
 
 
30
        string[] result = new string[3 + 2 * netlist.number];
 
31
        result[0] = "down";
 
32
        result[1] = "up";
 
33
        result[2] = "local";
 
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";
 
38
        }
 
39
        return result;
 
40
    }
22
41
 
23
42
    public NetProvider() {
24
 
        base("net", {"down", "up", "local"}, 's');
 
43
        string[] devices;
 
44
        base("net", fields(out devices), 's');
 
45
        this.devicefields = devices;
25
46
    }
26
47
 
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();
30
51
 
31
 
        string[] devices;
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");
69
90
            } else {
70
91
                debug("  unknown");
71
92
            }
 
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;
 
97
                    break;
 
98
                }
 
99
            }
72
100
        }
73
101
 
74
102
        if (this.lastdata.length != 0) {