| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package registry
- import (
- "context"
- "reflect"
- "sort"
- )
- type Descriptor struct {
- Name string
- Instance Service
- InitPriority Priority
- }
- var services []*Descriptor
- func RegisterService(instance Service) {
- services = append(services, &Descriptor{
- Name: reflect.TypeOf(instance).Elem().Name(),
- Instance: instance,
- InitPriority: Low,
- })
- }
- func Register(descriptor *Descriptor) {
- services = append(services, descriptor)
- }
- func GetServices() []*Descriptor {
- sort.Slice(services, func(i, j int) bool {
- return services[i].InitPriority > services[j].InitPriority
- })
- return services
- }
- type Service interface {
- Init() error
- }
- // Useful for alerting service
- type CanBeDisabled interface {
- IsDisabled() bool
- }
- type BackgroundService interface {
- Run(ctx context.Context) error
- }
- type HasInitPriority interface {
- GetInitPriority() Priority
- }
- func IsDisabled(srv Service) bool {
- canBeDisabled, ok := srv.(CanBeDisabled)
- return ok && canBeDisabled.IsDisabled()
- }
- type Priority int
- const (
- High Priority = 100
- Low Priority = 0
- )
|