docs: gluon-announce, announced, alfred
This commit is contained in:
parent
af422f70e1
commit
e0ade6302c
159
docs/features/announce.rst
Normal file
159
docs/features/announce.rst
Normal file
@ -0,0 +1,159 @@
|
||||
Announcing Node Information
|
||||
===========================
|
||||
|
||||
Gluon is capable of announcing information about each node to the mesh
|
||||
and to neighbouring nodes. This allows nodes to learn each others hostname,
|
||||
IP addresses, location, software versions and various other information.
|
||||
|
||||
Format of collected data
|
||||
------------------------
|
||||
|
||||
Information to be announced is currently split into two categories:
|
||||
|
||||
nodeinfo
|
||||
In this category (mostly) static information is collected. If
|
||||
something is unlikely to change without human intervention it should be
|
||||
put here.
|
||||
|
||||
statistics
|
||||
This category holds fast changing data, like traffic counters, uptime,
|
||||
system load or the selected gateway.
|
||||
|
||||
Both categories will have a ``node_id`` key be default. It should be used to
|
||||
match data from *statistics* to *nodeinfo*.
|
||||
|
||||
Accessing Node Information
|
||||
--------------------------
|
||||
|
||||
There are two packages responsible for distribution of the information. For
|
||||
one, information is distributed across the mesh using alfred_. Information
|
||||
between neighbouring nodes is exchanged using `gluon-announced`.
|
||||
|
||||
.. alfred: http://www.open-mesh.org/projects/alfred
|
||||
|
||||
alfred (mesh bound)
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The package ``gluon-alfred`` is required for this to work.
|
||||
|
||||
Using alfred both categories are distributed within the mesh. In order to
|
||||
retrieve the data you'll need both a local alfred daemon and alfred-json_
|
||||
installed. Please note that at least one alfred daemon is required to run as
|
||||
`master`.
|
||||
|
||||
.. alfred-json: https://github.com/tcatm/alfred-json
|
||||
|
||||
`nodeinfo` is distributed as alfred datatype `158`, while `statistics` uses
|
||||
`159`. Both are compressed using GZip (alfred-json can handle the decompression).
|
||||
|
||||
In order to retrieve statistics data you could run:
|
||||
|
||||
::
|
||||
|
||||
# alfred-json -z -r 159
|
||||
{
|
||||
"f8:d1:11:7e:97:dc": {
|
||||
"processes": {
|
||||
"total": 55,
|
||||
"running": 2
|
||||
},
|
||||
"idletime": 30632.290000000001,
|
||||
"uptime": 33200.07,
|
||||
"memory": {
|
||||
"free": 1660,
|
||||
"cached": 8268,
|
||||
"total": 29212,
|
||||
"buffers": 2236
|
||||
},
|
||||
"node_id": "f8d1117e97dc",
|
||||
"loadavg": 0.01
|
||||
},
|
||||
"90:f6:52:3e:b9:50": {
|
||||
"processes": {
|
||||
"total": 58,
|
||||
"running": 2
|
||||
},
|
||||
"idletime": 28047.470000000001,
|
||||
"uptime": 33307.849999999999,
|
||||
"memory": {
|
||||
"free": 2364,
|
||||
"cached": 7168,
|
||||
"total": 29212,
|
||||
"buffers": 1952
|
||||
},
|
||||
"node_id": "90f6523eb950",
|
||||
"loadavg": 0.34000000000000002
|
||||
}
|
||||
}
|
||||
|
||||
You can find more information about alfred in its README_.
|
||||
|
||||
.. README_: http://www.open-mesh.org/projects/alfred/repository/revisions/master/entry/README
|
||||
|
||||
gluon-announced
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
`gluon-announced` allows querying neighbouring nodes for their `nodeinfo`.
|
||||
It is a daemon listening on the multicast address ``ff02::2:1001`` on
|
||||
UDP port 1001 on the bare mesh interfaces. There is no client yet (but it's
|
||||
being developed), but you can query the information using tools like ``socat``:
|
||||
|
||||
::
|
||||
|
||||
# socat - UDP6-DATAGRAM:[ff02::2:1001%wlan0-1]:1001
|
||||
nodeinfo
|
||||
|
||||
This output is not compressed, but that is likely to change in the future. If
|
||||
you intent to use ``gluon-announced``, please contact `tcatm` in Gluon's IRC
|
||||
channel.
|
||||
|
||||
Adding a fact
|
||||
-------------
|
||||
|
||||
To add a fact just add a file to either ``/lib/gluon/announce/nodeinfo.d/`` or
|
||||
``/lib/gluon/announce/statistics.d/``.
|
||||
|
||||
The file must contain a lua script and its name will become the key for the
|
||||
resulting JSON object. A simple script adding a ``hostname`` field might look
|
||||
like this:
|
||||
|
||||
::
|
||||
|
||||
return uci:get_first('system', 'system', 'hostname')
|
||||
|
||||
The directory structure will be converted to a JSON object, i.e. you may
|
||||
create subdirectories. So, if the directories look like this
|
||||
|
||||
::
|
||||
|
||||
.
|
||||
├── hardware
|
||||
│ └── model
|
||||
├── hostname
|
||||
├── network
|
||||
│ └── mac
|
||||
├── node_id
|
||||
└── software
|
||||
└── firmware
|
||||
|
||||
the resulting JSON would become:
|
||||
|
||||
::
|
||||
|
||||
# /lib/gluon/announce/announce.lua nodeinfo
|
||||
{
|
||||
"hardware" : {
|
||||
"model" : "TP-Link TL-MR3420 v1"
|
||||
},
|
||||
"hostname" : "mr3420-test",
|
||||
"network" : {
|
||||
"mac" : "90:f6:52:82:06:02"
|
||||
},
|
||||
"node_id" : "90f652820602",
|
||||
"software" : {
|
||||
"firmware" : {
|
||||
"base" : "gluon-v2014.2-32-ge831099",
|
||||
"release" : "0.4.1+0-exp20140720"
|
||||
}
|
||||
}
|
||||
}
|
@ -39,9 +39,9 @@ Features
|
||||
features/ntp
|
||||
features/fastd
|
||||
features/batman-adv
|
||||
features/alfred
|
||||
features/autoupdater
|
||||
features/mesh-on-wan
|
||||
features/announce
|
||||
|
||||
Developer Documentation
|
||||
-----------------------
|
||||
|
Loading…
Reference in New Issue
Block a user