From 66d1006d91519425d1fc4e67b9922517eeb724df Mon Sep 17 00:00:00 2001 From: Neil Lathwood Date: Sat, 11 Mar 2017 14:39:32 +0000 Subject: [PATCH] feature: Added app_state support for applications #5068 (#6061) * feature: Added app_state support for applications #5068 * moved schema file 173 -> 174 * Re-arrange code * added device_id to dbUpdate call * updated function + missing apps * Rename 174.sql to 176.sql * Remove $device, it is unneeded when updating. Rename update_applications() -> update_application() * Some apps can return simply 0 --- includes/polling/applications.inc.php | 1 - includes/polling/applications/apache.inc.php | 1 + includes/polling/applications/bind.inc.php | 1 + includes/polling/applications/ceph.inc.php | 1 + .../polling/applications/dhcp-stats.inc.php | 1 + includes/polling/applications/drbd.inc.php | 1 + .../polling/applications/exim-stats.inc.php | 2 ++ .../polling/applications/fail2ban.inc.php | 1 + .../applications/fbsd-nfs-client.inc.php | 1 + .../applications/fbsd-nfs-server.inc.php | 1 + .../polling/applications/freeswitch.inc.php | 1 + includes/polling/applications/gpsd.inc.php | 1 + .../polling/applications/mailscanner.inc.php | 1 + .../polling/applications/memcached.inc.php | 1 + includes/polling/applications/mysql.inc.php | 1 + .../polling/applications/nfs-stats.inc.php | 1 + .../polling/applications/nfs-v3-stats.inc.php | 1 + includes/polling/applications/nginx.inc.php | 1 + .../polling/applications/ntp-client.inc.php | 1 + .../polling/applications/ntp-server.inc.php | 1 + includes/polling/applications/nvidia.inc.php | 1 + .../polling/applications/os-updates.inc.php | 1 + includes/polling/applications/php-fpm.inc.php | 1 + includes/polling/applications/postfix.inc.php | 1 + .../polling/applications/postgres.inc.php | 1 + .../applications/powerdns-recursor.inc.php | 1 + .../polling/applications/powerdns.inc.php | 1 + includes/polling/applications/proxmox.inc.php | 1 + .../polling/applications/rrdcached.inc.php | 1 + .../polling/applications/shoutcast.inc.php | 1 + includes/polling/applications/squid.inc.php | 3 ++ includes/polling/applications/tinydns.inc.php | 1 + includes/polling/applications/unbound.inc.php | 1 + .../polling/applications/ups-apcups.inc.php | 1 + includes/polling/applications/ups-nut.inc.php | 1 + includes/polling/functions.inc.php | 34 +++++++++++++++++++ sql-schema/176.sql | 2 ++ 37 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 sql-schema/176.sql diff --git a/includes/polling/applications.inc.php b/includes/polling/applications.inc.php index e99218e674..5c29e1deff 100644 --- a/includes/polling/applications.inc.php +++ b/includes/polling/applications.inc.php @@ -11,7 +11,6 @@ if (count($app_rows) > 0) { echo $app['app_type'].' include missing! '; } } - echo "\n"; } diff --git a/includes/polling/applications/apache.inc.php b/includes/polling/applications/apache.inc.php index 1333d260cd..7ef76e4f6b 100644 --- a/includes/polling/applications/apache.inc.php +++ b/includes/polling/applications/apache.inc.php @@ -11,6 +11,7 @@ if (!empty($agent_data['app'][$name])) { $options = '-O qv'; $oid = 'nsExtendOutputFull.6.97.112.97.99.104.101'; $apache = snmp_get($device, $oid, $options); + update_application($app, $apache); } echo ' apache'; diff --git a/includes/polling/applications/bind.inc.php b/includes/polling/applications/bind.inc.php index 8aa7aefcc8..d0b3d0e35f 100644 --- a/includes/polling/applications/bind.inc.php +++ b/includes/polling/applications/bind.inc.php @@ -33,6 +33,7 @@ if (!empty($agent_data['app'][$name]) && $app_id > 0) { $bind = $agent_data['app'][$name]; $bind_parsed = array(); $prefix = ''; + update_application($app, $bind); foreach (explode("\n", $bind) as $line) { $pattern = '/^\+\+ ([^+]+) \+\+$/'; preg_match($pattern, $line, $matches); diff --git a/includes/polling/applications/ceph.inc.php b/includes/polling/applications/ceph.inc.php index 20e717771d..34b340e352 100644 --- a/includes/polling/applications/ceph.inc.php +++ b/includes/polling/applications/ceph.inc.php @@ -12,6 +12,7 @@ if (!empty($agent_data['app'][$name])) { } list($section, $data) = explode('>', $section); + update_application($app, $section); if ($section == "poolstats") { $rrd_def = RrdDefinition::make() ->addDataset('ops', 'GAUGE', 0) diff --git a/includes/polling/applications/dhcp-stats.inc.php b/includes/polling/applications/dhcp-stats.inc.php index 4a7ed5d81b..cd068f1b37 100644 --- a/includes/polling/applications/dhcp-stats.inc.php +++ b/includes/polling/applications/dhcp-stats.inc.php @@ -9,6 +9,7 @@ $mib = 'NET-SNMP-EXTEND-MIB'; $oid = '.1.3.6.1.4.1.8072.1.3.2.4.1.2.9.100.104.99.112.115.116.97.116.115'; $dhcpstats = snmp_walk($device, $oid, $options, $mib); +update_application($app, $dhcpstats); list($dhcp_total,$dhcp_active,$dhcp_expired,$dhcp_released,$dhcp_abandoned,$dhcp_reset,$dhcp_bootp,$dhcp_backup,$dhcp_free) = explode("\n", $dhcpstats); $rrd_name = array('app', $name, $app_id); diff --git a/includes/polling/applications/drbd.inc.php b/includes/polling/applications/drbd.inc.php index dff50e0069..22ea923557 100644 --- a/includes/polling/applications/drbd.inc.php +++ b/includes/polling/applications/drbd.inc.php @@ -11,6 +11,7 @@ foreach (explode('|', $agent_data['app'][$name][$app_instance]) as $part) { $drbd[$stat] = $val; } } +update_application($app, $agent_data['app'][$name][$app_instance]); $rrd_name = array('app', $name, $app_instance); $rrd_def = RrdDefinition::make() diff --git a/includes/polling/applications/exim-stats.inc.php b/includes/polling/applications/exim-stats.inc.php index c22b2438ee..ecc026942d 100644 --- a/includes/polling/applications/exim-stats.inc.php +++ b/includes/polling/applications/exim-stats.inc.php @@ -29,6 +29,8 @@ $stats = snmp_get($device, $oid, '-Oqv'); echo ' '.$name; +update_application($app, $stats); + list ($frozen, $queue) = explode("\n", $stats); $rrd_name = array('app', $name, $app_id); diff --git a/includes/polling/applications/fail2ban.inc.php b/includes/polling/applications/fail2ban.inc.php index 14570b1539..327a033852 100644 --- a/includes/polling/applications/fail2ban.inc.php +++ b/includes/polling/applications/fail2ban.inc.php @@ -10,6 +10,7 @@ $mib = 'NET-SNMP-EXTEND-MIB'; $oid = 'nsExtendOutputFull.8.102.97.105.108.50.98.97.110'; $f2b = snmp_walk($device, $oid, $options, $mib); +update_application($app, $f2b); $bannedStuff = explode("\n", $f2b); $banned=$bannedStuff[0]; diff --git a/includes/polling/applications/fbsd-nfs-client.inc.php b/includes/polling/applications/fbsd-nfs-client.inc.php index f0894e7dcd..8a26340764 100644 --- a/includes/polling/applications/fbsd-nfs-client.inc.php +++ b/includes/polling/applications/fbsd-nfs-client.inc.php @@ -8,6 +8,7 @@ $options = '-O qv'; $mib = 'NET-SNMP-EXTEND-MIB'; $oid = 'nsExtendOutLine.13.102.98.115.100.110.102.115.99.108.105.101.110.116'; $nfsclient = snmp_walk($device, $oid, $options, $mib); +update_application($app, $nfsclient); list($getattr, $setattr, $lookup, $readlink, $read, $write, $create, $remove, $rename, $link, $symlink, $mkdir, $rmdir, $readdir, $rdirplus, $access, $mknod, $fsstat, $fsinfo, $pathconf, $commit, $timedout, $invalid, $xreplies, $retries, diff --git a/includes/polling/applications/fbsd-nfs-server.inc.php b/includes/polling/applications/fbsd-nfs-server.inc.php index 7569366c19..1f3e98fd79 100644 --- a/includes/polling/applications/fbsd-nfs-server.inc.php +++ b/includes/polling/applications/fbsd-nfs-server.inc.php @@ -8,6 +8,7 @@ $options = '-O qv'; $mib = 'NET-SNMP-EXTEND-MIB'; $oid = 'nsExtendOutLine.13.102.98.115.100.110.102.115.115.101.114.118.101.114'; $nfsserver = snmp_walk($device, $oid, $options, $mib); +update_application($app, $nfsserver); list($getattr, $setattr, $lookup, $readlink, $read, $write, $create, $remove, $rename, $link, $symlink, $mkdir, $rmdir, $readdir, $rdirplus, $access, $mknod, $fsstat, $fsinfo, $pathconf, $commit, $retfailed, diff --git a/includes/polling/applications/freeswitch.inc.php b/includes/polling/applications/freeswitch.inc.php index 19c3fd39d1..e896ff4f7e 100644 --- a/includes/polling/applications/freeswitch.inc.php +++ b/includes/polling/applications/freeswitch.inc.php @@ -6,6 +6,7 @@ $name = 'freeswitch'; $app_id = $app['app_id']; if (!empty($agent_data[$name])) { $rawdata = $agent_data[$name]; + update_application($app, $rawdata); } else { echo "Freeswitch Missing"; return; diff --git a/includes/polling/applications/gpsd.inc.php b/includes/polling/applications/gpsd.inc.php index 9b619b5efa..c73bc74480 100644 --- a/includes/polling/applications/gpsd.inc.php +++ b/includes/polling/applications/gpsd.inc.php @@ -32,6 +32,7 @@ if (!empty($agent_data['app'][$name]) && $app_id > 0) { echo ' '.$name; $gpsd = $agent_data['app'][$name]; $gpsd_parsed = array(); + update_application($app, $gpsd); foreach (explode("\n", $gpsd) as $line) { list ($field, $data) = explode(':', $line); diff --git a/includes/polling/applications/mailscanner.inc.php b/includes/polling/applications/mailscanner.inc.php index 19df78564b..7a620307e8 100644 --- a/includes/polling/applications/mailscanner.inc.php +++ b/includes/polling/applications/mailscanner.inc.php @@ -8,6 +8,7 @@ $options = '-O qv'; $oid = 'nsExtendOutputFull.11.109.97.105.108.115.99.97.110.110.101.114'; $mailscanner = snmp_get($device, $oid, $options); +update_application($app, $mailscanner); echo ' mailscanner'; diff --git a/includes/polling/applications/memcached.inc.php b/includes/polling/applications/memcached.inc.php index 53f91aa702..4be9fb8c52 100644 --- a/includes/polling/applications/memcached.inc.php +++ b/includes/polling/applications/memcached.inc.php @@ -13,6 +13,7 @@ if (!empty($agent_data['app']['memcached'])) { $data = reset($result); } +update_application($app, $data); echo ' memcached('.$app['app_instance'].')'; $rrd_name = array('app', $name, $app_id); diff --git a/includes/polling/applications/mysql.inc.php b/includes/polling/applications/mysql.inc.php index 77968d44d7..1ba6c097f1 100644 --- a/includes/polling/applications/mysql.inc.php +++ b/includes/polling/applications/mysql.inc.php @@ -14,6 +14,7 @@ if (!empty($agent_data['app'][$name])) { $mysql = shell_exec($mysql_cmd); } +update_application($app, $mysql); echo ' mysql'; // General Stats diff --git a/includes/polling/applications/nfs-stats.inc.php b/includes/polling/applications/nfs-stats.inc.php index a1a8ea8189..088c7dcb10 100644 --- a/includes/polling/applications/nfs-stats.inc.php +++ b/includes/polling/applications/nfs-stats.inc.php @@ -9,6 +9,7 @@ $oid = '.1.3.6.1.4.1.8072.1.3.2.4'; echo ' ' . $name; $nfsstats = snmp_walk($device, $oid, '-Oqv', 'NET-SNMP-EXTEND-MIB'); +update_application($app, $nfsstats); $rrd_name = array('app', $name, $app_id); $rrd_def = RrdDefinition::make() diff --git a/includes/polling/applications/nfs-v3-stats.inc.php b/includes/polling/applications/nfs-v3-stats.inc.php index c4538a7a5e..6ab79a0822 100644 --- a/includes/polling/applications/nfs-v3-stats.inc.php +++ b/includes/polling/applications/nfs-v3-stats.inc.php @@ -9,6 +9,7 @@ $oid = '.1.3.6.1.4.1.8072.1.3.2.4.1.2.7.110.102.115.115.116.97.116'; echo ' ' . $name; $nfsstats = snmp_walk($device, $oid, '-Oqv', 'NET-SNMP-EXTEND-MIB'); +update_application($app, $nfsstats); $rrd_name = array('app', 'nfs-stats', $app_id); $rrd_def = RrdDefinition::make() diff --git a/includes/polling/applications/nginx.inc.php b/includes/polling/applications/nginx.inc.php index 041bb077af..aae305d044 100644 --- a/includes/polling/applications/nginx.inc.php +++ b/includes/polling/applications/nginx.inc.php @@ -10,6 +10,7 @@ if (!empty($agent_data['app'][$name])) { // Polls nginx statistics from script via SNMP $nginx = snmp_get($device, 'nsExtendOutputFull.5.110.103.105.110.120', '-Ovq', 'NET-SNMP-EXTEND-MIB'); } +update_application($app, $nginx); echo ' nginx'; diff --git a/includes/polling/applications/ntp-client.inc.php b/includes/polling/applications/ntp-client.inc.php index b45e180fc6..d7f62349e5 100644 --- a/includes/polling/applications/ntp-client.inc.php +++ b/includes/polling/applications/ntp-client.inc.php @@ -7,6 +7,7 @@ $name = 'ntp-client'; $app_id = $app['app_id']; $oid = '.1.3.6.1.4.1.8072.1.3.2.3.1.2.10.110.116.112.45.99.108.105.101.110.116'; $ntpclient = snmp_get($device, $oid, '-Oqv'); +update_application($app, $ntpclient); echo ' '.$name; diff --git a/includes/polling/applications/ntp-server.inc.php b/includes/polling/applications/ntp-server.inc.php index 3ac1994aee..5ba1c8792b 100644 --- a/includes/polling/applications/ntp-server.inc.php +++ b/includes/polling/applications/ntp-server.inc.php @@ -7,6 +7,7 @@ $name = 'ntp-server'; $app_id = $app['app_id']; $oid = '.1.3.6.1.4.1.8072.1.3.2.3.1.2.10.110.116.112.45.115.101.114.118.101.114'; $ntpserver_data = snmp_get($device, $oid, '-Oqv'); +update_application($app, $ntpserver_data); list ($stratum, $offset, $frequency, $jitter, $noise, $stability, $uptime, $buffer_recv, $buffer_free, $buffer_used, $packets_drop, $packets_ignore, $packets_recv, $packets_sent) = explode("\n", $ntpserver_data); echo ' '.$name; diff --git a/includes/polling/applications/nvidia.inc.php b/includes/polling/applications/nvidia.inc.php index 747973b862..b8fd2763e6 100644 --- a/includes/polling/applications/nvidia.inc.php +++ b/includes/polling/applications/nvidia.inc.php @@ -9,6 +9,7 @@ $options = '-O qv'; $mib = 'NET-SNMP-EXTEND-MIB'; $oid = 'nsExtendOutputFull.6.110.118.105.100.105.97'; $gpus = snmp_walk($device, $oid, $options, $mib); +update_application($app, $gpus); $gpuArray = explode("\n", $gpus); diff --git a/includes/polling/applications/os-updates.inc.php b/includes/polling/applications/os-updates.inc.php index ce2fc2f8c1..437c482486 100644 --- a/includes/polling/applications/os-updates.inc.php +++ b/includes/polling/applications/os-updates.inc.php @@ -11,6 +11,7 @@ $rrd_name = array('app', $name, $app_id); $rrd_def = RrdDefinition::make()->addDataset('packages', 'GAUGE', 0); $osupdates = snmp_get($device, $oid, $options, $mib); +update_application($app, $osupdates); $fields = array('packages' => $osupdates,); diff --git a/includes/polling/applications/php-fpm.inc.php b/includes/polling/applications/php-fpm.inc.php index 473b3fe35a..c52bce2283 100644 --- a/includes/polling/applications/php-fpm.inc.php +++ b/includes/polling/applications/php-fpm.inc.php @@ -9,6 +9,7 @@ $options = '-O qv'; $mib = 'NET-SNMP-EXTEND-MIB'; $oid = 'nsExtendOutputFull.8.112.104.112.102.112.109.115.112'; $phpfpm = snmp_walk($device, $oid, $options, $mib); +update_application($app, $phpfpm); list($pool,$start_time,$start_since,$accepted_conn,$listen_queue,$max_listen_queue,$listen_queue_len,$idle_processes, $active_processes,$total_processes,$max_active_processes,$max_children_reached,$slow_requests) = explode("\n", $phpfpm); diff --git a/includes/polling/applications/postfix.inc.php b/includes/polling/applications/postfix.inc.php index 56fc824c9f..1187a8066e 100644 --- a/includes/polling/applications/postfix.inc.php +++ b/includes/polling/applications/postfix.inc.php @@ -10,6 +10,7 @@ $queueOID = 'nsExtendOutputFull.5.109.97.105.108.113'; $detailOID = 'nsExtendOutputFull.15.112.111.115.116.102.105.120.100.101.116.97.105.108.101.100'; $mailq = snmp_walk($device, $queueOID, $options, $mib); $detail= snmp_walk($device, $detailOID, $options, $mib); +update_application($app, $mailq); list($incomingq, $activeq, $deferredq, $holdq) = explode("\n", $mailq); diff --git a/includes/polling/applications/postgres.inc.php b/includes/polling/applications/postgres.inc.php index 3b72d449c1..dd656d5dfb 100644 --- a/includes/polling/applications/postgres.inc.php +++ b/includes/polling/applications/postgres.inc.php @@ -8,6 +8,7 @@ $options = '-O qv'; $mib = 'NET-SNMP-EXTEND-MIB'; $oid = 'nsExtendOutputFull.8.112.111.115.116.103.114.101.115'; $postgres = snmp_walk($device, $oid, $options, $mib); +update_application($app, $postgres); list($backends, $commits, $rollbacks, $read, $hit, $idxscan, $idxtupread, $idxtupfetch, $idxblksread, $idxblkshit, $seqscan, $seqtupread, $ret, $fetch, $ins, $upd, $del) = explode("\n", $postgres); diff --git a/includes/polling/applications/powerdns-recursor.inc.php b/includes/polling/applications/powerdns-recursor.inc.php index 44cf4134af..18994db702 100644 --- a/includes/polling/applications/powerdns-recursor.inc.php +++ b/includes/polling/applications/powerdns-recursor.inc.php @@ -50,6 +50,7 @@ if ($agent_data['app'][$name]) { } if (!empty($data)) { + update_application($app, $data); $ds_list = array( 'all-outqueries' => 'DERIVE', 'answers-slow' => 'DERIVE', diff --git a/includes/polling/applications/powerdns.inc.php b/includes/polling/applications/powerdns.inc.php index 99470f1c4c..911ae1acb6 100644 --- a/includes/polling/applications/powerdns.inc.php +++ b/includes/polling/applications/powerdns.inc.php @@ -15,6 +15,7 @@ if ($agent_data['app'][$name]) { } else { $powerdns = snmp_get($device, $oid, $options, $mib); } +update_application($app, $powerdns); echo ' powerdns'; diff --git a/includes/polling/applications/proxmox.inc.php b/includes/polling/applications/proxmox.inc.php index 8132bf7201..0d27182723 100644 --- a/includes/polling/applications/proxmox.inc.php +++ b/includes/polling/applications/proxmox.inc.php @@ -53,6 +53,7 @@ if (isset($config['enable_proxmox']) && $config['enable_proxmox'] && !empty($age } if ($proxmox) { + update_application($app, $proxmox); $pmxlines = explode("\n", $proxmox); $pmxcluster = array_shift($pmxlines); dbUpdate( diff --git a/includes/polling/applications/rrdcached.inc.php b/includes/polling/applications/rrdcached.inc.php index 7229dffb5c..e90e22d2d4 100644 --- a/includes/polling/applications/rrdcached.inc.php +++ b/includes/polling/applications/rrdcached.inc.php @@ -70,6 +70,7 @@ if ($agent_data['app'][$name]) { } } +update_application($app, $data); $rrd_name = array('app', $name, $app_id); $rrd_def = RrdDefinition::make() diff --git a/includes/polling/applications/shoutcast.inc.php b/includes/polling/applications/shoutcast.inc.php index 164ee27d76..25e84c0092 100644 --- a/includes/polling/applications/shoutcast.inc.php +++ b/includes/polling/applications/shoutcast.inc.php @@ -10,6 +10,7 @@ $app_id = $app['app_id']; $options = '-O qv'; $oid = 'nsExtendOutputFull.9.115.104.111.117.116.99.97.115.116'; $shoutcast = snmp_get($device, $oid, $options); +update_application($app, $shoutcast); echo ' shoutcast'; diff --git a/includes/polling/applications/squid.inc.php b/includes/polling/applications/squid.inc.php index b2d8a8b7e3..1471e92d54 100644 --- a/includes/polling/applications/squid.inc.php +++ b/includes/polling/applications/squid.inc.php @@ -46,6 +46,9 @@ $oids=array( '.1.3.6.1.4.1.3495.1.3.2.2.1.10.60' ); $returnedoids=snmp_get_multi_oid($device, $oids); +if (is_array($returnedoids)) { + update_application($app, 'Data ok'); +} $memmaxsize = $returnedoids['.1.3.6.1.4.1.3495.1.2.5.1.0']; $swapmaxsize = $returnedoids['.1.3.6.1.4.1.3495.1.2.5.2.0']; diff --git a/includes/polling/applications/tinydns.inc.php b/includes/polling/applications/tinydns.inc.php index cfc23d0d0a..07cce965b4 100644 --- a/includes/polling/applications/tinydns.inc.php +++ b/includes/polling/applications/tinydns.inc.php @@ -29,6 +29,7 @@ use LibreNMS\RRD\RrdDefinition; $name = 'tinydns'; $app_id = $app['app_id']; if (!empty($agent_data['app'][$name]) && $app_id > 0) { + update_application($app, $name); echo ' tinydns'; $rrd_name = array('app', $name, $app_id); $rrd_def = RrdDefinition::make() diff --git a/includes/polling/applications/unbound.inc.php b/includes/polling/applications/unbound.inc.php index a00f1365a0..08a9ce2cf3 100644 --- a/includes/polling/applications/unbound.inc.php +++ b/includes/polling/applications/unbound.inc.php @@ -6,6 +6,7 @@ $name = 'unbound'; $app_id = $app['app_id']; if (!empty($agent_data['app'][$name])) { $rawdata = $agent_data['app'][$name]; + update_application($app, $rawdata); } else { echo "Unbound Missing"; return; diff --git a/includes/polling/applications/ups-apcups.inc.php b/includes/polling/applications/ups-apcups.inc.php index 8fe6123fde..4cd0c5f96a 100644 --- a/includes/polling/applications/ups-apcups.inc.php +++ b/includes/polling/applications/ups-apcups.inc.php @@ -26,6 +26,7 @@ $name = 'ups-apcups'; $app_id = $app['app_id']; $oid = '.1.3.6.1.4.1.8072.1.3.2.3.1.2.10.117.112.115.45.97.112.99.117.112.115'; $ups_apcups = trim(snmp_get($device, $oid, '-Oqv'), '"'); +update_application($app, $ups_apcups); echo ' '.$name; diff --git a/includes/polling/applications/ups-nut.inc.php b/includes/polling/applications/ups-nut.inc.php index 65482516c9..36b66e5879 100644 --- a/includes/polling/applications/ups-nut.inc.php +++ b/includes/polling/applications/ups-nut.inc.php @@ -30,6 +30,7 @@ $name = 'ups-nut'; $app_id = $app['app_id']; $oid = '.1.3.6.1.4.1.8072.1.3.2.3.1.2.7.117.112.115.45.110.117.116'; $ups_nut = snmp_get($device, $oid, '-Oqv'); +update_application($app, $ups_nut); // If "extend" (used above) fails, try "exec" support. // Note, exec always splits outputs on newline, so need to use snmp_walk (not a single SNMP entry!) diff --git a/includes/polling/functions.inc.php b/includes/polling/functions.inc.php index 965db305cd..e2507f5117 100644 --- a/includes/polling/functions.inc.php +++ b/includes/polling/functions.inc.php @@ -564,3 +564,37 @@ function get_device_oid_limit($device) return 10; } } + +/** + * Update the application status and output in the database. + * + * @param array $app app from the db, including app_id + * @param string $response This should be the full output + */ +function update_application($app, $response) +{ + if (!is_numeric($app['app_id'])) { + d_echo('$app does not contain app_id, could not update'); + return; + } + + $data = array( + 'app_state' => 'UNKNOWN', + 'timestamp' => array('NOW()'), + ); + + if ($response != '' && $response !== false) { + if (str_contains($response, array( + 'Traceback (most recent call last):', + ))) { + $data['app_state'] = 'ERROR'; + } else { + $data['app_state'] = 'OK'; + } + } + + if ($data['app_state'] != $app['app_state']) { + $data['app_state_prev'] = $app['app_state']; + } + dbUpdate($data, 'applications', '`app_id` = ?', array($app['app_id'])); +} diff --git a/sql-schema/176.sql b/sql-schema/176.sql new file mode 100644 index 0000000000..d687ecfcbd --- /dev/null +++ b/sql-schema/176.sql @@ -0,0 +1,2 @@ +ALTER TABLE `applications` ADD `timestamp` TIMESTAMP NOT NULL AFTER `app_status`; +ALTER TABLE `applications` ADD `app_state_prev` VARCHAR(32) NOT NULL AFTER `app_state`;