Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
	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()
Ejemplo n.º 3
0
	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)
Ejemplo n.º 4
0
	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
Ejemplo n.º 5
0
	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
Ejemplo n.º 6
0
	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')
Ejemplo n.º 7
0
    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)
Ejemplo n.º 8
0
 def method(*args):
     Log().warning(
         'Failed to call unkown method "{}" for element of class "{}"'.
         format(name, self.getClassName()))