parent
a975202693
commit
bbca190ba4
@ -0,0 +1,86 @@
|
|||||||
|
""""
|
||||||
|
This class defines the basic structure for a model, models can be either statistical or machine learning
|
||||||
|
and will be tightly coupled with the rendering engines (matplotlib or chartjs)
|
||||||
|
"""
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
|
class model :
|
||||||
|
"""
|
||||||
|
This model provides an overview of the raw data provided a list of variables. If one variable is provided a regression line will be added.
|
||||||
|
The intent of this model is to allow the user to visualize the distribution and trend of the data as is
|
||||||
|
"""
|
||||||
|
def __init__(self,**args):
|
||||||
|
"""
|
||||||
|
@param data
|
||||||
|
@param node name of the node
|
||||||
|
@param y_attr attributes on the y_axis
|
||||||
|
@param x_attr attributes on the x_axis
|
||||||
|
"""
|
||||||
|
self.data = args['data']
|
||||||
|
#self.node = args['node']
|
||||||
|
self.months = {1:"Jan",2:"Feb",3:"Mar",4:"Apr",5:"May",6:"Jun",7:"Jul",8:"Aug",9:"Sep",10:"Oct",11:"Nov",12:"Dec"}
|
||||||
|
self.cache = {}
|
||||||
|
if 'type' not in args :
|
||||||
|
self.set("type","scatter")
|
||||||
|
#self.x_attr = args['x_attr']
|
||||||
|
#self.y_attr = args['y_attr']
|
||||||
|
#self.set("x",self.data[x_attr].tolist())
|
||||||
|
#self.set("y",self.data[y_attr].tolist())
|
||||||
|
def can_do(self):
|
||||||
|
"""
|
||||||
|
This function will determine if the model can be processed or has met the preconditions for processing
|
||||||
|
"""
|
||||||
|
return self.data.shape[0] > 1 and self.data.shape[1] > 2
|
||||||
|
def format_date(self,row):
|
||||||
|
m = {1:"Jan",2:"Feb",3:"Mar",4:"Apr",5:"May",6:"Jun",7:"Jul",8:"Aug",9:"Sep",10:"Oct",11:"Nov",12:"Dec"}
|
||||||
|
return "-".join([m[row['month']],str(row['day']),str(row['year'])]) +" "+ " ".join([str(row['hour']),'h :',str(row['minute']),'min' ])
|
||||||
|
def compute(self):
|
||||||
|
"""
|
||||||
|
We compute a simple regression if and only if a single attribute is provided.
|
||||||
|
The framework of choice to compute the regression (for now) sklearn
|
||||||
|
@TODO: Find ways perhaps to use tensorflow
|
||||||
|
"""
|
||||||
|
def set(self,key,value):
|
||||||
|
self.cache[key] = value
|
||||||
|
def get(self,key):
|
||||||
|
return self.cache[key]
|
||||||
|
# class simple:
|
||||||
|
# class app_status(model):
|
||||||
|
# """
|
||||||
|
# This model will perform a simple count of application status
|
||||||
|
# The intent is to quickly inform the user if there's a crash
|
||||||
|
# """
|
||||||
|
# def __init(self,**args):
|
||||||
|
# model.__init__(self,**args)
|
||||||
|
# def compute(self):
|
||||||
|
# """
|
||||||
|
# This function performs the actual counts associated with the status of an application
|
||||||
|
# """
|
||||||
|
# df = self.data[df.name.str.contains('other',na=False)==False]
|
||||||
|
# x_crash = df.status.str.contains('X').sum()
|
||||||
|
# x_idle = df.status.str.contains('S').sum()
|
||||||
|
# x_run = df.shape[0] - x_crash - x_idle
|
||||||
|
# odf = pd.DataFrame({"labels":['crash','idle','running'],"counts":[x_crash,x_idle,x_run]})
|
||||||
|
# self.set("type","doughnut")
|
||||||
|
# # self.set("labels",["crash","idle","running"])
|
||||||
|
# # self.set("data",{"data":[x_crash,x_idle,x_run]})
|
||||||
|
# self.set('data',odf)
|
||||||
|
# if x_crash > 0 :
|
||||||
|
# self.set("analysis"," ".join([x_crash,"applications found out of ",str(df.shape[0]),"monitored" ]))
|
||||||
|
# class app_resource(model):
|
||||||
|
# """
|
||||||
|
# This model will group the applications that are monitored and the rest of the system to guage resource consumption (CPU,RAM)
|
||||||
|
# """
|
||||||
|
# def __init__(self,**args):
|
||||||
|
# model.__init__(self,**args)
|
||||||
|
# def compute(self):
|
||||||
|
# N = self.data.shape[0] - 1
|
||||||
|
|
||||||
|
# df = pd.DataFrame(self.data[self.data.name == 'other'].sum()[['cpu','mem']] ) .T
|
||||||
|
# df = df.append(pd.DataFrame( self.data[self.data.name != 'other'].sum()[['cpu','mem']] ).T)
|
||||||
|
# df['labels'] = ['other','monitored']
|
||||||
|
# # other_df = pd.DataFrame(self.data[self.data.name.str.contains('other',na=False)])
|
||||||
|
# # watch_df = pd.DataFrame(self.data[self.data.name.str.contains('other',na=False)==False])
|
||||||
|
# # datasets = [[other_df.cpu.sum(),watch_df.cpu.sum()],[other_df.mem.sum(),watch_df.mem.sum()]]
|
||||||
|
# self.set("data",df)
|
||||||
|
# self.set("type","bar")
|
@ -1,66 +0,0 @@
|
|||||||
""""
|
|
||||||
This class defines the basic structure for a model, models can be either statistical or machine learning
|
|
||||||
and will be tightly coupled with the rendering engines (matplotlib or chartjs)
|
|
||||||
""""
|
|
||||||
|
|
||||||
class model :
|
|
||||||
"""
|
|
||||||
This model provides an overview of the raw data provided a list of variables. If one variable is provided a regression line will be added.
|
|
||||||
The intent of this model is to allow the user to visualize the distribution and trend of the data as is
|
|
||||||
"""
|
|
||||||
def __init__(**args):
|
|
||||||
self.data = args['data']
|
|
||||||
self.node = args['node']
|
|
||||||
self.months = {1:"Jan",2:"Feb",3:"Mar",4:"Apr",5:"May",6:"Jun",7:"Jul",8:"Aug",9:"Sep",10:"Oct",11:"Nov",12:"Dec"}
|
|
||||||
self.cache = {}
|
|
||||||
self.set("type","scatter")
|
|
||||||
def can_do(self):
|
|
||||||
return False
|
|
||||||
def format_date(self,row):
|
|
||||||
m = {1:"Jan",2:"Feb",3:"Mar",4:"Apr",5:"May",6:"Jun",7:"Jul",8:"Aug",9:"Sep",10:"Oct",11:"Nov",12:"Dec"}
|
|
||||||
return "-".join([m[row['month']],str(row['day']),str(row['year'])]) +" "+ " ".join([str(row['hour']),'h :',str(row['minute']),'min' ])
|
|
||||||
|
|
||||||
def set(self,key,value):
|
|
||||||
self.cache[key] = value
|
|
||||||
def get(self,key):
|
|
||||||
return self.cache[key]
|
|
||||||
# class simple:
|
|
||||||
# class app_status(model):
|
|
||||||
# """
|
|
||||||
# This model will perform a simple count of application status
|
|
||||||
# The intent is to quickly inform the user if there's a crash
|
|
||||||
# """
|
|
||||||
# def __init(self,**args):
|
|
||||||
# model.__init__(self,**args)
|
|
||||||
# def compute(self):
|
|
||||||
# """
|
|
||||||
# This function performs the actual counts associated with the status of an application
|
|
||||||
# """
|
|
||||||
# df = self.data[df.name.str.contains('other',na=False)==False]
|
|
||||||
# x_crash = df.status.str.contains('X').sum()
|
|
||||||
# x_idle = df.status.str.contains('S').sum()
|
|
||||||
# x_run = df.shape[0] - x_crash - x_idle
|
|
||||||
# odf = pd.DataFrame({"labels":['crash','idle','running'],"counts":[x_crash,x_idle,x_run]})
|
|
||||||
# self.set("type","doughnut")
|
|
||||||
# # self.set("labels",["crash","idle","running"])
|
|
||||||
# # self.set("data",{"data":[x_crash,x_idle,x_run]})
|
|
||||||
# self.set('data',odf)
|
|
||||||
# if x_crash > 0 :
|
|
||||||
# self.set("analysis"," ".join([x_crash,"applications found out of ",str(df.shape[0]),"monitored" ]))
|
|
||||||
# class app_resource(model):
|
|
||||||
# """
|
|
||||||
# This model will group the applications that are monitored and the rest of the system to guage resource consumption (CPU,RAM)
|
|
||||||
# """
|
|
||||||
# def __init__(self,**args):
|
|
||||||
# model.__init__(self,**args)
|
|
||||||
# def compute(self):
|
|
||||||
# N = self.data.shape[0] - 1
|
|
||||||
|
|
||||||
# df = pd.DataFrame(self.data[self.data.name == 'other'].sum()[['cpu','mem']] ) .T
|
|
||||||
# df = df.append(pd.DataFrame( self.data[self.data.name != 'other'].sum()[['cpu','mem']] ).T)
|
|
||||||
# df['labels'] = ['other','monitored']
|
|
||||||
# # other_df = pd.DataFrame(self.data[self.data.name.str.contains('other',na=False)])
|
|
||||||
# # watch_df = pd.DataFrame(self.data[self.data.name.str.contains('other',na=False)==False])
|
|
||||||
# # datasets = [[other_df.cpu.sum(),watch_df.cpu.sum()],[other_df.mem.sum(),watch_df.mem.sum()]]
|
|
||||||
# self.set("data",df)
|
|
||||||
# self.set("type","bar")
|
|
@ -0,0 +1,26 @@
|
|||||||
|
import models
|
||||||
|
import free
|
||||||
|
import paid
|
||||||
|
def instance(id,**args):
|
||||||
|
"""
|
||||||
|
Returns an instance of a model given the following :
|
||||||
|
@param data
|
||||||
|
@param x_attr
|
||||||
|
@param y_attr
|
||||||
|
@param node
|
||||||
|
|
||||||
|
"""
|
||||||
|
collection = []
|
||||||
|
data = args['data']
|
||||||
|
for pkg_name in ['apps','folders'] :
|
||||||
|
|
||||||
|
if pkg_name in data and pkg_name in dir(eval(id)):
|
||||||
|
records = data[pkg_name]
|
||||||
|
module = eval(".".join([id,pkg_name]))
|
||||||
|
collection += [ eval(".".join([id,pkg_name,name]))(data=records) for name in dir(module) if not name.startswith('__')]
|
||||||
|
#
|
||||||
|
# let's create the instances and run the models and return the caches of each model
|
||||||
|
#
|
||||||
|
|
||||||
|
return collection
|
||||||
|
|
@ -1 +1,7 @@
|
|||||||
|
"""
|
||||||
|
This package serves various FREE models in order to provide insight for apps and folders
|
||||||
|
The models will show basic general trends and occasionally a regression if applicable.
|
||||||
|
|
||||||
|
"""
|
||||||
|
#import folders
|
||||||
|
import apps
|
||||||
|
Binary file not shown.
@ -0,0 +1,6 @@
|
|||||||
|
from models import model
|
||||||
|
|
||||||
|
class apps(model):
|
||||||
|
pass
|
||||||
|
class user(model):
|
||||||
|
pass
|
Binary file not shown.
@ -0,0 +1 @@
|
|||||||
|
|
@ -0,0 +1,7 @@
|
|||||||
|
from models import model
|
||||||
|
class apps (model):
|
||||||
|
pass
|
||||||
|
class folders(model):
|
||||||
|
pass
|
||||||
|
class user(model):
|
||||||
|
pass
|
Binary file not shown.
@ -0,0 +1,25 @@
|
|||||||
|
from utils import transport
|
||||||
|
import unittest
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
from models import model, factory
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
|
path = os.environ['CONFIG_PATH']
|
||||||
|
f = open(path)
|
||||||
|
CONFIG = json.loads( f.read())
|
||||||
|
CONFIG['store']['args']['uid'] = 'cus_D2x3ItYNfWjSY3'
|
||||||
|
f.close()
|
||||||
|
dfactory = transport.DataSourceFactory()
|
||||||
|
reader = dfactory.instance(type='CouchdbReader',args = CONFIG['store']['args'])
|
||||||
|
|
||||||
|
class TestModel(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
self.document = reader.read()
|
||||||
|
self.models = []
|
||||||
|
def test_ScatterPlot(self):
|
||||||
|
r = reader.view('clients/logs',key=CONFIG['store']['args']['uid'])
|
||||||
|
print factory.instance('free',data=r)
|
||||||
|
pass
|
||||||
|
if __name__ == '__main__' :
|
||||||
|
unittest.main()
|
Loading…
Reference in new issue