mirror of
https://github.com/luscis/openlan.git
synced 2025-10-05 16:47:11 +08:00
fea: list prefix route for system.
This commit is contained in:
145
pkg/api/system.go
Executable file
145
pkg/api/system.go
Executable file
@@ -0,0 +1,145 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"net"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
"github.com/luscis/openlan/pkg/libol"
|
||||
"github.com/luscis/openlan/pkg/network"
|
||||
"github.com/luscis/openlan/pkg/schema"
|
||||
)
|
||||
|
||||
type Prefix struct {
|
||||
}
|
||||
|
||||
func (l Prefix) Router(router *mux.Router) {
|
||||
router.HandleFunc("/api/prefix", l.List).Methods("GET")
|
||||
}
|
||||
|
||||
func (l Prefix) List(w http.ResponseWriter, r *http.Request) {
|
||||
var items []schema.PrefixRoute
|
||||
|
||||
routes, _ := libol.ListRoutes()
|
||||
for _, prefix := range routes {
|
||||
item := schema.PrefixRoute{
|
||||
Link: prefix.Link,
|
||||
Metric: prefix.Priority,
|
||||
Table: prefix.Table,
|
||||
Source: prefix.Src,
|
||||
NextHop: prefix.Gw,
|
||||
Prefix: prefix.Dst,
|
||||
}
|
||||
items = append(items, item)
|
||||
|
||||
}
|
||||
|
||||
ResponseJson(w, items)
|
||||
}
|
||||
|
||||
type Device struct {
|
||||
}
|
||||
|
||||
func (h Device) Router(router *mux.Router) {
|
||||
router.HandleFunc("/api/device", h.List).Methods("GET")
|
||||
router.HandleFunc("/api/device/{id}", h.Get).Methods("GET")
|
||||
}
|
||||
|
||||
func (h Device) List(w http.ResponseWriter, r *http.Request) {
|
||||
dev := make([]schema.Device, 0, 1024)
|
||||
for t := range network.Taps.List() {
|
||||
if t == nil {
|
||||
break
|
||||
}
|
||||
dev = append(dev, schema.Device{
|
||||
Name: t.Name(),
|
||||
Mtu: t.Mtu(),
|
||||
Provider: t.Type(),
|
||||
})
|
||||
}
|
||||
for t := range network.Bridges.List() {
|
||||
if t == nil {
|
||||
break
|
||||
}
|
||||
dev = append(dev, schema.Device{
|
||||
Name: t.Name(),
|
||||
Mtu: t.Mtu(),
|
||||
Provider: t.Type(),
|
||||
})
|
||||
}
|
||||
ResponseJson(w, dev)
|
||||
}
|
||||
|
||||
func (h Device) Get(w http.ResponseWriter, r *http.Request) {
|
||||
vars := mux.Vars(r)
|
||||
name := vars["id"]
|
||||
if dev := network.Taps.Get(name); dev != nil {
|
||||
ResponseJson(w, schema.Device{
|
||||
Name: dev.Name(),
|
||||
Mtu: dev.Mtu(),
|
||||
Provider: dev.Type(),
|
||||
})
|
||||
} else if br := network.Bridges.Get(name); br != nil {
|
||||
now := time.Now().Unix()
|
||||
macs := make([]schema.HwMacInfo, 0, 32)
|
||||
for addr := range br.ListMac() {
|
||||
if addr == nil {
|
||||
break
|
||||
}
|
||||
macs = append(macs, schema.HwMacInfo{
|
||||
Address: net.HardwareAddr(addr.Address).String(),
|
||||
Device: addr.Device.String(),
|
||||
Uptime: now - addr.Uptime,
|
||||
})
|
||||
}
|
||||
slaves := make([]schema.Device, 0, 32)
|
||||
for dev := range br.ListSlave() {
|
||||
if dev == nil {
|
||||
break
|
||||
}
|
||||
slaves = append(slaves, schema.Device{
|
||||
Name: dev.Name(),
|
||||
Mtu: dev.Mtu(),
|
||||
Provider: dev.Type(),
|
||||
})
|
||||
}
|
||||
ResponseJson(w, schema.Bridge{
|
||||
Device: schema.Device{
|
||||
Name: br.Name(),
|
||||
Mtu: br.Mtu(),
|
||||
Provider: br.Type(),
|
||||
},
|
||||
Macs: macs,
|
||||
Slaves: slaves,
|
||||
Stats: br.Stats(),
|
||||
})
|
||||
} else {
|
||||
http.Error(w, vars["id"], http.StatusNotFound)
|
||||
}
|
||||
}
|
||||
|
||||
type Log struct {
|
||||
}
|
||||
|
||||
func (l Log) Router(router *mux.Router) {
|
||||
router.HandleFunc("/api/log", l.List).Methods("GET")
|
||||
router.HandleFunc("/api/log", l.Add).Methods("POST")
|
||||
}
|
||||
|
||||
func (l Log) List(w http.ResponseWriter, r *http.Request) {
|
||||
log := schema.NewLogSchema()
|
||||
ResponseJson(w, log)
|
||||
}
|
||||
|
||||
func (l Log) Add(w http.ResponseWriter, r *http.Request) {
|
||||
log := &schema.Log{}
|
||||
if err := GetData(r, log); err != nil {
|
||||
http.Error(w, err.Error(), http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
libol.SetLevel(log.Level)
|
||||
|
||||
ResponseMsg(w, 0, "")
|
||||
}
|
Reference in New Issue
Block a user