From c79be399bccaec1b194d071674c257d3c56fcc13 Mon Sep 17 00:00:00 2001 From: sberk42 Date: Sat, 28 Nov 2020 21:10:11 +0100 Subject: [PATCH] added support for lan/wan status --- fritzbox_lua/lua_client.go | 29 ++++++++++++++++++----------- main.go | 14 +++++++++++--- 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/fritzbox_lua/lua_client.go b/fritzbox_lua/lua_client.go index 3693f4b..e5aeae8 100644 --- a/fritzbox_lua/lua_client.go +++ b/fritzbox_lua/lua_client.go @@ -332,27 +332,34 @@ func _getValues(data interface{}, pathItems []string, parentPath string) ([]inte for i, p := range pathItems { if p == "*" { // handle * case to get all values + var subvals []interface{} switch vv := value.(type) { case []interface{}: for index, u := range vv { - subvals, err := _getValues(u, pathItems[i+1:], fmt.Sprintf("%s.%d", curPath, index)) - if err != nil { - return nil, err - } + subvals, err = _getValues(u, pathItems[i+1:], fmt.Sprintf("%s.%d", curPath, index)) - values = append(values, subvals...) + if subvals != nil { + values = append(values, subvals...) + } } case map[string]interface{}: for subK, subV := range vv { - subvals, err := _getValues(subV, pathItems[i+1:], fmt.Sprintf("%s.%s", curPath, subK)) - if err != nil { - return nil, err - } + subvals, err = _getValues(subV, pathItems[i+1:], fmt.Sprintf("%s.%s", curPath, subK)) - values = append(values, subvals...) + if subvals != nil { + values = append(values, subvals...) + } } default: - return nil, fmt.Errorf("item '%s' is neither a hash or array", curPath) + err = fmt.Errorf("item '%s' is neither a hash or array", curPath) + } + + if len(values) == 0 { + if err == nil { + err = fmt.Errorf("item '%s.*' has no values", curPath) + } + + return nil, err } return values, nil diff --git a/main.go b/main.go index e789dd6..c993db0 100644 --- a/main.go +++ b/main.go @@ -91,6 +91,11 @@ type Metric struct { MetricType prometheus.ValueType } +type LuaMetric struct { + // initialized loading JSON + +} + var metrics []*Metric type FritzboxCollector struct { @@ -412,9 +417,9 @@ func testLuaCall() { var jsonData []byte var err error - //page := lua.LuaPage{Path: "data.lua", Params: "page=energy"} + page := lua.LuaPage{Path: "data.lua", Params: "page=energy"} //page := lua.LuaPage{Path: "data.lua", Params: "page=ecoStat"} - page := lua.LuaPage{Path: "data.lua", Params: "page=usbOv"} + //page := lua.LuaPage{Path: "data.lua", Params: "page=usbOv"} jsonData, err = luaSession.LoadData(page) if err != nil { @@ -436,7 +441,7 @@ func testLuaCall() { labelRenames = addLabelRename(labelRenames, "(?i)FON", "Phone") labelRenames = addLabelRename(labelRenames, "(?i)WLAN", "WLAN") labelRenames = addLabelRename(labelRenames, "(?i)USB", "USB") - labelRenames = addLabelRename(labelRenames, "(?i)Speicher", "Storage") + labelRenames = addLabelRename(labelRenames, "(?i)Speicher.*FRITZ", "Internal eStorage") pidMetric := lua.LuaMetricValueDefinition{Path: "", Key: "pid", Labels: nil} dumpMetric(&labelRenames, data, pidMetric) @@ -444,6 +449,9 @@ func testLuaCall() { powerMetric := lua.LuaMetricValueDefinition{Path: "data.drain.*", Key: "actPerc", Labels: []string{"name"}} dumpMetric(&labelRenames, data, powerMetric) + lanMetric := lua.LuaMetricValueDefinition{Path: "data.drain.*.lan.*", Key: "class", Labels: []string{"name"}} + dumpMetric(&labelRenames, data, lanMetric) + tempMetric := lua.LuaMetricValueDefinition{Path: "data.cputemp.series.0", Key: "-1", Labels: nil} dumpMetric(&labelRenames, data, tempMetric)