You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
"""
|
|
|
|
This program is designed to inspect an application environment
|
|
|
|
This program should only be run on unix friendly systems
|
|
|
|
|
|
|
|
"""
|
|
|
|
from __future__ import division
|
|
|
|
import os
|
|
|
|
import subprocess
|
|
|
|
from sets import Set
|
|
|
|
import re
|
|
|
|
|
|
|
|
class Analysis:
|
|
|
|
def __init__(self):
|
|
|
|
self.logs = []
|
|
|
|
pass
|
|
|
|
def post(self,object):
|
|
|
|
self.logs.append(object)
|
|
|
|
"""
|
|
|
|
This class is designed to analyze environment variables. Environment variables can either be folders, files or simple values
|
|
|
|
The class returns a quantifiable assessment of the environment variables (expected 100%)
|
|
|
|
"""
|
|
|
|
class Env(Analysis):
|
|
|
|
def __init__(self,values):
|
|
|
|
Analysis.__init__(self)
|
|
|
|
self.values = values
|
|
|
|
"""
|
|
|
|
This function evaluate the validity of an environment variable by returning a 1 or 0 (computable)
|
|
|
|
The function will use propositional logic (https://en.wikipedia.org/wiki/Propositional_calculus)
|
|
|
|
"""
|
|
|
|
def evaluate(self,id):
|
|
|
|
|
|
|
|
if id in os.environ :
|
|
|
|
#
|
|
|
|
# We can inspect to make sure the environment variable is not a path or filename.
|
|
|
|
# Using propositional logic we proceed as follows:
|
|
|
|
# - (p) We determine if the value is an folder or file name (using regex)
|
|
|
|
# - (q) In case of a file or folder we check for existance
|
|
|
|
# The final result is a conjuction of p and q
|
|
|
|
#
|
|
|
|
value = os.environ[id]
|
|
|
|
expressions = [os.sep,'(\\.\w+)$']
|
|
|
|
p = sum([ re.search(xchar,value) is not None for xchar in expressions])
|
|
|
|
q = os.path.exists(value)
|
|
|
|
|
|
|
|
return int(p and q)
|
|
|
|
else:
|
|
|
|
return 0
|
|
|
|
|
|
|
|
def composite (self):
|
|
|
|
r = [ self.evaluate(id) for id in self.values] ;
|
|
|
|
N = len(r)
|
|
|
|
n = sum(r)
|
|
|
|
class ProcessCounter(Analysis):
|
|
|
|
#return [{"memory_usage":row[0],"cpu_usage":row[1],"memory_available":row[2]/1000,"label":row[3]} for row in ma]
|
|
|
|
|