Replace all rlog occurrences with the shared logger (#350)

* Replace all `rlog` occurrences with the shared logger

* Use the same log format in `InitLoggerStderrOnly` as well

* Convert one more `log.Fatal` to `logger.Log.Errorf` as well in the `cli`

* Replace `log.` occurrences with `logger.Log.` in `agent`

* Fix `cannot use err (type error)`

* Change the logging level to `DEBUG`

* Replace an `Errorf` with `Fatal`

* Add informative message
This commit is contained in:
M. Mert Yıldıran
2021-10-17 12:15:30 +03:00
committed by GitHub
parent 91196bb306
commit 147e812edb
15 changed files with 128 additions and 111 deletions

View File

@@ -4,15 +4,7 @@ import (
"encoding/json" "encoding/json"
"flag" "flag"
"fmt" "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" "io/ioutil"
"log"
"mizuserver/pkg/api" "mizuserver/pkg/api"
"mizuserver/pkg/controllers" "mizuserver/pkg/controllers"
"mizuserver/pkg/models" "mizuserver/pkg/models"
@@ -26,6 +18,14 @@ import (
"path/filepath" "path/filepath"
"plugin" "plugin"
"sort" "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") 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 var extensionsMap map[string]*tapApi.Extension // global
func main() { func main() {
logger.InitLoggerStderrOnly()
flag.Parse() flag.Parse()
loadExtensions() loadExtensions()
@@ -63,7 +64,7 @@ func main() {
hostApi(nil) hostApi(nil)
} else if *tapperMode { } else if *tapperMode {
rlog.Infof("Starting tapper, websocket address: %s", *apiServerAddress) logger.Log.Infof("Starting tapper, websocket address: %s", *apiServerAddress)
if *apiServerAddress == "" { if *apiServerAddress == "" {
panic("API server address must be provided with --api-server-address when using --tap") panic("API server address must be provided with --api-server-address when using --tap")
} }
@@ -71,7 +72,7 @@ func main() {
tapTargets := getTapTargets() tapTargets := getTapTargets()
if tapTargets != nil { if tapTargets != nil {
tap.SetFilterAuthorities(tapTargets) 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) filteredOutputItemsChannel := make(chan *tapApi.OutputChannelItem)
@@ -84,7 +85,7 @@ func main() {
if err != nil { if err != nil {
panic(fmt.Sprintf("Error connecting to socket server at %s %v", *apiServerAddress, err)) 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) go pipeTapChannelToSocket(socketConnection, filteredOutputItemsChannel)
} else if *apiServerMode { } else if *apiServerMode {
@@ -117,7 +118,7 @@ func main() {
signal.Notify(signalChan, os.Interrupt) signal.Notify(signalChan, os.Interrupt)
<-signalChan <-signalChan
rlog.Info("Exiting") logger.Log.Info("Exiting")
} }
func loadExtensions() { func loadExtensions() {
@@ -126,13 +127,13 @@ func loadExtensions() {
files, err := ioutil.ReadDir(extensionsDir) files, err := ioutil.ReadDir(extensionsDir)
if err != nil { if err != nil {
log.Fatal(err) logger.Log.Fatal(err)
} }
extensions = make([]*tapApi.Extension, len(files)) extensions = make([]*tapApi.Extension, len(files))
extensionsMap = make(map[string]*tapApi.Extension) extensionsMap = make(map[string]*tapApi.Extension)
for i, file := range files { for i, file := range files {
filename := file.Name() filename := file.Name()
rlog.Infof("Loading extension: %s\n", filename) logger.Log.Infof("Loading extension: %s\n", filename)
extension := &tapApi.Extension{ extension := &tapApi.Extension{
Path: path.Join(extensionsDir, filename), Path: path.Join(extensionsDir, filename),
} }
@@ -157,7 +158,7 @@ func loadExtensions() {
}) })
for _, extension := range extensions { for _, extension := range extensions {
log.Printf("Extension Properties: %+v\n", extension) logger.Log.Infof("Extension Properties: %+v\n", extension)
} }
controllers.InitExtensionsMap(extensionsMap) controllers.InitExtensionsMap(extensionsMap)
@@ -274,7 +275,7 @@ func pipeTapChannelToSocket(connection *websocket.Conn, messageDataChannel <-cha
for messageData := range messageDataChannel { for messageData := range messageDataChannel {
marshaledData, err := models.CreateWebsocketTappedEntryMessage(messageData) marshaledData, err := models.CreateWebsocketTappedEntryMessage(messageData)
if err != nil { 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 continue
} }
@@ -282,7 +283,7 @@ func pipeTapChannelToSocket(connection *websocket.Conn, messageDataChannel <-cha
// and goes into the intermediate WebSocket. // and goes into the intermediate WebSocket.
err = connection.WriteMessage(websocket.TextMessage, marshaledData) err = connection.WriteMessage(websocket.TextMessage, marshaledData)
if err != nil { 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 continue
} }
} }

View File

@@ -17,7 +17,7 @@ import (
"go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/bson/primitive"
"github.com/google/martian/har" "github.com/google/martian/har"
"github.com/romana/rlog" "github.com/up9inc/mizu/shared/logger"
tapApi "github.com/up9inc/mizu/tap/api" tapApi "github.com/up9inc/mizu/tap/api"
"mizuserver/pkg/models" "mizuserver/pkg/models"
@@ -31,7 +31,7 @@ func StartResolving(namespace string) {
errOut := make(chan error, 100) errOut := make(chan error, 100)
res, err := resolver.NewFromInCluster(errOut, namespace) res, err := resolver.NewFromInCluster(errOut, namespace)
if err != nil { if err != nil {
rlog.Infof("error creating k8s resolver %s", err) logger.Log.Infof("error creating k8s resolver %s", err)
return return
} }
ctx := context.Background() ctx := context.Background()
@@ -40,7 +40,7 @@ func StartResolving(namespace string) {
for { for {
select { select {
case err := <-errOut: 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) { func startReadingFiles(workingDir string) {
if err := os.MkdirAll(workingDir, os.ModePerm); err != nil { 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 return
} }
@@ -76,7 +76,7 @@ func startReadingFiles(workingDir string) {
sort.Sort(utils.ByModTime(harFiles)) sort.Sort(utils.ByModTime(harFiles))
if len(harFiles) == 0 { if len(harFiles) == 0 {
rlog.Infof("Waiting for new files\n") logger.Log.Infof("Waiting for new files\n")
time.Sleep(3 * time.Second) time.Sleep(3 * time.Second)
continue continue
} }
@@ -128,7 +128,7 @@ func resolveIP(connectionInfo *tapApi.ConnectionInfo) (resolvedSource string, re
unresolvedSource := connectionInfo.ClientIP unresolvedSource := connectionInfo.ClientIP
resolvedSource = k8sResolver.Resolve(unresolvedSource) resolvedSource = k8sResolver.Resolve(unresolvedSource)
if resolvedSource == "" { 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" { if os.Getenv("SKIP_NOT_RESOLVED_SOURCE") == "1" {
return return
} }
@@ -136,7 +136,7 @@ func resolveIP(connectionInfo *tapApi.ConnectionInfo) (resolvedSource string, re
unresolvedDestination := fmt.Sprintf("%s:%s", connectionInfo.ServerIP, connectionInfo.ServerPort) unresolvedDestination := fmt.Sprintf("%s:%s", connectionInfo.ServerIP, connectionInfo.ServerPort)
resolvedDestination = k8sResolver.Resolve(unresolvedDestination) resolvedDestination = k8sResolver.Resolve(unresolvedDestination)
if resolvedDestination == "" { 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" { if os.Getenv("SKIP_NOT_RESOLVED_DEST") == "1" {
return return
} }

View File

@@ -2,13 +2,14 @@ package api
import ( import (
"errors" "errors"
"github.com/gin-gonic/gin"
"github.com/gorilla/websocket"
"github.com/romana/rlog"
"github.com/up9inc/mizu/shared/debounce"
"net/http" "net/http"
"sync" "sync"
"time" "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 { 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) { func websocketHandler(w http.ResponseWriter, r *http.Request, eventHandlers EventHandlers, isTapper bool) {
conn, err := websocketUpgrader.Upgrade(w, r, nil) conn, err := websocketUpgrader.Upgrade(w, r, nil)
if err != nil { if err != nil {
rlog.Errorf("Failed to set websocket upgrade: %v", err) logger.Log.Errorf("Failed to set websocket upgrade: %v", err)
return return
} }
@@ -71,7 +72,7 @@ func websocketHandler(w http.ResponseWriter, r *http.Request, eventHandlers Even
for { for {
_, msg, err := conn.ReadMessage() _, msg, err := conn.ReadMessage()
if err != nil { 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 break
} }
eventHandlers.WebSocketMessage(socketId, msg) eventHandlers.WebSocketMessage(socketId, msg)
@@ -81,7 +82,7 @@ func websocketHandler(w http.ResponseWriter, r *http.Request, eventHandlers Even
func socketCleanup(socketId int, socketConnection *SocketConnection) { func socketCleanup(socketId int, socketConnection *SocketConnection) {
err := socketConnection.connection.Close() err := socketConnection.connection.Close()
if err != nil { 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() websocketIdsLock.Lock()
@@ -92,7 +93,7 @@ func socketCleanup(socketId int, socketConnection *SocketConnection) {
} }
var db = debounce.NewDebouncer(time.Second*5, func() { 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 { func SendToSocket(socketId int, message []byte) error {
@@ -104,7 +105,7 @@ func SendToSocket(socketId int, message []byte) error {
var sent = false var sent = false
time.AfterFunc(time.Second*5, func() { time.AfterFunc(time.Second*5, func() {
if !sent { if !sent {
rlog.Error("Socket timed out") logger.Log.Error("Socket timed out")
socketCleanup(socketId, socketObj) socketCleanup(socketId, socketObj)
} }
}) })

View File

@@ -10,8 +10,8 @@ import (
tapApi "github.com/up9inc/mizu/tap/api" tapApi "github.com/up9inc/mizu/tap/api"
"github.com/romana/rlog"
"github.com/up9inc/mizu/shared" "github.com/up9inc/mizu/shared"
"github.com/up9inc/mizu/shared/logger"
) )
var browserClientSocketUUIDs = make([]int, 0) var browserClientSocketUUIDs = make([]int, 0)
@@ -28,10 +28,10 @@ func init() {
func (h *RoutesEventHandlers) WebSocketConnect(socketId int, isTapper bool) { func (h *RoutesEventHandlers) WebSocketConnect(socketId int, isTapper bool) {
if isTapper { 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() providers.TapperAdded()
} else { } 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() socketListLock.Lock()
browserClientSocketUUIDs = append(browserClientSocketUUIDs, socketId) browserClientSocketUUIDs = append(browserClientSocketUUIDs, socketId)
socketListLock.Unlock() socketListLock.Unlock()
@@ -40,10 +40,10 @@ func (h *RoutesEventHandlers) WebSocketConnect(socketId int, isTapper bool) {
func (h *RoutesEventHandlers) WebSocketDisconnect(socketId int, isTapper bool) { func (h *RoutesEventHandlers) WebSocketDisconnect(socketId int, isTapper bool) {
if isTapper { 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() providers.TapperRemoved()
} else { } 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() socketListLock.Lock()
removeSocketUUIDFromBrowserSlice(socketId) removeSocketUUIDFromBrowserSlice(socketId)
socketListLock.Unlock() socketListLock.Unlock()
@@ -55,7 +55,7 @@ func BroadcastToBrowserClients(message []byte) {
go func(socketId int) { go func(socketId int) {
err := SendToSocket(socketId, message) err := SendToSocket(socketId, message)
if err != nil { 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) }(socketId)
} }
@@ -65,14 +65,14 @@ func (h *RoutesEventHandlers) WebSocketMessage(_ int, message []byte) {
var socketMessageBase shared.WebSocketMessageMetadata var socketMessageBase shared.WebSocketMessageMetadata
err := json.Unmarshal(message, &socketMessageBase) err := json.Unmarshal(message, &socketMessageBase)
if err != nil { 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 { } else {
switch socketMessageBase.MessageType { switch socketMessageBase.MessageType {
case shared.WebSocketMessageTypeTappedEntry: case shared.WebSocketMessageTypeTappedEntry:
var tappedEntryMessage models.WebSocketTappedEntryMessage var tappedEntryMessage models.WebSocketTappedEntryMessage
err := json.Unmarshal(message, &tappedEntryMessage) err := json.Unmarshal(message, &tappedEntryMessage)
if err != nil { 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 { } else {
// NOTE: This is where the message comes back from the intermediate WebSocket to code. // NOTE: This is where the message comes back from the intermediate WebSocket to code.
h.SocketOutChannel <- tappedEntryMessage.Data h.SocketOutChannel <- tappedEntryMessage.Data
@@ -81,7 +81,7 @@ func (h *RoutesEventHandlers) WebSocketMessage(_ int, message []byte) {
var statusMessage shared.WebSocketStatusMessage var statusMessage shared.WebSocketStatusMessage
err := json.Unmarshal(message, &statusMessage) err := json.Unmarshal(message, &statusMessage)
if err != nil { 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 { } else {
providers.TapStatus.Pods = statusMessage.TappingStatus.Pods providers.TapStatus.Pods = statusMessage.TappingStatus.Pods
BroadcastToBrowserClients(message) BroadcastToBrowserClients(message)
@@ -90,12 +90,12 @@ func (h *RoutesEventHandlers) WebSocketMessage(_ int, message []byte) {
var outboundLinkMessage models.WebsocketOutboundLinkMessage var outboundLinkMessage models.WebsocketOutboundLinkMessage
err := json.Unmarshal(message, &outboundLinkMessage) err := json.Unmarshal(message, &outboundLinkMessage)
if err != nil { 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 { } else {
handleTLSLink(outboundLinkMessage) handleTLSLink(outboundLinkMessage)
} }
default: 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) marshaledMessage, err := json.Marshal(outboundLinkMessage)
if err != nil { 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 { } else {
rlog.Errorf("Broadcasting outboundlink message %s", string(marshaledMessage)) logger.Log.Errorf("Broadcasting outboundlink message %s", string(marshaledMessage))
BroadcastToBrowserClients(marshaledMessage) BroadcastToBrowserClients(marshaledMessage)
} }
} }

View File

@@ -2,15 +2,16 @@ package controllers
import ( import (
"encoding/json" "encoding/json"
"github.com/gin-gonic/gin"
"github.com/romana/rlog"
"github.com/up9inc/mizu/shared"
"mizuserver/pkg/api" "mizuserver/pkg/api"
"mizuserver/pkg/holder" "mizuserver/pkg/holder"
"mizuserver/pkg/providers" "mizuserver/pkg/providers"
"mizuserver/pkg/up9" "mizuserver/pkg/up9"
"mizuserver/pkg/validation" "mizuserver/pkg/validation"
"net/http" "net/http"
"github.com/gin-gonic/gin"
"github.com/up9inc/mizu/shared"
"github.com/up9inc/mizu/shared/logger"
) )
func PostTappedPods(c *gin.Context) { func PostTappedPods(c *gin.Context) {
@@ -23,11 +24,11 @@ func PostTappedPods(c *gin.Context) {
c.JSON(http.StatusBadRequest, err) c.JSON(http.StatusBadRequest, err)
return 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 providers.TapStatus.Pods = tapStatus.Pods
message := shared.CreateWebSocketStatusMessage(*tapStatus) message := shared.CreateWebSocketStatusMessage(*tapStatus)
if jsonBytes, err := json.Marshal(message); err != nil { 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 { } else {
api.BroadcastToBrowserClients(jsonBytes) api.BroadcastToBrowserClients(jsonBytes)
} }

View File

@@ -1,15 +1,14 @@
package database package database
import ( import (
"log"
"os" "os"
"strconv" "strconv"
"time" "time"
"github.com/fsnotify/fsnotify" "github.com/fsnotify/fsnotify"
"github.com/romana/rlog"
"github.com/up9inc/mizu/shared" "github.com/up9inc/mizu/shared"
"github.com/up9inc/mizu/shared/debounce" "github.com/up9inc/mizu/shared/debounce"
"github.com/up9inc/mizu/shared/logger"
"github.com/up9inc/mizu/shared/units" "github.com/up9inc/mizu/shared/units"
tapApi "github.com/up9inc/mizu/tap/api" tapApi "github.com/up9inc/mizu/tap/api"
) )
@@ -20,13 +19,13 @@ const defaultMaxDatabaseSizeBytes int64 = 200 * 1000 * 1000
func StartEnforcingDatabaseSize() { func StartEnforcingDatabaseSize() {
watcher, err := fsnotify.NewWatcher() watcher, err := fsnotify.NewWatcher()
if err != nil { 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 return
} }
maxEntriesDBByteSize, err := getMaxEntriesDBByteSize() maxEntriesDBByteSize, err := getMaxEntriesDBByteSize()
if err != nil { 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 return
} }
@@ -48,14 +47,14 @@ func StartEnforcingDatabaseSize() {
if !ok { if !ok {
return // closed channel return // closed channel
} }
rlog.Errorf("filesystem watcher encountered error:%v", err) logger.Log.Errorf("filesystem watcher encountered error:%v", err)
} }
} }
}() }()
err = watcher.Add(DBPath) err = watcher.Add(DBPath)
if err != nil { 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) { func checkFileSize(maxSizeBytes int64) {
fileStat, err := os.Stat(DBPath) fileStat, err := os.Stat(DBPath)
if err != nil { 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 { } else {
if fileStat.Size() > maxSizeBytes { if fileStat.Size() > maxSizeBytes {
pruneOldEntries(fileStat.Size()) pruneOldEntries(fileStat.Size())
@@ -90,7 +89,7 @@ func pruneOldEntries(currentFileSize int64) {
rows, err := GetEntriesTable().Limit(10000).Order("id").Rows() rows, err := GetEntriesTable().Limit(10000).Order("id").Rows()
if err != nil { 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 return
} }
@@ -103,7 +102,7 @@ func pruneOldEntries(currentFileSize int64) {
var entry tapApi.MizuEntry var entry tapApi.MizuEntry
err = DB.ScanRows(rows, &entry) err = DB.ScanRows(rows, &entry)
if err != nil { if err != nil {
rlog.Errorf("Error scanning db row: %v", err) logger.Log.Errorf("Error scanning db row: %v", err)
continue continue
} }
@@ -115,8 +114,8 @@ func pruneOldEntries(currentFileSize int64) {
GetEntriesTable().Where(entryIdsToRemove).Delete(tapApi.MizuEntry{}) 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 // VACUUM causes sqlite to shrink the db file after rows have been deleted, the db file will not shrink without this
DB.Exec("VACUUM") 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 { } else {
rlog.Error("Found no rows to remove when pruning") logger.Log.Error("Found no rows to remove when pruning")
} }
} }

View File

@@ -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) errOut := make(chan error, 100)
k8sResolver, err := resolver.NewFromOutOfCluster("", errOut) k8sResolver, err := resolver.NewFromOutOfCluster("", errOut)
if err != nil { 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()) 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 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 { if resolvedName != nil {
rlog.Errorf("resolved 10.107.251.91=%s", *resolvedName) logger.Log.Errorf("resolved 10.107.251.91=%s", *resolvedName)
} else { } 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 { for {
select { select {
case err := <- errOut: case err := <- errOut:
rlog.Errorf("name resolving error %s", err) logger.Log.Errorf("name resolving error %s", err)
} }
} }
``` ```

View File

@@ -5,7 +5,7 @@ import (
"errors" "errors"
"fmt" "fmt"
"github.com/romana/rlog" "github.com/up9inc/mizu/shared/logger"
k8serrors "k8s.io/apimachinery/pkg/api/errors" k8serrors "k8s.io/apimachinery/pkg/api/errors"
cmap "github.com/orcaman/concurrent-map" 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) { func (resolver *Resolver) saveResolvedName(key string, resolved string, eventType watch.EventType) {
if eventType == watch.Deleted { if eventType == watch.Deleted {
resolver.nameMap.Remove(key) resolver.nameMap.Remove(key)
rlog.Infof("setting %s=nil\n", key) logger.Log.Infof("setting %s=nil\n", key)
} else { } else {
resolver.nameMap.Set(key, resolved) 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 var statusError *k8serrors.StatusError
if errors.As(err, &statusError) { if errors.As(err, &statusError) {
if statusError.ErrStatus.Reason == metav1.StatusReasonForbidden { 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 return
} }
} }

View File

@@ -8,7 +8,7 @@ import (
"regexp" "regexp"
"strings" "strings"
"github.com/romana/rlog" "github.com/up9inc/mizu/shared/logger"
"github.com/google/martian/har" "github.com/google/martian/har"
"github.com/up9inc/mizu/shared" "github.com/up9inc/mizu/shared"
@@ -69,7 +69,7 @@ func MatchRequestPolicy(harEntry har.Entry, service string) (resultPolicyToSend
if err != nil { if err != nil {
continue continue
} }
rlog.Info(matchValue, rule.Value) logger.Log.Info(matchValue, rule.Value)
} else { } else {
val := fmt.Sprint(out) val := fmt.Sprint(out)
matchValue, err = regexp.MatchString(rule.Value, val) matchValue, err = regexp.MatchString(rule.Value, val)

View File

@@ -5,12 +5,7 @@ import (
"compress/zlib" "compress/zlib"
"encoding/json" "encoding/json"
"fmt" "fmt"
"github.com/google/martian/har"
"github.com/romana/rlog"
"github.com/up9inc/mizu/shared"
tapApi "github.com/up9inc/mizu/tap/api"
"io/ioutil" "io/ioutil"
"log"
"mizuserver/pkg/database" "mizuserver/pkg/database"
"mizuserver/pkg/utils" "mizuserver/pkg/utils"
"net/http" "net/http"
@@ -18,6 +13,11 @@ import (
"regexp" "regexp"
"strings" "strings"
"time" "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 ( const (
@@ -112,14 +112,14 @@ func GetAnalyzeInfo() *shared.AnalyzeStatus {
} }
func SyncEntries(syncEntriesConfig *shared.SyncEntriesConfig) error { func SyncEntries(syncEntriesConfig *shared.SyncEntriesConfig) error {
rlog.Infof("Sync entries - started\n") logger.Log.Infof("Sync entries - started\n")
var ( var (
token, model string token, model string
guestMode bool guestMode bool
) )
if syncEntriesConfig.Token == "" { 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) guestToken, err := createAnonymousToken(syncEntriesConfig.Env)
if err != nil { if err != nil {
return fmt.Errorf("failed creating anonymous token, err: %v", err) 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) 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) go syncEntriesImpl(token, model, syncEntriesConfig.Env, syncEntriesConfig.UploadIntervalSec, guestMode)
return nil return nil
@@ -152,7 +152,7 @@ func createAnonymousToken(envPrefix string) (*GuestToken, error) {
} }
token := &GuestToken{} token := &GuestToken{}
if err := getGuestToken(tokenUrl, token); err != nil { 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 nil, err
} }
return token, nil return token, nil
@@ -164,7 +164,7 @@ func getGuestToken(url string, target *GuestToken) error {
return err return err
} }
defer resp.Body.Close() 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) return json.NewDecoder(resp.Body).Decode(target)
} }
@@ -182,7 +182,7 @@ func syncEntriesImpl(token string, model string, envPrefix string, uploadInterva
for { for {
timestampTo := time.Now().UnixNano() / int64(time.Millisecond) 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" protocolFilter := "http"
entriesArray := database.GetEntriesFromDb(timestampFrom, timestampTo, &protocolFilter) entriesArray := database.GetEntriesFromDb(timestampFrom, timestampTo, &protocolFilter)
@@ -207,13 +207,13 @@ func syncEntriesImpl(token string, model string, envPrefix string, uploadInterva
result = append(result, *harEntry) 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) body, jMarshalErr := json.Marshal(result)
if jMarshalErr != nil { if jMarshalErr != nil {
analyzeInformation.Reset() analyzeInformation.Reset()
rlog.Infof("Stopping sync entries") logger.Log.Infof("Stopping sync entries")
log.Fatal(jMarshalErr) logger.Log.Fatal(jMarshalErr)
} }
var in bytes.Buffer 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 { if _, postErr := http.DefaultClient.Do(req); postErr != nil {
analyzeInformation.Reset() analyzeInformation.Reset()
rlog.Info("Stopping sync entries") logger.Log.Info("Stopping sync entries")
log.Fatal(postErr) logger.Log.Fatal(postErr)
} }
analyzeInformation.SentCount += len(entriesArray) 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 { } 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) time.Sleep(sleepTime)
timestampFrom = timestampTo timestampFrom = timestampTo
} }

View File

@@ -4,12 +4,13 @@ import (
"bytes" "bytes"
"errors" "errors"
"fmt" "fmt"
"github.com/google/martian/har"
"github.com/romana/rlog"
"github.com/up9inc/mizu/tap/api"
"strconv" "strconv"
"strings" "strings"
"time" "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 // 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") { if strings.HasPrefix(mimeType.(string), "application/grpc") {
status, err = strconv.Atoi(_status) status, err = strconv.Atoi(_status)
if err != nil { 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") 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) { func NewEntry(pair *api.RequestResponsePair) (*har.Entry, error) {
harRequest, err := NewRequest(&pair.Request) harRequest, err := NewRequest(&pair.Request)
if err != nil { 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") return nil, errors.New("failed converting request to HAR")
} }
harResponse, err := NewResponse(&pair.Response) harResponse, err := NewResponse(&pair.Response)
if err != nil { 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") return nil, errors.New("failed converting response to HAR")
} }

View File

@@ -3,10 +3,11 @@ package utils
import ( import (
"context" "context"
"fmt" "fmt"
"github.com/romana/rlog" "time"
loggerShared "github.com/up9inc/mizu/shared/logger"
"gorm.io/gorm/logger" "gorm.io/gorm/logger"
"gorm.io/gorm/utils" "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 // 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 { if truncatingLogger.LogLevel < logger.Info {
return return
} }
rlog.Errorf("gorm info: %.150s", message) loggerShared.Log.Errorf("gorm info: %.150s", message)
} }
func (truncatingLogger *TruncatingLogger) Warn(_ context.Context, message string, __ ...interface{}) { func (truncatingLogger *TruncatingLogger) Warn(_ context.Context, message string, __ ...interface{}) {
if truncatingLogger.LogLevel < logger.Warn { if truncatingLogger.LogLevel < logger.Warn {
return return
} }
rlog.Errorf("gorm warning: %.150s", message) loggerShared.Log.Errorf("gorm warning: %.150s", message)
} }
func (truncatingLogger *TruncatingLogger) Error(_ context.Context, message string, __ ...interface{}) { func (truncatingLogger *TruncatingLogger) Error(_ context.Context, message string, __ ...interface{}) {
if truncatingLogger.LogLevel < logger.Error { if truncatingLogger.LogLevel < logger.Error {
return 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) { func (truncatingLogger *TruncatingLogger) Trace(ctx context.Context, begin time.Time, fc func() (string, int64), err error) {

View File

@@ -2,8 +2,6 @@ package utils
import ( import (
"context" "context"
"github.com/gin-gonic/gin"
"github.com/romana/rlog"
"net/http" "net/http"
"net/url" "net/url"
"os" "os"
@@ -11,6 +9,9 @@ import (
"reflect" "reflect"
"syscall" "syscall"
"time" "time"
"github.com/gin-gonic/gin"
"github.com/up9inc/mizu/shared/logger"
) )
// StartServer starts the server with a graceful shutdown // StartServer starts the server with a graceful shutdown
@@ -28,16 +29,16 @@ func StartServer(app *gin.Engine) {
go func() { go func() {
_ = <-signals _ = <-signals
rlog.Infof("Shutting down...") logger.Log.Infof("Shutting down...")
ctx, _ := context.WithTimeout(context.Background(), 5*time.Second) ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)
_ = srv.Shutdown(ctx) _ = srv.Shutdown(ctx)
os.Exit(0) os.Exit(0)
}() }()
// Run server. // Run server.
rlog.Infof("Starting the server...") logger.Log.Infof("Starting the server...")
if err := app.Run(":8899"); err != nil { 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) { func CheckErr(e error) {
if e != nil { if e != nil {
rlog.Errorf("%v", e) logger.Log.Errorf("%v", e)
} }
} }
func SetHostname(address, newHostname string) string { func SetHostname(address, newHostname string) string {
replacedUrl, err := url.Parse(address) replacedUrl, err := url.Parse(address)
if err != nil { 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 return address
} }
replacedUrl.Host = newHostname replacedUrl.Host = newHostname

View File

@@ -3,9 +3,10 @@ package uiUtils
import ( import (
"bufio" "bufio"
"fmt" "fmt"
"log"
"os" "os"
"strings" "strings"
"github.com/up9inc/mizu/shared/logger"
) )
func AskForConfirmation(s string) bool { func AskForConfirmation(s string) bool {
@@ -15,7 +16,7 @@ func AskForConfirmation(s string) bool {
response, err := reader.ReadString('\n') response, err := reader.ReadString('\n')
if err != nil { if err != nil {
log.Fatal(err) logger.Log.Fatalf("Error while reading confirmation string, err: %v", err)
} }
response = strings.ToLower(strings.TrimSpace(response)) response = strings.ToLower(strings.TrimSpace(response))
if response == "" || response == "y" || response == "yes" { if response == "" || response == "y" || response == "yes" {

View File

@@ -28,3 +28,14 @@ func InitLogger(logPath string) {
logging.SetBackend(backend1Leveled, backend2Formatter) 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)
}