54 lines
1.1 KiB
Go
54 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/spf13/cobra"
|
|
"gitlab.com/inetmock/inetmock/internal/rpc"
|
|
"gitlab.com/inetmock/inetmock/pkg/audit"
|
|
)
|
|
|
|
var (
|
|
watchEventsCmd = &cobra.Command{
|
|
Use: "watch",
|
|
Short: "Watch all audit events",
|
|
RunE: watchAuditEvents,
|
|
}
|
|
|
|
auditCmd = &cobra.Command{
|
|
Use: "audit",
|
|
Short: "Interact with the audit stream",
|
|
}
|
|
|
|
listenerName string
|
|
)
|
|
|
|
func watchAuditEvents(_ *cobra.Command, _ []string) (err error) {
|
|
auditClient := rpc.NewAuditClient(conn)
|
|
|
|
var watchClient rpc.Audit_WatchEventsClient
|
|
if watchClient, err = auditClient.WatchEvents(appCtx, &rpc.WatchEventsRequest{WatcherName: listenerName}); err != nil {
|
|
fmt.Println(err.Error())
|
|
os.Exit(1)
|
|
}
|
|
|
|
go func() {
|
|
var protoEv *audit.EventEntity
|
|
for protoEv, err = watchClient.Recv(); err == nil; protoEv, err = watchClient.Recv() {
|
|
ev := audit.NewEventFromProto(protoEv)
|
|
var out []byte
|
|
out, err = json.Marshal(ev)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
fmt.Println(string(out))
|
|
}
|
|
}()
|
|
|
|
<-appCtx.Done()
|
|
err = watchClient.CloseSend()
|
|
|
|
return
|
|
}
|