Mise en marche de base de /v1/health avec pkg data

Ajouter data/

Ajouter data/ à Dockerfile

Ajouter flags pour server.port et server.documents.*

Ajouter viper

Ajouter example de config à examples/config/

Exécuter serveur sur port custom (8080 par défaut)

Retirer copyright notice de main.go

Cleanup dependencies (go get, go mod tidy)

Ajouter /v1/health

Ajouter container minio à docker-compose
This commit is contained in:
Victor Lacasse-Beaudoin 2023-04-21 16:41:50 -04:00
parent 4cec29abee
commit 28cc97dcee
8 changed files with 206 additions and 19 deletions

View file

@ -13,7 +13,9 @@ import (
"sort"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"git.agecem.com/agecem/agecem-org/data"
"git.agecem.com/agecem/agecem-org/public"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
@ -37,6 +39,34 @@ var serverCmd = &cobra.Command{
func init() {
rootCmd.AddCommand(serverCmd)
embedFS = public.GetEmbedFS()
// server.port - --server-port
serverCmd.Flags().Int("server-port", 8080, "Port to run the webserver on (config: server.port)")
viper.BindPFlag("server.port", serverCmd.Flags().Lookup("server-port"))
// server.documents.location - --server-documents-location
serverCmd.Flags().String("server-documents-location", "us-east", "Storage bucket location (config: server.documents.location)")
viper.BindPFlag("server.documents.location", serverCmd.Flags().Lookup("server-documents-location"))
// server.documents.endpoint - --server-documents-endpoint
serverCmd.Flags().String("server-documents-endpoint", "minio:9000", "Storage server endpoint (config: server.documents.endpoint)")
viper.BindPFlag("server.documents.endpoint", serverCmd.Flags().Lookup("server-documents-endpoint"))
// server.documents.access_key_id - --server-documents-access-key-id
serverCmd.Flags().String("server-documents-access-key-id", "", "Storage server access key id (config: server.documents.access_key_id)")
viper.BindPFlag("documents.accessKeyID", serverCmd.Flags().Lookup("documents-access-key-id"))
// server.documents.secret_access_key - --server-documents-secret-access-key
serverCmd.Flags().String("server-documents-secret-access-key", "", "Storage server secret access key (config: server.documents.secret_access_key)")
viper.BindPFlag("server.documents.secret_access_key", serverCmd.Flags().Lookup("server-documents-secret-access-key"))
// server.documents.use_ssl - --server-documents-use-ssl
serverCmd.Flags().Bool("server-documents-use-ssl", true, "Storage server SSL status (config: server.documents.use_ssl)")
viper.BindPFlag("server.documents.use_ssl", serverCmd.Flags().Lookup("server-documents-use-ssl"))
// server.documents.buckets - --server-documents-buckets
serverCmd.Flags().StringSlice("server-documents-buckets", nil, "Buckets that are allowed to be accessed by the API (config: server.documents.buckets)")
viper.BindPFlag("server.documents.buckets", serverCmd.Flags().Lookup("server-documents-buckets"))
}
func RunServer() {
@ -54,6 +84,8 @@ func RunServer() {
e.GET("/v1", handleV1)
e.GET("/v1/health", handleV1Health)
// Static Routes
e.GET("/static/general.css", handleStaticCSSGeneral)
@ -78,7 +110,8 @@ func RunServer() {
e.GET("/formulaires", handleFormulaires)
e.Logger.Fatal(e.Start(":8080"))
e.Logger.Fatal(e.Start(
fmt.Sprintf(":%d", viper.GetInt("server.port"))))
}
func (t *Template) Render(w io.Writer, name string, data interface{}, c echo.Context) error {
@ -95,6 +128,38 @@ func handleV1(c echo.Context) error {
return c.JSON(http.StatusOK, routes)
}
// handleV1Health affiche l'état de connexion à la base de données
func handleV1Health(c echo.Context) error {
documents_buckets := viper.GetStringSlice("server.documents.buckets")
documents_endpoint := viper.GetString("server.documents.endpoint")
documents_access_key_id := viper.GetString("server.documents.access_key_id")
documents_secret_access_key := viper.GetString("server.documents.secret_access_key")
documents_use_ssl := viper.GetBool("server.documents.use_ssl")
client, err := data.NewClient(documents_buckets, documents_endpoint, documents_access_key_id, documents_secret_access_key, documents_use_ssl)
if err != nil {
return c.JSON(http.StatusInternalServerError, err)
}
if len(documents_buckets) == 0 {
return c.JSON(http.StatusOK, nil)
}
message := make(map[string]interface{}, len(documents_buckets))
for _, bucket := range documents_buckets {
exists, err := client.BucketExists(bucket)
if err != nil {
return c.JSON(http.StatusInternalServerError, err)
}
message[bucket] = exists
}
return c.JSON(http.StatusOK, message)
}
// HTML Handlers
func handleIndex(c echo.Context) error {