Using the Python Debugger
One of the most powerful tools when debugging the Python portions of a
ZenPack is the Python debugger
pdb you can set breakpoints in your code. When the
breakpoints are hit, you get a
(pdb) prompt that has full access to
examine the stack and any local or global variables.
To set a breakpoint in your code you add the following line.
import pdb; pdb.set_trace()
As with any code change, you must restart the Zenoss process that executes the code in question.
ZenPackLib v2.0 also adds a decorator,
writeDataToFile, that can be
used to save real-world results that your plugins will be processing.
This data can then be used to determine why a plugin is not behaving as
expected or to create your own unit tests.
In order to use this decorator, import it from the ZenPackLib ZenPack:
from ZenPacks.zenoss.ZenPackLib.lib.helpers.utils import writeDataToFile
Then use as a decorator for your plugin’s process
writeDataToFile is generic and can be used on any python
function or class method. It does not pickle file or logger objects. You
can also specify keywords which, when matched against an object’s
attributes, will cause an object not to be pickled.
class MyPlugin(PythonPlugin): @writeDataToFile(keywords=['zCommandPassword', 'windows_password']) def process(self, device, results, log): '''Perform device specific processing on modeler plugin results''' rm = self.relMap() # Add data to relationship map rm.attr1 = results.attr1 rm.attr2 = results.attr2 return rm
The save functionality is disabled unless you use
ZPL_DUMP_DATA environment variable. Be sure to only use in limited
runs or you will end up with a large number of pickle files.
export ZPL_DUMP_DATA=1; zenmodeler run -d mydevice; unset ZPL_DUMP_DATA
The pickle file(s) will be written to your
/tmp folder using the class
name and function name with current timestamp. Using the definition from
above, the file name would
XXXXXX is the time at which
the data was processed. Assuming
device has either a zCommandPassword
or windows_password attribute, the
will not be pickled.
When dumping existing event classes using the
--dump-event-classesoption, some transforms and/or explanations may show as either unformatted text within double quotes or as formatted text within single quotes. This is due to how the Python
yamlpackage handles strings. Either of these two formats are acceptable when used in
ZenPacks using earlier versions of ZenPackLib logged template changes to the console during installation. These messages might have disturbed some users due to their wording and logging as
ERRORstatus. These have been revised and now log as informational, but the old format will be displayed when upgrading from a pre-ZenPacklib 2.0 ZenPack to one using the latest version. Subsequent installs will use the newer format.