App-Netdisco

 view release on metacpan or  search on metacpan

share/config.yml  view on Meta::CPAN

      - {device_details: 'Device Details'}
      - {ip: 'IP Address', _searchable: true}
      - {location: 'Location'}
      - {model: 'Model'}
      - {serial: 'Serial'}
      - {vendor: 'Vendor'}
      - {os: 'Operating System'}
      - {version: 'OS Version'}
    query: |
      WITH ranked_devices AS (
        SELECT
          d.name AS device_name,
          CASE
            WHEN dm.ip IS NOT NULL AND dm.class = 'chassis' THEN dm.name
            ELSE NULL
          END AS device_details,
          d.ip AS ip,
          d.location AS location,
          COALESCE(dm.serial, d.serial) AS serial,
          d.vendor AS vendor,
          d.os AS os,
          COALESCE(
            CASE
              WHEN dm.model IS NOT NULL
                AND LOWER(REGEXP_REPLACE(dm.model, '[^a-zA-Z0-9]', '', 'g')) <> LOWER(REGEXP_REPLACE(d.model, '[^a-zA-Z0-9]', '', 'g'))
              THEN dm.model || '|' || d.model
              ELSE COALESCE(dm.model, d.model)
            END, d.model
          ) AS model,
          CASE
            WHEN dm.sw_ver IS NOT NULL AND dm.sw_ver <> '' THEN dm.sw_ver
            ELSE d.os_ver
          END AS version,
          ROW_NUMBER() OVER (
            PARTITION BY d.name, COALESCE(dm.serial, d.serial)
            ORDER BY d.ip
          ) AS rn
        FROM
          device d
        LEFT JOIN
          device_module dm
          ON d.ip = dm.ip AND dm.class = 'chassis'
      )
      SELECT
        device_name,
        device_details,
        ip,
        location,
        model,
        serial,
        vendor,
        os,
        version
      FROM
        ranked_devices
      WHERE
        rn = 1
      ORDER BY
        device_name, serial
  - tag: portserrordisabled
    label: 'Blocked - Error-Disabled'
    category: Port
    columns:
      - { ip: Device, _searchable: true }
      - { dns: DNS }
      - { port: Port }
      - { name: Description }
      - { reason: Reason }
    query: |
      SELECT dp.ip, d.dns, dp.port, dp.name, properties.error_disable_cause AS reason
        FROM device_port dp
        INNER JOIN device_port_properties properties USING (ip, port)
        LEFT JOIN device d USING (ip)
      WHERE properties.error_disable_cause IS NOT NULL
      ORDER BY dp.ip, dp.port
  - tag: devicemultipleaddresses
    label: 'Devices with Multiple Addresses'
    category: Device
    columns:
      - { 'ip': 'Device IP', _searchable: true }
      - { 'devname': 'Name' }
      - { 'count': 'Addresses Count' }
      - { 'contact': 'Contact' }
      - { 'location': 'Location' }
    query: |
      SELECT ip, COALESCE(NULLIF(device.dns,''), NULLIF(name,''), '(none)') AS devname, count(alias), contact, location
        FROM device_ip LEFT JOIN device USING (ip)
        GROUP BY ip, devname, contact, location
        HAVING count(alias) > 1
        ORDER BY count(alias) DESC, devname ASC
  - tag: devicesharedaddresses
    label: 'IPs on Multiple Devices'
    category: Device
    columns:
      - { 'alias': 'Interface IP', _searchable: true }
      - { 'count': 'Instance Count' }
    query: |
      SELECT alias, count(ip)
        FROM device_ip
        WHERE alias != '127.0.0.1'
        GROUP BY alias
        HAVING count(ip) > 1
        ORDER BY count(ip) DESC, alias ASC
  - tag: recentlyaddeddevices
    category: Device
    label: 'Recently Added Devices'
    columns:
      - { ip: 'Device IP', _searchable: true }
      - { devname: 'Name' }
      - { model: 'Model' }
      - { vendor: 'Vendor' }
      - { creation: 'Date Added' }
      - { os: 'Operating System' }
      - { os_ver: 'OS Version' }
      - { location: 'Location' }
      - { contact: 'Contact' }
      - { serial: 'Serial' }
    bind_params:
      - { param: 'since', default: '2 months' }
    query: |
      SELECT ip, COALESCE(NULLIF(dns,''), NULLIF(name,''), '') AS devname,



( run in 3.198 seconds using v1.01-cache-2.11-cpan-5837b0d9d2c )