• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pace / bricks / 11250208184

09 Oct 2024 07:25AM UTC coverage: 57.466% (-13.7%) from 71.177%
11250208184

push

github

web-flow
Merge pull request #380 from pace/sentry-tracing-poc

tracing: replace Jaeger with Sentry

140 of 206 new or added lines in 19 files covered. (67.96%)

3 existing lines in 3 files now uncovered.

5515 of 9597 relevant lines covered (57.47%)

21.77 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/backend/couchdb/db.go
1
// Copyright © 2021 by PACE Telematics GmbH. All rights reserved.
2

3
package couchdb
4

5
import (
6
        "context"
7

8
        "github.com/caarlos0/env/v10"
9
        "github.com/go-kivik/couchdb/v3"
10
        kivik "github.com/go-kivik/kivik/v3"
11

12
        "github.com/pace/bricks/http/transport"
13
        "github.com/pace/bricks/maintenance/health/servicehealthcheck"
14
        "github.com/pace/bricks/maintenance/log"
15
)
16

17
func DefaultDatabase() (*kivik.DB, error) {
×
18
        return Database("")
×
19
}
×
20

21
func Database(name string) (*kivik.DB, error) {
×
22
        ctx := log.WithContext(context.Background())
×
23

×
24
        cfg, err := ParseConfig()
×
25
        if err != nil {
×
26
                return nil, err
×
27
        }
×
28
        // Primary client+db
29
        _, db, err := clientAndDB(ctx, name, cfg)
×
30
        if err != nil {
×
31
                return nil, err
×
32
        }
×
33

34
        // Secondary (healthcheck) client+db
35
        healthCheckClient, healthCheckDB, err := clientAndDB(ctx, name, cfg)
×
36
        if err != nil {
×
37
                return nil, err
×
38
        }
×
39

40
        if !cfg.DisableHealthCheck {
×
41
                servicehealthcheck.RegisterHealthCheck("couchdb("+name+")", &HealthCheck{
×
42
                        Name:   name,
×
43
                        Client: healthCheckClient,
×
44
                        DB:     healthCheckDB,
×
45
                        Config: cfg,
×
46
                })
×
47
        }
×
48

49
        return db, nil
×
50
}
51

52
func clientAndDB(ctx context.Context, dbName string, cfg *Config) (*kivik.Client, *kivik.DB, error) {
×
53
        client, err := Client(cfg)
×
54
        if err != nil {
×
55
                return nil, nil, err
×
56
        }
×
57

58
        // use default db
59
        if dbName == "" {
×
60
                dbName = cfg.Database
×
61
        }
×
62

63
        db := client.DB(ctx, dbName, nil)
×
64
        if db.Err() != nil {
×
65
                return nil, nil, db.Err()
×
66
        }
×
67
        return client, db, err
×
68
}
69

70
func Client(cfg *Config) (*kivik.Client, error) {
×
71
        ctx := log.WithContext(context.Background())
×
72

×
73
        client, err := kivik.New("couch", cfg.URL)
×
74
        if err != nil {
×
75
                return nil, err
×
76
        }
×
77
        rts := []transport.ChainableRoundTripper{
×
78
                &AuthTransport{
×
79
                        Username: cfg.User,
×
80
                        Password: cfg.Password,
×
81
                },
×
NEW
82
                &transport.TracingRoundTripper{},
×
83
                transport.NewDumpRoundTripperEnv(),
×
84
        }
×
85
        if !cfg.DisableRequestLogging {
×
86
                rts = append(rts, &transport.LoggingRoundTripper{})
×
87
        }
×
88
        chain := transport.Chain(rts...)
×
89
        tr := couchdb.SetTransport(chain)
×
90
        err = client.Authenticate(ctx, tr)
×
91
        if err != nil {
×
92
                return nil, err
×
93
        }
×
94

95
        return client, nil
×
96
}
97

98
func ParseConfig() (*Config, error) {
×
99
        var cfg Config
×
100
        err := env.Parse(&cfg)
×
101
        if err != nil {
×
102
                return nil, err
×
103
        }
×
104
        return &cfg, nil
×
105
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc