feat(pkger): add stack foundation
parent
481ee1653d
commit
583e512451
|
@ -3,6 +3,7 @@ package pkger
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
|
||||||
"github.com/influxdata/influxdb"
|
"github.com/influxdata/influxdb"
|
||||||
"github.com/influxdata/influxdb/pkg/httpc"
|
"github.com/influxdata/influxdb/pkg/httpc"
|
||||||
|
@ -15,6 +16,10 @@ type HTTPRemoteService struct {
|
||||||
|
|
||||||
var _ SVC = (*HTTPRemoteService)(nil)
|
var _ SVC = (*HTTPRemoteService)(nil)
|
||||||
|
|
||||||
|
func (s *HTTPRemoteService) InitStack(ctx context.Context, orgID, userID influxdb.ID, urls ...url.URL) (Stack, error) {
|
||||||
|
panic("not implemented yet")
|
||||||
|
}
|
||||||
|
|
||||||
// CreatePkg will produce a pkg from the parameters provided.
|
// CreatePkg will produce a pkg from the parameters provided.
|
||||||
func (s *HTTPRemoteService) CreatePkg(ctx context.Context, setters ...CreatePkgSetFn) (*Pkg, error) {
|
func (s *HTTPRemoteService) CreatePkg(ctx context.Context, setters ...CreatePkgSetFn) (*Pkg, error) {
|
||||||
var opt CreateOpt
|
var opt CreateOpt
|
||||||
|
|
|
@ -475,6 +475,10 @@ type fakeSVC struct {
|
||||||
ApplyFn func(ctx context.Context, orgID, userID influxdb.ID, pkg *pkger.Pkg, opts ...pkger.ApplyOptFn) (pkger.Summary, error)
|
ApplyFn func(ctx context.Context, orgID, userID influxdb.ID, pkg *pkger.Pkg, opts ...pkger.ApplyOptFn) (pkger.Summary, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f *fakeSVC) InitStack(ctx context.Context, orgID, userID influxdb.ID, urls ...url.URL) (pkger.Stack, error) {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
func (f *fakeSVC) CreatePkg(ctx context.Context, setters ...pkger.CreatePkgSetFn) (*pkger.Pkg, error) {
|
func (f *fakeSVC) CreatePkg(ctx context.Context, setters ...pkger.CreatePkgSetFn) (*pkger.Pkg, error) {
|
||||||
panic("not implemented")
|
panic("not implemented")
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net/url"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
@ -17,8 +18,26 @@ import (
|
||||||
// APIVersion marks the current APIVersion for influx packages.
|
// APIVersion marks the current APIVersion for influx packages.
|
||||||
const APIVersion = "influxdata.com/v2alpha1"
|
const APIVersion = "influxdata.com/v2alpha1"
|
||||||
|
|
||||||
|
type (
|
||||||
|
Stack struct {
|
||||||
|
ID influxdb.ID
|
||||||
|
CreatedAt time.Time
|
||||||
|
UpdatedAt time.Time
|
||||||
|
URLS []url.URL
|
||||||
|
Resources []StackResource
|
||||||
|
}
|
||||||
|
|
||||||
|
StackResource struct {
|
||||||
|
APIVersion string
|
||||||
|
ID influxdb.ID
|
||||||
|
Kind Kind
|
||||||
|
Name string
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
// SVC is the packages service interface.
|
// SVC is the packages service interface.
|
||||||
type SVC interface {
|
type SVC interface {
|
||||||
|
InitStack(ctx context.Context, orgID, userID influxdb.ID, urls ...url.URL) (Stack, error)
|
||||||
CreatePkg(ctx context.Context, setters ...CreatePkgSetFn) (*Pkg, error)
|
CreatePkg(ctx context.Context, setters ...CreatePkgSetFn) (*Pkg, error)
|
||||||
DryRun(ctx context.Context, orgID, userID influxdb.ID, pkg *Pkg, opts ...ApplyOptFn) (Summary, Diff, error)
|
DryRun(ctx context.Context, orgID, userID influxdb.ID, pkg *Pkg, opts ...ApplyOptFn) (Summary, Diff, error)
|
||||||
Apply(ctx context.Context, orgID, userID influxdb.ID, pkg *Pkg, opts ...ApplyOptFn) (Summary, error)
|
Apply(ctx context.Context, orgID, userID influxdb.ID, pkg *Pkg, opts ...ApplyOptFn) (Summary, error)
|
||||||
|
@ -124,11 +143,24 @@ func WithVariableSVC(varSVC influxdb.VariableService) ServiceSetterFn {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Store interface {
|
||||||
|
CreateStack(ctx context.Context, orgID influxdb.ID, stack Stack) error
|
||||||
|
ReadStackByID(ctx context.Context, id influxdb.ID) (Stack, error)
|
||||||
|
UpdateStack(ctx context.Context, orgID influxdb.ID, stack Stack) error
|
||||||
|
DeleteStack(ctx context.Context, id influxdb.ID) error
|
||||||
|
}
|
||||||
|
|
||||||
// Service provides the pkger business logic including all the dependencies to make
|
// Service provides the pkger business logic including all the dependencies to make
|
||||||
// this resource sausage.
|
// this resource sausage.
|
||||||
type Service struct {
|
type Service struct {
|
||||||
log *zap.Logger
|
log *zap.Logger
|
||||||
|
|
||||||
|
// internal dependencies
|
||||||
|
idGen influxdb.IDGenerator
|
||||||
|
timeGen influxdb.TimeGenerator
|
||||||
|
store Store
|
||||||
|
|
||||||
|
// external service dependencies
|
||||||
bucketSVC influxdb.BucketService
|
bucketSVC influxdb.BucketService
|
||||||
checkSVC influxdb.CheckService
|
checkSVC influxdb.CheckService
|
||||||
dashSVC influxdb.DashboardService
|
dashSVC influxdb.DashboardService
|
||||||
|
@ -171,6 +203,12 @@ func NewService(opts ...ServiceSetterFn) *Service {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Service) InitStack(ctx context.Context, orgID, userID influxdb.ID, urls ...url.URL) (Stack, error) {
|
||||||
|
stack := Stack{
|
||||||
|
}
|
||||||
|
return stack, nil
|
||||||
|
}
|
||||||
|
|
||||||
type (
|
type (
|
||||||
// CreatePkgSetFn is a functional input for setting the pkg fields.
|
// CreatePkgSetFn is a functional input for setting the pkg fields.
|
||||||
CreatePkgSetFn func(opt *CreateOpt) error
|
CreatePkgSetFn func(opt *CreateOpt) error
|
||||||
|
|
|
@ -2,6 +2,7 @@ package pkger
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"net/url"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/influxdata/influxdb"
|
"github.com/influxdata/influxdb"
|
||||||
|
@ -25,6 +26,27 @@ func MWLogging(log *zap.Logger) SVCMiddleware {
|
||||||
|
|
||||||
var _ SVC = (*loggingMW)(nil)
|
var _ SVC = (*loggingMW)(nil)
|
||||||
|
|
||||||
|
func (s *loggingMW) InitStack(ctx context.Context, orgID, userID influxdb.ID, urls ...url.URL) (stack Stack, err error) {
|
||||||
|
defer func(start time.Time) {
|
||||||
|
if err != nil {
|
||||||
|
urlStrs := make([]string, 0, len(urls))
|
||||||
|
for _, u := range urls {
|
||||||
|
urlStrs = append(urlStrs, u.String())
|
||||||
|
}
|
||||||
|
s.logger.Error(
|
||||||
|
"failed to init stack",
|
||||||
|
zap.Error(err),
|
||||||
|
zap.Duration("took", time.Since(start)),
|
||||||
|
zap.Stringer("orgID", orgID),
|
||||||
|
zap.Stringer("userID", userID),
|
||||||
|
zap.Strings("urls", urlStrs),
|
||||||
|
)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}(time.Now())
|
||||||
|
return s.next.InitStack(ctx, orgID, userID, urls...)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *loggingMW) CreatePkg(ctx context.Context, setters ...CreatePkgSetFn) (pkg *Pkg, err error) {
|
func (s *loggingMW) CreatePkg(ctx context.Context, setters ...CreatePkgSetFn) (pkg *Pkg, err error) {
|
||||||
defer func(start time.Time) {
|
defer func(start time.Time) {
|
||||||
dur := zap.Duration("took", time.Since(start))
|
dur := zap.Duration("took", time.Since(start))
|
||||||
|
|
|
@ -2,6 +2,7 @@ package pkger
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"net/url"
|
||||||
|
|
||||||
"github.com/influxdata/influxdb"
|
"github.com/influxdata/influxdb"
|
||||||
"github.com/influxdata/influxdb/kit/metric"
|
"github.com/influxdata/influxdb/kit/metric"
|
||||||
|
@ -27,6 +28,12 @@ func MWMetrics(reg *prom.Registry) SVCMiddleware {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *mwMetrics) InitStack(ctx context.Context, orgID, userID influxdb.ID, urls ...url.URL) (Stack, error) {
|
||||||
|
rec := s.rec.Record("init_stack")
|
||||||
|
stack, err := s.next.InitStack(ctx, orgID, userID, urls...)
|
||||||
|
return stack, rec(err)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *mwMetrics) CreatePkg(ctx context.Context, setters ...CreatePkgSetFn) (*Pkg, error) {
|
func (s *mwMetrics) CreatePkg(ctx context.Context, setters ...CreatePkgSetFn) (*Pkg, error) {
|
||||||
rec := s.rec.Record("create_pkg")
|
rec := s.rec.Record("create_pkg")
|
||||||
pkg, err := s.next.CreatePkg(ctx, setters...)
|
pkg, err := s.next.CreatePkg(ctx, setters...)
|
||||||
|
|
|
@ -2,6 +2,7 @@ package pkger
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"net/url"
|
||||||
|
|
||||||
"github.com/influxdata/influxdb"
|
"github.com/influxdata/influxdb"
|
||||||
"github.com/influxdata/influxdb/kit/tracing"
|
"github.com/influxdata/influxdb/kit/tracing"
|
||||||
|
@ -20,6 +21,12 @@ func MWTracing() SVCMiddleware {
|
||||||
|
|
||||||
var _ SVC = (*traceMW)(nil)
|
var _ SVC = (*traceMW)(nil)
|
||||||
|
|
||||||
|
func (s *traceMW) InitStack(ctx context.Context, orgID, userID influxdb.ID, urls ...url.URL) (Stack, error) {
|
||||||
|
span, ctx := tracing.StartSpanFromContextWithOperationName(ctx, "InitStack")
|
||||||
|
defer span.Finish()
|
||||||
|
return s.next.InitStack(ctx, orgID, userID, urls...)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *traceMW) CreatePkg(ctx context.Context, setters ...CreatePkgSetFn) (pkg *Pkg, err error) {
|
func (s *traceMW) CreatePkg(ctx context.Context, setters ...CreatePkgSetFn) (pkg *Pkg, err error) {
|
||||||
span, ctx := tracing.StartSpanFromContextWithOperationName(ctx, "CreatePkg")
|
span, ctx := tracing.StartSpanFromContextWithOperationName(ctx, "CreatePkg")
|
||||||
defer span.Finish()
|
defer span.Finish()
|
||||||
|
|
Loading…
Reference in New Issue