2016-05-29 21:42:11 +02:00
|
|
|
package meshviewer
|
|
|
|
|
|
|
|
import (
|
2017-03-03 16:19:35 +01:00
|
|
|
"github.com/FreifunkBremen/yanic/data"
|
|
|
|
"github.com/FreifunkBremen/yanic/jsontime"
|
2016-05-29 21:42:11 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
// Node struct
|
|
|
|
type Node struct {
|
|
|
|
Firstseen jsontime.Time `json:"firstseen"`
|
|
|
|
Lastseen jsontime.Time `json:"lastseen"`
|
2016-10-08 11:41:08 +02:00
|
|
|
Flags Flags `json:"flags"`
|
2016-05-29 21:42:11 +02:00
|
|
|
Statistics *Statistics `json:"statistics"`
|
|
|
|
Nodeinfo *data.NodeInfo `json:"nodeinfo"`
|
|
|
|
Neighbours *data.Neighbours `json:"-"`
|
|
|
|
}
|
|
|
|
|
2017-01-20 22:27:44 +01:00
|
|
|
// Flags status of node set by collector for the meshviewer
|
2016-05-29 21:42:11 +02:00
|
|
|
type Flags struct {
|
|
|
|
Online bool `json:"online"`
|
|
|
|
Gateway bool `json:"gateway"`
|
|
|
|
}
|
|
|
|
|
2017-01-20 14:38:13 +01:00
|
|
|
// NodesV1 struct, to support legacy meshviewer (which are in master branch)
|
|
|
|
// i.e. https://github.com/ffnord/meshviewer/tree/master
|
|
|
|
type NodesV1 struct {
|
2016-05-29 21:42:11 +02:00
|
|
|
Version int `json:"version"`
|
2017-01-29 20:46:06 +01:00
|
|
|
Timestamp jsontime.Time `json:"timestamp"` // Timestamp of the generation
|
|
|
|
List map[string]*Node `json:"nodes"` // the current nodemap, indexed by node ID
|
2017-01-20 14:38:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// NodesV2 struct, to support new version of meshviewer (which are in legacy develop branch or newer)
|
|
|
|
// i.e. https://github.com/ffnord/meshviewer/tree/dev or https://github.com/ffrgb/meshviewer/tree/develop
|
|
|
|
type NodesV2 struct {
|
|
|
|
Version int `json:"version"`
|
2017-01-29 20:46:06 +01:00
|
|
|
Timestamp jsontime.Time `json:"timestamp"` // Timestamp of the generation
|
|
|
|
List []*Node `json:"nodes"` // the current nodemap, as array
|
2016-05-29 21:42:11 +02:00
|
|
|
}
|
|
|
|
|
2017-01-20 22:27:44 +01:00
|
|
|
// Statistics a meshviewer spezifisch struct, diffrent from respondd
|
2016-05-29 21:42:11 +02:00
|
|
|
type Statistics struct {
|
2017-01-20 22:27:44 +01:00
|
|
|
NodeID string `json:"node_id"`
|
2017-01-20 14:38:13 +01:00
|
|
|
Clients uint32 `json:"clients"`
|
|
|
|
RootFsUsage float64 `json:"rootfs_usage,omitempty"`
|
|
|
|
LoadAverage float64 `json:"loadavg,omitempty"`
|
|
|
|
MemoryUsage float64 `json:"memory_usage,omitempty"`
|
|
|
|
Uptime float64 `json:"uptime,omitempty"`
|
|
|
|
Idletime float64 `json:"idletime,omitempty"`
|
2017-03-06 20:18:08 +01:00
|
|
|
GatewayIPv4 string `json:"gateway,omitempty"`
|
|
|
|
GatewayIPv6 string `json:"gateway6,omitempty"`
|
2016-05-29 21:42:11 +02:00
|
|
|
Processes struct {
|
|
|
|
Total uint32 `json:"total"`
|
|
|
|
Running uint32 `json:"running"`
|
2017-01-20 13:08:58 +01:00
|
|
|
} `json:"processes,omitempty"`
|
2017-01-20 23:23:31 +01:00
|
|
|
MeshVPN *data.MeshVPN `json:"mesh_vpn,omitempty"`
|
2016-05-29 21:42:11 +02:00
|
|
|
Traffic struct {
|
|
|
|
Tx *data.Traffic `json:"tx"`
|
|
|
|
Rx *data.Traffic `json:"rx"`
|
|
|
|
Forward *data.Traffic `json:"forward"`
|
|
|
|
MgmtTx *data.Traffic `json:"mgmt_tx"`
|
|
|
|
MgmtRx *data.Traffic `json:"mgmt_rx"`
|
2017-01-20 13:08:58 +01:00
|
|
|
} `json:"traffic,omitempty"`
|
2016-05-29 21:42:11 +02:00
|
|
|
}
|
2017-01-20 14:38:13 +01:00
|
|
|
|
2017-01-20 22:27:44 +01:00
|
|
|
// NewStatistics transform respond Statistics to meshviewer Statistics
|
2017-01-20 14:38:13 +01:00
|
|
|
func NewStatistics(stats *data.Statistics) *Statistics {
|
|
|
|
total := stats.Clients.Total
|
|
|
|
if total == 0 {
|
|
|
|
total = stats.Clients.Wifi24 + stats.Clients.Wifi5
|
|
|
|
}
|
|
|
|
/* The Meshviewer could not handle absolute memory output
|
2017-03-13 18:36:39 +01:00
|
|
|
* calc the used memory as a float which 100% equal 1.0
|
|
|
|
* calc is coppied from node statuspage (look discussion:
|
|
|
|
* https://github.com/FreifunkBremen/yanic/issues/35)
|
2017-01-20 22:27:44 +01:00
|
|
|
*/
|
2017-03-13 18:36:39 +01:00
|
|
|
memoryUsage := 1 - (float64(stats.Memory.Free)+float64(stats.Memory.Buffers)+float64(stats.Memory.Cached))/float64(stats.Memory.Total)
|
2017-01-20 14:38:13 +01:00
|
|
|
|
|
|
|
return &Statistics{
|
2017-01-20 22:27:44 +01:00
|
|
|
NodeID: stats.NodeID,
|
2017-03-06 20:18:08 +01:00
|
|
|
GatewayIPv4: stats.GatewayIPv4,
|
|
|
|
GatewayIPv6: stats.GatewayIPv6,
|
2017-01-20 14:38:13 +01:00
|
|
|
RootFsUsage: stats.RootFsUsage,
|
|
|
|
LoadAverage: stats.LoadAverage,
|
|
|
|
MemoryUsage: memoryUsage,
|
|
|
|
Uptime: stats.Uptime,
|
|
|
|
Idletime: stats.Idletime,
|
|
|
|
Processes: stats.Processes,
|
2017-01-20 23:23:31 +01:00
|
|
|
MeshVPN: stats.MeshVPN,
|
2017-01-20 14:38:13 +01:00
|
|
|
Traffic: stats.Traffic,
|
|
|
|
Clients: total,
|
|
|
|
}
|
|
|
|
}
|