diff --git a/agent/main.go b/agent/main.go index 7da612d86..acb29507a 100644 --- a/agent/main.go +++ b/agent/main.go @@ -4,15 +4,7 @@ import ( "encoding/json" "flag" "fmt" - "github.com/gin-contrib/static" - "github.com/gin-gonic/gin" - "github.com/gorilla/websocket" - "github.com/romana/rlog" - "github.com/up9inc/mizu/shared" - "github.com/up9inc/mizu/tap" - tapApi "github.com/up9inc/mizu/tap/api" "io/ioutil" - "log" "mizuserver/pkg/api" "mizuserver/pkg/controllers" "mizuserver/pkg/models" @@ -26,6 +18,14 @@ import ( "path/filepath" "plugin" "sort" + + "github.com/gin-contrib/static" + "github.com/gin-gonic/gin" + "github.com/gorilla/websocket" + "github.com/up9inc/mizu/shared" + "github.com/up9inc/mizu/shared/logger" + "github.com/up9inc/mizu/tap" + tapApi "github.com/up9inc/mizu/tap/api" ) var tapperMode = flag.Bool("tap", false, "Run in tapper mode without API") @@ -40,6 +40,7 @@ var extensions []*tapApi.Extension // global var extensionsMap map[string]*tapApi.Extension // global func main() { + logger.InitLoggerStderrOnly() flag.Parse() loadExtensions() @@ -63,7 +64,7 @@ func main() { hostApi(nil) } else if *tapperMode { - rlog.Infof("Starting tapper, websocket address: %s", *apiServerAddress) + logger.Log.Infof("Starting tapper, websocket address: %s", *apiServerAddress) if *apiServerAddress == "" { panic("API server address must be provided with --api-server-address when using --tap") } @@ -71,7 +72,7 @@ func main() { tapTargets := getTapTargets() if tapTargets != nil { tap.SetFilterAuthorities(tapTargets) - rlog.Infof("Filtering for the following authorities: %v", tap.GetFilterIPs()) + logger.Log.Infof("Filtering for the following authorities: %v", tap.GetFilterIPs()) } filteredOutputItemsChannel := make(chan *tapApi.OutputChannelItem) @@ -84,7 +85,7 @@ func main() { if err != nil { panic(fmt.Sprintf("Error connecting to socket server at %s %v", *apiServerAddress, err)) } - rlog.Infof("Connected successfully to websocket %s", *apiServerAddress) + logger.Log.Infof("Connected successfully to websocket %s", *apiServerAddress) go pipeTapChannelToSocket(socketConnection, filteredOutputItemsChannel) } else if *apiServerMode { @@ -117,7 +118,7 @@ func main() { signal.Notify(signalChan, os.Interrupt) <-signalChan - rlog.Info("Exiting") + logger.Log.Info("Exiting") } func loadExtensions() { @@ -126,13 +127,13 @@ func loadExtensions() { files, err := ioutil.ReadDir(extensionsDir) if err != nil { - log.Fatal(err) + logger.Log.Fatal(err) } extensions = make([]*tapApi.Extension, len(files)) extensionsMap = make(map[string]*tapApi.Extension) for i, file := range files { filename := file.Name() - rlog.Infof("Loading extension: %s\n", filename) + logger.Log.Infof("Loading extension: %s\n", filename) extension := &tapApi.Extension{ Path: path.Join(extensionsDir, filename), } @@ -157,7 +158,7 @@ func loadExtensions() { }) for _, extension := range extensions { - log.Printf("Extension Properties: %+v\n", extension) + logger.Log.Infof("Extension Properties: %+v\n", extension) } controllers.InitExtensionsMap(extensionsMap) @@ -274,7 +275,7 @@ func pipeTapChannelToSocket(connection *websocket.Conn, messageDataChannel <-cha for messageData := range messageDataChannel { marshaledData, err := models.CreateWebsocketTappedEntryMessage(messageData) if err != nil { - rlog.Errorf("error converting message to json %v, err: %s, (%v,%+v)", messageData, err, err, err) + logger.Log.Errorf("error converting message to json %v, err: %s, (%v,%+v)", messageData, err, err, err) continue } @@ -282,7 +283,7 @@ func pipeTapChannelToSocket(connection *websocket.Conn, messageDataChannel <-cha // and goes into the intermediate WebSocket. err = connection.WriteMessage(websocket.TextMessage, marshaledData) if err != nil { - rlog.Errorf("error sending message through socket server %v, err: %s, (%v,%+v)", messageData, err, err, err) + logger.Log.Errorf("error sending message through socket server %v, err: %s, (%v,%+v)", messageData, err, err, err) continue } } diff --git a/agent/pkg/api/main.go b/agent/pkg/api/main.go index 7163877fb..210d3cefb 100644 --- a/agent/pkg/api/main.go +++ b/agent/pkg/api/main.go @@ -17,7 +17,7 @@ import ( "go.mongodb.org/mongo-driver/bson/primitive" "github.com/google/martian/har" - "github.com/romana/rlog" + "github.com/up9inc/mizu/shared/logger" tapApi "github.com/up9inc/mizu/tap/api" "mizuserver/pkg/models" @@ -31,7 +31,7 @@ func StartResolving(namespace string) { errOut := make(chan error, 100) res, err := resolver.NewFromInCluster(errOut, namespace) if err != nil { - rlog.Infof("error creating k8s resolver %s", err) + logger.Log.Infof("error creating k8s resolver %s", err) return } ctx := context.Background() @@ -40,7 +40,7 @@ func StartResolving(namespace string) { for { select { case err := <-errOut: - rlog.Infof("name resolving error %s", err) + logger.Log.Infof("name resolving error %s", err) } } }() @@ -59,7 +59,7 @@ func StartReadingEntries(harChannel <-chan *tapApi.OutputChannelItem, workingDir func startReadingFiles(workingDir string) { if err := os.MkdirAll(workingDir, os.ModePerm); err != nil { - rlog.Errorf("Failed to make dir: %s, err: %v", workingDir, err) + logger.Log.Errorf("Failed to make dir: %s, err: %v", workingDir, err) return } @@ -76,7 +76,7 @@ func startReadingFiles(workingDir string) { sort.Sort(utils.ByModTime(harFiles)) if len(harFiles) == 0 { - rlog.Infof("Waiting for new files\n") + logger.Log.Infof("Waiting for new files\n") time.Sleep(3 * time.Second) continue } @@ -128,7 +128,7 @@ func resolveIP(connectionInfo *tapApi.ConnectionInfo) (resolvedSource string, re unresolvedSource := connectionInfo.ClientIP resolvedSource = k8sResolver.Resolve(unresolvedSource) if resolvedSource == "" { - rlog.Debugf("Cannot find resolved name to source: %s\n", unresolvedSource) + logger.Log.Debugf("Cannot find resolved name to source: %s\n", unresolvedSource) if os.Getenv("SKIP_NOT_RESOLVED_SOURCE") == "1" { return } @@ -136,7 +136,7 @@ func resolveIP(connectionInfo *tapApi.ConnectionInfo) (resolvedSource string, re unresolvedDestination := fmt.Sprintf("%s:%s", connectionInfo.ServerIP, connectionInfo.ServerPort) resolvedDestination = k8sResolver.Resolve(unresolvedDestination) if resolvedDestination == "" { - rlog.Debugf("Cannot find resolved name to dest: %s\n", unresolvedDestination) + logger.Log.Debugf("Cannot find resolved name to dest: %s\n", unresolvedDestination) if os.Getenv("SKIP_NOT_RESOLVED_DEST") == "1" { return } diff --git a/agent/pkg/api/socket_routes.go b/agent/pkg/api/socket_routes.go index c44c1e047..7e765268c 100644 --- a/agent/pkg/api/socket_routes.go +++ b/agent/pkg/api/socket_routes.go @@ -2,13 +2,14 @@ package api import ( "errors" - "github.com/gin-gonic/gin" - "github.com/gorilla/websocket" - "github.com/romana/rlog" - "github.com/up9inc/mizu/shared/debounce" "net/http" "sync" "time" + + "github.com/gin-gonic/gin" + "github.com/gorilla/websocket" + "github.com/up9inc/mizu/shared/debounce" + "github.com/up9inc/mizu/shared/logger" ) type EventHandlers interface { @@ -50,7 +51,7 @@ func WebSocketRoutes(app *gin.Engine, eventHandlers EventHandlers) { func websocketHandler(w http.ResponseWriter, r *http.Request, eventHandlers EventHandlers, isTapper bool) { conn, err := websocketUpgrader.Upgrade(w, r, nil) if err != nil { - rlog.Errorf("Failed to set websocket upgrade: %v", err) + logger.Log.Errorf("Failed to set websocket upgrade: %v", err) return } @@ -71,7 +72,7 @@ func websocketHandler(w http.ResponseWriter, r *http.Request, eventHandlers Even for { _, msg, err := conn.ReadMessage() if err != nil { - rlog.Errorf("Error reading message, socket id: %d, error: %v", socketId, err) + logger.Log.Errorf("Error reading message, socket id: %d, error: %v", socketId, err) break } eventHandlers.WebSocketMessage(socketId, msg) @@ -81,7 +82,7 @@ func websocketHandler(w http.ResponseWriter, r *http.Request, eventHandlers Even func socketCleanup(socketId int, socketConnection *SocketConnection) { err := socketConnection.connection.Close() if err != nil { - rlog.Errorf("Error closing socket connection for socket id %d: %v\n", socketId, err) + logger.Log.Errorf("Error closing socket connection for socket id %d: %v\n", socketId, err) } websocketIdsLock.Lock() @@ -92,7 +93,7 @@ func socketCleanup(socketId int, socketConnection *SocketConnection) { } var db = debounce.NewDebouncer(time.Second*5, func() { - rlog.Error("Successfully sent to socket") + logger.Log.Error("Successfully sent to socket") }) func SendToSocket(socketId int, message []byte) error { @@ -104,7 +105,7 @@ func SendToSocket(socketId int, message []byte) error { var sent = false time.AfterFunc(time.Second*5, func() { if !sent { - rlog.Error("Socket timed out") + logger.Log.Error("Socket timed out") socketCleanup(socketId, socketObj) } }) diff --git a/agent/pkg/api/socket_server_handlers.go b/agent/pkg/api/socket_server_handlers.go index 3dada8cf9..9a6c8d3e8 100644 --- a/agent/pkg/api/socket_server_handlers.go +++ b/agent/pkg/api/socket_server_handlers.go @@ -10,8 +10,8 @@ import ( tapApi "github.com/up9inc/mizu/tap/api" - "github.com/romana/rlog" "github.com/up9inc/mizu/shared" + "github.com/up9inc/mizu/shared/logger" ) var browserClientSocketUUIDs = make([]int, 0) @@ -28,10 +28,10 @@ func init() { func (h *RoutesEventHandlers) WebSocketConnect(socketId int, isTapper bool) { if isTapper { - rlog.Infof("Websocket event - Tapper connected, socket ID: %d", socketId) + logger.Log.Infof("Websocket event - Tapper connected, socket ID: %d", socketId) providers.TapperAdded() } else { - rlog.Infof("Websocket event - Browser socket connected, socket ID: %d", socketId) + logger.Log.Infof("Websocket event - Browser socket connected, socket ID: %d", socketId) socketListLock.Lock() browserClientSocketUUIDs = append(browserClientSocketUUIDs, socketId) socketListLock.Unlock() @@ -40,10 +40,10 @@ func (h *RoutesEventHandlers) WebSocketConnect(socketId int, isTapper bool) { func (h *RoutesEventHandlers) WebSocketDisconnect(socketId int, isTapper bool) { if isTapper { - rlog.Infof("Websocket event - Tapper disconnected, socket ID: %d", socketId) + logger.Log.Infof("Websocket event - Tapper disconnected, socket ID: %d", socketId) providers.TapperRemoved() } else { - rlog.Infof("Websocket event - Browser socket disconnected, socket ID: %d", socketId) + logger.Log.Infof("Websocket event - Browser socket disconnected, socket ID: %d", socketId) socketListLock.Lock() removeSocketUUIDFromBrowserSlice(socketId) socketListLock.Unlock() @@ -55,7 +55,7 @@ func BroadcastToBrowserClients(message []byte) { go func(socketId int) { err := SendToSocket(socketId, message) if err != nil { - rlog.Errorf("error sending message to socket ID %d: %v", socketId, err) + logger.Log.Errorf("error sending message to socket ID %d: %v", socketId, err) } }(socketId) } @@ -65,14 +65,14 @@ func (h *RoutesEventHandlers) WebSocketMessage(_ int, message []byte) { var socketMessageBase shared.WebSocketMessageMetadata err := json.Unmarshal(message, &socketMessageBase) if err != nil { - rlog.Infof("Could not unmarshal websocket message %v\n", err) + logger.Log.Infof("Could not unmarshal websocket message %v\n", err) } else { switch socketMessageBase.MessageType { case shared.WebSocketMessageTypeTappedEntry: var tappedEntryMessage models.WebSocketTappedEntryMessage err := json.Unmarshal(message, &tappedEntryMessage) if err != nil { - rlog.Infof("Could not unmarshal message of message type %s %v\n", socketMessageBase.MessageType, err) + logger.Log.Infof("Could not unmarshal message of message type %s %v\n", socketMessageBase.MessageType, err) } else { // NOTE: This is where the message comes back from the intermediate WebSocket to code. h.SocketOutChannel <- tappedEntryMessage.Data @@ -81,7 +81,7 @@ func (h *RoutesEventHandlers) WebSocketMessage(_ int, message []byte) { var statusMessage shared.WebSocketStatusMessage err := json.Unmarshal(message, &statusMessage) if err != nil { - rlog.Infof("Could not unmarshal message of message type %s %v\n", socketMessageBase.MessageType, err) + logger.Log.Infof("Could not unmarshal message of message type %s %v\n", socketMessageBase.MessageType, err) } else { providers.TapStatus.Pods = statusMessage.TappingStatus.Pods BroadcastToBrowserClients(message) @@ -90,12 +90,12 @@ func (h *RoutesEventHandlers) WebSocketMessage(_ int, message []byte) { var outboundLinkMessage models.WebsocketOutboundLinkMessage err := json.Unmarshal(message, &outboundLinkMessage) if err != nil { - rlog.Infof("Could not unmarshal message of message type %s %v\n", socketMessageBase.MessageType, err) + logger.Log.Infof("Could not unmarshal message of message type %s %v\n", socketMessageBase.MessageType, err) } else { handleTLSLink(outboundLinkMessage) } default: - rlog.Infof("Received socket message of type %s for which no handlers are defined", socketMessageBase.MessageType) + logger.Log.Infof("Received socket message of type %s for which no handlers are defined", socketMessageBase.MessageType) } } } @@ -116,9 +116,9 @@ func handleTLSLink(outboundLinkMessage models.WebsocketOutboundLinkMessage) { } marshaledMessage, err := json.Marshal(outboundLinkMessage) if err != nil { - rlog.Errorf("Error marshaling outbound link message for broadcasting: %v", err) + logger.Log.Errorf("Error marshaling outbound link message for broadcasting: %v", err) } else { - rlog.Errorf("Broadcasting outboundlink message %s", string(marshaledMessage)) + logger.Log.Errorf("Broadcasting outboundlink message %s", string(marshaledMessage)) BroadcastToBrowserClients(marshaledMessage) } } diff --git a/agent/pkg/controllers/status_controller.go b/agent/pkg/controllers/status_controller.go index bfb4f1ad2..16c8d33ee 100644 --- a/agent/pkg/controllers/status_controller.go +++ b/agent/pkg/controllers/status_controller.go @@ -2,15 +2,16 @@ package controllers import ( "encoding/json" - "github.com/gin-gonic/gin" - "github.com/romana/rlog" - "github.com/up9inc/mizu/shared" "mizuserver/pkg/api" "mizuserver/pkg/holder" "mizuserver/pkg/providers" "mizuserver/pkg/up9" "mizuserver/pkg/validation" "net/http" + + "github.com/gin-gonic/gin" + "github.com/up9inc/mizu/shared" + "github.com/up9inc/mizu/shared/logger" ) func PostTappedPods(c *gin.Context) { @@ -23,11 +24,11 @@ func PostTappedPods(c *gin.Context) { c.JSON(http.StatusBadRequest, err) return } - rlog.Infof("[Status] POST request: %d tapped pods", len(tapStatus.Pods)) + logger.Log.Infof("[Status] POST request: %d tapped pods", len(tapStatus.Pods)) providers.TapStatus.Pods = tapStatus.Pods message := shared.CreateWebSocketStatusMessage(*tapStatus) if jsonBytes, err := json.Marshal(message); err != nil { - rlog.Errorf("Could not Marshal message %v\n", err) + logger.Log.Errorf("Could not Marshal message %v\n", err) } else { api.BroadcastToBrowserClients(jsonBytes) } diff --git a/agent/pkg/database/size_enforcer.go b/agent/pkg/database/size_enforcer.go index b28c0ff6b..4ed87dddd 100644 --- a/agent/pkg/database/size_enforcer.go +++ b/agent/pkg/database/size_enforcer.go @@ -1,15 +1,14 @@ package database import ( - "log" "os" "strconv" "time" "github.com/fsnotify/fsnotify" - "github.com/romana/rlog" "github.com/up9inc/mizu/shared" "github.com/up9inc/mizu/shared/debounce" + "github.com/up9inc/mizu/shared/logger" "github.com/up9inc/mizu/shared/units" tapApi "github.com/up9inc/mizu/tap/api" ) @@ -20,13 +19,13 @@ const defaultMaxDatabaseSizeBytes int64 = 200 * 1000 * 1000 func StartEnforcingDatabaseSize() { watcher, err := fsnotify.NewWatcher() if err != nil { - log.Fatalf("Error creating filesystem watcher for db size enforcement: %v\n", err) + logger.Log.Fatalf("Error creating filesystem watcher for db size enforcement: %v\n", err) return } maxEntriesDBByteSize, err := getMaxEntriesDBByteSize() if err != nil { - log.Fatalf("Error parsing max db size: %v\n", err) + logger.Log.Fatalf("Error parsing max db size: %v\n", err) return } @@ -48,14 +47,14 @@ func StartEnforcingDatabaseSize() { if !ok { return // closed channel } - rlog.Errorf("filesystem watcher encountered error:%v", err) + logger.Log.Errorf("filesystem watcher encountered error:%v", err) } } }() err = watcher.Add(DBPath) if err != nil { - log.Fatalf("Error adding %s to filesystem watcher for db size enforcement: %v\n", DBPath, err) + logger.Log.Fatalf("Error adding %s to filesystem watcher for db size enforcement: %v\n", DBPath, err) } } @@ -73,7 +72,7 @@ func getMaxEntriesDBByteSize() (int64, error) { func checkFileSize(maxSizeBytes int64) { fileStat, err := os.Stat(DBPath) if err != nil { - rlog.Errorf("Error checking %s file size: %v", DBPath, err) + logger.Log.Errorf("Error checking %s file size: %v", DBPath, err) } else { if fileStat.Size() > maxSizeBytes { pruneOldEntries(fileStat.Size()) @@ -90,7 +89,7 @@ func pruneOldEntries(currentFileSize int64) { rows, err := GetEntriesTable().Limit(10000).Order("id").Rows() if err != nil { - rlog.Errorf("Error getting 10000 first db rows: %v", err) + logger.Log.Errorf("Error getting 10000 first db rows: %v", err) return } @@ -103,7 +102,7 @@ func pruneOldEntries(currentFileSize int64) { var entry tapApi.MizuEntry err = DB.ScanRows(rows, &entry) if err != nil { - rlog.Errorf("Error scanning db row: %v", err) + logger.Log.Errorf("Error scanning db row: %v", err) continue } @@ -115,8 +114,8 @@ func pruneOldEntries(currentFileSize int64) { GetEntriesTable().Where(entryIdsToRemove).Delete(tapApi.MizuEntry{}) // VACUUM causes sqlite to shrink the db file after rows have been deleted, the db file will not shrink without this DB.Exec("VACUUM") - rlog.Errorf("Removed %d rows and cleared %s", len(entryIdsToRemove), units.BytesToHumanReadable(bytesToBeRemoved)) + logger.Log.Errorf("Removed %d rows and cleared %s", len(entryIdsToRemove), units.BytesToHumanReadable(bytesToBeRemoved)) } else { - rlog.Error("Found no rows to remove when pruning") + logger.Log.Error("Found no rows to remove when pruning") } } diff --git a/agent/pkg/resolver/README.md b/agent/pkg/resolver/README.md index 747787d78..032cb4b06 100644 --- a/agent/pkg/resolver/README.md +++ b/agent/pkg/resolver/README.md @@ -32,7 +32,7 @@ Now you will be able to import `github.com/up9inc/mizu/resolver` in any `.go` fi errOut := make(chan error, 100) k8sResolver, err := resolver.NewFromOutOfCluster("", errOut) if err != nil { - rlog.Errorf("error creating k8s resolver %s", err) + logger.Log.Errorf("error creating k8s resolver %s", err) } ctx, cancel := context.WithCancel(context.Background()) @@ -40,15 +40,15 @@ k8sResolver.Start(ctx) resolvedName := k8sResolver.Resolve("10.107.251.91") // will always return `nil` in real scenarios as the internal map takes a moment to populate after `Start` is called if resolvedName != nil { - rlog.Errorf("resolved 10.107.251.91=%s", *resolvedName) + logger.Log.Errorf("resolved 10.107.251.91=%s", *resolvedName) } else { - rlog.Error("Could not find a resolved name for 10.107.251.91") + logger.Log.Error("Could not find a resolved name for 10.107.251.91") } for { select { case err := <- errOut: - rlog.Errorf("name resolving error %s", err) + logger.Log.Errorf("name resolving error %s", err) } } ``` diff --git a/agent/pkg/resolver/resolver.go b/agent/pkg/resolver/resolver.go index f29791198..b4a09ea5a 100644 --- a/agent/pkg/resolver/resolver.go +++ b/agent/pkg/resolver/resolver.go @@ -5,7 +5,7 @@ import ( "errors" "fmt" - "github.com/romana/rlog" + "github.com/up9inc/mizu/shared/logger" k8serrors "k8s.io/apimachinery/pkg/api/errors" cmap "github.com/orcaman/concurrent-map" @@ -157,10 +157,10 @@ func (resolver *Resolver) watchServices(ctx context.Context) error { func (resolver *Resolver) saveResolvedName(key string, resolved string, eventType watch.EventType) { if eventType == watch.Deleted { resolver.nameMap.Remove(key) - rlog.Infof("setting %s=nil\n", key) + logger.Log.Infof("setting %s=nil\n", key) } else { resolver.nameMap.Set(key, resolved) - rlog.Infof("setting %s=%s\n", key, resolved) + logger.Log.Infof("setting %s=%s\n", key, resolved) } } @@ -181,7 +181,7 @@ func (resolver *Resolver) infiniteErrorHandleRetryFunc(ctx context.Context, fun var statusError *k8serrors.StatusError if errors.As(err, &statusError) { if statusError.ErrStatus.Reason == metav1.StatusReasonForbidden { - rlog.Infof("Resolver loop encountered permission error, aborting event listening - %v\n", err) + logger.Log.Infof("Resolver loop encountered permission error, aborting event listening - %v\n", err) return } } diff --git a/agent/pkg/rules/rulesHTTP.go b/agent/pkg/rules/rulesHTTP.go index d2096fa83..3b4007b87 100644 --- a/agent/pkg/rules/rulesHTTP.go +++ b/agent/pkg/rules/rulesHTTP.go @@ -8,7 +8,7 @@ import ( "regexp" "strings" - "github.com/romana/rlog" + "github.com/up9inc/mizu/shared/logger" "github.com/google/martian/har" "github.com/up9inc/mizu/shared" @@ -69,7 +69,7 @@ func MatchRequestPolicy(harEntry har.Entry, service string) (resultPolicyToSend if err != nil { continue } - rlog.Info(matchValue, rule.Value) + logger.Log.Info(matchValue, rule.Value) } else { val := fmt.Sprint(out) matchValue, err = regexp.MatchString(rule.Value, val) diff --git a/agent/pkg/up9/main.go b/agent/pkg/up9/main.go index c33f38070..8e2f57f89 100644 --- a/agent/pkg/up9/main.go +++ b/agent/pkg/up9/main.go @@ -5,12 +5,7 @@ import ( "compress/zlib" "encoding/json" "fmt" - "github.com/google/martian/har" - "github.com/romana/rlog" - "github.com/up9inc/mizu/shared" - tapApi "github.com/up9inc/mizu/tap/api" "io/ioutil" - "log" "mizuserver/pkg/database" "mizuserver/pkg/utils" "net/http" @@ -18,6 +13,11 @@ import ( "regexp" "strings" "time" + + "github.com/google/martian/har" + "github.com/up9inc/mizu/shared" + "github.com/up9inc/mizu/shared/logger" + tapApi "github.com/up9inc/mizu/tap/api" ) const ( @@ -112,14 +112,14 @@ func GetAnalyzeInfo() *shared.AnalyzeStatus { } func SyncEntries(syncEntriesConfig *shared.SyncEntriesConfig) error { - rlog.Infof("Sync entries - started\n") + logger.Log.Infof("Sync entries - started\n") var ( token, model string guestMode bool ) if syncEntriesConfig.Token == "" { - rlog.Infof("Sync entries - creating anonymous token. env %s\n", syncEntriesConfig.Env) + logger.Log.Infof("Sync entries - creating anonymous token. env %s\n", syncEntriesConfig.Env) guestToken, err := createAnonymousToken(syncEntriesConfig.Env) if err != nil { return fmt.Errorf("failed creating anonymous token, err: %v", err) @@ -139,7 +139,7 @@ func SyncEntries(syncEntriesConfig *shared.SyncEntriesConfig) error { return fmt.Errorf("invalid model name, model name: %s", model) } - rlog.Infof("Sync entries - syncing. token: %s, model: %s, guest mode: %v\n", token, model, guestMode) + logger.Log.Infof("Sync entries - syncing. token: %s, model: %s, guest mode: %v\n", token, model, guestMode) go syncEntriesImpl(token, model, syncEntriesConfig.Env, syncEntriesConfig.UploadIntervalSec, guestMode) return nil @@ -152,7 +152,7 @@ func createAnonymousToken(envPrefix string) (*GuestToken, error) { } token := &GuestToken{} if err := getGuestToken(tokenUrl, token); err != nil { - rlog.Infof("Failed to get token, %s", err) + logger.Log.Infof("Failed to get token, %s", err) return nil, err } return token, nil @@ -164,7 +164,7 @@ func getGuestToken(url string, target *GuestToken) error { return err } defer resp.Body.Close() - rlog.Infof("Got token from the server, starting to json decode... status code: %v", resp.StatusCode) + logger.Log.Infof("Got token from the server, starting to json decode... status code: %v", resp.StatusCode) return json.NewDecoder(resp.Body).Decode(target) } @@ -182,7 +182,7 @@ func syncEntriesImpl(token string, model string, envPrefix string, uploadInterva for { timestampTo := time.Now().UnixNano() / int64(time.Millisecond) - rlog.Infof("Getting entries from %v, to %v\n", timestampFrom, timestampTo) + logger.Log.Infof("Getting entries from %v, to %v\n", timestampFrom, timestampTo) protocolFilter := "http" entriesArray := database.GetEntriesFromDb(timestampFrom, timestampTo, &protocolFilter) @@ -207,13 +207,13 @@ func syncEntriesImpl(token string, model string, envPrefix string, uploadInterva result = append(result, *harEntry) } - rlog.Infof("About to upload %v entries\n", len(result)) + logger.Log.Infof("About to upload %v entries\n", len(result)) body, jMarshalErr := json.Marshal(result) if jMarshalErr != nil { analyzeInformation.Reset() - rlog.Infof("Stopping sync entries") - log.Fatal(jMarshalErr) + logger.Log.Infof("Stopping sync entries") + logger.Log.Fatal(jMarshalErr) } var in bytes.Buffer @@ -236,17 +236,17 @@ func syncEntriesImpl(token string, model string, envPrefix string, uploadInterva if _, postErr := http.DefaultClient.Do(req); postErr != nil { analyzeInformation.Reset() - rlog.Info("Stopping sync entries") - log.Fatal(postErr) + logger.Log.Info("Stopping sync entries") + logger.Log.Fatal(postErr) } analyzeInformation.SentCount += len(entriesArray) - rlog.Infof("Finish uploading %v entries to %s\n", len(entriesArray), GetTrafficDumpUrl(envPrefix, model)) + logger.Log.Infof("Finish uploading %v entries to %s\n", len(entriesArray), GetTrafficDumpUrl(envPrefix, model)) } else { - rlog.Infof("Nothing to upload") + logger.Log.Infof("Nothing to upload") } - rlog.Infof("Sleeping for %v...\n", sleepTime) + logger.Log.Infof("Sleeping for %v...\n", sleepTime) time.Sleep(sleepTime) timestampFrom = timestampTo } diff --git a/agent/pkg/utils/har.go b/agent/pkg/utils/har.go index 6386356d0..a1a06be78 100644 --- a/agent/pkg/utils/har.go +++ b/agent/pkg/utils/har.go @@ -4,12 +4,13 @@ import ( "bytes" "errors" "fmt" - "github.com/google/martian/har" - "github.com/romana/rlog" - "github.com/up9inc/mizu/tap/api" "strconv" "strings" "time" + + "github.com/google/martian/har" + "github.com/up9inc/mizu/shared/logger" + "github.com/up9inc/mizu/tap/api" ) // Keep it because we might want cookies in the future @@ -203,7 +204,7 @@ func NewResponse(response *api.GenericMessage) (harResponse *har.Response, err e if strings.HasPrefix(mimeType.(string), "application/grpc") { status, err = strconv.Atoi(_status) if err != nil { - rlog.Errorf("Failed converting status to int %s (%v,%+v)", err, err, err) + logger.Log.Errorf("Failed converting status to int %s (%v,%+v)", err, err, err) return nil, errors.New("failed converting response status to int for HAR") } } @@ -224,13 +225,13 @@ func NewResponse(response *api.GenericMessage) (harResponse *har.Response, err e func NewEntry(pair *api.RequestResponsePair) (*har.Entry, error) { harRequest, err := NewRequest(&pair.Request) if err != nil { - rlog.Errorf("Failed converting request to HAR %s (%v,%+v)", err, err, err) + logger.Log.Errorf("Failed converting request to HAR %s (%v,%+v)", err, err, err) return nil, errors.New("failed converting request to HAR") } harResponse, err := NewResponse(&pair.Response) if err != nil { - rlog.Errorf("Failed converting response to HAR %s (%v,%+v)", err, err, err) + logger.Log.Errorf("Failed converting response to HAR %s (%v,%+v)", err, err, err) return nil, errors.New("failed converting response to HAR") } diff --git a/agent/pkg/utils/truncating_logger.go b/agent/pkg/utils/truncating_logger.go index 39aa834d3..8302d5512 100644 --- a/agent/pkg/utils/truncating_logger.go +++ b/agent/pkg/utils/truncating_logger.go @@ -3,10 +3,11 @@ package utils import ( "context" "fmt" - "github.com/romana/rlog" + "time" + + loggerShared "github.com/up9inc/mizu/shared/logger" "gorm.io/gorm/logger" "gorm.io/gorm/utils" - "time" ) // TruncatingLogger implements the gorm logger.Interface interface. Its purpose is to act as gorm's logger while truncating logs to a max of 50 characters to minimise the performance impact @@ -24,21 +25,21 @@ func (truncatingLogger *TruncatingLogger) Info(_ context.Context, message string if truncatingLogger.LogLevel < logger.Info { return } - rlog.Errorf("gorm info: %.150s", message) + loggerShared.Log.Errorf("gorm info: %.150s", message) } func (truncatingLogger *TruncatingLogger) Warn(_ context.Context, message string, __ ...interface{}) { if truncatingLogger.LogLevel < logger.Warn { return } - rlog.Errorf("gorm warning: %.150s", message) + loggerShared.Log.Errorf("gorm warning: %.150s", message) } func (truncatingLogger *TruncatingLogger) Error(_ context.Context, message string, __ ...interface{}) { if truncatingLogger.LogLevel < logger.Error { return } - rlog.Errorf("gorm error: %.150s", message) + loggerShared.Log.Errorf("gorm error: %.150s", message) } func (truncatingLogger *TruncatingLogger) Trace(ctx context.Context, begin time.Time, fc func() (string, int64), err error) { diff --git a/agent/pkg/utils/utils.go b/agent/pkg/utils/utils.go index 966049370..9d8ff9af4 100644 --- a/agent/pkg/utils/utils.go +++ b/agent/pkg/utils/utils.go @@ -2,8 +2,6 @@ package utils import ( "context" - "github.com/gin-gonic/gin" - "github.com/romana/rlog" "net/http" "net/url" "os" @@ -11,6 +9,9 @@ import ( "reflect" "syscall" "time" + + "github.com/gin-gonic/gin" + "github.com/up9inc/mizu/shared/logger" ) // StartServer starts the server with a graceful shutdown @@ -28,16 +29,16 @@ func StartServer(app *gin.Engine) { go func() { _ = <-signals - rlog.Infof("Shutting down...") + logger.Log.Infof("Shutting down...") ctx, _ := context.WithTimeout(context.Background(), 5*time.Second) _ = srv.Shutdown(ctx) os.Exit(0) }() // Run server. - rlog.Infof("Starting the server...") + logger.Log.Infof("Starting the server...") if err := app.Run(":8899"); err != nil { - rlog.Errorf("Server is not running! Reason: %v", err) + logger.Log.Errorf("Server is not running! Reason: %v", err) } } @@ -54,14 +55,14 @@ func ReverseSlice(data interface{}) { func CheckErr(e error) { if e != nil { - rlog.Errorf("%v", e) + logger.Log.Errorf("%v", e) } } func SetHostname(address, newHostname string) string { replacedUrl, err := url.Parse(address) if err != nil { - rlog.Errorf("error replacing hostname to %s in address %s, returning original %v", newHostname, address, err) + logger.Log.Errorf("error replacing hostname to %s in address %s, returning original %v", newHostname, address, err) return address } replacedUrl.Host = newHostname diff --git a/cli/uiUtils/confirmation.go b/cli/uiUtils/confirmation.go index afa57a1bd..9a28da26f 100644 --- a/cli/uiUtils/confirmation.go +++ b/cli/uiUtils/confirmation.go @@ -3,9 +3,10 @@ package uiUtils import ( "bufio" "fmt" - "log" "os" "strings" + + "github.com/up9inc/mizu/shared/logger" ) func AskForConfirmation(s string) bool { @@ -15,7 +16,7 @@ func AskForConfirmation(s string) bool { response, err := reader.ReadString('\n') if err != nil { - log.Fatal(err) + logger.Log.Fatalf("Error while reading confirmation string, err: %v", err) } response = strings.ToLower(strings.TrimSpace(response)) if response == "" || response == "y" || response == "yes" { diff --git a/shared/logger/logger.go b/shared/logger/logger.go index a75f47d41..e8f82e91e 100644 --- a/shared/logger/logger.go +++ b/shared/logger/logger.go @@ -28,3 +28,14 @@ func InitLogger(logPath string) { logging.SetBackend(backend1Leveled, backend2Formatter) } + +func InitLoggerStderrOnly() { + consoleLog := logging.NewLogBackend(os.Stderr, "", 0) + + backend1Formatter := logging.NewBackendFormatter(consoleLog, format) + + backend1Leveled := logging.AddModuleLevel(consoleLog) + backend1Leveled.SetLevel(logging.DEBUG, "") + + logging.SetBackend(backend1Leveled, backend1Formatter) +}