1<?php 2 3// Polls powerdns statistics from script via SNMP 4 5use LibreNMS\Exceptions\JsonAppException; 6use LibreNMS\Exceptions\JsonAppParsingFailedException; 7use LibreNMS\RRD\RrdDefinition; 8 9$name = 'powerdns'; 10$app_id = $app['app_id']; 11$powerdns = []; 12echo " $name"; 13 14// unused metrics: 15// deferred-packetcache-inserts, deferred-packetcache-lookup, dnsupdate-answers, dnsupdate-changes, dnsupdate-queries, dnsupdate-refused, incoming-notifications 16// query-cache-size, overload-drops, rd-queries, recursion-unanswered, security-status, signatures, tcp-answers-bytes, tcp4-answers, tcp4-answers-bytes, tcp4-queries 17// tcp6-answers, tcp6-answers-bytes, tcp6-queries, udp-answers-bytes, udp-do-queries, udp4-answers-bytes, udp6-answers-bytes, fd-usage, key-cache-size 18// meta-cache-size, real-memory-usage, signature-cache-size, sys-msec, udp-in-errors, udp-noport-errors, udp-recvbuf-errors, udp-sndbuf-errors, uptime, user-msec 19 20$powerdns_metrics = [ 21 'corruptPackets' => 'corrupt-packets', 22 'def_cacheInserts' => 'deferred-cache-inserts', 23 'def_cacheLookup' => 'deferred-cache-lookup', 24 'latency' => 'latency', 25 'pc_hit' => 'packetcache-hit', 26 'pc_miss' => 'packetcache-miss', 27 'pc_size' => 'packetcache-size', 28 'qsize' => 'qsize-q', 29 'qc_hit' => 'query-cache-hit', 30 'qc_miss' => 'query-cache-miss', 31 'rec_answers' => 'recursing-answers', 32 'rec_questions' => 'recursing-questions', 33 'servfailPackets' => 'servfail-packets', 34 'q_tcpAnswers' => 'tcp-answers', 35 'q_tcpQueries' => 'tcp-queries', 36 'q_timedout' => 'timedout-packets', 37 'q_udpAnswers' => 'udp-answers', 38 'q_udpQueries' => 'udp-queries', 39 'q_udp4Answers' => 'udp4-answers', 40 'q_udp4Queries' => 'udp4-queries', 41 'q_udp6Answers' => 'udp6-answers', 42 'q_udp6Queries' => 'udp6-queries', 43]; 44 45if (isset($agent_data) && isset($agent_data['app'][$name])) { 46 $legacy = $agent_data['app'][$name]; 47} else { 48 try { 49 $powerdns = json_app_get($device, $name)['data']; 50 } catch (JsonAppParsingFailedException $e) { 51 $legacy = $e->getOutput(); 52 } catch (JsonAppException $e) { 53 echo PHP_EOL . $name . ':' . $e->getCode() . ':' . $e->getMessage() . PHP_EOL; 54 update_application($app, $e->getCode() . ':' . $e->getMessage(), []); // Set empty metrics and error message 55 56 return; 57 } 58} 59 60if (isset($legacy)) { 61 // Legacy script, build compatible array 62 [ 63 $powerdns['corrupt-packets'], 64 $powerdns['deferred-cache-inserts'], 65 $powerdns['deferred-cache-lookup'], 66 $powerdns['latency'], 67 $powerdns['packetcache-hit'], 68 $powerdns['packetcache-miss'], 69 $powerdns['packetcache-size'], 70 $powerdns['qsize-q'], 71 $powerdns['query-cache-hit'], 72 $powerdns['query-cache-miss'], 73 $powerdns['recursing-answers'], 74 $powerdns['recursing-questions'], 75 $powerdns['servfail-packets'], 76 $powerdns['tcp-answers'], 77 $powerdns['tcp-queries'], 78 $powerdns['timedout-packets'], 79 $powerdns['udp-answers'], 80 $powerdns['udp-queries'], 81 $powerdns['udp4-answers'], 82 $powerdns['udp4-queries'], 83 $powerdns['udp6-answers'], 84 $powerdns['udp6-queries'], 85 ] = explode("\n", $legacy); 86} 87 88d_echo($powerdns); 89 90$rrd_name = ['app', $name, $app_id]; 91$rrd_def = RrdDefinition::make(); 92$fields = []; 93foreach ($powerdns_metrics as $ds => $metric) { 94 $rrd_def->addDataset($ds, 'DERIVE', 0, 125000000000); 95 $fields[$ds] = isset($powerdns[$metric]) ? $powerdns[$metric] : 'U'; 96} 97 98$tags = compact('name', 'app_id', 'rrd_name', 'rrd_def'); 99data_update($device, 'app', $tags, $fields); 100update_application($app, json_encode($powerdns), $fields); 101