mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-06-02 13:39:55 +00:00
feat: added middlewares
Signed-off-by: Mateusz Urbanek <mateusz.urbanek.98@gmail.com>
This commit is contained in:
parent
111c5dfaed
commit
180a131f3b
|
@ -29,6 +29,7 @@ import (
|
|||
backend "go.woodpecker-ci.org/woodpecker/v2/pipeline/backend/types"
|
||||
"go.woodpecker-ci.org/woodpecker/v2/pipeline/rpc"
|
||||
"go.woodpecker-ci.org/woodpecker/v2/pipeline/rpc/proto"
|
||||
"go.woodpecker-ci.org/woodpecker/v2/pipeline/rpc/traced"
|
||||
)
|
||||
|
||||
// Set grpc version on compile time to compare against server version response.
|
||||
|
@ -44,7 +45,7 @@ func NewGrpcClient(conn *grpc.ClientConn) rpc.Peer {
|
|||
client := new(client)
|
||||
client.client = proto.NewWoodpeckerClient(conn)
|
||||
client.conn = conn
|
||||
return client
|
||||
return traced.NewPeerWithTracing(client, "grpc-peer")
|
||||
}
|
||||
|
||||
func (c *client) Close() error {
|
||||
|
|
|
@ -31,6 +31,7 @@ import (
|
|||
"github.com/rs/zerolog"
|
||||
"github.com/rs/zerolog/log"
|
||||
"github.com/urfave/cli/v2"
|
||||
"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
|
||||
"golang.org/x/sync/errgroup"
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/keepalive"
|
||||
|
@ -117,6 +118,7 @@ func run(c *cli.Context) error {
|
|||
|
||||
authorizer := woodpeckerGrpcServer.NewAuthorizer(jwtManager)
|
||||
grpcServer := grpc.NewServer(
|
||||
grpc.StatsHandler(otelgrpc.NewServerHandler()),
|
||||
grpc.StreamInterceptor(authorizer.StreamInterceptor),
|
||||
grpc.UnaryInterceptor(authorizer.UnaryInterceptor),
|
||||
grpc.KeepaliveEnforcementPolicy(keepalive.EnforcementPolicy{
|
||||
|
|
|
@ -29,7 +29,9 @@ import (
|
|||
|
||||
"go.woodpecker-ci.org/woodpecker/v2/server"
|
||||
"go.woodpecker-ci.org/woodpecker/v2/server/cache"
|
||||
tracedcache "go.woodpecker-ci.org/woodpecker/v2/server/cache/traced"
|
||||
"go.woodpecker-ci.org/woodpecker/v2/server/queue"
|
||||
tracedqueue "go.woodpecker-ci.org/woodpecker/v2/server/queue/traced"
|
||||
"go.woodpecker-ci.org/woodpecker/v2/server/store"
|
||||
"go.woodpecker-ci.org/woodpecker/v2/server/store/datastore"
|
||||
)
|
||||
|
@ -88,11 +90,17 @@ func checkSqliteFileExist(path string) error {
|
|||
}
|
||||
|
||||
func setupQueue(c *cli.Context, s store.Store) queue.Queue {
|
||||
return queue.WithTaskStore(queue.New(c.Context), s)
|
||||
return tracedqueue.NewQueueWithTracing(
|
||||
queue.WithTaskStore(queue.New(c.Context), s),
|
||||
"server-queue",
|
||||
)
|
||||
}
|
||||
|
||||
func setupMembershipService(_ *cli.Context, _store store.Store) cache.MembershipService {
|
||||
return cache.NewMembershipService(_store)
|
||||
return tracedcache.NewMembershipServiceWithTracing(
|
||||
cache.NewMembershipService(_store),
|
||||
"server-membership-service",
|
||||
)
|
||||
}
|
||||
|
||||
func setupMetrics(g *errgroup.Group, _store store.Store) {
|
||||
|
|
|
@ -19,9 +19,19 @@ import (
|
|||
"fmt"
|
||||
|
||||
"go.woodpecker-ci.org/woodpecker/v2/pipeline/backend/types"
|
||||
"go.woodpecker-ci.org/woodpecker/v2/pipeline/backend/types/traced"
|
||||
)
|
||||
|
||||
func FindBackend(ctx context.Context, backends []types.Backend, backendName string) (types.Backend, error) {
|
||||
b, err := findBackend(ctx, backends, backendName)
|
||||
if err != nil {
|
||||
return b, err
|
||||
}
|
||||
|
||||
return traced.NewBackendWithTracing(b, backendName), nil
|
||||
}
|
||||
|
||||
func findBackend(ctx context.Context, backends []types.Backend, backendName string) (types.Backend, error) {
|
||||
if backendName == "auto-detect" {
|
||||
for _, engine := range backends {
|
||||
if engine.IsAvailable(ctx) {
|
||||
|
|
|
@ -23,6 +23,7 @@ import (
|
|||
"net/http"
|
||||
"net/url"
|
||||
|
||||
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
|
||||
"golang.org/x/oauth2"
|
||||
"golang.org/x/oauth2/bitbucket"
|
||||
|
||||
|
@ -63,6 +64,8 @@ type Client struct {
|
|||
}
|
||||
|
||||
func NewClient(ctx context.Context, url string, client *http.Client) *Client {
|
||||
client.Transport = otelhttp.NewTransport(client.Transport)
|
||||
|
||||
return &Client{
|
||||
Client: client,
|
||||
base: url,
|
||||
|
|
|
@ -21,6 +21,7 @@ import (
|
|||
"net/http"
|
||||
"strings"
|
||||
|
||||
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
|
||||
"golang.org/x/oauth2"
|
||||
)
|
||||
|
||||
|
@ -34,8 +35,11 @@ type Client struct {
|
|||
}
|
||||
|
||||
func NewClientWithToken(ctx context.Context, ts oauth2.TokenSource, url string) *Client {
|
||||
client := oauth2.NewClient(ctx, ts)
|
||||
client.Transport = otelhttp.NewTransport(client.Transport)
|
||||
|
||||
return &Client{
|
||||
client: oauth2.NewClient(ctx, ts),
|
||||
client: client,
|
||||
base: url,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ import (
|
|||
|
||||
"code.gitea.io/sdk/gitea"
|
||||
"github.com/rs/zerolog/log"
|
||||
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
|
||||
"golang.org/x/oauth2"
|
||||
|
||||
"go.woodpecker-ci.org/woodpecker/v2/server"
|
||||
|
@ -591,6 +592,7 @@ func (c *Gitea) newClientToken(ctx context.Context, token string) (*gitea.Client
|
|||
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
|
||||
}
|
||||
}
|
||||
httpClient.Transport = otelhttp.NewTransport(httpClient.Transport)
|
||||
client, err := gitea.NewClient(c.url, gitea.SetToken(token), gitea.SetHTTPClient(httpClient), gitea.SetContext(ctx))
|
||||
if err != nil &&
|
||||
(errors.Is(err, &gitea.ErrUnknownVersion{}) || strings.Contains(err.Error(), "Malformed version")) {
|
||||
|
|
|
@ -28,6 +28,7 @@ import (
|
|||
|
||||
"github.com/google/go-github/v61/github"
|
||||
"github.com/rs/zerolog/log"
|
||||
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
|
||||
"golang.org/x/oauth2"
|
||||
|
||||
"go.woodpecker-ci.org/woodpecker/v2/server"
|
||||
|
@ -400,12 +401,12 @@ func (c *client) newContext(ctx context.Context) context.Context {
|
|||
return ctx
|
||||
}
|
||||
return context.WithValue(ctx, oauth2.HTTPClient, &http.Client{
|
||||
Transport: &http.Transport{
|
||||
Transport: otelhttp.NewTransport(&http.Transport{
|
||||
Proxy: http.ProxyFromEnvironment,
|
||||
TLSClientConfig: &tls.Config{
|
||||
InsecureSkipVerify: true,
|
||||
},
|
||||
},
|
||||
}),
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ import (
|
|||
"net/http"
|
||||
|
||||
"github.com/xanzy/go-gitlab"
|
||||
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -30,10 +31,10 @@ const (
|
|||
// client using the provided OAuth token.
|
||||
func newClient(url, accessToken string, skipVerify bool) (*gitlab.Client, error) {
|
||||
return gitlab.NewOAuthClient(accessToken, gitlab.WithBaseURL(url), gitlab.WithHTTPClient(&http.Client{
|
||||
Transport: &http.Transport{
|
||||
Transport: otelhttp.NewTransport(&http.Transport{
|
||||
TLSClientConfig: &tls.Config{InsecureSkipVerify: skipVerify},
|
||||
Proxy: http.ProxyFromEnvironment,
|
||||
},
|
||||
}),
|
||||
}))
|
||||
}
|
||||
|
||||
|
|
|
@ -14,10 +14,24 @@ import (
|
|||
"go.woodpecker-ci.org/woodpecker/v2/server/forge/gitea"
|
||||
"go.woodpecker-ci.org/woodpecker/v2/server/forge/github"
|
||||
"go.woodpecker-ci.org/woodpecker/v2/server/forge/gitlab"
|
||||
"go.woodpecker-ci.org/woodpecker/v2/server/forge/traced"
|
||||
"go.woodpecker-ci.org/woodpecker/v2/server/model"
|
||||
)
|
||||
|
||||
func Forge(forge *model.Forge) (forge.Forge, error) {
|
||||
func Forge(_forge *model.Forge) (forge.Forge, error) {
|
||||
f, err := new(_forge)
|
||||
if err != nil {
|
||||
return f, err
|
||||
}
|
||||
|
||||
if fr, ok := f.(traced.ForgeRefresher); ok {
|
||||
return traced.NewForgeRefresherWithTracing(fr, string(_forge.Type)), nil
|
||||
}
|
||||
|
||||
return traced.NewForgeWithTracing(f, string(_forge.Type)), nil
|
||||
}
|
||||
|
||||
func new(forge *model.Forge) (forge.Forge, error) {
|
||||
switch forge.Type {
|
||||
case model.ForgeTypeAddon:
|
||||
return setupAddon(forge)
|
||||
|
|
|
@ -26,6 +26,7 @@ import (
|
|||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/rs/zerolog/log"
|
||||
"go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin"
|
||||
|
||||
"go.woodpecker-ci.org/woodpecker/v2/server"
|
||||
"go.woodpecker-ci.org/woodpecker/v2/web"
|
||||
|
@ -45,6 +46,9 @@ func (f *prefixFS) Open(name string) (http.File, error) {
|
|||
// New returns a gin engine to serve the web frontend.
|
||||
func New() (*gin.Engine, error) {
|
||||
e := gin.New()
|
||||
|
||||
e.Use(otelgin.Middleware("woodpecker"))
|
||||
|
||||
var err error
|
||||
indexHTML, err = parseIndex()
|
||||
if err != nil {
|
||||
|
|
Loading…
Reference in a new issue