HW13 WIP 008
parent
6355c4138e
commit
ac5ab7c6ed
|
@ -3,7 +3,6 @@ package main
|
||||||
import (
|
import (
|
||||||
"flag"
|
"flag"
|
||||||
oslog "log"
|
oslog "log"
|
||||||
"net"
|
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
|
|
||||||
|
@ -14,7 +13,6 @@ import (
|
||||||
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/internal/logger"
|
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/internal/logger"
|
||||||
internalhttp "github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/internal/server/http"
|
internalhttp "github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/internal/server/http"
|
||||||
store "github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/internal/storage"
|
store "github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/internal/storage"
|
||||||
googrpc "google.golang.org/grpc"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var configFile string
|
var configFile string
|
||||||
|
@ -46,32 +44,27 @@ func main() {
|
||||||
calendar := app.New(log, st)
|
calendar := app.New(log, st)
|
||||||
|
|
||||||
serverHTTP := internalhttp.NewServer(calendar, conf.Server.Address, conf.Server.Port)
|
serverHTTP := internalhttp.NewServer(calendar, conf.Server.Address, conf.Server.Port)
|
||||||
|
|
||||||
listnGrpc, err := net.Listen("tcp", net.JoinHostPort(conf.Grpc.Address, conf.Grpc.Port))
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("failed to listen %v", err)
|
|
||||||
}
|
|
||||||
serverGRPC := googrpc.NewServer()
|
|
||||||
grpc.RegisterGrpcServer(serverGRPC, grpc.Service{App: *calendar})
|
|
||||||
if err := serverGRPC.Serve(listnGrpc); err != nil {
|
|
||||||
log.Errorf("failed to start grpc server: " + err.Error())
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
signals := make(chan os.Signal, 1)
|
|
||||||
signal.Notify(signals)
|
|
||||||
|
|
||||||
<-signals
|
|
||||||
signal.Stop(signals)
|
|
||||||
|
|
||||||
if err := serverHTTP.Stop(); err != nil {
|
|
||||||
log.Errorf("failed to stop http server: " + err.Error())
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
if err := serverHTTP.Start(); err != nil {
|
if err := serverHTTP.Start(); err != nil {
|
||||||
log.Errorf("failed to start http server: " + err.Error())
|
log.Errorf("failed to start http server: " + err.Error())
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
serverGRPC := grpc.New(calendar)
|
||||||
|
go func() {
|
||||||
|
if err := serverGRPC.Start(conf); err != nil {
|
||||||
|
log.Errorf("failed to start grpc server: " + err.Error())
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
signals := make(chan os.Signal, 1)
|
||||||
|
signal.Notify(signals)
|
||||||
|
<-signals
|
||||||
|
signal.Stop(signals)
|
||||||
|
serverGRPC.Stop()
|
||||||
|
if err := serverHTTP.Stop(); err != nil {
|
||||||
|
log.Errorf("failed to stop http server: " + err.Error())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,13 +5,13 @@ go 1.14
|
||||||
require (
|
require (
|
||||||
github.com/BurntSushi/toml v0.3.1
|
github.com/BurntSushi/toml v0.3.1
|
||||||
github.com/amitrai48/logger v0.0.0-20190214092904-448001c055ec
|
github.com/amitrai48/logger v0.0.0-20190214092904-448001c055ec
|
||||||
github.com/daixiang0/gci v0.2.4 // indirect
|
|
||||||
github.com/go-sql-driver/mysql v1.5.0
|
github.com/go-sql-driver/mysql v1.5.0
|
||||||
github.com/golang/protobuf v1.4.2
|
github.com/golang/protobuf v1.4.2
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.15.0
|
github.com/grpc-ecosystem/grpc-gateway v1.15.0
|
||||||
github.com/stretchr/testify v1.4.0
|
github.com/stretchr/testify v1.4.0
|
||||||
go.uber.org/zap v1.15.0 // indirect
|
go.uber.org/zap v1.15.0 // indirect
|
||||||
golang.org/x/net v0.0.0-20200625001655-4c5254603344
|
golang.org/x/net v0.0.0-20200625001655-4c5254603344
|
||||||
|
golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305 // indirect
|
||||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013
|
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013
|
||||||
google.golang.org/grpc v1.32.0
|
google.golang.org/grpc v1.32.0
|
||||||
google.golang.org/protobuf v1.25.0 // indirect
|
google.golang.org/protobuf v1.25.0 // indirect
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package grpc
|
package grpc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/golang/protobuf/ptypes"
|
"github.com/golang/protobuf/ptypes"
|
||||||
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/internal/storage/event"
|
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/internal/storage/event"
|
||||||
)
|
)
|
||||||
|
@ -38,3 +40,22 @@ func pbeventWitID2eventAndID(pbe *EventWthID) (id event.ID, evt event.Event, err
|
||||||
}
|
}
|
||||||
return event.ID(pbe.ID), evt, nil
|
return event.ID(pbe.ID), evt, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func evtMap2pbEventList(evtMap map[event.ID]event.Event) (*EventList, error) {
|
||||||
|
var events = &EventList{}
|
||||||
|
var err error
|
||||||
|
for k, v := range evtMap {
|
||||||
|
evt := Event{ID: int64(k), Title: v.Title, Latency: ptypes.DurationProto(v.Latency), Note: v.Note, UserID: v.UserID, NotifyTime: ptypes.DurationProto(v.NotifyTime)}
|
||||||
|
evt.Date, err = ptypes.TimestampProto(v.Date)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
events.Events = append(events.Events, &evt)
|
||||||
|
}
|
||||||
|
return events, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func pbDate2Time(e *Date) (start time.Time, qrange string, err error) {
|
||||||
|
date, err := ptypes.Timestamp(e.Date)
|
||||||
|
return date, string(e.Range), err
|
||||||
|
}
|
||||||
|
|
|
@ -2,9 +2,11 @@ package grpc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
|
|
||||||
"github.com/golang/protobuf/ptypes/empty"
|
"github.com/golang/protobuf/ptypes/empty"
|
||||||
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/internal/app"
|
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/internal/app"
|
||||||
|
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/internal/storage/event"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Service struct {
|
type Service struct {
|
||||||
|
@ -33,18 +35,38 @@ func (s Service) Update(ctx context.Context, e *EventWthID) (*empty.Empty, error
|
||||||
return nil, s.App.Storage.Update(cid, ce)
|
return nil, s.App.Storage.Update(cid, ce)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Implement
|
||||||
func (s Service) Delete(ctx context.Context, e *EventID) (*empty.Empty, error) {
|
func (s Service) Delete(ctx context.Context, e *EventID) (*empty.Empty, error) {
|
||||||
return nil, nil
|
return nil, s.App.Storage.Delete(event.ID(e.ID))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Implement
|
||||||
func (s Service) List(ctx context.Context, e *empty.Empty) (*EventList, error) {
|
func (s Service) List(ctx context.Context, e *empty.Empty) (*EventList, error) {
|
||||||
return nil, nil
|
tmp, err := s.App.Storage.List()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return evtMap2pbEventList(tmp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Implement
|
||||||
func (s Service) GetByID(ctx context.Context, e *EventID) (*EventList, error) {
|
func (s Service) GetByID(ctx context.Context, e *EventID) (*EventList, error) {
|
||||||
return nil, nil
|
tmp, ok := s.App.Storage.GetByID(event.ID(e.ID))
|
||||||
|
if !ok {
|
||||||
|
return nil, errors.New("event not found")
|
||||||
|
}
|
||||||
|
return evtMap2pbEventList(map[event.ID]event.Event{event.ID(e.ID): tmp})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Implement
|
||||||
func (s Service) GetByDate(ctx context.Context, e *Date) (*EventList, error) {
|
func (s Service) GetByDate(ctx context.Context, e *Date) (*EventList, error) {
|
||||||
return nil, nil
|
d, r, err := pbDate2Time(e)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
tmp, err := s.App.Storage.GetByDate(d, r)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return evtMap2pbEventList(tmp)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
package grpc
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net"
|
||||||
|
|
||||||
|
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/internal/app"
|
||||||
|
"github.com/tiburon-777/HW_OTUS/hw12_13_14_15_calendar/internal/config"
|
||||||
|
googrpc "google.golang.org/grpc"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Server struct {
|
||||||
|
s *googrpc.Server
|
||||||
|
app app.App
|
||||||
|
}
|
||||||
|
|
||||||
|
func New(app *app.App) Server {
|
||||||
|
return Server{s: googrpc.NewServer(), app: *app}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Server) Start(conf config.Config) error {
|
||||||
|
s.app.Logger.Infof("GRPC server starting")
|
||||||
|
listnGrpc, err := net.Listen("tcp", net.JoinHostPort(conf.Grpc.Address, conf.Grpc.Port))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return s.s.Serve(listnGrpc)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Server) Stop() {
|
||||||
|
s.s.GracefulStop()
|
||||||
|
}
|
Loading…
Reference in New Issue