mirror of
				https://github.com/moudsen/mailGraph
				synced 2025-11-03 19:17:38 +01:00 
			
		
		
		
	Added Tag processing for Triggers to set period or force different graph to be displayed (v1.18)
This commit is contained in:
		
							
								
								
									
										128
									
								
								mailGraph.php
									
									
									
									
									
								
							
							
						
						
									
										128
									
								
								mailGraph.php
									
									
									
									
									
								
							@@ -21,6 +21,8 @@
 | 
				
			|||||||
    // 1.16 2021/03/02 - Mark Oudsen - Found issue with graph.get not returning graphs to requested item ids
 | 
					    // 1.16 2021/03/02 - Mark Oudsen - Found issue with graph.get not returning graphs to requested item ids
 | 
				
			||||||
    //                                 Workaround programmed (fetch host graphs, search for certain itemids)
 | 
					    //                                 Workaround programmed (fetch host graphs, search for certain itemids)
 | 
				
			||||||
    // 1.17 2021/03/02 - Mark Oudsen - Added ability to specify period of time displayed in the graph
 | 
					    // 1.17 2021/03/02 - Mark Oudsen - Added ability to specify period of time displayed in the graph
 | 
				
			||||||
 | 
					    // 1.18 2021/03/04 - Mark Oudsen - Added ability to specify a deviating period of time per trigger
 | 
				
			||||||
 | 
					    //                                 Added ability to specify different graph to be embedded
 | 
				
			||||||
    // ------------------------------------------------------------------------------------------------------
 | 
					    // ------------------------------------------------------------------------------------------------------
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
    // (C) M.J.Oudsen, mark.oudsen@puzzl.nl
 | 
					    // (C) M.J.Oudsen, mark.oudsen@puzzl.nl
 | 
				
			||||||
@@ -43,7 +45,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // CONSTANTS
 | 
					    // CONSTANTS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $cVersion = 'v1.17';
 | 
					    $cVersion = 'v1.18';
 | 
				
			||||||
    $cCRLF = chr(10).chr(13);
 | 
					    $cCRLF = chr(10).chr(13);
 | 
				
			||||||
    $maskDateTime = 'Y-m-d H:i:s';
 | 
					    $maskDateTime = 'Y-m-d H:i:s';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -476,7 +478,8 @@
 | 
				
			|||||||
                     'method'=>'trigger.get',
 | 
					                     'method'=>'trigger.get',
 | 
				
			||||||
                     'params'=>array('triggerids'=>$p_triggerId,
 | 
					                     'params'=>array('triggerids'=>$p_triggerId,
 | 
				
			||||||
                                     'output'=>'extend',
 | 
					                                     'output'=>'extend',
 | 
				
			||||||
                                     'selectFunctions'=>'extend'),
 | 
					                                     'selectFunctions'=>'extend',
 | 
				
			||||||
 | 
					                                     'selectTags'=>'extend'),
 | 
				
			||||||
                     'expandComment'=>1,
 | 
					                     'expandComment'=>1,
 | 
				
			||||||
                     'expandDescription'=>1,
 | 
					                     'expandDescription'=>1,
 | 
				
			||||||
                     'expandExpression'=>1,
 | 
					                     'expandExpression'=>1,
 | 
				
			||||||
@@ -486,10 +489,31 @@
 | 
				
			|||||||
    $thisTrigger = postJSON($z_url_api,$request);
 | 
					    $thisTrigger = postJSON($z_url_api,$request);
 | 
				
			||||||
    _log('> Trigger data'.$cCRLF.json_encode($thisTrigger,JSON_PRETTY_PRINT|JSON_NUMERIC_CHECK));
 | 
					    _log('> Trigger data'.$cCRLF.json_encode($thisTrigger,JSON_PRETTY_PRINT|JSON_NUMERIC_CHECK));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!isset($thisTrigger['result'][0])) { echo '! No response data received?'.$cCRLF; die; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $mailData['TRIGGER_ID'] = $thisTrigger['result'][0]['triggerid'];
 | 
					    $mailData['TRIGGER_ID'] = $thisTrigger['result'][0]['triggerid'];
 | 
				
			||||||
    $mailData['TRIGGER_DESCRIPTION'] = $thisTrigger['result'][0]['description'];
 | 
					    $mailData['TRIGGER_DESCRIPTION'] = $thisTrigger['result'][0]['description'];
 | 
				
			||||||
    $mailData['TRIGGER_COMMENTS'] = $thisTrigger['result'][0]['comments'];
 | 
					    $mailData['TRIGGER_COMMENTS'] = $thisTrigger['result'][0]['comments'];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // --- Custom settings?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $forceGraph = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    foreach($thisTrigger['result'][0]['tags'] as $aTag)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if ($aTag['tag']=='mailGraph.period')
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            $p_period = $aTag['value'];
 | 
				
			||||||
 | 
					            _log('+ Graph display period override = '.$p_period);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($aTag['tag']=='mailGraph.graph')
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            $forceGraph = intval($aTag['value']);
 | 
				
			||||||
 | 
					            _log('+ Graph ID to display = '.$forceGraph);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // --- GET ITEM INFO ---
 | 
					    // --- GET ITEM INFO ---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    _log('# Retrieve ITEM information');
 | 
					    _log('# Retrieve ITEM information');
 | 
				
			||||||
@@ -506,6 +530,8 @@
 | 
				
			|||||||
    $thisItem = postJSON($z_url_api,$request);
 | 
					    $thisItem = postJSON($z_url_api,$request);
 | 
				
			||||||
    _log('> Item data'.$cCRLF.json_encode($thisItem,JSON_PRETTY_PRINT|JSON_NUMERIC_CHECK));
 | 
					    _log('> Item data'.$cCRLF.json_encode($thisItem,JSON_PRETTY_PRINT|JSON_NUMERIC_CHECK));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!isset($thisItem['result'][0])) { echo '! No response data received?'.$cCRLF; die; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $mailData['ITEM_ID'] = $thisItem['result'][0]['itemid'];
 | 
					    $mailData['ITEM_ID'] = $thisItem['result'][0]['itemid'];
 | 
				
			||||||
    $mailData['ITEM_KEY'] = $thisItem['result'][0]['key_'];
 | 
					    $mailData['ITEM_KEY'] = $thisItem['result'][0]['key_'];
 | 
				
			||||||
    $mailData['ITEM_NAME'] = $thisItem['result'][0]['name'];
 | 
					    $mailData['ITEM_NAME'] = $thisItem['result'][0]['name'];
 | 
				
			||||||
@@ -533,6 +559,8 @@
 | 
				
			|||||||
    $thisHost = postJSON($z_url_api,$request);
 | 
					    $thisHost = postJSON($z_url_api,$request);
 | 
				
			||||||
    _log('> Host data'.$cCRLF.json_encode($thisHost,JSON_PRETTY_PRINT|JSON_NUMERIC_CHECK));
 | 
					    _log('> Host data'.$cCRLF.json_encode($thisHost,JSON_PRETTY_PRINT|JSON_NUMERIC_CHECK));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!isset($thisHost['result'][0])) { echo '! No response data received?'.$cCRLF; die; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $mailData['HOST_ID'] = $thisHost['result'][0]['hostid'];
 | 
					    $mailData['HOST_ID'] = $thisHost['result'][0]['hostid'];
 | 
				
			||||||
    $mailData['HOST_NAME'] = $thisHost['result'][0]['name'];
 | 
					    $mailData['HOST_NAME'] = $thisHost['result'][0]['name'];
 | 
				
			||||||
    $mailData['HOST_ERROR'] = $thisHost['result'][0]['error'];
 | 
					    $mailData['HOST_ERROR'] = $thisHost['result'][0]['error'];
 | 
				
			||||||
@@ -570,6 +598,28 @@
 | 
				
			|||||||
    $thisGraphs = postJSON($z_url_api,$request);
 | 
					    $thisGraphs = postJSON($z_url_api,$request);
 | 
				
			||||||
    _log('> Graphs data'.$cCRLF.json_encode($thisGraphs,JSON_PRETTY_PRINT|JSON_NUMERIC_CHECK));
 | 
					    _log('> Graphs data'.$cCRLF.json_encode($thisGraphs,JSON_PRETTY_PRINT|JSON_NUMERIC_CHECK));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ($forceGraph>0)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // --- GET GRAPH ASSOCIATED WITH FORCEGRAPH ---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $request = array('jsonrpc'=>'2.0',
 | 
				
			||||||
 | 
					                         'method'=>'graph.get',
 | 
				
			||||||
 | 
					                         'params'=>array('graphids'=>$forceGraph,
 | 
				
			||||||
 | 
					                                         'expandName'=>1,
 | 
				
			||||||
 | 
					                                         'output'=>'extend'),
 | 
				
			||||||
 | 
					                         'auth'=>$token,
 | 
				
			||||||
 | 
					                         'id'=>nextRequestID());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $forceGraphInfo = postJSON($z_url_api,$request);
 | 
				
			||||||
 | 
					        _log('> Forced graph data'.$cCRLF.json_encode($forceGraphInfo,JSON_PRETTY_PRINT|JSON_NUMERIC_CHECK));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!isset($forceGraphInfo['result'][0]))
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        _log('! No data received for graph #'.$forceGraph.'; discarding forced graph information');
 | 
				
			||||||
 | 
					        $forceGraph = 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // --- FIND MATCHING GRAPH ITEMS WITH OUR TRIGGER ITEMS ---
 | 
					    // --- FIND MATCHING GRAPH ITEMS WITH OUR TRIGGER ITEMS ---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    _log('# Matching retreived graph information with our trigger items');
 | 
					    _log('# Matching retreived graph information with our trigger items');
 | 
				
			||||||
@@ -631,6 +681,8 @@
 | 
				
			|||||||
    $thisEvent = postJSON($z_url_api,$request);
 | 
					    $thisEvent = postJSON($z_url_api,$request);
 | 
				
			||||||
    _log('> Event data'.$cCRLF.json_encode($thisEvent,JSON_PRETTY_PRINT|JSON_NUMERIC_CHECK));
 | 
					    _log('> Event data'.$cCRLF.json_encode($thisEvent,JSON_PRETTY_PRINT|JSON_NUMERIC_CHECK));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!isset($thisEvent['result'][0])) { echo '! No response data received?'.$cCRLF; die; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $mailData['EVENT_ID'] = $thisEvent['result'][0]['eventid'];
 | 
					    $mailData['EVENT_ID'] = $thisEvent['result'][0]['eventid'];
 | 
				
			||||||
    $mailData['EVENT_NAME'] = $thisEvent['result'][0]['name'];
 | 
					    $mailData['EVENT_NAME'] = $thisEvent['result'][0]['name'];
 | 
				
			||||||
    $mailData['EVENT_OPDATA'] = $thisEvent['result'][0]['opdata'];
 | 
					    $mailData['EVENT_OPDATA'] = $thisEvent['result'][0]['opdata'];
 | 
				
			||||||
@@ -660,45 +712,63 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // If we have any matching graph, make the embedding information available
 | 
					    // If we have any matching graph, make the embedding information available
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ((sizeof($matchedGraphs)+sizeof($otherGraphs))>0)
 | 
					    if ($forceGraph>0)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        // Exact match goes first
 | 
					        _log('# Adding FORCED graph #'.$forceGraph);
 | 
				
			||||||
 | 
					        $graphFile = GraphImageById($forceGraph,
 | 
				
			||||||
 | 
					                                    $p_graphWidth,$p_graphHeight,
 | 
				
			||||||
 | 
					                                    $forceGraphInfo['result'][0]['graphtype'],
 | 
				
			||||||
 | 
					                                    $p_showLegend,$p_period);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (sizeof($matchedGraphs)>0)
 | 
					        _log('> Filename = '.$graphFile);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $mailData['GRAPH_ID'] = $forceGraph;
 | 
				
			||||||
 | 
					        $mailData['GRAPH_NAME'] = $forceGraphInfo['result'][0]['name'];
 | 
				
			||||||
 | 
					        $mailData['GRAPH_URL'] = $z_url_image . $graphFile;
 | 
				
			||||||
 | 
					        $mailData['GRAPH_MATCH'] = 'Forced';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if ((sizeof($matchedGraphs)+sizeof($otherGraphs))>0)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _log('# Adding MATCHED graph #'.$matchedGraphs[0]['graphid']);
 | 
					            // Exact match goes first
 | 
				
			||||||
            $graphFile = GraphImageById($matchedGraphs[0]['graphid'],
 | 
					 | 
				
			||||||
                                        $p_graphWidth,$p_graphHeight,
 | 
					 | 
				
			||||||
                                        $matchedGraphs[0]['graphtype'],
 | 
					 | 
				
			||||||
                                        $p_showLegend,$p_period);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            _log('> Filename = '.$graphFile);
 | 
					            if (sizeof($matchedGraphs)>0)
 | 
				
			||||||
 | 
					 | 
				
			||||||
            $mailData['GRAPH_ID'] = $matchedGraphs[0]['graphid'];
 | 
					 | 
				
			||||||
            $mailData['GRAPH_NAME'] = $matchedGraphs[0]['name'];
 | 
					 | 
				
			||||||
            $mailData['GRAPH_URL'] = $z_url_image . $graphFile;
 | 
					 | 
				
			||||||
            $mailData['GRAPH_MATCH'] = 'Exact';
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        else
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if (($p_graph_match!='exact') && (sizeof($otherGraphs)>0))
 | 
					 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                _log('# Adding OTHER graph #'.$otherGraphs[0]['graphid']);
 | 
					                _log('# Adding MATCHED graph #'.$matchedGraphs[0]['graphid']);
 | 
				
			||||||
                $graphFile = GraphImageById($otherGraphs[0]['graphid'],
 | 
					                $graphFile = GraphImageById($matchedGraphs[0]['graphid'],
 | 
				
			||||||
                                            $p_graphWidth,$p_graphHeight,
 | 
					                                            $p_graphWidth,$p_graphHeight,
 | 
				
			||||||
                                            $otherGraphs[0]['graphtype'],
 | 
					                                            $matchedGraphs[0]['graphtype'],
 | 
				
			||||||
                                            $p_showLegend);
 | 
					                                            $p_showLegend,$p_period);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                _log('> Filename = '.$graphFile);
 | 
					                _log('> Filename = '.$graphFile);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                $mailData['GRAPH_ID'] = $otherGraphs[0]['graphid'];
 | 
					                $mailData['GRAPH_ID'] = $matchedGraphs[0]['graphid'];
 | 
				
			||||||
                $mailData['GRAPH_NAME'] = $otherGraphs[0]['name'];
 | 
					                $mailData['GRAPH_NAME'] = $matchedGraphs[0]['name'];
 | 
				
			||||||
                $mailData['GRAPH_URL'] = $z_url_image . $graphFile;
 | 
					                $mailData['GRAPH_URL'] = $z_url_image . $graphFile;
 | 
				
			||||||
                $mailData['GRAPH_MATCH'] = 'Other';
 | 
					                $mailData['GRAPH_MATCH'] = 'Exact';
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (($p_graph_match!='exact') && (sizeof($otherGraphs)>0))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    _log('# Adding OTHER graph #'.$otherGraphs[0]['graphid']);
 | 
				
			||||||
 | 
					                    $graphFile = GraphImageById($otherGraphs[0]['graphid'],
 | 
				
			||||||
 | 
					                                                $p_graphWidth,$p_graphHeight,
 | 
				
			||||||
 | 
					                                                $otherGraphs[0]['graphtype'],
 | 
				
			||||||
 | 
					                                                $p_showLegend);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $mailData['GRAPH_ZABBIXLINK'] = $z_server.'/graphs.php?form=update&graphid='.$mailData['GRAPH_ID'];
 | 
					                    _log('> Filename = '.$graphFile);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    $mailData['GRAPH_ID'] = $otherGraphs[0]['graphid'];
 | 
				
			||||||
 | 
					                    $mailData['GRAPH_NAME'] = $otherGraphs[0]['name'];
 | 
				
			||||||
 | 
					                    $mailData['GRAPH_URL'] = $z_url_image . $graphFile;
 | 
				
			||||||
 | 
					                    $mailData['GRAPH_MATCH'] = 'Other';
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $mailData['GRAPH_ZABBIXLINK'] = $z_server.'/graphs.php?form=update&graphid='.$mailData['GRAPH_ID'];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Prepare HTML LOG content
 | 
					    // Prepare HTML LOG content
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user