From 6b11c0281a57c7380210809305db4bb2232f0c6e Mon Sep 17 00:00:00 2001 From: Shardul Nalegave Date: Tue, 20 Feb 2024 21:26:18 +0530 Subject: [PATCH] Analytics + Logging --- analytics/analytics.go | 36 ++++++++++++++++++++++++++++++++++++ analytics/backend.go | 5 +++++ freighter.go | 12 ++++++++++++ go.mod | 7 +++++++ go.sum | 15 +++++++++++++++ test/.freighter/logs.txt | 1 + utils/logger.go | 10 ++++++++++ 7 files changed, 86 insertions(+) create mode 100644 analytics/analytics.go create mode 100644 analytics/backend.go create mode 100644 test/.freighter/logs.txt create mode 100644 utils/logger.go diff --git a/analytics/analytics.go b/analytics/analytics.go new file mode 100644 index 0000000..39eedee --- /dev/null +++ b/analytics/analytics.go @@ -0,0 +1,36 @@ +package analytics + +import ( + "log" + "os" + "path" +) + +const ( + ANALYTICS_DIR string = ".freighter" + LOG_FILE string = "logs.txt" +) + +type Analytics struct { + LogFile *os.File + Backend map[string]BackendAnalytics +} + +func NewAnalytics() *Analytics { + if _, err := os.Stat(ANALYTICS_DIR); os.IsNotExist(err) { + err := os.MkdirAll(ANALYTICS_DIR, 0755) + if err != nil { + log.Fatalf("Could not create directory: %s", ANALYTICS_DIR) + } + } + + logFile, err := os.OpenFile(path.Join(ANALYTICS_DIR, LOG_FILE), os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644) + if err != nil { + log.Fatalf("Could not open log-file: %s", LOG_FILE) + } + + return &Analytics{ + LogFile: logFile, + Backend: make(map[string]BackendAnalytics), + } +} diff --git a/analytics/backend.go b/analytics/backend.go new file mode 100644 index 0000000..b89fed4 --- /dev/null +++ b/analytics/backend.go @@ -0,0 +1,5 @@ +package analytics + +type BackendAnalytics struct { + // +} diff --git a/freighter.go b/freighter.go index ff03bba..51e9f9d 100644 --- a/freighter.go +++ b/freighter.go @@ -6,8 +6,11 @@ import ( "sync" "time" + "github.com/ShardulNalegave/freighter/analytics" "github.com/ShardulNalegave/freighter/pool" "github.com/ShardulNalegave/freighter/strategy" + "github.com/ShardulNalegave/freighter/utils" + "github.com/rs/zerolog" ) type Options struct { @@ -19,7 +22,9 @@ type Options struct { type Freighter struct { URL *url.URL + a *analytics.Analytics pl *pool.ServerPool + logger zerolog.Logger Strategy strategy.Strategy healthCheckInterval time.Duration } @@ -27,6 +32,8 @@ type Freighter struct { func (f *Freighter) ListenAndServe(wg *sync.WaitGroup) { defer wg.Done() go HealthCheck(f.pl, f.healthCheckInterval) + + f.logger.Info().Str("HOST", f.URL.Host).Msg("Listening...") http.ListenAndServe(f.URL.Host, http.HandlerFunc(f.Handle)) } @@ -39,6 +46,9 @@ func (f *Freighter) Handle(w http.ResponseWriter, r *http.Request) { } func NewFreighter(opts *Options) *Freighter { + a := analytics.NewAnalytics() + logger := utils.NewLogger(a) + pl := &pool.ServerPool{ Backends: opts.Backends, } @@ -46,6 +56,8 @@ func NewFreighter(opts *Options) *Freighter { return &Freighter{ URL: opts.URL, Strategy: opts.Strategy, + a: a, + logger: logger, pl: pl, healthCheckInterval: opts.HealthCheckInterval, } diff --git a/go.mod b/go.mod index 685b860..8b7e4d7 100644 --- a/go.mod +++ b/go.mod @@ -3,3 +3,10 @@ module github.com/ShardulNalegave/freighter go 1.21.6 require github.com/google/uuid v1.6.0 + +require ( + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/rs/zerolog v1.32.0 // indirect + golang.org/x/sys v0.12.0 // indirect +) diff --git a/go.sum b/go.sum index 7790d7c..fcbf956 100644 --- a/go.sum +++ b/go.sum @@ -1,2 +1,17 @@ +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0= +github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/test/.freighter/logs.txt b/test/.freighter/logs.txt new file mode 100644 index 0000000..6f03f95 --- /dev/null +++ b/test/.freighter/logs.txt @@ -0,0 +1 @@ +{"level":"info","HOST":":5000","message":"Listening..."} diff --git a/utils/logger.go b/utils/logger.go new file mode 100644 index 0000000..5f59d83 --- /dev/null +++ b/utils/logger.go @@ -0,0 +1,10 @@ +package utils + +import ( + "github.com/ShardulNalegave/freighter/analytics" + "github.com/rs/zerolog" +) + +func NewLogger(a *analytics.Analytics) zerolog.Logger { + return zerolog.New(a.LogFile) +}