fix golint issues in core/service (#512)

master
Kevin Wan 4 years ago committed by GitHub
parent 4bd4981bfb
commit 904d168f18
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -10,12 +10,17 @@ import (
) )
const ( const (
// DevMode means development mode.
DevMode = "dev" DevMode = "dev"
// TestMode means test mode.
TestMode = "test" TestMode = "test"
// PreMode means pre-release mode.
PreMode = "pre" PreMode = "pre"
// ProMode means production mode.
ProMode = "pro" ProMode = "pro"
) )
// A ServiceConf is a service config.
type ServiceConf struct { type ServiceConf struct {
Name string Name string
Log logx.LogConf Log logx.LogConf
@ -24,12 +29,14 @@ type ServiceConf struct {
Prometheus prometheus.Config `json:",optional"` Prometheus prometheus.Config `json:",optional"`
} }
// MustSetUp sets up the service, exits on error.
func (sc ServiceConf) MustSetUp() { func (sc ServiceConf) MustSetUp() {
if err := sc.SetUp(); err != nil { if err := sc.SetUp(); err != nil {
log.Fatal(err) log.Fatal(err)
} }
} }
// SetUp sets up the service.
func (sc ServiceConf) SetUp() error { func (sc ServiceConf) SetUp() error {
if len(sc.Log.ServiceName) == 0 { if len(sc.Log.ServiceName) == 0 {
sc.Log.ServiceName = sc.Name sc.Log.ServiceName = sc.Name

@ -9,39 +9,45 @@ import (
) )
type ( type (
// Starter is the interface wraps the Start method.
Starter interface { Starter interface {
Start() Start()
} }
// Stopper is the interface wraps the Stop method.
Stopper interface { Stopper interface {
Stop() Stop()
} }
// Service is the interface that groups Start and Stop methods.
Service interface { Service interface {
Starter Starter
Stopper Stopper
} }
ServiceGroup struct { // A Group is a group of services.
Group struct {
services []Service services []Service
stopOnce func() stopOnce func()
} }
) )
func NewServiceGroup() *ServiceGroup { // NewGroup returns a Group.
sg := new(ServiceGroup) func NewGroup() *Group {
sg := new(Group)
sg.stopOnce = syncx.Once(sg.doStop) sg.stopOnce = syncx.Once(sg.doStop)
return sg return sg
} }
func (sg *ServiceGroup) Add(service Service) { // Add adds service into sg.
func (sg *Group) Add(service Service) {
sg.services = append(sg.services, service) sg.services = append(sg.services, service)
} }
// Start starts the ServiceGroup. // Start starts the Group.
// There should not be any logic code after calling this method, because this method is a blocking one. // There should not be any logic code after calling this method, because this method is a blocking one.
// Also, quitting this method will close the logx output. // Also, quitting this method will close the logx output.
func (sg *ServiceGroup) Start() { func (sg *Group) Start() {
proc.AddShutdownListener(func() { proc.AddShutdownListener(func() {
log.Println("Shutting down...") log.Println("Shutting down...")
sg.stopOnce() sg.stopOnce()
@ -50,11 +56,12 @@ func (sg *ServiceGroup) Start() {
sg.doStart() sg.doStart()
} }
func (sg *ServiceGroup) Stop() { // Stop stops the Group.
func (sg *Group) Stop() {
sg.stopOnce() sg.stopOnce()
} }
func (sg *ServiceGroup) doStart() { func (sg *Group) doStart() {
routineGroup := threading.NewRoutineGroup() routineGroup := threading.NewRoutineGroup()
for i := range sg.services { for i := range sg.services {
@ -67,18 +74,20 @@ func (sg *ServiceGroup) doStart() {
routineGroup.Wait() routineGroup.Wait()
} }
func (sg *ServiceGroup) doStop() { func (sg *Group) doStop() {
for _, service := range sg.services { for _, service := range sg.services {
service.Stop() service.Stop()
} }
} }
// WithStart wraps a start func as a Service.
func WithStart(start func()) Service { func WithStart(start func()) Service {
return startOnlyService{ return startOnlyService{
start: start, start: start,
} }
} }
// WithStarter wraps a Starter as a Service.
func WithStarter(start Starter) Service { func WithStarter(start Starter) Service {
return starterOnlyService{ return starterOnlyService{
Starter: start, Starter: start,

@ -41,7 +41,7 @@ func TestServiceGroup(t *testing.T) {
multipliers := []int{2, 3, 5, 7} multipliers := []int{2, 3, 5, 7}
want := 1 want := 1
group := NewServiceGroup() group := NewGroup()
for _, multiplier := range multipliers { for _, multiplier := range multipliers {
want *= multiplier want *= multiplier
service := newMockedService(multiplier) service := newMockedService(multiplier)
@ -68,7 +68,7 @@ func TestServiceGroup_WithStart(t *testing.T) {
var wait sync.WaitGroup var wait sync.WaitGroup
var lock sync.Mutex var lock sync.Mutex
wait.Add(len(multipliers)) wait.Add(len(multipliers))
group := NewServiceGroup() group := NewGroup()
for _, multiplier := range multipliers { for _, multiplier := range multipliers {
var mul = multiplier var mul = multiplier
group.Add(WithStart(func() { group.Add(WithStart(func() {
@ -95,7 +95,7 @@ func TestServiceGroup_WithStarter(t *testing.T) {
var wait sync.WaitGroup var wait sync.WaitGroup
var lock sync.Mutex var lock sync.Mutex
wait.Add(len(multipliers)) wait.Add(len(multipliers))
group := NewServiceGroup() group := NewGroup()
for _, multiplier := range multipliers { for _, multiplier := range multipliers {
var mul = multiplier var mul = multiplier
group.Add(WithStarter(mockedStarter{ group.Add(WithStarter(mockedStarter{

Loading…
Cancel
Save