fix golint issues in core/service (#512)
This commit is contained in:
@@ -10,12 +10,17 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
DevMode = "dev"
|
// DevMode means development mode.
|
||||||
|
DevMode = "dev"
|
||||||
|
// TestMode means test mode.
|
||||||
TestMode = "test"
|
TestMode = "test"
|
||||||
PreMode = "pre"
|
// PreMode means pre-release mode.
|
||||||
ProMode = "pro"
|
PreMode = "pre"
|
||||||
|
// ProMode means production mode.
|
||||||
|
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{
|
||||||
|
|||||||
Reference in New Issue
Block a user