Scripting Debug and Error Handling

Hi,
I would like to have an opinion from someone who have more experience/knowledge than me.
I come up with this template I’m using for scripting in Ignition.
My aim is to have a solid starting point, in order to have reliable debugging messages/history in case of issues.
I would like to know your opinion about, in order to understand if I’m doing it wrong or if there is a better or smarter way to achieve the same in Jython/Ignition


##from java.lang import Exception
import sys
import traceback
import inspect

def Go(loggerMode = 'trace'):
	'''
	desc : 
	
	param : 
	'''
	
	
	##logger 
	log = _loggerInit(loggerMode)
	log.trace('Start')
	startingTime = system.date.now()
	
	scriptReport = {
		'result' : False,
		'message' : '',
		'payload' : {},
		'executed_in_ms' : -1
	}
	
	
	try:
		###
		### TODO
		for i in range(5000):
			a = 2
		if True : 
			raise Exception('Esempio raise di un eccezione')
		
		scriptReport['result'] = True
		
	except :
		mex = traceback.format_exc()
		log.error(mex)
		scriptReport['result'] = False
		scriptReport['message'] = mex
	
	finally : 
		endingTime = system.date.now()
		scriptReport['executed_in_ms'] = system.date.millisBetween(startingTime, endingTime)
		log.trace("executed in {} ms".format(scriptReport['executed_in_ms']))
	
	###
	
	return scriptReport 




def _loggerInit(mode):
	
	### Impostazioni Logger
	logInfo = {
		'fileName': sys._getframe().f_code.co_filename.replace('<module:','').replace('>',''),
		'funcName': sys._getframe().f_code.co_name
	}
	logName = '{}.{}'.format(logInfo['fileName'],inspect.stack()[1][3])
	log = system.util.getLogger(logName)
	system.util.setLoggingLevel(logName, mode)
	### Fine impostazioni Logger
	
	return log

Go()

Template for database usage

from java.lang import Exception
import sys
import traceback
import inspects

def Go(loggerMode = 'trace'):
	'''
	desc : 
	
	param : 
	'''
	
	
	##logger 
	log = _loggerInit(loggerMode)
	log.trace('Start')
	startingTime = system.date.now()
	
	
	scriptReport = {
		'result' : False,
		'message' : '',
		'payload' : {},
		'executed_in_ms' : -1
	}
	
	
	
	p = {
		'placeholder': True,
	}	
	
	
	 
	tid = system.db.beginTransaction('database connection or default')
	
	try : 
	    ## placeholder, replace with code -------------------------

		res = system.db.runNamedQuery('path', p, tid)
		log.trace('res query insert scheduler {}'.format(res))
		
		if res != 1 : raise Exception('Errore inserimento dati')
		system.db.commitTransaction(tid)
		scriptReport['result'] = True

         ## ------------------------------------------------------------------

	
	except :
	
		mex = traceback.format_exc()
		system.db.rollbackTransaction(tid)
		log.error('rollback for error : {}'.format(mex))
		scriptReport['result'] = False
		scriptReport['message'] = mex
		
		
		
	finally: 
		system.db.closeTransaction(tid)
		log.trace('closing transaction')
		endingTime = system.date.now()
		log.trace("executed in {} ms".format(system.date.millisBetween(endingTime, startingTime)))
		
	endingTime = system.date.now()
	scriptReport['executed_in_ms'] = system.date.millisBetween(startingTime, endingTime)
	log.trace("executed in {} ms".format(scriptReport['executed_in_ms']))
	
	return scriptReport 



def _loggerInit(mode):
	
	### Impostazioni Logger
	logInfo = {
		'fileName': sys._getframe().f_code.co_filename.replace('<module:','').replace('>',''),
		'funcName': sys._getframe().f_code.co_name
	}
	logName = '{}.{}'.format(logInfo['fileName'],inspect.stack()[1][3])
	log = system.util.getLogger(logName)
	system.util.setLoggingLevel(logName, mode)
	### Fine impostazioni Logger
	
	return log

Go()
1 Like