Skip to content

Commit f4e9f40

Browse files
author
Laurie T. Malau
committed
Add request duration metric
1 parent 7aaea22 commit f4e9f40

File tree

4 files changed

+33
-19
lines changed

4 files changed

+33
-19
lines changed

components/public-api-server/middleware/prometheus.go

Lines changed: 0 additions & 17 deletions
This file was deleted.

components/public-api-server/pkg/proxy/conn.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
gitpod "github.com/gitpod-io/gitpod/gitpod-protocol"
1111
"github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus"
1212
"net/url"
13+
"time"
1314
)
1415

1516
type ServerConnectionPool interface {
@@ -26,6 +27,10 @@ type NoConnectionPool struct {
2627
func (p *NoConnectionPool) Get(ctx context.Context, token string) (gitpod.APIInterface, error) {
2728
logger := ctxlogrus.Extract(ctx)
2829

30+
start := time.Now()
31+
defer func() {
32+
ReportConnectionDuration(time.Since(start))
33+
}()
2934
server, err := gitpod.ConnectToServer(p.ServerAPI.String(), gitpod.ConnectToServerOpts{
3035
Context: ctx,
3136
Token: token,
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
2+
// Licensed under the GNU Affero General Public License (AGPL).
3+
// See License-AGPL.txt in the project root for license information.
4+
5+
package proxy
6+
7+
import (
8+
"github.com/prometheus/client_golang/prometheus"
9+
"time"
10+
)
11+
12+
func ReportConnectionDuration(d time.Duration) {
13+
ConnectionDurationHistogram.Observe(d.Seconds())
14+
}
15+
16+
var ConnectionDurationHistogram = prometheus.NewHistogram(prometheus.HistogramOpts{
17+
Namespace: "gitpod",
18+
Name: "grpc_connection_duration_seconds",
19+
Help: "Histogram of connection time in seconds",
20+
})

components/public-api-server/pkg/server/server.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,25 @@ import (
1212
"github.com/gitpod-io/gitpod/public-api-server/pkg/apiv1"
1313
"github.com/gitpod-io/gitpod/public-api-server/pkg/proxy"
1414
v1 "github.com/gitpod-io/gitpod/public-api/v1"
15+
"github.com/prometheus/client_golang/prometheus"
1516
"github.com/sirupsen/logrus"
1617
"net/http"
1718
)
1819

1920
func Start(logger *logrus.Entry, cfg Config) error {
21+
registry := prometheus.NewRegistry()
22+
2023
srv, err := baseserver.New("public_api_server",
2124
baseserver.WithLogger(logger),
2225
baseserver.WithHTTPPort(cfg.HTTPPort),
2326
baseserver.WithGRPCPort(cfg.GRPCPort),
27+
baseserver.WithMetricsRegistry(registry),
2428
)
2529
if err != nil {
2630
return fmt.Errorf("failed to initialize public api server: %w", err)
2731
}
2832

29-
if registerErr := register(srv, cfg); registerErr != nil {
33+
if registerErr := register(srv, cfg, registry); registerErr != nil {
3034
return fmt.Errorf("failed to register services: %w", registerErr)
3135
}
3236

@@ -37,7 +41,9 @@ func Start(logger *logrus.Entry, cfg Config) error {
3741
return nil
3842
}
3943

40-
func register(srv *baseserver.Server, cfg Config) error {
44+
func register(srv *baseserver.Server, cfg Config, registry *prometheus.Registry) error {
45+
registry.MustRegister(proxy.ConnectionDurationHistogram)
46+
4147
logger := log.New()
4248
m := middleware.NewLoggingMiddleware(logger)
4349
srv.HTTPMux().Handle("/", m(http.HandlerFunc(HelloWorldHandler)))

0 commit comments

Comments
 (0)