Skip to content

Instantly share code, notes, and snippets.

@TheFrozenFire
Created January 10, 2015 20:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save TheFrozenFire/2e4dbcd05e570ca86721 to your computer and use it in GitHub Desktop.
Save TheFrozenFire/2e4dbcd05e570ca86721 to your computer and use it in GitHub Desktop.
Script for spitting out JSON mappings of Zabbix macros
<?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;
}
}
{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}
{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
@TheFrozenFire
Copy link
Author

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment