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

dharnitski / cc-hosts / 15355507828

30 May 2025 08:47PM UTC coverage: 65.332% (+2.6%) from 62.775%
15355507828

push

github

dharnitski
refactor NewSearcher

16 of 24 new or added lines in 3 files covered. (66.67%)

1 existing line in 1 file now uncovered.

669 of 1024 relevant lines covered (65.33%)

0.73 hits per line

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

0.0
/cmd/search_lambda/main.go
1
package main
2

3
import (
4
        "context"
5
        "encoding/json"
6
        "time"
7

8
        "github.com/aws/aws-lambda-go/events"
9
        "github.com/aws/aws-lambda-go/lambda"
10
        "github.com/aws/aws-sdk-go-v2/config"
11
        "github.com/dharnitski/cc-hosts/access/aws"
12
        "github.com/dharnitski/cc-hosts/edges"
13
        "github.com/dharnitski/cc-hosts/search"
14
        "github.com/dharnitski/cc-hosts/vertices"
15
)
16

17
var searcher *search.Searcher //nolint:gochecknoglobals
18

19
type Request struct {
20
        Domain string `json:"domain"`
21
}
22

23
// handler for basic lambda function.
24
func HandleRequest(ctx context.Context, event *Request) (*search.Result, error) {
×
25
        if event == nil {
×
26
                return &search.Result{}, nil
×
27
        }
×
28

29
        return searcher.GetTargets(ctx, event.Domain)
×
30
}
31

32
// handler for API Gateway proxy for lambda function.
33
func HandleGateway(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
×
34
        domain, ok := request.PathParameters["domain"]
×
35
        if !ok {
×
36
                return events.APIGatewayProxyResponse{
×
37
                        StatusCode: 400,
×
38
                        Body:       "Missing domain parameter in path",
×
39
                }, nil
×
40
        }
×
41

42
        response, err := searcher.GetTargets(ctx, domain)
×
43
        if err != nil {
×
44
                return events.APIGatewayProxyResponse{
×
45
                        StatusCode: 500,
×
46
                        Body:       err.Error(),
×
47
                }, err
×
48
        }
×
49

50
        jsonResponse, err := json.Marshal(response)
×
51
        if err != nil {
×
52
                return events.APIGatewayProxyResponse{
×
53
                        StatusCode: 500,
×
54
                        Body:       "Error marshalling response",
×
55
                }, err
×
56
        }
×
57

58
        return events.APIGatewayProxyResponse{
×
59
                StatusCode: 200,
×
60
                Headers:    map[string]string{"Content-Type": "application/json"},
×
61
                Body:       string(jsonResponse),
×
62
        }, nil
×
63
}
64

65
func createSearcher(ctx context.Context) (*search.Searcher, error) {
×
66
        cfg, err := config.LoadDefaultConfig(ctx)
×
67
        if err != nil {
×
68
                return nil, err
×
69
        }
×
70

71
        // folder is empty - expect offset files in the root of the bucket
72
        offsetsGetter := aws.New(cfg, aws.Bucket, "")
×
73
        edgesGetter := aws.New(cfg, aws.Bucket, edges.EdgesFolder)
×
74
        revEdgesGetter := aws.New(cfg, aws.Bucket, edges.EdgesReversedFolder)
×
75
        verticesGetter := aws.New(cfg, aws.Bucket, vertices.Folder)
×
76

×
NEW
77
        return search.NewSearcher(ctx, offsetsGetter, edgesGetter, revEdgesGetter, verticesGetter)
×
78
}
79

80
func main() {
×
81
        var err error
×
82

×
83
        ctx := context.Background()
×
84
        // short timeout to load offsets
×
85
        ctx, cancel := context.WithTimeout(ctx, 10*time.Second)
×
86
        defer cancel()
×
87

×
88
        searcher, err = createSearcher(ctx)
×
89
        if err != nil {
×
90
                panic(err)
×
91
        }
92

93
        lambda.Start(HandleGateway)
×
94
}
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

© 2026 Coveralls, Inc