aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/files.py
blob: 19072373afd9e1b1fa9d5c4271720e54781a515c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# -*- python -*-
'''
xpybar – xmobar replacement written in python
Copyright © 2014, 2015, 2016, 2017, 2018  Mattias Andrée (maandree@kth.se)

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