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()