Go to file
Jan-Philipp Litza abc84e9fc9 README: Update to new nodes.json version 2015-09-04 10:52:19 +02:00
lib stop relying on batmanadv gateway feature 2015-07-31 11:57:44 +02:00
nodedb create nodedb/ directory 2013-11-23 22:11:46 +01:00
.gitignore update .gitignore 2015-03-24 18:20:28 +01:00
.travis.yml ignored the wrong pep8 error code 2015-04-01 17:16:32 +02:00
LICENSE add LICENSE 2012-06-16 02:50:02 +02:00
README.md README: Update to new nodes.json version 2015-09-04 10:52:19 +02:00
aliases.json_sample update aliases.json_sample 2015-05-09 22:16:44 +02:00
backend.py add --rrd-path option 2015-08-22 23:54:03 +02:00
ffmap-d3.jq Added jq filter to convert new format to old format 2015-05-16 13:10:55 +02:00

README.md

Data for Freifunk Map, Graph and Node List

Build Status

ffmap-backend gathers information on the batman network by invoking :

  • batctl (might require root),
  • alfred-json and
  • batadv-vis

The output will be written to a directory (-d output).

Run backend.py --help for a quick overview of all available options.

For the script's regular execution add the following to the crontab:

* * * * * backend.py -d /path/to/output -a /path/to/aliases.json --vpn ae:7f:58:7d:6c:2a d2:d0:93:63:f7:da

Dependencies

Running as unprivileged user

Some information collected by ffmap-backend requires access to specific system resources.

Make sure the user you are running this under is part of the group that owns the alfred socket, so alfred-json can access the alfred daemon.

# ls -al /var/run/alfred.sock
srw-rw---- 1 root alfred 0 Mar 19 22:00 /var/run/alfred.sock=
# adduser map alfred
Adding user `map' to group `alfred' ...
Adding user map to group alfred
Done.
$ groups
map alfred

Running batctl requires passwordless sudo access, because it needs to access the debugfs to retrive the gateway list.

# echo 'map ALL = NOPASSWD: /usr/sbin/batctl' | tee /etc/sudoers.d/map
map ALL = NOPASSWD: /usr/sbin/batctl
# chmod 0440 /etc/sudoers.d/map

That should be everything. The script automatically detects if it is run in unprivileged mode and will prefix sudo where necessary.

Data format

nodes.json

{ "nodes": [
    { "flags": { flags },
      "firstseen": isoformat,
      "lastseen": isoformat,
      "nodeinfo": {...},         # copied from node's nodeinfo announcement
      "statistics": {
         "uptime": double,       # seconds
         "memory_usage": double, # 0..1
         "clients": double,
         "rootfs_usage": double, # 0..1
         "loadavg": double,
         "gateway": mac
       }
    },
    ...
  ]
  "timestamp": isoformat,
  "version": 2
}

flags (bool)

  • online
  • gateway

Old data format

If you want to still use the old ffmap-d3 front end, you can use the file ffmap-d3.jq to convert the new output to the old one:

jq -n -f ffmap-d3.jq \
    --argfile nodes nodedb/nodes.json \
    --argfile graph nodedb/graph.json \
    > nodedb/ffmap-d3.json

Then point your ffmap-d3 instance to the ffmap-d3.json file.

Removing owner information

If you'd like to redact information about the node owner from nodes.json, you may use a filter like jq. In this case, specify an output directory different from your webserver directory, e.g.:

./backend.py -d /ffmap-data

Don't write to files generated in there. ffmap-backend uses them as its database.

After running ffmap-backend, copy graph.json to your webserver. Then, filter nodes.json using jq like this:

 jq '.nodes = (.nodes | map(del(.nodeinfo.owner)))' \
   < /ffmap-data/nodes.json > /var/www/data/nodes.json

This will remove owner information from nodes.json before copying the data to your webserver.

Convert from nodes.json version 1 to version 2

jq '.nodes = (.nodes | to_entries | map(.value)) | .version = 2' \
< nodes.json > nodes.json.new
mv nodes.json.new nodes.json