-
-
Notifications
You must be signed in to change notification settings - Fork 2
Experimental Firmware Nodes fügen zusätzliche Einträge ins JSON ein #7
Comments
Ich experimentiere gerade mit der java lib jackson zum parsen und der stolpert über so Einträge, falls jemand ebenfalls Probleme hat, mit diesem kleinen ruby-script, kann man die störenden Einträge entfernen. Aufrufen als: ./clean_json.rb nodes.json clean_nodes.json #!/usr/bin/ruby
require 'json'
file = File.read(ARGV[0])
hash = JSON.parse(file)
def clean_json(node)
if node.is_a?(Hash)
node.each do |k,v|
if k.start_with?("function: 0x")
node.delete(k)
end
clean_json(v)
end
end
end
clean_json(hash)
File.write(ARGV[1], hash.to_json) |
schon die gluon announce neighbour-info hat die Json Probleme info zu gluon announce: http://gluon.readthedocs.org/en/latest/features/announce.html Call mit kaputtem output: gluon-neighbour-info -i bat0 -p 1001 -d fdef:ffc0:4fff:0:6a72:51ff:fe24:fdef -r nodeinfo {"hostname":"ffmuc-outside","node_id":"68725124fdef","network":{"mac":"68:72:51:24:fd:ef","function: 0x54dcd0":true,"addresses":["fe80:0:0:0:6a72:51ff:fe24:fdef","fdef:ffc0:4fff:0:6a72:51ff:fe24:fdef","2001:470:7ca1:ff80:6a72:51ff:fe24:fdef"],"mesh":{"function: 0x54dcd0":true,"bat0":{"function: 0x54dcd0":true,"interfaces":{"tunnel":["6a:76:51:24:fd:ef"],"function: 0x54dcd0":true,"wireless":["6a:75:52:24:fd:ef"]}}},"mesh_interfaces":["6a:76:51:24:fd:ef","6a:75:52:24:fd:ef"]},"function: 0x54dcd0":true,"location":{"longitude":11.535061,"latitude":48.120651},"hardware":{"nproc":1,"function: 0x54dcd0":true,"model":"Ubiquiti Nanostation M"},"software":{"autoupdater":{"enabled":true,"branch":"experimental"},"function: 0x54dcd0":true,"fastd":{"enabled":true,"version":"v17"},"batman-adv":{"version":"2014.4.0","compat":15,"function: 0x54dcd0":true},"firmware":{"base":"gluon-v2015.1.2-6-g4268d32","release":"v2015.5-16-g9a9c8b3"}},"system":{"function: 0x54dcd0":true,"site_code":"ffmuc"}} |
Der Übeltäter ist gefunden, wenn man in der Datei function collect_dir(dir)
local ret = { [json.null] = true } in function collect_dir(dir)
local ret = { } ändert geht es. Nun muss man nur noch rausfinden warum das überhaupt drin stand und was damit bezweckt werden sollte. Nicht dass durch den fix was anderes gebrochen wird. #!/usr/bin/lua
module('gluon.announce', package.seeall)
fs = require 'luci.fs'
json = require 'luci.json'
uci = require('luci.model.uci').cursor()
util = require 'luci.util'
local function collect_entry(entry)
if fs.isdirectory(entry) then
return collect_dir(entry)
else
return setfenv(loadfile(entry), _M)()
end
end
function collect_dir(dir)
local ret = { [json.null] = true }
for _, entry in ipairs(fs.dir(dir)) do
if entry:sub(1, 1) ~= '.' then
local ok, val = pcall(collect_entry, dir .. '/' .. entry)
if ok then
ret[entry] = val
else
io.stderr:write(val, '\n')
end
end
end
return ret
end
|
Hier kams rein: Und hier wurde es gefixt: freifunk-gluon/gluon@15a80aa#diff-48b1b13c4743814c2ec3bc5c828e3aa3R18 |
Nur dass der fix immer noch kaputt ist, nur anders: b3"}},"system":{"table: 0x4aaad0":true,"site_code":"ffmuc"}} |
Gluon Bug aufgemacht |
Und geschlossen, die haben noch mehr geändert (jsonc, statt json, etc.) |
So noch weiter debugged und die Lösung gefunden. Wir brauchen diesen Patch in unserem luci json.lua . Lustigerweise bin ich um das gewünschte Verhalten mit den gegebenen Mitteln (json.null in der lua-table) zu erzeugen genau auf die Lösung gekommen :) . Das Problem war, dass der Json-Parser keine empty json-objects aus empty lua-tables erzeugt hat. Mit dem hinzufügen eines "json.null" Entries in die erzeugten lua-tables in announce.lua und den nodeinfo.d scripten (z.B. interfaces) und dem ändern des Encoders, sodass dieser null-Werte als keys in tables ignoriert wurde das gefixt. Wir haben anscheinend nur das hinzufügen der json.null Werte ohne die Änderung am Json-Encoder. |
Bei experimental Nodes finden sich im JSON File nodes.json komische "function Einträge", z.b. sowas:
"function: 0x97c670": true,
The text was updated successfully, but these errors were encountered: