#!/usr/bin/python

from mdb import MDB

####################################
#
# FIND FILES
#
# Shows all open files in system
# 
# ----------------------------------
#
# (c) Sergey Klyaus, Tune-IT, 2012
# myaut@tune-it.ru
#
####################################

MDB_COMMAND = 'mdb -k'

mdb_proc_proc = MDB(MDB_COMMAND, interactive=False)
mdb_proc_proc.send('::walk proc')

mdb_procinfo_proc = MDB(MDB_COMMAND)

print '%5s %5s %3s %4s %16s %16s %s %s' % ("PID", "UID", "FD", "FTYPE", "VNODE", "PROC", "PNAME", "VPATH")

for proc in mdb_proc_proc:
    mdb_procinfo_proc.send(proc + '::ps', wrap_hack=True)
    
    header = mdb_procinfo_proc.readline()
    psinfo = mdb_procinfo_proc.readline().split(None, 9)
    
    pid = psinfo[1]
    uid = psinfo[5]
    pname = psinfo[8]
    
    mdb_pfiles_proc = MDB(MDB_COMMAND, interactive=False)
    mdb_pfiles_proc.send(proc + '::pfiles -p', wrap_hack=True)
    #mdb_pfiles_proc.logging = 'pfiles'
    
    header = mdb_pfiles_proc.readline()
    
    for pfile in mdb_pfiles_proc:        
        finfo = pfile.split(None, 4)
        
        fd = finfo[0]
        ftype = finfo[1]
        
        if len(finfo) == 4:
            vp = finfo[2]
            vpath = finfo[3]
        else:
            vp = '???'
            vpath = '???'
        
        print '%5s %5s %3s %4s %16s %16s "%s" "%s"' % (pid, uid, fd, ftype, vp, proc, pname, vpath)