Skip to content
This repository has been archived by the owner on Apr 17, 2024. It is now read-only.

Commit

Permalink
feat: use uber fx and central logger instance
Browse files Browse the repository at this point in the history
Clean up prototype code.

Signed-off-by: Alexander Trost <[email protected]>
  • Loading branch information
galexrt committed Mar 14, 2024
1 parent c207205 commit 5671d0c
Show file tree
Hide file tree
Showing 53 changed files with 1,195 additions and 529 deletions.
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
*.iml
*.idea

.env
config.yaml

# JetBrains IDEs
.idea/
postgres-data/
postgres-data/
29 changes: 10 additions & 19 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,42 +3,33 @@ FROM $BUILDER as builder

WORKDIR /app

RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o worker cmd/worker/main.go
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o migrate cmd/migrations/main.go
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o genesis .

FROM docker.io/library/alpine:3.19.1


FROM alpine:latest

RUN apk update && \
apk upgrade && \
apk add --no-cache curl sudo openssh-client ca-certificates

RUN addgroup -S appgroup && adduser -S koor -G appgroup
RUN apk add --no-cache curl sudo openssh-client ca-certificates && \
addgroup -S appgroup && adduser -S koor -G appgroup

USER koor

WORKDIR /home/koor/

## this should be a volume from ceph
# This should be a volume from ceph
VOLUME "/koor/clients"

COPY --from=builder /usr/local/bin/kubectl /usr/local/bin/kubectl
COPY --from=builder /usr/local/bin/terraform /usr/local/bin/terraform
COPY --from=builder /usr/local/bin/kubeone /usr/local/bin/kubeone
COPY --from=builder /app/main .
COPY --from=builder /app/worker .
COPY --from=builder /app/migrate .

COPY --from=builder /app/genesis .

USER root
RUN mkdir -p /koor/clients/templates
RUN chown koor:appgroup /home/koor/main
RUN chown koor:appgroup /home/koor/genesis
COPY templates/hetzner /koor/clients/templates/hetzner
COPY cmd/migrations/migrations /app/migrations
RUN chown -R koor:appgroup /koor/clients /home/koor/main /usr/local/bin/terraform /usr/local/bin/kubectl
RUN chown -R koor:appgroup /koor/clients /home/koor/genesis /usr/local/bin/terraform /usr/local/bin/kubectl
USER koor

EXPOSE 8000

ENTRYPOINT ["./main"]
ENTRYPOINT ["./genesis"]
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,4 @@ test:
go test ./...

push:
docker push koorinc/genesis:$(TAG)
docker push koorinc/genesis:$(TAG)
11 changes: 5 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,19 @@
![Code Review](https://github.com/koor-tech/genesis/actions/workflows/code-review.yml/badge.svg)

# Genesis

# Koor-Tech Genesis
Welcome to Koor Technologies, Inc. Genesis project!

Our stack:

Welcome to koor Genesis

Our stack
- Go
- RabbitMQ
- Postgres
- PostgreSQL

In order to run local please install direnv
- https://direnv.net/
and run this command in order to create your file `.envrc` from `env.template`
```bash
chmod +x setup.sh
./setup.sh
```
```
2 changes: 1 addition & 1 deletion base.Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM golang:alpine as genesis-base-builder
FROM docker.io/library/golang:1.21-alpine3.19 as genesis-base-builder

ENV KUBEONE_VERSION=1.7.2
ENV DOCKER_OS_NAME=linux_amd64
Expand Down
57 changes: 57 additions & 0 deletions cmd/migrations.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package cmd

import (
"log/slog"
"os"

"github.com/koor-tech/genesis/cmd/migrations"
"github.com/koor-tech/genesis/pkg/config"
"github.com/koor-tech/genesis/pkg/database"
"github.com/spf13/cobra"
"go.uber.org/fx/fxtest"
)

var migrateCmd = &cobra.Command{
Use: "migrate",
Short: "run migration commands using goose",
RunE: func(cmd *cobra.Command, args []string) error {
var arguments []string
if len(args) > 1 {
arguments = append(arguments, args[1:]...)
}
var command string
if len(args) == 0 {
command = "status"

} else {
command = args[0]
}

cfg, err := config.Load()
if err != nil {
return err
}

// Setup database connection for goose
logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{}))
d, err := database.NewDB(database.Params{
LC: fxtest.NewLifecycle(nil),
Logger: logger,
Config: cfg.Config,
})
if err != nil {
return err
}

if err := d.Connect(database.BuilDSNUri(cfg.Config.Database)); err != nil {
return err
}
defer d.Conn.Close()

return migrations.RunMigrationCommand(command, d.Conn.DB, arguments...)
},
}

func init() {
RootCmd.AddCommand(migrateCmd)
}
24 changes: 24 additions & 0 deletions cmd/migrations/goose.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package migrations

import (
"context"
"database/sql"
"embed"
"fmt"

_ "github.com/lib/pq"
"github.com/pressly/goose/v3"
)

//go:embed migrations/*.sql
var embedMigrations embed.FS

func RunMigrationCommand(command string, db *sql.DB, args ...string) error {
goose.SetBaseFS(embedMigrations)

if err := goose.RunContext(context.Background(), command, db, ".", args...); err != nil {
return fmt.Errorf("goose %v: dir %s. %w", command, ".", err)
}

return nil
}
52 changes: 0 additions & 52 deletions cmd/migrations/main.go

This file was deleted.

19 changes: 0 additions & 19 deletions cmd/migrations/runner/runner.go

This file was deleted.

89 changes: 89 additions & 0 deletions cmd/root.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package cmd

import (
"log/slog"
"os"
"time"

"github.com/gin-gonic/gin"
"github.com/koor-tech/genesis/pkg/fxslog"
"github.com/spf13/cobra"
"go.uber.org/fx"
"go.uber.org/fx/fxevent"

"github.com/koor-tech/genesis/gateway"
"github.com/koor-tech/genesis/gateway/handler"
"github.com/koor-tech/genesis/internal/cluster"
sshSvc "github.com/koor-tech/genesis/internal/ssh"
"github.com/koor-tech/genesis/internal/worker"
"github.com/koor-tech/genesis/pkg/config"
"github.com/koor-tech/genesis/pkg/database"
"github.com/koor-tech/genesis/pkg/notification"
"github.com/koor-tech/genesis/pkg/providers/hetzner"
"github.com/koor-tech/genesis/pkg/rabbitmq"
clusters "github.com/koor-tech/genesis/pkg/repositories/postgres/cluster"
"github.com/koor-tech/genesis/pkg/repositories/postgres/customers"
"github.com/koor-tech/genesis/pkg/repositories/postgres/providers"
"github.com/koor-tech/genesis/pkg/repositories/postgres/ssh"
"github.com/koor-tech/genesis/pkg/repositories/postgres/state"
)

func getFxBaseOpts() []fx.Option {
return []fx.Option{
fx.StartTimeout(90 * time.Second),
fx.WithLogger(func(logger *slog.Logger) fxevent.Logger {
return fxslog.New(logger)
}),

config.Module,
LoggerModule,
notification.Module,
gateway.HTTPServerModule,

fx.Provide(
state.NewClusterStateRepository,
customers.NewCustomersRepository,
providers.NewProviderRepository,
clusters.NewClusterRepository,
ssh.NewSshRepository,

sshSvc.NewService,

hetzner.New,
worker.NewWorker,
),

fx.Provide(
database.NewDB,
rabbitmq.NewClient,
handler.NewCluster,
cluster.NewService,

// Add any dependencies here so they can just be injected
),
}
}

var RootCmd = &cobra.Command{
Use: "gensis",
RunE: func(cmd *cobra.Command, args []string) error {
fxOpts := getFxBaseOpts()

fxOpts = append(fxOpts, fx.Invoke(func(*gin.Engine) {}))

app := fx.New(fxOpts...)
app.Run()

return nil
},
}

var LoggerModule = fx.Module("logger",
fx.Provide(
NewLogger,
),
)

func NewLogger(cfg *config.Config) (*slog.Logger, error) {
return slog.New(slog.NewJSONHandler(os.Stdout, nil)), nil
}
26 changes: 26 additions & 0 deletions cmd/worker.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package cmd

import (
"github.com/koor-tech/genesis/internal/worker"
"github.com/spf13/cobra"
"go.uber.org/fx"
)

var workerCmd = &cobra.Command{
Use: "monitor",
Short: "Monitors the state of the each cluster",
RunE: func(cmd *cobra.Command, args []string) error {
fxOpts := getFxBaseOpts()

fxOpts = append(fxOpts, fx.Invoke(func(*worker.Worker) {}))

app := fx.New(fxOpts...)
app.Run()

return nil
},
}

func init() {
RootCmd.AddCommand(workerCmd)
}
Loading

0 comments on commit 5671d0c

Please sign in to comment.