diff --git a/docs/docs.go b/docs/docs.go index 9d286af..96bb43f 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -23,6 +23,50 @@ const docTemplate = `{ "host": "{{.Host}}", "basePath": "{{.BasePath}}", "paths": { + "/if/info": { + "get": { + "description": "获取 网卡 信息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Info" + ], + "summary": "获取 网卡 信息", + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/resp.Response" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/net.InterfaceStat" + } + } + } + } + ] + } + }, + "default": { + "description": "", + "schema": { + "$ref": "#/definitions/errorx.CodeErrorResponse" + } + } + } + } + }, "/info": { "get": { "description": "获取 iptables 规则 信息", @@ -198,6 +242,47 @@ const docTemplate = `{ } } }, + "net.InterfaceAddr": { + "type": "object", + "properties": { + "addr": { + "type": "string" + } + } + }, + "net.InterfaceStat": { + "type": "object", + "properties": { + "addrs": { + "type": "array", + "items": { + "$ref": "#/definitions/net.InterfaceAddr" + } + }, + "flags": { + "description": "e.g., FlagUp, FlagLoopback, FlagMulticast", + "type": "array", + "items": { + "type": "string" + } + }, + "hardwareaddr": { + "description": "IEEE MAC-48, EUI-48 and EUI-64 form", + "type": "string" + }, + "index": { + "type": "integer" + }, + "mtu": { + "description": "maximum transmission unit", + "type": "integer" + }, + "name": { + "description": "e.g., \"en0\", \"lo0\", \"eth0.100\"", + "type": "string" + } + } + }, "resp.Response": { "type": "object", "properties": { diff --git a/docs/swagger.json b/docs/swagger.json index fa58a65..8469e56 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -16,6 +16,50 @@ }, "basePath": "/", "paths": { + "/if/info": { + "get": { + "description": "获取 网卡 信息", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Info" + ], + "summary": "获取 网卡 信息", + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/resp.Response" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/net.InterfaceStat" + } + } + } + } + ] + } + }, + "default": { + "description": "", + "schema": { + "$ref": "#/definitions/errorx.CodeErrorResponse" + } + } + } + } + }, "/info": { "get": { "description": "获取 iptables 规则 信息", @@ -191,6 +235,47 @@ } } }, + "net.InterfaceAddr": { + "type": "object", + "properties": { + "addr": { + "type": "string" + } + } + }, + "net.InterfaceStat": { + "type": "object", + "properties": { + "addrs": { + "type": "array", + "items": { + "$ref": "#/definitions/net.InterfaceAddr" + } + }, + "flags": { + "description": "e.g., FlagUp, FlagLoopback, FlagMulticast", + "type": "array", + "items": { + "type": "string" + } + }, + "hardwareaddr": { + "description": "IEEE MAC-48, EUI-48 and EUI-64 form", + "type": "string" + }, + "index": { + "type": "integer" + }, + "mtu": { + "description": "maximum transmission unit", + "type": "integer" + }, + "name": { + "description": "e.g., \"en0\", \"lo0\", \"eth0.100\"", + "type": "string" + } + } + }, "resp.Response": { "type": "object", "properties": { diff --git a/docs/swagger.yaml b/docs/swagger.yaml index a7d6ca3..b8a9dab 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -94,6 +94,34 @@ definitions: description: '--sports example: 20000:40000' type: string type: object + net.InterfaceAddr: + properties: + addr: + type: string + type: object + net.InterfaceStat: + properties: + addrs: + items: + $ref: '#/definitions/net.InterfaceAddr' + type: array + flags: + description: e.g., FlagUp, FlagLoopback, FlagMulticast + items: + type: string + type: array + hardwareaddr: + description: IEEE MAC-48, EUI-48 and EUI-64 form + type: string + index: + type: integer + mtu: + description: maximum transmission unit + type: integer + name: + description: e.g., "en0", "lo0", "eth0.100" + type: string + type: object resp.Response: properties: code: @@ -119,6 +147,32 @@ info: title: iptables-helper API version: "1.0" paths: + /if/info: + get: + consumes: + - application/json + description: 获取 网卡 信息 + produces: + - application/json + responses: + "200": + description: OK + schema: + allOf: + - $ref: '#/definitions/resp.Response' + - properties: + data: + items: + $ref: '#/definitions/net.InterfaceStat' + type: array + type: object + default: + description: "" + schema: + $ref: '#/definitions/errorx.CodeErrorResponse' + summary: 获取 网卡 信息 + tags: + - Info /info: get: consumes: diff --git a/go.mod b/go.mod index 83425ef..510be2a 100644 --- a/go.mod +++ b/go.mod @@ -37,6 +37,7 @@ require ( github.com/rivo/uniseg v0.2.0 // indirect github.com/sagikazarmark/locafero v0.3.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect + github.com/shirou/gopsutil v2.21.11+incompatible // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.10.0 // indirect github.com/spf13/cast v1.5.1 // indirect diff --git a/go.sum b/go.sum index 0c329b0..08769fd 100644 --- a/go.sum +++ b/go.sum @@ -200,6 +200,8 @@ github.com/sagikazarmark/locafero v0.3.0 h1:zT7VEGWC2DTflmccN/5T1etyKvxSxpHsjb9c github.com/sagikazarmark/locafero v0.3.0/go.mod h1:w+v7UsPNFwzF1cHuOajOOzoq4U7v/ig1mpRjqV+Bu1U= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= +github.com/shirou/gopsutil v2.21.11+incompatible h1:lOGOyCG67a5dv2hq5Z1BLDUqqKp3HkbjPcz5j6XMS0U= +github.com/shirou/gopsutil v2.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= diff --git a/internel/controller/controller.go b/internel/controller/controller.go index b401d88..1f77e20 100644 --- a/internel/controller/controller.go +++ b/internel/controller/controller.go @@ -2,6 +2,7 @@ package controller import ( "github.com/gofiber/fiber/v2" + "github.com/shirou/gopsutil/net" response "iptables-helper/pkg/resp" "iptables-helper/pkg/utils/command" "iptables-helper/pkg/utils/iptables" @@ -10,6 +11,7 @@ import ( func SetupController(r fiber.Router) { api := r.Group("/") getRuleInfo(api) + getIfInfo(api) } // getRuleInfo @@ -28,3 +30,19 @@ func getRuleInfo(api fiber.Router) { return ctx.JSON(response.NewResponse(iptables.Parse(result))) }) } + +// getIfInfo +// @Summary 获取 网卡 信息 +// @Description 获取 网卡 信息 +// @Tags Info +// @Accept json +// @Produce json +// @Success 200 {object} response.Response{data=[]net.InterfaceStat} +// @Failure default {object} errorx.CodeErrorResponse +// @Router /if/info [get] +func getIfInfo(api fiber.Router) { + api.Get("/if/info", func(ctx *fiber.Ctx) error { + stat, _ := net.Interfaces() + return ctx.JSON(response.NewResponse(stat)) + }) +}