All Projects → qmsk → Snmpbot

qmsk / Snmpbot

Licence: mpl-2.0
Golang SNMP library + SNMP REST API

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Projects that are alternatives of or similar to Snmpbot

Spine
A Swift library for working with JSON:API APIs. It supports mapping to custom model classes, fetching, advanced querying, linking and persisting.
Stars: ✭ 267 (+506.82%)
Mutual labels:  rest-api, json
Node Rest Client
REST API client from node.js
Stars: ✭ 365 (+729.55%)
Mutual labels:  rest-api, json
Imbo
Imbo is an image "server" that can be used to add/get/delete images using a RESTful interface.
Stars: ✭ 312 (+609.09%)
Mutual labels:  rest-api, json
Http Fake Backend
Build a fake backend by providing the content of JSON files or JavaScript objects through configurable routes.
Stars: ✭ 253 (+475%)
Mutual labels:  rest-api, json
Rest Assured
Java DSL for easy testing of REST services
Stars: ✭ 5,646 (+12731.82%)
Mutual labels:  rest-api, json
Httpie
As easy as /aitch-tee-tee-pie/ 🥧 Modern, user-friendly command-line HTTP client for the API era. JSON support, colors, sessions, downloads, plugins & more. https://twitter.com/httpie
Stars: ✭ 53,052 (+120472.73%)
Mutual labels:  rest-api, json
Ws
⚠️ Deprecated - (in favour of Networking) ☁️ Elegantly connect to a JSON api. (Alamofire + Promises + JSON Parsing)
Stars: ✭ 352 (+700%)
Mutual labels:  rest-api, json
Dialetus Service
API to Informal dictionary for the idiomatic expressions that each Brazilian region It has
Stars: ✭ 202 (+359.09%)
Mutual labels:  rest-api, json
Spyke
Interact with REST services in an ActiveRecord-like manner
Stars: ✭ 591 (+1243.18%)
Mutual labels:  rest-api, json
Networking
⚡️ Elegantly connect to a REST JSON Api. URLSession + Combine + Decodable + Generics = <3
Stars: ✭ 499 (+1034.09%)
Mutual labels:  rest-api, json
Iotwifi
Raspberry Pi (arm) wifi configuration container. Configure and control wifi connectivity with a JSON based REST api.
Stars: ✭ 236 (+436.36%)
Mutual labels:  rest-api, json
Restclient
🦄 Simple HTTP and REST client for Unity based on Promises, also supports Callbacks! 🎮
Stars: ✭ 675 (+1434.09%)
Mutual labels:  rest-api, json
Play Scala Rest Api Example
Example Play Scala application showing REST API
Stars: ✭ 227 (+415.91%)
Mutual labels:  rest-api, json
Safrs
SqlAlchemy Flask-Restful Swagger Json:API OpenAPI
Stars: ✭ 255 (+479.55%)
Mutual labels:  rest-api, json
Datoji
A tiny JSON storage service. Create, Read, Update, Delete and Search JSON data.
Stars: ✭ 222 (+404.55%)
Mutual labels:  rest-api, json
Kim
Kim: A JSON Serialization and Marshaling framework
Stars: ✭ 326 (+640.91%)
Mutual labels:  rest-api, json
Live Stream Radio
24/7 live stream video radio station CLI / API 📹 📻
Stars: ✭ 175 (+297.73%)
Mutual labels:  rest-api, json
Autoserver
Create a full-featured REST/GraphQL API from a configuration file
Stars: ✭ 188 (+327.27%)
Mutual labels:  rest-api, json
Laravel Api Response Builder
Builds nice, normalized and easy to consume Laravel REST API JSON responses.
Stars: ✭ 433 (+884.09%)
Mutual labels:  rest-api, json
Ulfius
Web Framework to build REST APIs, Webservices or any HTTP endpoint in C language. Can stream large amount of data, integrate JSON data with Jansson, and create websocket services
Stars: ✭ 666 (+1413.64%)
Mutual labels:  rest-api, json

Build Status

github.com/qmsk/snmpbot

SNMP client (manager) library for Go with support for SMI MIBs.

REST (HTTP/JSON) API for writing SNMP applications.

Quickstart

The easiest way to run snmpbot is using the pre-built Docker image:

$ docker run --net=host qmsk/snmpbot
INFO mibs: Load MIBs from directory: /opt/qmsk/snmpbot/mibs
...
INFO web: Listen on :8286...

The pre-build Docker images contain the most common MIB definitions.

Querying a scalar object

You can then query the API at :8286:

$ curl -s 'http://localhost:8286/api/hosts/[email protected]/objects/SNMPv2-MIB::sysDescr' | jq

{
  "ID": "SNMPv2-MIB::sysDescr",
  "Instances": [
    {
      "HostID": "[email protected]",
      "Value": "Linux tehobari 4.15.0-33-generic #36~16.04.1-Ubuntu SMP Wed Aug 15 17:21:05 UTC 2018 x86_64"
    }
  ]
}

Querying multi-instance objects

You can query an object with multiple instances, and snmpbot will parse the OID indexes:

$ curl -s 'http://localhost:8286/api/hosts/[email protected]/objects/IF-MIB::ifName' | jq

{
  "ID": "IF-MIB::ifName",
  "IndexKeys": [
    "IF-MIB::ifIndex"
  ],
  "Instances": [
    {
      "HostID": "[email protected]",
      "Index": {
        "IF-MIB::ifIndex": 1
      },
      "Value": "lo"
    },
    {
      "HostID": "[email protected]",
      "Index": {
        "IF-MIB::ifIndex": 2
      },
      "Value": "enp0s31f6"
    },
    {
      "HostID": "[email protected]",
      "Index": {
        "IF-MIB::ifIndex": 4
      },
      "Value": "wlp4s0"
    },
    {
      "HostID": "[email protected]",
      "Index": {
        "IF-MIB::ifIndex": 5
      },
      "Value": "docker0"
    },
    {
      "HostID": "[email protected]",
      "Index": {
        "IF-MIB::ifIndex": 95
      },
      "Value": "wwp0s20f0u3c2"
    }
  ]
}

Querying tables

You can also query tables, and snmpbot will group the objects into entries with indexes:

curl -s 'http://localhost:8286/api/hosts/[email protected]/tables/IF-MIB::ifTable' | jq

{
  "ID": "IF-MIB::ifTable",
  "IndexKeys": [
    "IF-MIB::ifIndex"
  ],
  "ObjectKeys": [
    "IF-MIB::ifIndex",
    "IF-MIB::ifDescr",
    "IF-MIB::ifType",
    "IF-MIB::ifMtu",
    "IF-MIB::ifSpeed",
    "IF-MIB::ifPhysAddress",
    "IF-MIB::ifAdminStatus",
    "IF-MIB::ifOperStatus",
    "IF-MIB::ifLastChange",
    "IF-MIB::ifInOctets",
    "IF-MIB::ifInUcastPkts",
    "IF-MIB::ifInNUcastPkts",
    "IF-MIB::ifInDiscards",
    "IF-MIB::ifInErrors",
    "IF-MIB::ifInUnknownProtos",
    "IF-MIB::ifOutOctets",
    "IF-MIB::ifOutUcastPkts",
    "IF-MIB::ifOutNUcastPkts",
    "IF-MIB::ifOutDiscards",
    "IF-MIB::ifOutErrors",
    "IF-MIB::ifOutQLen",
    "IF-MIB::ifSpecific"
  ],
  "Entries": [
    {
      "HostID": "[email protected]",
      "Index": {
        "IF-MIB::ifIndex": 1
      },
      "Objects": {
        "IF-MIB::ifAdminStatus": "up",
        "IF-MIB::ifDescr": "lo",
        "IF-MIB::ifInDiscards": 0,
        "IF-MIB::ifInErrors": 0,
        "IF-MIB::ifInNUcastPkts": 0,
        "IF-MIB::ifInOctets": 1692789727,
        "IF-MIB::ifInUcastPkts": 1086499,
        "IF-MIB::ifInUnknownProtos": 0,
        "IF-MIB::ifIndex": 1,
        "IF-MIB::ifLastChange": 0,
        "IF-MIB::ifMtu": 65536,
        "IF-MIB::ifOperStatus": "up",
        "IF-MIB::ifOutDiscards": 0,
        "IF-MIB::ifOutErrors": 0,
        "IF-MIB::ifOutNUcastPkts": 0,
        "IF-MIB::ifOutOctets": 1692789727,
        "IF-MIB::ifOutQLen": 0,
        "IF-MIB::ifOutUcastPkts": 1086499,
        "IF-MIB::ifPhysAddress": "",
        "IF-MIB::ifSpecific": ".0.0",
        "IF-MIB::ifSpeed": 10000000,
        "IF-MIB::ifType": "softwareLoopback"
      }
    },
    ...
  ]
}

Advanced usage

See the remainder of the README for more advanced usage, including:

  • Querying multiple objects in parallel
  • Querying multiple tables in parallel
  • Configuring hosts (static TOML config file, or dynamic HTTP POST/PUT/DELETE API)
  • Querying multiple hosts in parallel

Requirements

Go version 1.10

Go version 1.9

SNMP MIBs

SNMP MIBs must be pre-processed into a custom JSON format for use with snmpbot.

Common pre-processed MIBs can be found at github.com/qmsk/snmpbot-mibs:

git clone https://github.com/qmsk/snmpbot-mibs
export SNMPBOT_MIBS=$PWD/snmpbot-mibs

Custom MIBs can be imported using the mib-import.py script.

Go Libraries

github.com/qmsk/snmpbot/snmp

Low-level SNMP protocol support.

github.com/qmsk/snmpbot/client

SNMP client with support for UDP queries

  • Multiple parallel requests (goroutine-safe)
  • Request timeout and retry
  • Get request splitting (large numbers of OIDs)

github.com/qmsk/snmpbot/mibs

SMI support for MIBs

  • Initialize using Load(path string) to load the .json MIB files
  • Resolving strings like "interfaces::ifDescr" to *Object
  • Resolving OIDs like ParseOID(".1.3.6.1.2.1.2.2.1.2") to *Object
  • Decoding SMI object SYNTAX to interface{}, including encoding/json support
  • Decoding SMI table INDEX syntax from OIDs

github.com/qmsk/snmpbot/server

SNMP manager with REST API.

CLI Commands

These are mostly meant for testing.

All of the commands support the same common flags:

  -debug
        Log debug
  -quiet
        Do not log warnings
  -snmp-community string
        Default SNMP community (default "public")
  -snmp-maxvars uint
        Maximum request VarBinds (default 10)
  -snmp-mibs string
        Load MIBs from path (default $SNMPBOT_MIBS)
  -snmp-retry int
        SNMP request retry
  -snmp-timeout duration
        SNMP request timeout (default 1s)
  -snmp-udp-size uint
        Maximum UDP recv size (default 1500)
  -verbose
        Log info

Apart from the snmpbot command, the first argument is a SNMP address of the form [[email protected]]HOST[:PORT], and the remainder are SMI objects of the form [MIB[::OBJECT]][.INDEX].

github.com/qmsk/snmpbot/cmd/snmpget

Testing GetRequest; note that non-tabular SNMP objects cannot be fetched without the .0 instance suffix.

snmpget [email protected] system::sysDescr

2017/11/18 22:02:49 VarBind[.1.3.6.1.2.1.1.1](system::sysDescr): SNMP VarBind Error: NoSuchInstance

snmpget [email protected] system::sysDescr.0

system::sysDescr.0 = EdgeSwitch 24-Port Lite, 1.7.0.4922887, Linux 3.6.5-f4a26ed5, 0.0.0.0000000

github.com/qmsk/snmpbot/cmd/snmpwalk

Testing GetNextRequest

snmpwalk [email protected] system::sysDescr.0

The output is empty, because there is nothing in the system::sysDescr tree after .0.

snmpwalk [email protected] system::sysDescr

system::sysDescr.0 = EdgeSwitch 24-Port Lite, 1.7.0.4922887, Linux 3.6.5-f4a26ed5, 0.0.0.0000000

snmpwalk [email protected] system

system::sysDescr.0 = EdgeSwitch 24-Port Lite, 1.7.0.4922887, Linux 3.6.5-f4a26ed5, 0.0.0.0000000
system::sysObjectID.0 = .1.3.6.1.4.1.4413
system::sysUpTime.0 = 2352h54m5s
system::sysContact.0 =
system::sysName.0 = UBNT EdgeSwitch
system::sysLocation.0 =
system::sysServices.0 = 6
system::sysORLastChange.0 = 1m7s
...

snmpwalk [email protected] Q-BRIDGE-MIB::dot1qVlanStaticName

Q-BRIDGE-MIB::dot1qVlanStaticName[1] = default
Q-BRIDGE-MIB::dot1qVlanStaticName[2] = wan
Q-BRIDGE-MIB::dot1qVlanStaticName[1002] = iot
Q-BRIDGE-MIB::dot1qVlanStaticName[1003] = guest

Object indexes are decoded.

github.com/qmsk/snmpbot/cmd/snmpobject

Very similar to snmpwalk, but implemented slightly differently - only works for known objects, not arbitrary OIDs.

snmpobject [email protected] system::sysDescr interfaces::ifDescr

system::sysDescr = EdgeSwitch 24-Port Lite, 1.7.0.4922887, Linux 3.6.5-f4a26ed5, 0.0.0.0000000
interfaces::ifDescr[1] = Slot: 0 Port: 1 Gigabit - Level
interfaces::ifDescr[2] = Slot: 0 Port: 2 Gigabit - Level
interfaces::ifDescr[3] = Slot: 0 Port: 3 Gigabit - Level
interfaces::ifDescr[4] = Slot: 0 Port: 4 Gigabit - Level

snmpobject [email protected] Q-BRIDGE-MIB::dot1qTpFdbPort

Q-BRIDGE-MIB::dot1qTpFdbPort[1][44:xx:xx:xx:xx:19] = 24
Q-BRIDGE-MIB::dot1qTpFdbPort[1][50:xx:xx:xx:xx:b2] = 2
Q-BRIDGE-MIB::dot1qTpFdbPort[1][70:xx:xx:xx:xx:e4] = 23
Q-BRIDGE-MIB::dot1qTpFdbPort[1][ac:xx:xx:xx:xx:c9] = 6
Q-BRIDGE-MIB::dot1qTpFdbPort[1][f0:xx:xx:xx:xx:30] = 65
Q-BRIDGE-MIB::dot1qTpFdbPort[1][f0:xx:xx:xx:xx:3f] = 24
Q-BRIDGE-MIB::dot1qTpFdbPort[1][f0:xx:xx:xx:xx:45] = 24
Q-BRIDGE-MIB::dot1qTpFdbPort[2][00:xx:xx:xx:xx:27] = 24
Q-BRIDGE-MIB::dot1qTpFdbPort[2][70:xx:xx:xx:xx:e4] = 23
Q-BRIDGE-MIB::dot1qTpFdbPort[1002][74:xx:xx:xx:xx:c6] = 24
Q-BRIDGE-MIB::dot1qTpFdbPort[1002][f0:xx:xx:xx:xx:45] = 24

github.com/qmsk/snmpbot/cmd/snmpprobe

Use GetNextRequest to probe the presence of subtrees, including entire MIBs or objects within MIBs

snmpprobe [email protected] BRIDGE-MIB BRIDGE-MIB::dot1dBaseBridgeAddress BRIDGE-MIB::dot1dStpPortTable

BRIDGE-MIB = true
BRIDGE-MIB::dot1dBaseBridgeAddress = true
BRIDGE-MIB::dot1dStpPortTable = false

github.com/qmsk/snmpbot/cmd/snmptable

Use GetNextRequest to walk and decode SMI tables

snmptable [email protected] interfaces::ifTable

interfaces::ifIndex |       interfaces::ifIndex interfaces::ifDescr                interfaces::ifType interfaces::ifMtu interfaces::ifSpeed interfaces::ifPhysAddress interfaces::ifAdminStatus interfaces::ifOperStatus interfaces::ifLastChange
---                 |       ---                 ---                                ---                ---               ---                 ---                       ---                       ---                      ---
1                   |       1                   Slot: 0 Port: 1 Gigabit - Level    6                  1518              0                   f0:9f:c2:09:87:31         up                        down                     2257h16m19s
2                   |       2                   Slot: 0 Port: 2 Gigabit - Level    6                  1518              1000000000          f0:9f:c2:09:87:31         up                        up                       2342h30m20s
3                   |       3                   Slot: 0 Port: 3 Gigabit - Level    6                  1518              0                   f0:9f:c2:09:87:31         up                        down                     525h50m17s
4                   |       4                   Slot: 0 Port: 4 Gigabit - Level    6                  1518              0                   f0:9f:c2:09:87:31         up                        down                     0s
5                   |       5                   Slot: 0 Port: 5 Gigabit - Level    6                  1518              0                   f0:9f:c2:09:87:31         up                        down                     1200h48m53s
6                   |       6                   Slot: 0 Port: 6 Gigabit - Level    6                  1518              100000000           f0:9f:c2:09:87:31         up                        up                       2318h40m45s
7                   |       7                   Slot: 0 Port: 7 Gigabit - Level    6                  1518              0                   f0:9f:c2:09:87:31         up                        down                     0s
8                   |       8                   Slot: 0 Port: 8 Gigabit - Level    6                  1518              0                   f0:9f:c2:09:87:31         up                        down                     0s
9                   |       9                   Slot: 0 Port: 9 Gigabit - Level    6                  1518              10000000            f0:9f:c2:09:87:31         up                        up                       2331h13m45s
10                  |       10                  Slot: 0 Port: 10 Gigabit - Level   6                  1518              0                   f0:9f:c2:09:87:31         up                        down                     0s
11                  |       11                  Slot: 0 Port: 11 Gigabit - Level   6                  1518              0                   f0:9f:c2:09:87:31         up                        down                     0s
12                  |       12                  Slot: 0 Port: 12 Gigabit - Level   6                  1518              0                   f0:9f:c2:09:87:31         up                        down                     0s
13                  |       13                  Slot: 0 Port: 13 Gigabit - Level   6                  1518              0                   f0:9f:c2:09:87:31         up                        down                     0s
14                  |       14                  Slot: 0 Port: 14 Gigabit - Level   6                  1518              0                   f0:9f:c2:09:87:31         up                        down                     0s
15                  |       15                  Slot: 0 Port: 15 Gigabit - Level   6                  1518              0                   f0:9f:c2:09:87:31         up                        down                     0s
16                  |       16                  Slot: 0 Port: 16 Gigabit - Level   6                  1518              0                   f0:9f:c2:09:87:31         up                        down                     0s
17                  |       17                  Slot: 0 Port: 17 Gigabit - Level   6                  1518              100000000           f0:9f:c2:09:87:31         up                        up                       1m17s
18                  |       18                  Slot: 0 Port: 18 Gigabit - Level   6                  1518              0                   f0:9f:c2:09:87:31         up                        down                     0s
19                  |       19                  Slot: 0 Port: 19 Gigabit - Level   6                  1518              0                   f0:9f:c2:09:87:31         up                        down                     0s
20                  |       20                  Slot: 0 Port: 20 Gigabit - Level   6                  1518              0                   f0:9f:c2:09:87:31         up                        down                     0s
21                  |       21                  Slot: 0 Port: 21 Gigabit - Level   6                  1518              0                   f0:9f:c2:09:87:31         up                        down                     0s
22                  |       22                  Slot: 0 Port: 22 Gigabit - Level   6                  1518              0                   f0:9f:c2:09:87:31         up                        down                     0s
23                  |       23                  Slot: 0 Port: 23 Gigabit - Level   6                  1518              1000000000          f0:9f:c2:09:87:31         up                        up                       1551h25m59s
24                  |       24                  Slot: 0 Port: 24 Gigabit - Level   6                  1518              1000000000          f0:9f:c2:09:87:31         up                        up                       382h12m33s
25                  |       25                  Slot: 0 Port: 25 Gigabit - Level   6                  1518              0                   f0:9f:c2:09:87:31         up                        down                     0s
26                  |       26                  Slot: 0 Port: 26 Gigabit - Level   6                  1518              0                   f0:9f:c2:09:87:31         up                        down                     0s
65                  |       65                   CPU Interface for Slot: 5 Port: 1 1                  1518              0                   f0:9f:c2:09:87:30         up                        up                       0s
66                  |       66                   Link Aggregate 1                  1                  1518              0                   f0:9f:c2:09:87:31         up                        down                     0s
67                  |       67                   Link Aggregate 2                  1                  1518              0                   f0:9f:c2:09:87:31         up                        down                     0s
68                  |       68                   Link Aggregate 3                  1                  1518              0                   f0:9f:c2:09:87:31         up                        down                     0s
69                  |       69                   Link Aggregate 4                  1                  1518              0                   f0:9f:c2:09:87:31         up                        down                     0s
70                  |       70                   Link Aggregate 5                  1                  1518              0                   f0:9f:c2:09:87:31         up                        down                     0s
71                  |       71                   Link Aggregate 6                  1                  1518              0                   f0:9f:c2:09:87:31         up                        down                     0s

snmptable [email protected] LLDP-MIB::lldpRemTable

LLDP-MIB::lldpRemTimeMark LLDP-MIB::lldpRemLocalPortNum LLDP-MIB::lldpRemIndex |       LLDP-MIB::lldpRemChassisIdSubtype LLDP-MIB::lldpRemChassisId LLDP-MIB::lldpRemPortIdSubtype LLDP-MIB::lldpRemPortId LLDP-MIB::lldpRemPortDesc LLDP-MIB::lldpRemSysName LLDP-MIB::lldpRemSysDesc
---                       ---                           ---                    |       ---                               ---                        ---                            ---                     ---                       ---                      ---
21h59m32.24s              24                            1                      |       macAddress                        f0 9f c2 64 6d 45          macAddress                     f0 9f c2 64 6d 45       switch0                   erx-home                 UBNT EdgeRouter X SFP 6-Port running on v1.9.1.1.4977602.170427.0113
21h59m32.24s              24                            2                      |       macAddress                        f0 9f c2 64 6d 45          macAddress                     f0 9f c2 64 6d 3f       eth0                      erx-home                 UBNT EdgeRouter X SFP 6-Port running on v1.9.1.1.4977602.170427.0113

github.com/qmsk/snmpbot/cmd/snmpbot

This is the command using the server to provide the HTTP REST API.

Usage

$ $GOPATH/bin/snmpbot -help
  -config string
        Load TOML config
  -debug
        Log debug
  -http-listen string
        HTTP server listen: [HOST]:PORT (default ":8286")
  -http-static string
        HTTP sever /static path: PATH
  -quiet
        Do not log warnings
  -snmp-community string
        Default SNMP community (default "public")
  -snmp-maxvars uint
        Maximum request VarBinds (default 10)
  -snmp-mibs string
        Load MIBs from path (default $SNMPBOT_MIBS)
  -snmp-retry int
        SNMP request retry
  -snmp-timeout duration
        SNMP request timeout (default 1s)
  -snmp-udp-size uint
        Maximum UDP recv size (default 1500)
  -verbose
        Log info

Examples:

$GOPATH/bin/snmpbot -config config.toml -http-listen :8286 -snmp-udp-size 9000 -snmp-maxvars 50

Config

Loaded using snmpbot -config

[hosts.edgeswitch-098730]
SNMP = "[email protected]"
Location = "test"

[hosts.erx-home]
SNMP = "[email protected]"
Location = "home"

The configuration file is optional, dynamic hosts can be queried without any config, using GET /hosts/[email protected] (also -snmp-community=...).

NOTE: The mass-querying /objects/... and /tables/... endpoints only query configured objects.

API

See the api package docs for the exact details

GET /api/

{
   "Hosts" : [
      {
         "ID" : "edgeswitch-098730",
         "SNMP" : "[email protected]:161"
      },
      {
         "ID" : "erx-home",
         "SNMP" : "[email protected]:161"
      }
   ],
   "MIBs" : [
      {
         "ID" : "IF-MIB"
      },
      ...
   ],
   "Tables" : [
      {
         "ID" : "Q-BRIDGE-MIB::dot1qVlanStaticTable",
         "ObjectKeys" : [
            "Q-BRIDGE-MIB::dot1qVlanStaticName",
            "Q-BRIDGE-MIB::dot1qVlanStaticEgressPorts",
            "Q-BRIDGE-MIB::dot1qVlanForbiddenEgressPorts",
            "Q-BRIDGE-MIB::dot1qVlanStaticUntaggedPorts",
            "Q-BRIDGE-MIB::dot1qVlanStaticRowStatus"
         ],
         "IndexKeys" : [
            "Q-BRIDGE-MIB::dot1qVlanIndex"
         ]
      },
      ...
    ],
   "Objects" : [
      {
         "IndexKeys" : [
            "interfaces::ifIndex"
         ],
         "ID" : "interfaces::ifDescr"
      },
      {
         "ID" : "system::sysContact"
      },
      ...
   ]
}

GET /api/hosts/

Query configured hosts.

[
   {
      "ID" : "edgeswitch-098730",
      "SNMP" : "[email protected]:161"
   },
   ...
]

POST /api/hosts/

Configure a new host. The new host will show up in /hosts/ and can be queried via the /objects/... and /tables/... endpoints.

{
   "ID" : "edgeswitch-098730",
   "SNMP" : "[email protected]:161",
   "Online": true,
   ...
}

Response is as for GET.

Returns HTTP 409 Conflict if the host is already configured. Use PUT /v1/hosts/:id instead.

Request Content-Type: application/json
{
  "ID": "test",
  "SNMP": "[email protected]",
  "Location": "testing"
}
Request Content-Type: application/x-www-form-urlencoded
id=test&[email protected]&location=testing

GET /api/hosts/:id

Query information about a specific configured host.

{
   "ID" : "edgeswitch-098730",
   "SNMP" : "[email protected]:161",
   "Location": "testing",
   "Online": true
}

Note: Does not return anything useful for a dynamic host.

PUT /api/hosts/:id

Add or replace a configured host.

{
   "ID" : "edgeswitch-098730",
   "SNMP" : "[email protected]:161",
   "Online": true,
   ...
}

Response is as for GET.

Request Content-Type: application/json
{
  "SNMP": "[email protected]",
  "Location": "testing"
}
Request Content-Type: application/x-www-form-urlencoded
[email protected]&location=testing

DELETE /api/hosts/:id

Remove a configured host.

Returns HTTP 204 No Content.

GET /api/hosts/test/[email protected]

Query a dynamic host using an arbitrary ?snmp=[<community> "@"] <host> target.

The [<community> "@"] is optional, and defaults to the -config => [ClientOptions] Community= or -snmp-community.

{
   "MIBs" : [
      {
         "ID" : "SNMPv2-MIB"
      },
      ...
   ],
   "ID" : "test",
   "SNMP" : "[email protected]:161"
}

The given SNMP host will be probed for supported MIBs.

NOTE: The ?snmp= query parameter works for all host API paths, but is ignored for configured hosts.

GET /api/hosts/:host/

Query host with information about tables/objects for probed MIBs.

{
   "ID" : "edgeswitch-098730",
   "Objects" : [
      {
         "ID" : "system::sysObjectID"
      },
      ...
   ],
   "Tables" : [
      {
         "IndexKeys" : [
            "BRIDGE-MIB::dot1dStpPort"
         ],
         "ObjectKeys" : [
            "BRIDGE-MIB::dot1dStpPort",
            "BRIDGE-MIB::dot1dStpPortPriority",
            "BRIDGE-MIB::dot1dStpPortState",
            "BRIDGE-MIB::dot1dStpPortEnable",
            "BRIDGE-MIB::dot1dStpPortPathCost",
            "BRIDGE-MIB::dot1dStpPortDesignatedRoot",
            "BRIDGE-MIB::dot1dStpPortDesignatedCost",
            "BRIDGE-MIB::dot1dStpPortDesignatedBridge",
            "BRIDGE-MIB::dot1dStpPortDesignatedPort",
            "BRIDGE-MIB::dot1dStpPortForwardTransitions"
         ],
         "ID" : "BRIDGE-MIB::dot1dStpPortTable"
      },
      ...
   ],
   "MIBs" : [
      {
         "ID" : "SNMPv2-MIB"
      },
      ...
   ],
   "SNMP" : "[email protected]:161"
}

GET /api/hosts/:host/tables/LLDP-MIB::lldpRemTable

Query a specific table for a specific host (dynamic or configured).

{
   "ObjectKeys" : [
      ...
   ],
   "IndexKeys" : [
      ...
   ],
   "Entries" : [
      ...
   ],
   "ID" : "LLDP-MIB::lldpRemTable"
}

Note: The queried table does not necessarily need to belong to a probed MIB.

GET /api/hosts/:host/tables/?table=LLDP-MIB::*

Query multiple tables from probed mibs for a specific host (dynamic or configured).

Use multiple ?table=A&table=B filters to query different tables.

Use (multiple) ?host=test-* query parameters to limit queried hosts.

[
   {
      "ObjectKeys" : [
         "LLDP-MIB::lldpLocPortIdSubtype",
         "LLDP-MIB::lldpLocPortId",
         "LLDP-MIB::lldpLocPortDesc"
      ],
      "Entries" : [
         {
            "HostID" : "edgeswitch-098730",
            "Index" : {
               "LLDP-MIB::lldpLocPortNum" : 1
            },
            "Objects" : {
               "LLDP-MIB::lldpLocPortIdSubtype" : "macAddress",
               "LLDP-MIB::lldpLocPortId" : "f0 9f c2 09 87 31",
               "LLDP-MIB::lldpLocPortDesc" : ""
            }
         },
         ...
      ],
      "ID" : "LLDP-MIB::lldpLocPortTable",
      "IndexKeys" : [
         "LLDP-MIB::lldpLocPortNum"
      ]
   },
   {
      "ObjectKeys" : [
         "LLDP-MIB::lldpRemChassisIdSubtype",
         "LLDP-MIB::lldpRemChassisId",
         "LLDP-MIB::lldpRemPortIdSubtype",
         "LLDP-MIB::lldpRemPortId",
         "LLDP-MIB::lldpRemPortDesc",
         "LLDP-MIB::lldpRemSysName",
         "LLDP-MIB::lldpRemSysDesc"
      ],
      "Entries" : [
         {
            "Index" : {
               "LLDP-MIB::lldpRemTimeMark" : 79172.24,
               "LLDP-MIB::lldpRemLocalPortNum" : 24,
               "LLDP-MIB::lldpRemIndex" : 1
            },
            "HostID" : "edgeswitch-098730",
            "Objects" : {
               "LLDP-MIB::lldpRemChassisIdSubtype" : "macAddress",
               "LLDP-MIB::lldpRemSysDesc" : "UBNT EdgeRouter X SFP 6-Port running on v1.9.1.1.4977602.170427.0113",
               "LLDP-MIB::lldpRemPortDesc" : "switch0",
               "LLDP-MIB::lldpRemSysName" : "erx-home",
               "LLDP-MIB::lldpRemPortIdSubtype" : "macAddress",
               "LLDP-MIB::lldpRemChassisId" : "f0 9f c2 64 6d 45",
               "LLDP-MIB::lldpRemPortId" : "f0 9f c2 64 6d 45"
            }
         },
         ...
      ],
      "ID" : "LLDP-MIB::lldpRemTable",
      "IndexKeys" : [
         "LLDP-MIB::lldpRemTimeMark",
         "LLDP-MIB::lldpRemLocalPortNum",
         "LLDP-MIB::lldpRemIndex"
      ]
   }
]

Note: The queried tables must belong to a probed MIB.

GET /api/hosts/:host/objects/SNMPv2-MIB::sysDescr

Query a specific object for a specific host (configured or dynamic).

{
   "Instances" : [
      {
         "Value" : "EdgeSwitch 24-Port Lite, 1.7.0.4922887, Linux 3.6.5-f4a26ed5, 0.0.0.0000000",
         "HostID" : "edgeswitch-098730"
      }
   ],
   "ID" : "SNMPv2-MIB::sysDescr"
}

Note: The queried object does not necessarily need to belong to a probed MIB.

Note: Objects belonging to table entries will return multiple instances with different Index values.

GET /api/hosts/:host/objects/?object=SNMPv2-MIB::sys*&object=IF-MIB::ifDescr

Query matching objects from probed MIBs for a specific host (dynamic or configured).

Use multiple ?object=A&object=B filters to query different objects. Use ?object=MIB::foo* filters to query multiple matching objects.

Use ?table=IF-MIB::ifTable to query for objects belonging to matching tables. These can also be combined with ?object= filters, e.g. GET /api/hosts/[email protected]/objects/?table=IF-MIB::ifXTable&object=*HC*Pkts to return 64-bit per-interface packet counters as separate objects.

   {
      "IndexKeys" : [
         "interfaces::ifIndex"
      ],
      "ID" : "interfaces::ifDescr",
      "Instances" : [
         {
            "Value" : "Slot: 0 Port: 1 Gigabit - Level",
            "HostID" : "edgeswitch-098730",
            "Index" : {
               "interfaces::ifIndex" : 1
            }
         },
         {
            "HostID" : "edgeswitch-098730",
            "Value" : "Slot: 0 Port: 2 Gigabit - Level",
            "Index" : {
               "interfaces::ifIndex" : 2
            }
         },
         ...
      ]
   },
   {
      "ID" : "system::sysDescr",
      "Instances" : [
         {
            "HostID" : "edgeswitch-098730",
            "Value" : "EdgeSwitch 24-Port Lite, 1.7.0.4922887, Linux 3.6.5-f4a26ed5, 0.0.0.0000000"
         }
      ]
   }
]

Note: The queried object must belong to a probed MIB.

GET /api/tables/IF-MIB::ifTable?host=test-*

Query specific table across all hosts.

Use (multiple) ?host=test-* query parameters to limit queried hosts.

{
   "ID" : "IF-MIB::ifTable",
   "IndexKeys" : [
      "IF-MIB::ifIndex"
   ],
   "ObjectKeys" : [
      "IF-MIB::ifIndex",
      "IF-MIB::ifDescr",
      "IF-MIB::ifType",
      "IF-MIB::ifMtu",
      "IF-MIB::ifSpeed",
      "IF-MIB::ifPhysAddress",
      "IF-MIB::ifAdminStatus",
      "IF-MIB::ifOperStatus",
      "IF-MIB::ifLastChange"
   ],
   "Entries" : [
      {
         "Index" : {
            "IF-MIB::ifIndex" : 1
         },
         "Objects" : {
            "IF-MIB::ifPhysAddress" : "",
            "IF-MIB::ifLastChange" : 0,
            "IF-MIB::ifMtu" : 65536,
            "IF-MIB::ifType" : 24,
            "IF-MIB::ifSpeed" : 10000000,
            "IF-MIB::ifIndex" : 1,
            "IF-MIB::ifAdminStatus" : "up",
            "IF-MIB::ifDescr" : "lo",
            "IF-MIB::ifOperStatus" : "up"
         },
         "HostID" : "erx-home"
      },
      ...
      {
         "HostID" : "edgeswitch-098730",
         "Objects" : {
            "IF-MIB::ifMtu" : 1518,
            "IF-MIB::ifLastChange" : 8433020,
            "IF-MIB::ifPhysAddress" : "f0:9f:c2:09:87:31",
            "IF-MIB::ifSpeed" : 1000000000,
            "IF-MIB::ifType" : 6,
            "IF-MIB::ifDescr" : "Slot: 0 Port: 2 Gigabit - Level",
            "IF-MIB::ifAdminStatus" : "up",
            "IF-MIB::ifIndex" : 2,
            "IF-MIB::ifOperStatus" : "up"
         },
         "Index" : {
            "IF-MIB::ifIndex" : 2
         }
      },
   ]
}

Note: Only configured hosts are queried.

Note: The table contains entries from all hosts for that SNMP table: Different Entries in the same table can have different HostID values.

GET /api/tables/?table=LLDP-MIB::lldpRemTable&table=Q-BRIDGE-MIB::dot1qTpFdbTable

Query multiple tables across all hosts.

Use multiple ?table=A&table=B filters to query different tables.

Use (multiple) ?host=test-* query parameters to limit queried hosts.

[
   {
      "ID" : "LLDP-MIB::lldpRemTable",
      ...
   },
   {
      "ID" : "Q-BRIDGE-MIB::dot1qTpFdbTable",
      ...
   }
]

Note: Only configured hosts are queried.

Note: Each table contains entries from all hosts for that SNMP table: Different Entries in the same table can have different HostID values.

GET /api/objects/IF-MIB::ifDescr

Query specific object across all hosts. Use ?host=test-* to filter queried hosts.

{
   "IndexKeys" : [
      "IF-MIB::ifIndex"
   ],
   "ID" : "IF-MIB::ifDescr",
   "Instances" : [
      {
         "HostID" : "erx-home",
         "Value" : "lo",
         "Index" : {
            "IF-MIB::ifIndex" : 1
         }
      },
      {
         "Index" : {
            "IF-MIB::ifIndex" : 1
         },
         "Value" : "Slot: 0 Port: 1 Gigabit - Level",
         "HostID" : "edgeswitch-098730"
      },
      ...
   ]
}

Note: Only configured hosts are queried.

GET /api/objects/IF-MIB::ifDescr?host=edgeswitch-*

Query specific object across all hosts. Use ?host=... to filter queried hosts.

{
   "Instances" : [
      {
         "Index" : {
            "IF-MIB::ifIndex" : 1
         },
         "HostID" : "edgeswitch-098730",
         "Value" : "Slot: 0 Port: 1 Gigabit - Level"
      },
      {
         "HostID" : "edgeswitch-098730",
         "Index" : {
            "IF-MIB::ifIndex" : 2
         },
         "Value" : "Slot: 0 Port: 2 Gigabit - Level"
      },
      {
         "Value" : "Slot: 0 Port: 3 Gigabit - Level",
         "HostID" : "edgeswitch-098730",
         "Index" : {
            "IF-MIB::ifIndex" : 3
         }
      },
      ...
      {
         "HostID" : "edgeswitch-098730",
         "Index" : {
            "IF-MIB::ifIndex" : 71
         },
         "Value" : " Link Aggregate 6"
      }
   ],
   "ID" : "IF-MIB::ifDescr",
   "IndexKeys" : [
      "IF-MIB::ifIndex"
   ]
}

Note: Only configured hosts are queried.

GET /api/objects/?object=SNMPv2-MIB::*

Query multiple matching objects across all hosts.

Use multiple ?object=A&object=B filters to query different objects.

Use (multiple) ?host=test-* query parameters to limit queried hosts.

[
   {
      "ID" : "SNMPv2-MIB::sysLocation",
      "Instances" : [
         {
            "Value" : "home.qmsk.net",
            "HostID" : "erx-home"
         },
         {
            "Value" : "",
            "HostID" : "edgeswitch-098730"
         }
      ]
   },
   {
      "Instances" : [
         {
            "HostID" : "erx-home",
            "Value" : "EdgeOS v1.9.1.1.4977602.170427.0113"
         },
         {
            "HostID" : "edgeswitch-098730",
            "Value" : "EdgeSwitch 24-Port Lite, 1.7.0.4922887, Linux 3.6.5-f4a26ed5, 0.0.0.0000000"
         }
      ],
      "ID" : "SNMPv2-MIB::sysDescr"
   },
   ...
]

Note: Only configured hosts are queried.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].