@@ -18,19 +18,31 @@ type ContainerController struct {
1818 ec chan sysdig.Event
1919
2020 // containers use container id as key
21- containers map [string ]* model. Container
21+ containers map [string ]* mutexContainer
2222 // container process channels
2323 containerCh map [string ]chan containerEvent
2424
2525 //containers mutex
2626 cm sync.RWMutex
2727}
2828
29- const eventBufferLen = 512
29+ type mutexContainer struct {
30+ m sync.RWMutex
31+ * model.Container
32+ }
33+
34+ func newMutexContainer (id , name string ) * mutexContainer {
35+ c := model .NewContainer (id , name )
36+ return & mutexContainer {Container : c }
37+ }
38+
39+ const eventBufferLen = 1024
40+ const unknownContainerName = "<unknown>"
41+ const incompleteContainerName = "incomplete"
3042
3143func NewController (ctx context.Context , ec chan sysdig.Event ) (controller.Controller , error ) {
3244 r := router .NewGroupRouter ("/container" )
33- res := & ContainerController {containerRouter : r , ec : ec , containers : map [string ]* model. Container {}, containerCh : map [string ]chan containerEvent {}}
45+ res := & ContainerController {containerRouter : r , ec : ec , containers : map [string ]* mutexContainer {}, containerCh : map [string ]chan containerEvent {}}
3446 res .initRouter ()
3547 if err := res .start (ctx ); err != nil {
3648 return res , err
@@ -46,24 +58,31 @@ func (cc *ContainerController) BindedRoutes() []router.Route {
4658
4759func (cc * ContainerController ) initRouter () {
4860 // TODO
61+ cc .containerRouter .AddRoute ("/" , router .MethodGet , cc .getAllContainers )
62+ cc .containerRouter .AddRoute ("/:id" , router .MethodGet , cc .getContainer )
4963}
5064
5165func (cc * ContainerController ) start (ctx context.Context ) error {
52- func () {
66+ go func () {
5367 var e sysdig.Event
5468 for {
5569 select {
5670 case e = <- cc .ec :
5771 case <- ctx .Done ():
5872 return
5973 }
60- if e .ContainerName == "host" {
74+ if e .ContainerID == "host" || len ( e . ContainerID ) == 0 {
6175 continue
6276 }
6377 ce := convert (e )
6478 containerID := ce .containerID
79+ containerName := ce .containerName
80+ if containerName == incompleteContainerName {
81+ containerName = unknownContainerName
82+ }
83+ log .L .Debug (ce )
6584 if _ , exists := cc .containers [containerID ]; ! exists {
66- container := model . NewContainer (ce .containerID , ce . containerName )
85+ container := newMutexContainer (ce .containerID , containerName )
6786 ch := make (chan containerEvent , eventBufferLen )
6887 cc .cm .Lock ()
6988 cc .containers [containerID ] = container
@@ -77,9 +96,9 @@ func (cc *ContainerController) start(ctx context.Context) error {
7796 log .L .WithError (err ).Error ("" )
7897 }
7998 cc .cm .Lock ()
80- cc .containers [ container .ID ] = nil
99+ delete ( cc .containers , container .ID )
81100 cc .cm .Unlock ()
82- cc .containerCh [ container .ID ] = nil
101+ delete ( cc .containerCh , container .ID )
83102 close (ch )
84103 }()
85104 }
0 commit comments