77 "fmt"
88 "slices"
99 "strings"
10+ "sync"
1011 "time"
1112
1213 "github.com/inspektor-gadget/inspektor-gadget/pkg/datasource"
@@ -63,7 +64,9 @@ func NewGadgetManager() GadgetManager {
6364 return & manager {}
6465}
6566
66- type manager struct {}
67+ type manager struct {
68+ formatterMu sync.Mutex
69+ }
6770
6871// RunGadget runs a gadget with the specified image and parameters for a given duration
6972func (g * manager ) RunGadget (ctx context.Context , image string , params map [string ]string , duration time.Duration ) (string , error ) {
@@ -72,7 +75,7 @@ func (g *manager) RunGadget(ctx context.Context, image string, params map[string
7275 ctx ,
7376 image ,
7477 gadgetcontext .WithDataOperators (
75- outputDataOperator (func (data []byte ) {
78+ g . outputDataOperator (func (data []byte ) {
7679 results .Write (data )
7780 results .WriteByte ('\n' )
7881 }),
@@ -107,7 +110,7 @@ func truncateResults(results string, latest bool) string {
107110 return fmt .Sprintf ("\n <isTruncated>true</isTruncated>\n <results>%s</results>\n " , truncated )
108111}
109112
110- func outputDataOperator (cb func (data []byte )) operators.DataOperator {
113+ func ( g * manager ) outputDataOperator (cb func (data []byte )) operators.DataOperator {
111114 const opPriority = 50000
112115 return simple .New ("outputDataOperator" ,
113116 simple .OnInit (func (gadgetCtx operators.GadgetContext ) error {
@@ -124,6 +127,8 @@ func outputDataOperator(cb func(data []byte)) operators.DataOperator {
124127 }
125128
126129 err := d .Subscribe (func (source datasource.DataSource , data datasource.Data ) error {
130+ g .formatterMu .Lock ()
131+ defer g .formatterMu .Unlock ()
127132 jsonData := jsonFormatter .Marshal (data )
128133 cb (jsonData )
129134 return nil
@@ -198,7 +203,7 @@ func (g *manager) GetResults(ctx context.Context, id string) (string, error) {
198203 to ,
199204 id ,
200205 gadgetcontext .WithDataOperators (
201- outputDataOperator (func (data []byte ) {
206+ g . outputDataOperator (func (data []byte ) {
202207 results .Write (data )
203208 results .WriteByte ('\n' )
204209 }),
0 commit comments