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

Smirl / steampipe-plugin-cortex / 15168027867

21 May 2025 04:53PM UTC coverage: 64.286% (-8.9%) from 73.233%
15168027867

Pull #37

github

web-flow
Merge a92a4ea91 into 18355eef5
Pull Request #37: init package attempt

0 of 65 new or added lines in 1 file covered. (0.0%)

342 of 532 relevant lines covered (64.29%)

0.69 hits per line

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

0.0
/cortex/table_cortex_package.go
1
package cortex
2

3
import (
4
        "context"
5
        "fmt"
6

7
        "github.com/imroc/req/v3"
8
        "github.com/turbot/steampipe-plugin-sdk/v5/grpc/proto"
9
        "github.com/turbot/steampipe-plugin-sdk/v5/plugin"
10
)
11

12
type Package struct {
13
        DateCreated string `yaml:"dateCreated"`
14
        Id          string `yaml:"id"`
15
        Name        string `yaml:"name"`
16
        PackageType string `yaml:"packageType"`
17
        Version     string `yaml:"version"`
18
}
19

20
type CortexPackageRow struct {
21
        PackageTag  string
22
        PackageType string
23
        Name        string
24
        Version     string
25
}
26

NEW
27
func tableCortexPackage() *plugin.Table {
×
NEW
28
        return &plugin.Table{
×
NEW
29
                Name:        "cortex_packages",
×
NEW
30
                Description: "Cortex list package api.",
×
NEW
31
                List: &plugin.ListConfig{
×
NEW
32
                        Hydrate: listPackagesHydrator,
×
NEW
33
                        KeyColumns: []*plugin.KeyColumn{
×
NEW
34
                                {Name: "package_tag", Require: plugin.Required},
×
NEW
35
                        },
×
NEW
36
                },
×
NEW
37
                Columns: []*plugin.Column{
×
NEW
38
                        {Name: "package_tag", Type: proto.ColumnType_STRING, Description: "Package Tag."},
×
NEW
39
                        {Name: "package_type", Type: proto.ColumnType_STRING, Description: "Package Type."},
×
NEW
40
                        {Name: "name", Type: proto.ColumnType_STRING, Description: "Package Name."},
×
NEW
41
                        {Name: "version", Type: proto.ColumnType_STRING, Description: "Version."},
×
NEW
42
                },
×
NEW
43
        }
×
NEW
44
}
×
45

NEW
46
func listPackagesHydrator(ctx context.Context, d *plugin.QueryData, h *plugin.HydrateData) (interface{}, error) {
×
NEW
47
        logger := plugin.Logger(ctx)
×
NEW
48
        config := GetConfig(d.Connection)
×
NEW
49
        client := CortexHTTPClient(ctx, config)
×
NEW
50
        hydratorWriter := QueryDataWriter{d}
×
NEW
51
        packageTag := d.EqualsQuals["package_tag"].GetStringValue()
×
NEW
52
        logger.Info("listPackageHydrator", "packageTag", packageTag)
×
NEW
53
        return nil, listPackages(ctx, client, &hydratorWriter, packageTag)
×
NEW
54
}
×
55

NEW
56
func listPackages(ctx context.Context, client *req.Client, writer HydratorWriter, packageTag string) error {
×
NEW
57
        logger := plugin.Logger(ctx)
×
NEW
58
        var response []Package
×
NEW
59
        logger.Debug("listPackages")
×
NEW
60
        resp := client.
×
NEW
61
                Get("/api/v1/catalog/{tag}/packages").
×
NEW
62
                SetPathParam("tag", packageTag).
×
NEW
63
                // Options
×
NEW
64
                SetQueryParam("yaml", "false").
×
NEW
65
                Do(ctx)
×
NEW
66

×
NEW
67
        // Check for HTTP errors
×
NEW
68
        if resp.IsErrorState() {
×
NEW
69
                logger.Error("listPackages", "Status", resp.Status, "Body", resp.String())
×
NEW
70
                return fmt.Errorf("error from cortex API %s: %s", resp.Status, resp.String())
×
NEW
71
        }
×
NEW
72
        logger.Error("listPackages url", resp.Request.URL.String())
×
NEW
73

×
NEW
74
        // Unmarshal the response and check for unmarshal errors
×
NEW
75
        err := resp.Into(&response)
×
NEW
76
        if err != nil {
×
NEW
77
                logger.Error("listPackages", "Error", err)
×
NEW
78
                return err
×
NEW
79
        }
×
80

81
        // Stream each row from the response, stop if we hit the limit
NEW
82
        for _, result := range response {
×
NEW
83
                // send the item to steampipe
×
NEW
84
                row := CortexPackageRow{
×
NEW
85
                        Name:        result.Name,
×
NEW
86
                        PackageType: result.PackageType,
×
NEW
87
                        PackageTag:  packageTag,
×
NEW
88
                        Version:     result.Version,
×
NEW
89
                }
×
NEW
90
                writer.StreamListItem(ctx, row)
×
NEW
91
                // Context can be cancelled due to manual cancellation or the limit has been hit
×
NEW
92
                if writer.RowsRemaining(ctx) == 0 {
×
NEW
93
                        return nil
×
NEW
94
                }
×
95
        }
96

NEW
97
        return nil
×
98
}
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