diff options
| -rw-r--r-- | Makefile | 5 | ||||
| -rw-r--r-- | TODO | 5 | ||||
| -rw-r--r-- | examples/plugins/dentrystate | 35 | ||||
| -rw-r--r-- | src/plugins/dentrystate.py | 44 | 
4 files changed, 82 insertions, 7 deletions
@@ -19,11 +19,12 @@ SRC = __main__ util x  PLUGINS = chase clock cpuifo cpuonline cpu df discstats ipaddress  \            kmsg leapsec linereader loadavg lunar mem moc network    \            pacman snmp snmp6 softirqs solar uname uptime users      \ -          vmstat weather xdisplay xkb alsa +          vmstat weather xdisplay xkb alsa dentrystate  PLUGIN_EXAMPLES = chase clock cpu cpuinfo cpuonline df discstats   \                    ipaddress kmsg loadavg lunar mem moc network     \ -                  pacman uname uptime users xdisplay xkb slsa +                  pacman uname uptime users xdisplay xkb slsa      \ +                  dentrystate  EXAMPLES = clock mixed moderate plugin-test test xmonad @@ -36,11 +36,6 @@ List of plugins to implement:       /proc/net/sockstat6       /proc/net/wireless       /sys/class/net/<nic>/duplex (half, full) -     /proc/sys/fs/dentry-state -         This file contains information about the status of the directory -         cache (dcache). The file contains six numbers, nr_dentry, nr_unused, -         age_limit (age in seconds), want_pages (pages requested by system) -         and two dummy values.       /proc/sys/fs/inode-state           This file contains seven numbers: nr_inodes, nr_free_inodes,           preshrink, and four dummy values. nr_inodes is the number of inodes diff --git a/examples/plugins/dentrystate b/examples/plugins/dentrystate new file mode 100644 index 0000000..f57847e --- /dev/null +++ b/examples/plugins/dentrystate @@ -0,0 +1,35 @@ +# -*- python -*- + +# A xpybar configuration example testing the features of plugins.dentrystate + +import time +import threading + +from plugins.dentrystate import DentryState +from plugins.clock import Clock + + +OUTPUT, HEIGHT, YPOS, TOP = 0, 12, 24, True + + +clock = Clock(sync_to = Clock.SECONDS) + +start_ = start +def start(): +    start_() +    async(lambda : clock.continuous_sync(lambda : bar.invalidate())) + + +def redraw(): +    dentry_ = DentryState() +     +    data = [('Alloced',   dentry_.nr_dentry), +            ('Unused',    dentry_.nr_unused), +            ('AgeLimit',  dentry_.age_limit), +            ('WantPages', dentry_.want_pages)] +     +    text = ' │ '.join('%s: %i' % (text, value) for (text, value) in data) +     +    bar.clear() +    bar.draw_coloured_text(0, 10, 0, 2, text) + diff --git a/src/plugins/dentrystate.py b/src/plugins/dentrystate.py new file mode 100644 index 0000000..6ef5dc7 --- /dev/null +++ b/src/plugins/dentrystate.py @@ -0,0 +1,44 @@ +# -*- python -*- +''' +xpybar – xmobar replacement written in python +Copyright © 2014  Mattias Andrée (maandree@member.fsf.org) + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +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/>. +''' + + +class DentryState: +    ''' +    Data from /proc/sys/fs/dentry-state +     +    Information about the status of the directory cache (dcache) +     +    @variable  nr_dentry:int   Number of allocated directory entries +    @variable  nr_unused:int   Number of unused directory entries +    @variable  age_limit:int   Age limit in seconds +    @variable  want_pages:int  Pages requested by the system +    ''' +     +     +    def __init__(self): +        ''' +        Constructor +        ''' +        state = None +        with open('/proc/sys/fs/dentry-state', 'rb') as file: +            state = file.read() +        state = state.decode('utf-8', 'replace').replace('\t', ' ') +        state = [int(field) for field in state.split(' ') if not field == ''] +        (self.nr_dentry, self.nr_unused, self.age_limit, self.want_pages, _dummy1, _dummy_2) = state +  | 
