Created
January 10, 2015 20:52
-
-
Save TheFrozenFire/2e4dbcd05e570ca86721 to your computer and use it in GitHub Desktop.
Script for spitting out JSON mappings of Zabbix macros
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$included = [ | |
'ACTION', | |
'DATE', | |
'EVENT', | |
'HOST', | |
'TIME', | |
'TRIGGER', | |
]; | |
$pretty = true; | |
$collection = []; | |
if(isset($argv[2])) { | |
$supported = explode("\n", file_get_contents($argv[2])); | |
foreach($supported as $supportList) { | |
if(substr($supportList, 0, 2) == "\t1") { | |
continue; | |
} | |
$supportList = explode("\t", $supportList); | |
$macro = trim($supportList[0]); | |
foreach(array_slice($supportList, 1) as $key => $check) { | |
if($check == "X ") { | |
if(!isset($collection[$key+1])) { | |
$collection[$key+1] = []; | |
} | |
$collection[$key+1][] = $macro; | |
} | |
} | |
} | |
} | |
$macros = explode("\n", file_get_contents($argv[1])); | |
for($i = 1; $i < 17; $i++) { | |
if(!isset($collection[$i])) { | |
continue; | |
} | |
$result = []; | |
foreach($macros as $key => $macro) { | |
if((strlen($macro) < 1) || !in_array($macro, $collection[$i])) { | |
continue; | |
} | |
$macroName = trim($macro, '{}'); | |
addMacroToResult($macroName, $result); | |
} | |
file_put_contents(__DIR__.'/collection/'.$i.'.json', str_replace(['\\\\{', '\\\\}'], ['{', '}'], json_encode($result, $pretty?JSON_PRETTY_PRINT:null))); | |
} | |
function addMacroToResult($macroName, &$result, $fullSection = null) { | |
if(strpos($macroName, '.ORIG') !== false) { | |
$macroName = str_replace('.ORIG', '_ORIG', $macroName); | |
} | |
if(strpos($macroName, '.') !== false) { | |
list($section, $remainder) = explode('.', $macroName, 2); | |
} else { | |
$section = $macroName; | |
$remainder = null; | |
} | |
if(strlen($remainder) > 0) { | |
if(!isset($result[$section])) { | |
$result[$section] = []; | |
} | |
addMacroToResult($remainder, $result[$section], "{$fullSection}{$section}."); | |
} else { | |
if(preg_match('#(\w+)\<(\d+)-(\d+)\>#', $section, $matches)) { | |
$section = $matches[1]; | |
$value = []; | |
for($i = $matches[2]; $i < $matches[3]+1; $i++) { | |
$value[$i] = "\{{$fullSection}{$matches[1]}{$i}\}"; | |
} | |
} else { | |
$value = "\{{$fullSection}{$section}\}"; | |
} | |
$result[$section] = $value; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ACTION.ID} | |
{ACTION.NAME} | |
{DATE} | |
{DISCOVERY.DEVICE.IPADDRESS} | |
{DISCOVERY.DEVICE.DNS} | |
{DISCOVERY.DEVICE.STATUS} | |
{DISCOVERY.DEVICE.UPTIME} | |
{DISCOVERY.RULE.NAME} | |
{DISCOVERY.SERVICE.NAME} | |
{DISCOVERY.SERVICE.PORT} | |
{DISCOVERY.SERVICE.STATUS} | |
{DISCOVERY.SERVICE.UPTIME} | |
{ESC.HISTORY} | |
{EVENT.ACK.HISTORY} | |
{EVENT.ACK.STATUS} | |
{EVENT.AGE} | |
{EVENT.DATE} | |
{EVENT.ID} | |
{EVENT.RECOVERY.DATE} | |
{EVENT.RECOVERY.ID} | |
{EVENT.RECOVERY.STATUS} | |
{EVENT.RECOVERY.TIME} | |
{EVENT.RECOVERY.VALUE} | |
{EVENT.STATUS} | |
{EVENT.TIME} | |
{EVENT.VALUE} | |
{HOST.CONN<1-9>} | |
{HOST.DNS<1-9>} | |
{HOST.HOST<1-9>} | |
{HOST.ID} | |
{HOST.IP<1-9>} | |
{HOST.METADATA} | |
{HOST.NAME<1-9>} | |
{HOST.PORT<1-9>} | |
{HOSTGROUP.ID} | |
{INVENTORY.ALIAS<1-9>} | |
{INVENTORY.ASSET.TAG<1-9>} | |
{INVENTORY.CHASSIS<1-9>} | |
{INVENTORY.CONTACT<1-9>} | |
{INVENTORY.CONTRACT.NUMBER<1-9>} | |
{INVENTORY.DEPLOYMENT.STATUS<1-9>} | |
{INVENTORY.HARDWARE<1-9>} | |
{INVENTORY.HARDWARE.FULL<1-9>} | |
{INVENTORY.HOST.NETMASK<1-9>} | |
{INVENTORY.HOST.NETWORKS<1-9>} | |
{INVENTORY.HOST.ROUTER<1-9>} | |
{INVENTORY.HW.ARCH<1-9>} | |
{INVENTORY.HW.DATE.DECOMM<1-9>} | |
{INVENTORY.HW.DATE.EXPIRY<1-9>} | |
{INVENTORY.HW.DATE.INSTALL<1-9>} | |
{INVENTORY.HW.DATE.PURCHASE<1-9>} | |
{INVENTORY.INSTALLER.NAME<1-9>} | |
{INVENTORY.LOCATION<1-9>} | |
{INVENTORY.LOCATION.LAT<1-9>} | |
{INVENTORY.LOCATION.LON<1-9>} | |
{INVENTORY.MACADDRESS.A<1-9>} | |
{INVENTORY.MACADDRESS.B<1-9>} | |
{INVENTORY.MODEL<1-9>} | |
{INVENTORY.NAME<1-9>} | |
{INVENTORY.NOTES<1-9>} | |
{INVENTORY.OOB.IP<1-9>} | |
{INVENTORY.OOB.NETMASK<1-9>} | |
{INVENTORY.OOB.ROUTER<1-9>} | |
{INVENTORY.OS<1-9>} | |
{INVENTORY.OS.FULL<1-9>} | |
{INVENTORY.OS.SHORT<1-9>} | |
{INVENTORY.POC.PRIMARY.CELL<1-9>} | |
{INVENTORY.POC.PRIMARY.EMAIL<1-9>} | |
{INVENTORY.POC.PRIMARY.NAME<1-9>} | |
{INVENTORY.POC.PRIMARY.NOTES<1-9>} | |
{INVENTORY.POC.PRIMARY.PHONE.A<1-9>} | |
{INVENTORY.POC.PRIMARY.PHONE.B<1-9>} | |
{INVENTORY.POC.PRIMARY.SCREEN<1-9>} | |
{INVENTORY.POC.SECONDARY.CELL<1-9>} | |
{INVENTORY.POC.SECONDARY.EMAIL<1-9>} | |
{INVENTORY.POC.SECONDARY.NAME<1-9>} | |
{INVENTORY.POC.SECONDARY.NOTES<1-9>} | |
{INVENTORY.POC.SECONDARY.PHONE.A<1-9>} | |
{INVENTORY.POC.SECONDARY.PHONE.B<1-9>} | |
{INVENTORY.POC.SECONDARY.SCREEN<1-9>} | |
{INVENTORY.SERIALNO.A<1-9>} | |
{INVENTORY.SERIALNO.B<1-9>} | |
{INVENTORY.SITE.ADDRESS.A<1-9>} | |
{INVENTORY.SITE.ADDRESS.B<1-9>} | |
{INVENTORY.SITE.ADDRESS.C<1-9>} | |
{INVENTORY.SITE.CITY<1-9>} | |
{INVENTORY.SITE.COUNTRY<1-9>} | |
{INVENTORY.SITE.NOTES<1-9>} | |
{INVENTORY.SITE.RACK<1-9>} | |
{INVENTORY.SITE.STATE<1-9>} | |
{INVENTORY.SITE.ZIP<1-9>} | |
{INVENTORY.SOFTWARE<1-9>} | |
{INVENTORY.SOFTWARE.APP.A<1-9>} | |
{INVENTORY.SOFTWARE.APP.B<1-9>} | |
{INVENTORY.SOFTWARE.APP.C<1-9>} | |
{INVENTORY.SOFTWARE.APP.D<1-9>} | |
{INVENTORY.SOFTWARE.APP.E<1-9>} | |
{INVENTORY.SOFTWARE.FULL<1-9>} | |
{INVENTORY.TAG<1-9>} | |
{INVENTORY.TYPE<1-9>} | |
{INVENTORY.TYPE.FULL<1-9>} | |
{INVENTORY.URL.A<1-9>} | |
{INVENTORY.URL.B<1-9>} | |
{INVENTORY.URL.C<1-9>} | |
{INVENTORY.VENDOR<1-9>} | |
{ITEM.DESCRIPTION<1-9>} | |
{ITEM.ID<1-9>} | |
{ITEM.KEY<1-9>} | |
{ITEM.KEY.ORIG<1-9>} | |
{ITEM.LASTVALUE<1-9>} | |
{ITEM.LOG.AGE<1-9>} | |
{ITEM.LOG.DATE<1-9>} | |
{ITEM.LOG.EVENTID<1-9>} | |
{ITEM.LOG.NSEVERITY<1-9>} | |
{ITEM.LOG.SEVERITY<1-9>} | |
{ITEM.LOG.SOURCE<1-9>} | |
{ITEM.LOG.TIME<1-9>} | |
{ITEM.NAME<1-9>} | |
{ITEM.NAME.ORIG<1-9>} | |
{ITEM.STATE<1-9>} | |
{ITEM.VALUE<1-9>} | |
{LLDRULE.DESCRIPTION} | |
{LLDRULE.ID} | |
{LLDRULE.KEY} | |
{LLDRULE.KEY.ORIG} | |
{LLDRULE.NAME} | |
{LLDRULE.NAME.ORIG} | |
{LLDRULE.STATE} | |
{MAP.ID} | |
{NODE.ID<1-9>} | |
{NODE.NAME<1-9>} | |
{PROXY.NAME<1-9>} | |
{TIME} | |
{TRIGGER.DESCRIPTION} | |
{TRIGGER.EVENTS.ACK} | |
{TRIGGER.EVENTS.PROBLEM.ACK} | |
{TRIGGER.EVENTS.PROBLEM.UNACK} | |
{TRIGGER.EVENTS.UNACK} | |
{TRIGGER.HOSTGROUP.NAME} | |
{TRIGGER.PROBLEM.EVENTS.PROBLEM.ACK} | |
{TRIGGER.PROBLEM.EVENTS.PROBLEM.UNACK} | |
{TRIGGER.EXPRESSION} | |
{TRIGGER.ID} | |
{TRIGGER.NAME} | |
{TRIGGER.NAME.ORIG} | |
{TRIGGER.NSEVERITY} | |
{TRIGGER.SEVERITY} | |
{TRIGGER.STATE} | |
{TRIGGER.STATUS} | |
{TRIGGER.TEMPLATE.NAME} | |
{TRIGGER.URL} | |
{TRIGGER.VALUE} | |
{TRIGGERS.UNACK} | |
{TRIGGERS.PROBLEM.UNACK} | |
{TRIGGERS.ACK} | |
{TRIGGERS.PROBLEM.ACK} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ACTION.ID} X X X X X X | |
{ACTION.NAME} X X X X X X | |
{DATE} X X X X X X | |
{DISCOVERY.DEVICE.IPADDRESS} X | |
{DISCOVERY.DEVICE.DNS} X | |
{DISCOVERY.DEVICE.STATUS} X | |
{DISCOVERY.DEVICE.UPTIME} X | |
{DISCOVERY.RULE.NAME} X | |
{DISCOVERY.SERVICE.NAME} X | |
{DISCOVERY.SERVICE.PORT} X | |
{DISCOVERY.SERVICE.STATUS} X | |
{DISCOVERY.SERVICE.UPTIME} X | |
{ESC.HISTORY} X X X X | |
{EVENT.ACK.HISTORY} X | |
{EVENT.ACK.STATUS} X | |
{EVENT.AGE} X X X X X X | |
{EVENT.DATE} X X X X X X | |
{EVENT.ID} X X X X X X | |
{EVENT.RECOVERY.DATE} X X X X | |
{EVENT.RECOVERY.ID} X X X X | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
{EVENT.RECOVERY.STATUS} X X X X | |
{EVENT.RECOVERY.TIME} X X X X | |
{EVENT.RECOVERY.VALUE} X X X X | |
{EVENT.STATUS} X X X X X X | |
{EVENT.TIME} X X X X X X | |
{EVENT.VALUE} X X X X X X | |
{HOST.CONN<1-9>} X X X X X X2 X X X X5 X | |
{HOST.DNS<1-9>} X X X X X X2 X X X X5 X | |
{HOST.HOST<1-9>} X X X X X X X2 X X X X5 X | |
{HOST.ID} X | |
{HOST.IP<1-9>} X X X X X X X2 X X X X5 X | |
{HOST.METADATA} X | |
{HOST.NAME<1-9>} X X X X X X X2 X X X X5 X | |
{HOST.PORT<1-9>} X X X X X X8 | |
{HOSTGROUP.ID} X | |
{INVENTORY.ALIAS<1-9>} X X X X | |
{INVENTORY.ASSET.TAG<1-9>} X X X X | |
{INVENTORY.CHASSIS<1-9>} X X X X | |
{INVENTORY.CONTACT<1-9>} X X X X | |
{INVENTORY.CONTRACT.NUMBER<1-9>} X X X X | |
{INVENTORY.DEPLOYMENT.STATUS<1-9>} X X X X | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
{INVENTORY.HARDWARE<1-9>} X X X X | |
{INVENTORY.HARDWARE.FULL<1-9>} X X X X | |
{INVENTORY.HOST.NETMASK<1-9>} X X X X | |
{INVENTORY.HOST.NETWORKS<1-9>} X X X X | |
{INVENTORY.HOST.ROUTER<1-9>} X X X X | |
{INVENTORY.HW.ARCH<1-9>} X X X X | |
{INVENTORY.HW.DATE.DECOMM<1-9>} X X X X | |
{INVENTORY.HW.DATE.EXPIRY<1-9>} X X X X | |
{INVENTORY.HW.DATE.INSTALL<1-9>} X X X X | |
{INVENTORY.HW.DATE.PURCHASE<1-9>} X X X X | |
{INVENTORY.INSTALLER.NAME<1-9>} X X X X | |
{INVENTORY.LOCATION<1-9>} X X X X | |
{INVENTORY.LOCATION.LAT<1-9>} X X X X | |
{INVENTORY.LOCATION.LON<1-9>} X X X X | |
{INVENTORY.MACADDRESS.A<1-9>} X X X X | |
{INVENTORY.MACADDRESS.B<1-9>} X X X X | |
{INVENTORY.MODEL<1-9>} X X X X | |
{INVENTORY.NAME<1-9>} X X X X | |
{INVENTORY.NOTES<1-9>} X X X X | |
{INVENTORY.OOB.IP<1-9>} X X X X | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
{INVENTORY.OOB.NETMASK<1-9>} X X X X | |
{INVENTORY.OOB.ROUTER<1-9>} X X X X | |
{INVENTORY.OS<1-9>} X X X X | |
{INVENTORY.OS.FULL<1-9>} X X X X | |
{INVENTORY.OS.SHORT<1-9>} X X X X | |
{INVENTORY.POC.PRIMARY.CELL<1-9>} X X X X | |
{INVENTORY.POC.PRIMARY.EMAIL<1-9>} X X X X | |
{INVENTORY.POC.PRIMARY.NAME<1-9>} X X X X | |
{INVENTORY.POC.PRIMARY.NOTES<1-9>} X X X X | |
{INVENTORY.POC.PRIMARY.PHONE.A<1-9>} X X X X | |
{INVENTORY.POC.PRIMARY.PHONE.B<1-9>} X X X X | |
{INVENTORY.POC.PRIMARY.SCREEN<1-9>} X X X X | |
{INVENTORY.POC.SECONDARY.CELL<1-9>} X X X X | |
{INVENTORY.POC.SECONDARY.EMAIL<1-9>} X X X X | |
{INVENTORY.POC.SECONDARY.NAME<1-9>} X X X X | |
{INVENTORY.POC.SECONDARY.NOTES<1-9>} X X X X | |
{INVENTORY.POC.SECONDARY.PHONE.A<1-9>} X X X X | |
{INVENTORY.POC.SECONDARY.PHONE.B<1-9>} X X X X | |
{INVENTORY.POC.SECONDARY.SCREEN<1-9>} X X X X | |
{INVENTORY.SERIALNO.A<1-9>} X X X X | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
{INVENTORY.SERIALNO.B<1-9>} X X X X | |
{INVENTORY.SITE.ADDRESS.A<1-9>} X X X X | |
{INVENTORY.SITE.ADDRESS.B<1-9>} X X X X | |
{INVENTORY.SITE.ADDRESS.C<1-9>} X X X X | |
{INVENTORY.SITE.CITY<1-9>} X X X X | |
{INVENTORY.SITE.COUNTRY<1-9>} X X X X | |
{INVENTORY.SITE.NOTES<1-9>} X X X X | |
{INVENTORY.SITE.RACK<1-9>} X X X X | |
{INVENTORY.SITE.STATE<1-9>} X X X X | |
{INVENTORY.SITE.ZIP<1-9>} X X X X | |
{INVENTORY.SOFTWARE<1-9>} X X X X | |
{INVENTORY.SOFTWARE.APP.A<1-9>} X X X X | |
{INVENTORY.SOFTWARE.APP.B<1-9>} X X X X | |
{INVENTORY.SOFTWARE.APP.C<1-9>} X X X X | |
{INVENTORY.SOFTWARE.APP.D<1-9>} X X X X | |
{INVENTORY.SOFTWARE.APP.E<1-9>} X X X X | |
{INVENTORY.SOFTWARE.FULL<1-9>} X X X X | |
{INVENTORY.TAG<1-9>} X X X X | |
{INVENTORY.TYPE<1-9>} X X X X | |
{INVENTORY.TYPE.FULL<1-9>} X X X X | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
{INVENTORY.URL.A<1-9>} X X X X | |
{INVENTORY.URL.B<1-9>} X X X X | |
{INVENTORY.URL.C<1-9>} X X X X | |
{INVENTORY.VENDOR<1-9>} X X X X | |
{ITEM.DESCRIPTION<1-9>} X X X X | |
{ITEM.ID<1-9>} X X X X | |
{ITEM.KEY<1-9>} X X X X | |
{ITEM.KEY.ORIG<1-9>} X X X X | |
{ITEM.LASTVALUE<1-9>} X X | |
{ITEM.LOG.AGE<1-9>} X | |
{ITEM.LOG.DATE<1-9>} X | |
{ITEM.LOG.EVENTID<1-9>} X | |
{ITEM.LOG.NSEVERITY<1-9>} X | |
{ITEM.LOG.SEVERITY<1-9>} X | |
{ITEM.LOG.SOURCE<1-9>} X | |
{ITEM.LOG.TIME<1-9>} X | |
{ITEM.NAME<1-9>} X X X X | |
{ITEM.NAME.ORIG<1-9>} X X X X | |
{ITEM.STATE<1-9>} X | |
{ITEM.VALUE<1-9>} X X | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
{LLDRULE.DESCRIPTION} X | |
{LLDRULE.ID} X | |
{LLDRULE.KEY} X | |
{LLDRULE.KEY.ORIG} X | |
{LLDRULE.NAME} X | |
{LLDRULE.NAME.ORIG} X | |
{LLDRULE.STATE} X | |
{MAP.ID} X | |
{NODE.ID<1-9>} X X X X X X | |
{NODE.NAME<1-9>} X X X X X X | |
{PROXY.NAME<1-9>} X X X X X X | |
{TIME} X X X X X X | |
{TRIGGER.DESCRIPTION} X X | |
{TRIGGER.EVENTS.ACK} X X | |
{TRIGGER.EVENTS.PROBLEM.ACK} X X | |
{TRIGGER.EVENTS.PROBLEM.UNACK} X X | |
{TRIGGER.EVENTS.UNACK} X X | |
{TRIGGER.HOSTGROUP.NAME} X X X | |
{TRIGGER.PROBLEM.EVENTS.PROBLEM.ACK} X | |
{TRIGGER.PROBLEM.EVENTS.PROBLEM.UNACK} X | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
{TRIGGER.EXPRESSION} X X | |
{TRIGGER.ID} X X X | |
{TRIGGER.NAME} X X | |
{TRIGGER.NAME.ORIG} X X | |
{TRIGGER.NSEVERITY} X X | |
{TRIGGER.SEVERITY} X X | |
{TRIGGER.STATE} X | |
{TRIGGER.STATUS} X | |
{TRIGGER.TEMPLATE.NAME} X X | |
{TRIGGER.URL} X X | |
{TRIGGER.VALUE} X X | |
{TRIGGERS.UNACK} X | |
{TRIGGERS.PROBLEM.UNACK} X | |
{TRIGGERS.ACK} X | |
{TRIGGERS.PROBLEM.ACK} X |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Invocation:
php convertmacrolist.php macrolist supportedlist
Data grabbed from table on https://www.zabbix.com/documentation/2.2/manual/appendix/macros/supported_by_location.
Spits out a directory called 'collection' which contains files for each supported location, by the respective numerical index.