|
| 1 | +package v1 |
| 2 | + |
| 3 | +import ( |
| 4 | + "github.com/gin-gonic/gin" |
| 5 | + |
| 6 | + code "github.com/cylonchau/firewalld-gateway/server/apis" |
| 7 | + "github.com/cylonchau/firewalld-gateway/utils/firewalld" |
| 8 | +) |
| 9 | + |
| 10 | +type DashboardRouter struct{} |
| 11 | + |
| 12 | +func (this *DashboardRouter) RegisterPortAPI(g *gin.RouterGroup) { |
| 13 | + dashboardGroup := g.Group("/dashboard") |
| 14 | + dashboardGroup.GET("/", this.getRuntimeStatus) |
| 15 | + |
| 16 | +} |
| 17 | + |
| 18 | +// getRuntimeStatus ... |
| 19 | +// @Summary getRuntimeStatus |
| 20 | +// @Produce json |
| 21 | +// @Success 200 {object} internal.Response |
| 22 | +// @Router /fw/v1/dashboard [GET] |
| 23 | +func (this *DashboardRouter) getRuntimeStatus(c *gin.Context) { |
| 24 | + |
| 25 | + var query = &code.Query{} |
| 26 | + err := c.BindQuery(query) |
| 27 | + |
| 28 | + if err != nil { |
| 29 | + code.APIResponse(c, err, nil) |
| 30 | + return |
| 31 | + } |
| 32 | + |
| 33 | + dbusClient, err := firewalld.NewDbusClientService(query.Ip) |
| 34 | + if err != nil { |
| 35 | + code.ConnectDbusService(c, err) |
| 36 | + return |
| 37 | + } |
| 38 | + defer dbusClient.Destroy() |
| 39 | + defaultPolicy := dbusClient.GetDefaultPolicy() |
| 40 | + defaultZone := dbusClient.GetDefaultZone() |
| 41 | + var richCount, portCount, serviceCount int |
| 42 | + var natStatus bool |
| 43 | + |
| 44 | + if richs, err := dbusClient.GetRichRules(defaultZone); err == nil { |
| 45 | + richCount = len(richs) |
| 46 | + if ports, err := dbusClient.GetPorts(defaultZone); err == nil { |
| 47 | + portCount = len(ports) |
| 48 | + if services, err := dbusClient.GetServices(); err == nil { |
| 49 | + serviceCount = len(services) |
| 50 | + if b, err := dbusClient.QueryMasquerade(defaultZone); err == nil { |
| 51 | + natStatus = b |
| 52 | + } |
| 53 | + } |
| 54 | + } |
| 55 | + } |
| 56 | + |
| 57 | + if err == nil { |
| 58 | + status := make(map[string]interface{}) |
| 59 | + status["default_zone"] = defaultZone |
| 60 | + status["default_policy"] = defaultPolicy |
| 61 | + status["nat_status"] = natStatus |
| 62 | + status["rich"] = richCount |
| 63 | + status["port"] = portCount |
| 64 | + status["service"] = serviceCount |
| 65 | + code.SuccessResponse(c, code.OK, status) |
| 66 | + } else { |
| 67 | + code.SuccessResponse(c, code.OK, err) |
| 68 | + } |
| 69 | + |
| 70 | +} |
0 commit comments