Last active
September 9, 2018 05:03
-
-
Save amsokol/46d5f4794c8d3b8122d93352ac074969 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package cmd | |
import ( | |
"context" | |
"database/sql" | |
"flag" | |
"fmt" | |
// mysql driver | |
_ "github.com/go-sql-driver/mysql" | |
"github.com/amsokol/go-grpc-http-rest-microservice-tutorial/pkg/protocol/grpc" | |
"github.com/amsokol/go-grpc-http-rest-microservice-tutorial/pkg/service/v1" | |
) | |
// Config is configuration for Server | |
type Config struct { | |
// gRPC server start parameters section | |
// gRPC is TCP port to listen by gRPC server | |
GRPCPort string | |
// DB Datastore parameters section | |
// DatastoreDBHost is host of database | |
DatastoreDBHost string | |
// DatastoreDBUser is username to connect to database | |
DatastoreDBUser string | |
// DatastoreDBPassword password to connect to database | |
DatastoreDBPassword string | |
// DatastoreDBSchema is schema of database | |
DatastoreDBSchema string | |
} | |
// RunServer runs gRPC server and HTTP gateway | |
func RunServer() error { | |
ctx := context.Background() | |
// get configuration | |
var cfg Config | |
flag.StringVar(&cfg.GRPCPort, "grpc-port", "", "gRPC port to bind") | |
flag.StringVar(&cfg.DatastoreDBHost, "db-host", "", "Database host") | |
flag.StringVar(&cfg.DatastoreDBUser, "db-user", "", "Database user") | |
flag.StringVar(&cfg.DatastoreDBPassword, "db-password", "", "Database password") | |
flag.StringVar(&cfg.DatastoreDBSchema, "db-schema", "", "Database schema") | |
flag.Parse() | |
if len(cfg.GRPCPort) == 0 { | |
return fmt.Errorf("invalid TCP port for gRPC server: '%s'", cfg.GRPCPort) | |
} | |
// add MySQL driver specific parameter to parse date/time | |
// Drop it for another database | |
param := "parseTime=true" | |
dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?%s", | |
cfg.DatastoreDBUser, | |
cfg.DatastoreDBPassword, | |
cfg.DatastoreDBHost, | |
cfg.DatastoreDBSchema, | |
param) | |
db, err := sql.Open("mysql", dsn) | |
if err != nil { | |
return fmt.Errorf("failed to open database: %v", err) | |
} | |
defer db.Close() | |
v1API := v1.NewToDoServiceServer(db) | |
return grpc.RunServer(ctx, v1API, cfg.GRPCPort) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment