slapos-monitor 1.43 KB
Newer Older
1
#!/usr/bin/python
2
import json
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
import logging
import os
import sys

from SimpleXMLRPCServer import SimpleXMLRPCServer
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler

import netuse

# Restrict to a particular path.
class RequestHandler(SimpleXMLRPCRequestHandler):
    rpc_paths = ('/RPC2',)

class SlapNodeMonitor(object):

    def __init__(self):
        super(SlapNodeMonitor, self).__init__()
        self.port = 8008
        netuse.autoConnect()
        self.drivelist = netuse.listNetDrive()
        print 'Net drive list:'
        print self.drivelist

    def cleanup(self):
        pass

    def netdrive_usage(self):
        '''Get net drive usage, return a list as
        [ (user, drive, remote, free, total), ... ]
        '''
        result = []
        for k in self.drivelist:
            r = netuse.usageReport(k[0])
            result.append((k[3], k[0], k[1], r[0], r[1]))
37
        return json.dumps(result)
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55

    def run(self):
        # Create server
        server = SimpleXMLRPCServer(('localhost', self.port),
                                requestHandler=RequestHandler)
        server.register_introspection_functions()
        server.register_function(self.netdrive_usage, 'netdrive_usage')

        try:
            # Run the server's main loop
            server.serve_forever()
        except KeyboardInterrupt:
            pass
        finally:
            self.cleanup()

if __name__ == '__main__':
    SlapNodeMonitor().run()