Skip to content

Commit

Permalink
Merge pull request #18 from LinkinPF/lmp_dev
Browse files Browse the repository at this point in the history
Build BPF generator using the builder pattern
  • Loading branch information
LinkinPF committed Apr 16, 2020
2 parents 3d2c870 + 55db5b6 commit 26d6f83
Show file tree
Hide file tree
Showing 5 changed files with 172 additions and 14 deletions.
39 changes: 34 additions & 5 deletions deployments/sys/collect.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,53 @@ import (
"fmt"
"github.com/gin-gonic/gin"
"lmp_ui/deployments/message"
_ "lmp_ui/internal/BPF"
"lmp_ui/internal/BPF"
_ "net/http"
)

type Data struct{}

func (d *Data)Handle(c *gin.Context) {
//处理前端的配置消息
d.Collect(c)
//生成python文件和C文件
d.Generator(c)
}

func (d *Data)Collect(c *gin.Context) {
//得到前端发来的配置信息
m := fillConfigMessage(c)
//将配置信息发送给BPF generator
//var b BPF.BPFBody
//file := b.Generator(&m)
//TODO..

fmt.Println(m)

//c.JSON(http.StatusOK,name)
}

//根据配置,生成python文件和C文件
//TODO..接收配置信息
func (d *Data)Generator(c *gin.Context) {
//先创建python文件
py := bpf.NewConcreteBuilderPy()
//把创建好的ConcreteBuilderPy传递给DirectorPy
directorpy := bpf.NewDirectorPy(&py)
//开始构造python文件
directorpy.ConstructPy()
result1 := py.GetResultPy()
fmt.Println(result1)
//TODO..

//创建C文件
C := bpf.NewConcreteBuilderC()
//把创建好的ConcreteBuilderPy传递给DirectorPy
directorc := bpf.NewDirectorC(&C)
//开始构造python文件
directorc.ConstructC()
result2 := py.GetResultC()
fmt.Println(result2)
//TODO..
}


func fillConfigMessage(c *gin.Context) message.ConfigMessage {
var m message.ConfigMessage
if _,ok:= c.GetPostForm("dispatchingdelay"); ok {
Expand Down
41 changes: 33 additions & 8 deletions internal/BPF/bpf.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,39 @@
package BPF
package bpf

import (
"lmp_ui/deployments/message"
"os"
)
type DirectorPy struct {
//生成python文件的接口
pyBuilder PyBuilder
}

type DirectorC struct {
//生成C文件的接口
cBuilder CBuilder
}

func NewDirectorPy(b PyBuilder) DirectorPy {
return DirectorPy{
pyBuilder : b,
}
}

func NewDirectorC(c CBuilder) DirectorC {
return DirectorC{
cBuilder : c,
}
}

type BPFBody struct{}
//生成python文件的步骤,接口和实现分离
func (d *DirectorPy)ConstructPy() {
d.pyBuilder.AddCommonPyFileFront()
d.pyBuilder.AddPrivatePyFile()
d.pyBuilder.AddCommonPyFileEnd()
}

func (b *BPFBody)Generator(m *message.ConfigMessage) os.File {
return os.File{}
//生成C文件的步骤,接口和实现分离
func (d *DirectorC)ConstructC() {
d.cBuilder.AddCommonCFileFront()
d.cBuilder.AddPrivateCFile()
d.cBuilder.AddCommonCFileEnd()
}


Expand Down
52 changes: 52 additions & 0 deletions internal/BPF/cbuilder.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package bpf

import "os"

//定义生成者模式中的Builder,这里的CBuilder是C文件生成的方法
type CBuilder interface {
AddCommonCFileFront()
AddPrivateCFile()
AddCommonCFileEnd()
}

//具体来创建python文件的ConcreteBuilder
type ConcreteBuilderC struct {
f os.File
status bool
}

//返回ConcreteBuilderPy的实例
func NewConcreteBuilderC() ConcreteBuilderC {
return ConcreteBuilderC{
f: os.File{}, //TODO..
status: false,
}
}

//实现接口的方法
func (c *ConcreteBuilderC)AddCommonCFileFront() {
//TODO..
}
func (c *ConcreteBuilderC)AddPrivateCFile() {
//TODO..
}
func (c *ConcreteBuilderC)AddCommonCFileEnd() {
//TODO..
}

//最后生成的成果
type ProductC struct {
f os.File
status bool
}

//生成成果,
func (b *ConcreteBuilderPy)GetResultC() ProductC {
return ProductC{
f: b.f,
status: true,
}
}



52 changes: 52 additions & 0 deletions internal/BPF/pybuilder.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package bpf

import "os"

// 定义生成者模式中的Builder,这里的Builder是python文件生成的方法
type PyBuilder interface {
AddCommonPyFileFront()
AddPrivatePyFile()
AddCommonPyFileEnd()
}

//具体来创建python文件的ConcreteBuilder
type ConcreteBuilderPy struct {
f os.File
status bool
}

//返回ConcreteBuilderPy的实例
func NewConcreteBuilderPy() ConcreteBuilderPy {
return ConcreteBuilderPy{
f: os.File{}, //TODO..
status: false,
}
}

//实现接口的方法
func (c *ConcreteBuilderPy)AddCommonPyFileFront() {
//TODO..
}
func (c *ConcreteBuilderPy)AddPrivatePyFile() {
//TODO..
}
func (c *ConcreteBuilderPy)AddCommonPyFileEnd() {
//TODO..
}

//最后生成的成果
type ProductPy struct {
f os.File
status bool
}

//生成成果,
func (b *ConcreteBuilderPy)GetResultPy() ProductPy {
return ProductPy{
f: b.f,
status: true,
}
}



2 changes: 1 addition & 1 deletion routers/r_sys.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ import (

func RegisterRouterSys(r *gin.Engine) {
data := sys.Data{}
r.POST("/data/collect", data.Collect)
r.POST("/data/collect", data.Handle)
//r.POST("/data/display")
}

0 comments on commit 26d6f83

Please sign in to comment.