123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- <?php
- //-
- // Copyright (c) 2011-2023 Joe Clarke <jclarke@marcuscom.com>
- // All rights reserved.
- // Redistribution and use in source and binary forms, with or without
- // modification, are permitted provided that the following conditions
- // are met:
- // 1. Redistributions of source code must retain the above copyright
- // notice, this list of conditions and the following disclaimer.
- // 2. Redistributions in binary form must reproduce the above copyright
- // notice, this list of conditions and the following disclaimer in the
- // documentation and/or other materials provided with the distribution.
- // THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- // ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- // OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- // SUCH DAMAGE.
- include_once 'db.inc.php';
- include_once 'swreg/swreg.inc.php';
- include_once 'swreg_creds.inc.php';
- require_once 'Log.php';
- require_once 'functions.php';
- function error_to_exception($severity, $message, $file, $line)
- {
- if (!(error_reporting() & $severity)) {
- return;
- }
- throw new ErrorException($message, 0, $severity, $file, $line);
- }
- set_error_handler('error_to_exception');
- $dsn = "$db_driver:host=$db_host;dbname=$db_name";
- $options = [
- PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
- PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
- PDO::ATTR_EMULATE_PREPARES => false,
- ];
- header("Content-type:application/json;charset=utf-8");
- try {
- $dbh = new PDO($dsn, $db_user, $db_pass, $options);
- } catch (PDOException $e) {
- http_response_code(500);
- echo json_encode(["error" => $e->getMessage()]);
- }
- $logger = Log::singleton('file', LOGFILE, TOOL_NAME . ' : API');
- if ($logger === false) {
- http_response_code(500);
- echo json_encode(["error" => "Failed to open logfile."]);
- }
- $mask = Log::MAX(LOG_LEVEL);
- $logger->setMask($mask);
- $sql = "SELECT * FROM DEVICE_MAP WHERE checked_out='1' AND (device_status='1' OR device_status='2') ORDER BY LPAD(lower(assigned_switch), 10, 0)";
- $res = null;
- try {
- $res = $dbh->query($sql);
- } catch (PDOException $e) {
- $msg = "Error querying for physical switches: {$e->getMessage()}";
- $logger->error($msg);
- http_response_code(500);
- echo json_encode(["error" => $msg]);
- exit(1);
- }
- $infra = [];
- while ($row = $res->fetch()) {
- $target = [];
- $target['name'] = $row['assigned_switch'];
- $sql = 'SELECT ip_address, location, pid FROM SWITCHES WHERE name = :name';
- $sw_res = null;
- try {
- $sw_res = $dbh->prepare($sql);
- $sw_res->execute(['name' => $row['assigned_switch']]);
- } catch (PDOException $e) {
- $logger->warning("Failed to get details for {$row['assigned_switch']}: {$e->getMessage()}");
- continue;
- }
- $sw_row = $sw_res->fetch();
- if ($sw_row['location'] === null || $sw_row['location'] == '') {
- continue;
- }
- $target['ipv4'] = $sw_row['ip_address'];
- $target['location'] = $sw_row['location'];
- $target['pid'] = $sw_row['pid'];
- $target['platform'] = "ietfcisco";
- array_push($infra, $target);
- }
- echo json_encode($infra);
- cleanup();
- ?>
|