|
@@ -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())
|