The REST API allows users to query the iQSonar results directly using the web client protocol. The results are returned in JSON format.
...
Code Block | ||||
---|---|---|---|---|
| ||||
// update these for your location $rhost = "vmiqsonar-mike-sql17host"; $aname = "admin"; $psswd = "password"; /* * Use curl to fetch the results from the REST API */ $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_USERPWD, $aname . ":" . $psswd); curl_setopt($ch, CURLOPT_URL, "http://" .$rhost ."/API/v1/devices"); $response = curl_exec($ch); // We want to parse the headers to find X-fetch-count $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $headers = substr($response, 0, $header_size); // explode multiline response headers into an array of lines $header = explode("\n",$headers); foreach ($header as $line) { // find the two headers we're specifically interested in list($key,$value) = explode(": ",$line); if (strcasecmp($key,"X-fetch-count")==0) { $max = $value; } // total no of devices in database if (strcasecmp($key,"X-fetch-current-size")==0) { $count = $value; }// count of devices returned in THIS query - will stop at 200 if there are more than 200 results } $body = substr($response, $header_size); $jsondata = json_decode($body, true); // recursive associative array please |
By default the REST API "/api/v1/devices" page will return 200 devices at a time. We can increase or decrease this using the "fetch_size" parameter in the URL. The X-fetch-count header contains the total number of devices in the dataset. The X-fetch-current-size header shows how many were returned in this batch of results.
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<?php // PHP script to use REST API to get a list of devices from a project and return it as a table /* * PHP7.1 used * Additional Extensions used (may need to be installed separately): * - curl * - json */ // update these for your location $rhost = "vmiqsonar-mike-sql17host"; $aname = "admin"; $psswd = "password"; /* * Use curl to fetch the results from the REST API */ $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_USERPWD, $aname . ":" . $psswd); curl_setopt($ch, CURLOPT_URL, "http://" .$rhost ."/API/v1/devices"); $response = curl_exec($ch); // We want to parse the headers to find X-fetch-count $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $headers = substr($response, 0, $header_size); // explode multiline response headers into an array of lines $header = explode("\n",$headers); foreach ($header as $line) { // find the two headers we're specifically interested in list($key,$value) = explode(": ",$line); if (strcasecmp($key,"X-fetch-count")==0) { $max = $value; } // total no of devices in database if (strcasecmp($key,"X-fetch-current-size")==0) { $count = $value; }// count of devices returned in THIS query } $body = substr($response, $header_size); $jsondata = json_decode($body, true); // recursive associative array please $output = "<html><head><title>List of Devices</title></head>\n<body>\n"; $output = "<p>Details for " . $count . " devices.</p>\n"; $output .= "<table border='1' cellpadding='1'>\n<tr><td>Hostname</td><td>RAM</td><td>CPU</td></tr>\n"; echo "$output"; $ch2 = curl_init(); curl_setopt($ch2, CURLOPT_USERPWD, $aname . ":" . $psswd); curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch2, CURLOPT_VERBOSE, 1); curl_setopt($ch2, CURLOPT_HEADER, 1); $output = ""; $i=0; while ($i != $count) { $hostname = $jsondata[$i]["host_name"] ?? "(no hostname)"; $self = $jsondata[$i]["self"]; curl_setopt($ch2, CURLOPT_URL, $self); $device_response = curl_exec($ch2); $header_size = curl_getinfo($ch2, CURLINFO_HEADER_SIZE); $devicedetails = substr($device_response, $header_size); $device = json_decode($devicedetails,true); $ram = $device['total_memory_mb'] ?? "(no ram info)"; $cpu = $device['cpu'][0]['cpu_model'] ?? "(no cpu info)" ; $output .= "<tr><td>$hostname</td><td>$ram</td><td>$cpu</tr>\n"; curl_close($ch2); $i++; } $output .= "</table>\n</body>"; echo $output; ?> |
...