Skip to content

Commit

Permalink
Merge pull request #16 from jacobmichels/zerolog
Browse files Browse the repository at this point in the history
migrate to zerolog
  • Loading branch information
jacobmichels authored Jun 13, 2023
2 parents 819edac + 3b7ed6a commit 440a279
Show file tree
Hide file tree
Showing 12 changed files with 103 additions and 48 deletions.
3 changes: 2 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ FROM golang:1.20-alpine3.18 AS builder

WORKDIR /app

COPY go.mod .
COPY go.sum .
COPY go.mod .

RUN go mod download
Expand All @@ -17,5 +17,6 @@ COPY --from=builder /usr/bin/course-sense-go /usr/bin/course-sense-go

RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
ENV app_env=prod

ENTRYPOINT [ "/usr/bin/course-sense-go" ]
25 changes: 16 additions & 9 deletions cmd/coursesense/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package main
import (
"context"
"fmt"
"log"
"os"
"os/signal"
"time"
Expand All @@ -15,33 +14,41 @@ import (
"github.com/jacobmichels/Course-Sense-Go/server"
"github.com/jacobmichels/Course-Sense-Go/trigger"
"github.com/jacobmichels/Course-Sense-Go/webadvisor"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)

func main() {
// use pretty logging for local development
// app_env is set in the dockerfile
if os.Getenv("app_env") != "prod" {
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stdout})
}

ctx, cancel := context.WithCancel(context.Background())
defer cancel()

sig := make(chan os.Signal, 1)
signal.Notify(sig, os.Interrupt)
go func() {
<-sig
log.Println("received interrupt, shutting down")
log.Info().Msg("received interrupt, shutting down")
cancel()
}()

cfg, err := config.ParseConfig()
if err != nil {
log.Panicf("failed to get config: %s", err)
log.Fatal().Msgf("failed to get config: %v", err)
}

webadvisorService, err := webadvisor.NewWebAdvisorSectionService()
if err != nil {
log.Panicf("failed to create WebAdvisorSectionService: %s", err)
log.Fatal().Msgf("failed to create WebAdvisorSectionService: %v", err)
}

repository, err := repository.New(ctx, cfg.Database)
if err != nil {
log.Panicf("failed to create repository: %s", err)
log.Fatal().Msgf("failed to create repository: %v", err)
}

emailNotifier := notifier.NewEmail(cfg.Notifications.EmailSmtp.Host, cfg.Notifications.EmailSmtp.Username, cfg.Notifications.EmailSmtp.Password, cfg.Notifications.EmailSmtp.From, cfg.Notifications.EmailSmtp.Port)
Expand All @@ -50,18 +57,18 @@ func main() {
trigger := trigger.NewTrigger(webadvisorService, repository, emailNotifier)

go func() {
log.Printf("starting trigger ticker: polling every %d seconds\n", cfg.PollIntervalSecs)
log.Info().Msgf("starting poll ticker: polling every %d seconds", cfg.PollIntervalSecs)
ticker := time.NewTicker(time.Second * time.Duration(cfg.PollIntervalSecs))

for {
select {
case <-ctx.Done():
return
case <-ticker.C:
log.Println("triggering webadvisor poll")
log.Info().Msg("triggering webadvisor poll")
err := trigger.Trigger(ctx)
if err != nil {
log.Printf("failure occured during trigger: %v\n", err)
log.Error().Msgf("failure occured during trigger: %v", err)
}
}
}
Expand All @@ -74,6 +81,6 @@ func main() {

srv := server.NewServer(fmt.Sprintf(":%s", port), register, trigger)
if err = srv.Start(ctx); err != nil {
log.Panicf("Server failure: %s", err)
log.Fatal().Msgf("Server failure: %v", err)
}
}
6 changes: 3 additions & 3 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ package config

import (
"fmt"
"log"
"strings"

"github.com/rs/zerolog/log"
"github.com/spf13/viper"
)

Expand Down Expand Up @@ -39,7 +39,7 @@ func ParseConfig() (Config, error) {

if err := viper.ReadInConfig(); err != nil {
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
log.Println("No config file found, continuing with env and defaults")
log.Info().Msg("No config file found, continuing with env and defaults")
} else {
// Config file was found but another error was produced
return Config{}, fmt.Errorf("failed to read config file: %s", err)
Expand All @@ -66,7 +66,7 @@ func validateConfig(cfg Config) error {
}

if cfg.Database.Type == "sqlite" && cfg.Database.SQLite.ConnectionString == "" {
log.Printf("warn: sqlite connection string is empty")
log.Info().Msgf("warn: sqlite connection string is empty")
}

return nil
Expand Down
6 changes: 4 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ require (
cloud.google.com/go/firestore v1.10.0
github.com/golang-migrate/migrate/v4 v4.16.2
github.com/julienschmidt/httprouter v1.3.0
github.com/rs/zerolog v1.29.1
github.com/spf13/viper v1.16.0
google.golang.org/api v0.126.0
modernc.org/sqlite v1.23.1
Expand All @@ -30,7 +31,8 @@ require (
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mattn/go-isatty v0.0.16 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.19 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/pelletier/go-toml/v2 v2.0.8 // indirect
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
Expand All @@ -46,7 +48,7 @@ require (
golang.org/x/net v0.10.0 // indirect
golang.org/x/oauth2 v0.8.0 // indirect
golang.org/x/sync v0.2.0 // indirect
golang.org/x/sys v0.8.0 // indirect
golang.org/x/sys v0.9.0 // indirect
golang.org/x/text v0.9.0 // indirect
golang.org/x/time v0.3.0 // indirect
golang.org/x/tools v0.9.1 // indirect
Expand Down
19 changes: 16 additions & 3 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XP
github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
Expand All @@ -81,6 +82,7 @@ github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeME
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/golang-migrate/migrate/v4 v4.16.2 h1:8coYbMKUyInrFk1lfGfRovTLAW7PhWp8qQDT2iKfuoA=
github.com/golang-migrate/migrate/v4 v4.16.2/go.mod h1:pfcJX4nPHaVdc5nmdCikFBWtm+UBpiZjRNNsyBbp0/o=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
Expand Down Expand Up @@ -184,8 +186,13 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/lib/pq v1.10.2 h1:AqzbZs4ZoCBp+GtejcpCpcxM3zlSMx29dXbUSeVtJb8=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
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.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
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/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
Expand All @@ -202,6 +209,9 @@ github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qq
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc=
github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU=
github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM=
github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ=
github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA=
Expand Down Expand Up @@ -385,12 +395,15 @@ golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s=
golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
Expand Down
2 changes: 2 additions & 0 deletions notifier/noop.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"

coursesense "github.com/jacobmichels/Course-Sense-Go"
"github.com/rs/zerolog/log"
)

var _ coursesense.Notifier = Noop{}
Expand All @@ -16,5 +17,6 @@ func NewNoop() Noop {
}

func (n Noop) Notify(ctx context.Context, section coursesense.Section, watchers ...coursesense.Watcher) error {
log.Info().Str("section", section.String()).Int("watcher_count", len(watchers)).Msg("noop notifier called")
return nil
}
5 changes: 3 additions & 2 deletions notifier/smtp.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@ package notifier
import (
"context"
"fmt"
"log"
"net/smtp"

"github.com/rs/zerolog/log"

coursesense "github.com/jacobmichels/Course-Sense-Go"
)

Expand Down Expand Up @@ -44,7 +45,7 @@ Thanks for using Course Sense.`, watcher.Email, section.Course.Department, secti
if err != nil {
return fmt.Errorf("failed to notify %s: %w", watcher.Email, err)
}
log.Println("Notification email sent")
log.Info().Msgf("Notification email sent to %s", watcher)
}

return nil
Expand Down
8 changes: 4 additions & 4 deletions register/register.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ var _ coursesense.RegistrationService = Register{}

type Register struct {
sectionService coursesense.SectionService
watcherService coursesense.Repository
repository coursesense.Repository
}

func NewRegister(s coursesense.SectionService, w coursesense.Repository) Register {
return Register{s, w}
func NewRegister(s coursesense.SectionService, r coursesense.Repository) Register {
return Register{s, r}
}

func (r Register) Register(ctx context.Context, section coursesense.Section, watcher coursesense.Watcher) error {
Expand All @@ -33,7 +33,7 @@ func (r Register) Register(ctx context.Context, section coursesense.Section, wat
return fmt.Errorf("section %s does not exist", section)
}

if err := r.watcherService.AddWatcher(ctx, section, watcher); err != nil {
if err := r.repository.AddWatcher(ctx, section, watcher); err != nil {
return fmt.Errorf("failed to persist %s to %s: %w", watcher, section, err)
}

Expand Down
7 changes: 4 additions & 3 deletions repository/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,19 @@ package repository
import (
"context"
"errors"
"log"

"github.com/rs/zerolog/log"

coursesense "github.com/jacobmichels/Course-Sense-Go"
"github.com/jacobmichels/Course-Sense-Go/config"
)

func New(ctx context.Context, cfg config.Database) (coursesense.Repository, error) {
if cfg.Type == "firestore" {
log.Println("creating firestore repository")
log.Info().Msg("using firestore repository")
return newFirestoreRepository(ctx, cfg.Firestore)
} else if cfg.Type == "sqlite" {
log.Println("creating sqlite repository")
log.Info().Msg("using sqlite repository")
return newSQLiteRepository(ctx, cfg.SQLite)
} else {
return nil, errors.New("invalid database type")
Expand Down
Loading

0 comments on commit 440a279

Please sign in to comment.