parent
4beadb3643
commit
51c881b801
@ -0,0 +1,82 @@
|
||||
"""
|
||||
This file contains class and functions that extract data from running processes like top and stores them into a data store of the calling codes choice
|
||||
dependencies:
|
||||
- top (on the os)
|
||||
@TODO:
|
||||
Test this thing on windows to see if it works
|
||||
"""
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
import subprocess
|
||||
import os
|
||||
import datetime
|
||||
# from transport import factory
|
||||
import sys
|
||||
import hashlib
|
||||
import re
|
||||
from io import StringIO
|
||||
import importlib as IL
|
||||
import importlib.util
|
||||
|
||||
class plugin :
|
||||
"""
|
||||
This is a context specific decorator to be used for generic commands.
|
||||
This decorator should be placed on parsing functions
|
||||
"""
|
||||
def __init__(self,**_args):
|
||||
"""
|
||||
:name name of the plugin
|
||||
:mode restrict to reader/writer
|
||||
:about tell what the function is about
|
||||
"""
|
||||
self._cmd = _args['cmd']
|
||||
self._alias = _args['alias'] if 'alias' in _args else None
|
||||
|
||||
def __call__(self,pointer,**kwargs):
|
||||
def wrapper(_args,**kwargs):
|
||||
return pointer(_args,**kwargs)
|
||||
#
|
||||
# @TODO:
|
||||
# add attributes to the wrapper object
|
||||
#
|
||||
# self._name = pointer.__name__ if not self._name else self._name
|
||||
# setattr(wrapper,'context',True)
|
||||
setattr(wrapper,'cmd',self._cmd)
|
||||
setattr(wrapper,'alias',self._alias)
|
||||
|
||||
return wrapper
|
||||
|
||||
def read(**args) :
|
||||
"""
|
||||
This function will perform the actual reads of process informations.
|
||||
@return {user,pid,start,status, name, args, mem,cpu}
|
||||
"""
|
||||
# cmd = args['cmd'] #"ps -eo pid,user,pmem,pcpu,stat,etime,args|awk 'OFS=\";\" {$1=$1; if($5 > 9) print }'"
|
||||
xchar = ";"
|
||||
|
||||
try:
|
||||
_parser = args['parser'] if 'parser' in args else None
|
||||
stream = None
|
||||
if _parser and hasattr(_parser,'cmd'):
|
||||
cmd = getattr(_parser,'cmd')
|
||||
handler = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE)
|
||||
stream = str(handler.communicate()[0]).replace("b'",'')
|
||||
return _parser (stream)
|
||||
return stream
|
||||
#
|
||||
# At this point we need to load the parser or return the output as is
|
||||
# if 'parser' in args :
|
||||
# _parser = args['parser']
|
||||
|
||||
# return _parser(stream)
|
||||
# else:
|
||||
# return stream
|
||||
|
||||
except Exception as e:
|
||||
print (e)
|
||||
pass
|
||||
|
||||
# if __name__ == '__main__' :
|
||||
# #
|
||||
# # Being directly called (external use of the )
|
||||
# print(read())
|
Loading…
Reference in new issue