I have been working on a zenpack that will allow a user to create arbitrary custom maps somewhat in the style of zabbix. Some of the features I have been aiming for:
- Maps can have arbitrary images as backgrounds.
- Maps can contain devices or submaps
- ZenPack contains drag and drop editor
- Nodes images can be set to user icons, and their labels can be positioned on any side of the icon, or ommitted entirely
- Portlet allows you to navigate through the maps, and updates itself
- A map's status is dependant on the status of any nodes or submaps on it.
- Edges can be plain lines, or arrows showing the amount of bandwidth on the interface they represent
The actual implementation of the portlet and the map editor is fairly solid right now. We are currently monitoring about 1800 devices, most of which have placed into these hand-drawn maps. The individual maps load very quickly, and the portlet updates the map image seamlessly every 30 seconds.
I am not very familiar with zope, and the more I try to learn, the less it makes sense to me. There are a number of issues I am trying to solve that I would love some help with:
- The map editor is implemented as a tab in the Locations section. Each Location has a custom_map property that contains all the information needed to draw a map. I seem unable to make the tab show up consistently though. When I set a recursive function to add it to all the Location objects, it works on some and not the others.
- I would like to find a way to make the tab show up for new Locations as well. I have tried monkey patching the base Location as well as the class it derives from, but neither seems to work.
- The map drawing code relies on PIL. There is a namespace conflict between one of the PIL modules (ImageFile) and zenoss. I had to modify PIL slightly to avoid the conflict. Is there some way I can include this with the zenpack? Or is there some other api I should be using to draw the images.