From 4f190db5c5c1c4304a2eaa6d8400b369190ae353 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Fri, 20 Jun 2014 16:42:31 +0200 Subject: add dentrystate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- Makefile | 5 +++-- TODO | 5 ----- examples/plugins/dentrystate | 35 +++++++++++++++++++++++++++++++++++ src/plugins/dentrystate.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 82 insertions(+), 7 deletions(-) create mode 100644 examples/plugins/dentrystate create mode 100644 src/plugins/dentrystate.py diff --git a/Makefile b/Makefile index bc8b56d..bd64784 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/TODO b/TODO index fc4bf91..9fbd733 100644 --- a/TODO +++ b/TODO @@ -36,11 +36,6 @@ List of plugins to implement: /proc/net/sockstat6 /proc/net/wireless /sys/class/net//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 . +''' + + +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 + -- cgit v1.2.3-70-g09d2