diff options
| -rw-r--r-- | Makefile | 5 | ||||
| -rw-r--r-- | TODO | 13 | ||||
| -rw-r--r-- | examples/plugins/files | 34 | ||||
| -rw-r--r-- | src/plugins/files.py | 52 | 
4 files changed, 89 insertions, 15 deletions
@@ -19,12 +19,13 @@ 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 dentrystate inodestate +          vmstat weather xdisplay xkb alsa dentrystate inodestate  \ +          files  PLUGIN_EXAMPLES = chase clock cpu cpuinfo cpuonline df discstats   \                    ipaddress kmsg loadavg lunar mem moc network     \                    pacman uname uptime users xdisplay xkb slsa      \ -                  dentrystate inodestate +                  dentrystate inodestate files  EXAMPLES = clock mixed moderate plugin-test test xmonad @@ -36,19 +36,6 @@ List of plugins to implement:       /proc/net/sockstat6       /proc/net/wireless       /sys/class/net/<nic>/duplex (half, full) -     /proc/sys/fs/file-nr -         This (read-only) file contains three numbers: the number of allocated -         file handles (i.e., the number of files presently opened); the number -         of free file handles; and the maximum number of file handles (i.e., -         the same value as /proc/sys/fs/file-max). If the number of allocated -         file handles is close to the maximum, you should consider increasing -         the maximum. Before Linux 2.6, the kernel allocated file handles -         dynamically, but it didn't free them again. Instead the free file -         handles were kept in a list for reallocation; the "free file handles" -         value indicates the size of that list. A large number of free file -         handles indicates that there was a past peak in the usage of open -         file handles. Since Linux 2.6, the kernel does deallocate freed file -         handles, and the "free file handles" value is always zero.  Demo plugins: diff --git a/examples/plugins/files b/examples/plugins/files new file mode 100644 index 0000000..56b69fd --- /dev/null +++ b/examples/plugins/files @@ -0,0 +1,34 @@ +# -*- python -*- + +# A xpybar configuration example testing the features of plugins.files + +import time +import threading + +from plugins.files import Files +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(): +    files_ = Files() +     +    data = [('Files', files_.nr_files), +            ('Free',  files_.nr_free_files), +            ('Max',   files_.file_max)] +     +    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/files.py b/src/plugins/files.py new file mode 100644 index 0000000..a1d5638 --- /dev/null +++ b/src/plugins/files.py @@ -0,0 +1,52 @@ +# -*- 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 Files: +    ''' +    Data from /proc/sys/fs/file-nr +     +    @variable  nr_files:int        The number of allocated file handles, i.e., +                                   the number of files presently opened +    @variable  nr_free_files:int   The number of free file handles +    @variable  file_max:int        The maximum number of file handles +     +    If the number of allocated file handles is close to the maximum, +    you should consider increasing the maximum. Before Linux 2.6, the +    kernel allocated file handles dynamically, but it didn't free them +    again. Instead the free file handles were kept in a list for +    reallocation; the "free file handles" value indicates the size of +    that list. A large number of free file handles indicates that there +    was a past peak in the usage of open file handles. Since Linux 2.6, +    the kernel does deallocate freed file handles, and the "free file +    handles" value is always zero. +    ''' +     +     +    def __init__(self): +        ''' +        Constructor +        ''' +        state = None +        with open('/proc/sys/fs/file-nr', '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_files, self.nr_free_files, self.file_max) = state +  | 
