def snapshot(self): """ Create a snapshot and store the given ``DataProviderResult`` list along with a timestamp using a given storage driver. """ logger = Log() results = [] try: storageDriverModule = __import__(__name__) storageDriverClass = getattr( storageDriverModule, '{}StorageDriver'.format(self.storageDriver)) storageDriverInstance = storageDriverClass(self.storageConfig) except: logger.error('Error instanciating the storage driver') sys.exit(1) for provider in self.providers: providerClass = provider.get('class') providerName = provider.get('name') providerConfig = provider.get('config') results.append( DataProviderResult(providerClass, providerName, providerConfig)) try: modelSize = os.path.getsize(self.model) except: modelSize = 0 storageDriverInstance.add(results, modelSize) self.history.sync()
def add(self, dataProviderResults, modelSize): """ Add a new row to the snapshots table. Args: dataProviderResults (list): The list of :class:`revitron.analyze.DataProviderResult` objects modelSize (float): The local file's size in bytes """ try: file = self.config['file'] except: Log().error('No SQLite database file defined') sys.exit(1) create = '' insertColumns = ', model_size' insertParams = ', :model_size' data = dict() data['model_size'] = modelSize for item in dataProviderResults: create = '{} {} {},'.format(create, item.name, item.dataType) insertColumns = '{}, {}'.format(insertColumns, item.name) insertParams = '{}, :{}'.format(insertParams, item.name) data[item.name] = item.value conn = sqlite3.connect(file) cursor = conn.cursor() cursor.execute(self._createTable.format(create)) cursor.execute(self._insertRow.format(insertColumns, insertParams), data) conn.commit() conn.close()
def add(self, dataProviderResults, modelSize): """ Add a new item to JSON file. Args: dataProviderResults (list): The list of :class:`revitron.analyze.DataProviderResult` objects modelSize (float): The local file's size in bytes """ try: file = self.config['file'] except: Log().error('No JSON file defined') sys.exit(1) try: with open(file) as handle: snapshots = json.load(handle, object_pairs_hook=OrderedDict) except: snapshots = [] data = OrderedDict() data['timestamp'] = self.timestamp data['model_size'] = modelSize for item in dataProviderResults: data[item.name] = item.value snapshots.append(data) with open(file, 'w') as handle: json.dump(snapshots, handle, indent=2)
def get(self, endpoint, log=True): """ Get data from a given endpoint. Args: endpoint (string): The Directus API endpoint log (bool, optional): Enable logging. Defaults to True. Returns: dict: The reponse dictionary """ response = requests.get( '{}/{}'.format(self.host, endpoint), headers=self._headers ) try: responseJson = response.json() return responseJson['data'] except: if log: Log().error('Request has failed') Log().error(response.json()) return None
def post(self, endpoint, data): """ Post data to a given enpoint. Args: endpoint (string): The endpoint data (dict): The data dict Returns: dict: The reponse dictionary """ response = requests.post( '{}/{}'.format(self.host, endpoint), headers=self._headers, data=json.dumps(data) ) try: responseJson = response.json() return responseJson['data'] except: Log().error(data) Log().error('Request has failed') Log().error(response.json()) return None
def __init__(self, config): """ Init a new Directus storage driver instance with a givenm configuration. Args: config (dict): The driver configuration """ try: collection = 'snapshots__{}'.format( re.sub(r'[^a-z0-9]+', '_', config['collection'].lower()) ) host = config['host'].rstrip('/') token = config['token'] except: Log().error('Invalid Directus configuration') sys.exit(1) self.api = DirectusAPI(host, token, collection) self.collection = collection self.timestamp = datetime.fromtimestamp(time()).strftime('%Y-%m-%dT%H:%M:%S')
def __init__(self, configJson): """ Init a ``ModelAnalyzer`` instance. Args: configJson (string): The configuration JSON file """ file = open(configJson) config = json.load(file) file.close() try: self.storageDriver = config['storage']['driver'] self.storageConfig = config['storage']['config'] self.providers = config['providers'] self.model = self._getLocalPath(config['model']) except: from revitron import Log Log().error('Invalid analyzer configuration JSON file') sys.exit(1) self.history = DirectusHistorySynchronizer(config)
def method(*args): Log().warning( 'Failed to call unkown method "{}" for element of class "{}"'. format(name, self.getClassName()))