Skip to content

Commit

Permalink
context propagation: lapi status, capi status, papi status
Browse files Browse the repository at this point in the history
  • Loading branch information
mmetc committed Sep 12, 2024
1 parent 57539f6 commit 4f04b70
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 26 deletions.
12 changes: 6 additions & 6 deletions cmd/crowdsec-cli/clicapi/capi.go
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ func (cli *cliCapi) newRegisterCmd() *cobra.Command {
}

// queryCAPIStatus checks if the Central API is reachable, and if the credentials are correct. It then checks if the instance is enrolle in the console.
func queryCAPIStatus(hub *cwhub.Hub, credURL string, login string, password string) (bool, bool, error) {
func queryCAPIStatus(ctx context.Context, hub *cwhub.Hub, credURL string, login string, password string) (bool, bool, error) {
apiURL, err := url.Parse(credURL)
if err != nil {
return false, false, err
Expand Down Expand Up @@ -186,7 +186,7 @@ func queryCAPIStatus(hub *cwhub.Hub, credURL string, login string, password stri
Scenarios: itemsForAPI,
}

authResp, _, err := client.Auth.AuthenticateWatcher(context.Background(), t)
authResp, _, err := client.Auth.AuthenticateWatcher(ctx, t)
if err != nil {
return false, false, err
}
Expand All @@ -200,7 +200,7 @@ func queryCAPIStatus(hub *cwhub.Hub, credURL string, login string, password stri
return true, false, nil
}

func (cli *cliCapi) Status(out io.Writer, hub *cwhub.Hub) error {
func (cli *cliCapi) Status(ctx context.Context, out io.Writer, hub *cwhub.Hub) error {
cfg := cli.cfg()

if err := require.CAPIRegistered(cfg); err != nil {
Expand All @@ -212,7 +212,7 @@ func (cli *cliCapi) Status(out io.Writer, hub *cwhub.Hub) error {
fmt.Fprintf(out, "Loaded credentials from %s\n", cfg.API.Server.OnlineClient.CredentialsFilePath)
fmt.Fprintf(out, "Trying to authenticate with username %s on %s\n", cred.Login, cred.URL)

auth, enrolled, err := queryCAPIStatus(hub, cred.URL, cred.Login, cred.Password)
auth, enrolled, err := queryCAPIStatus(ctx, hub, cred.URL, cred.Login, cred.Password)
if err != nil {
return fmt.Errorf("failed to authenticate to Central API (CAPI): %w", err)
}
Expand All @@ -234,13 +234,13 @@ func (cli *cliCapi) newStatusCmd() *cobra.Command {
Short: "Check status with the Central API (CAPI)",
Args: cobra.MinimumNArgs(0),
DisableAutoGenTag: true,
RunE: func(_ *cobra.Command, _ []string) error {
RunE: func(cmd *cobra.Command, _ []string) error {
hub, err := require.Hub(cli.cfg(), nil, nil)
if err != nil {
return err
}

return cli.Status(color.Output, hub)
return cli.Status(cmd.Context(), color.Output, hub)
},
}

Expand Down
10 changes: 5 additions & 5 deletions cmd/crowdsec-cli/clilapi/lapi.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func New(cfg configGetter) *cliLapi {
}

// queryLAPIStatus checks if the Local API is reachable, and if the credentials are correct.
func queryLAPIStatus(hub *cwhub.Hub, credURL string, login string, password string) (bool, error) {
func queryLAPIStatus(ctx context.Context, hub *cwhub.Hub, credURL string, login string, password string) (bool, error) {
apiURL, err := url.Parse(credURL)
if err != nil {
return false, err
Expand Down Expand Up @@ -76,15 +76,15 @@ func queryLAPIStatus(hub *cwhub.Hub, credURL string, login string, password stri
return true, nil
}

func (cli *cliLapi) Status(out io.Writer, hub *cwhub.Hub) error {
func (cli *cliLapi) Status(ctx context.Context, out io.Writer, hub *cwhub.Hub) error {
cfg := cli.cfg()

cred := cfg.API.Client.Credentials

fmt.Fprintf(out, "Loaded credentials from %s\n", cfg.API.Client.CredentialsFilePath)
fmt.Fprintf(out, "Trying to authenticate with username %s on %s\n", cred.Login, cred.URL)

_, err := queryLAPIStatus(hub, cred.URL, cred.Login, cred.Password)
_, err := queryLAPIStatus(ctx, hub, cred.URL, cred.Login, cred.Password)
if err != nil {
return fmt.Errorf("failed to authenticate to Local API (LAPI): %w", err)
}
Expand Down Expand Up @@ -195,13 +195,13 @@ func (cli *cliLapi) newStatusCmd() *cobra.Command {
Short: "Check authentication to Local API (LAPI)",
Args: cobra.MinimumNArgs(0),
DisableAutoGenTag: true,
RunE: func(_ *cobra.Command, _ []string) error {
RunE: func(cmd *cobra.Command, _ []string) error {
hub, err := require.Hub(cli.cfg(), nil, nil)
if err != nil {
return err
}

return cli.Status(color.Output, hub)
return cli.Status(cmd.Context(), color.Output, hub)
},
}

Expand Down
11 changes: 7 additions & 4 deletions cmd/crowdsec-cli/clipapi/papi.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package clipapi

import (
"context"
"fmt"
"io"
"time"
Expand Down Expand Up @@ -55,7 +56,7 @@ func (cli *cliPapi) NewCommand() *cobra.Command {
return cmd
}

func (cli *cliPapi) Status(out io.Writer, db *database.Client) error {
func (cli *cliPapi) Status(ctx context.Context, out io.Writer, db *database.Client) error {
cfg := cli.cfg()

apic, err := apiserver.NewAPIC(cfg.API.Server.OnlineClient, db, cfg.API.Server.ConsoleConfig, cfg.API.Server.CapiWhitelists)
Expand All @@ -68,7 +69,7 @@ func (cli *cliPapi) Status(out io.Writer, db *database.Client) error {
return fmt.Errorf("unable to initialize PAPI client: %w", err)
}

perms, err := papi.GetPermissions()
perms, err := papi.GetPermissions(ctx)
if err != nil {
return fmt.Errorf("unable to get PAPI permissions: %w", err)
}
Expand Down Expand Up @@ -103,12 +104,14 @@ func (cli *cliPapi) newStatusCmd() *cobra.Command {
DisableAutoGenTag: true,
RunE: func(cmd *cobra.Command, _ []string) error {
cfg := cli.cfg()
db, err := require.DBClient(cmd.Context(), cfg.DbConfig)
ctx := cmd.Context()

db, err := require.DBClient(ctx, cfg.DbConfig)
if err != nil {
return err
}

return cli.Status(color.Output, db)
return cli.Status(ctx, color.Output, db)
},
}

Expand Down
18 changes: 9 additions & 9 deletions cmd/crowdsec-cli/clisupport/support.go
Original file line number Diff line number Diff line change
Expand Up @@ -231,13 +231,13 @@ func (cli *cliSupport) dumpAgents(zw *zip.Writer, db *database.Client) error {
return nil
}

func (cli *cliSupport) dumpLAPIStatus(zw *zip.Writer, hub *cwhub.Hub) error {
func (cli *cliSupport) dumpLAPIStatus(ctx context.Context, zw *zip.Writer, hub *cwhub.Hub) error {
log.Info("Collecting LAPI status")

out := new(bytes.Buffer)
cl := clilapi.New(cli.cfg)

err := cl.Status(out, hub)
err := cl.Status(ctx, out, hub)
if err != nil {
fmt.Fprintf(out, "%s\n", err)
}
Expand All @@ -249,13 +249,13 @@ func (cli *cliSupport) dumpLAPIStatus(zw *zip.Writer, hub *cwhub.Hub) error {
return nil
}

func (cli *cliSupport) dumpCAPIStatus(zw *zip.Writer, hub *cwhub.Hub) error {
func (cli *cliSupport) dumpCAPIStatus(ctx context.Context, zw *zip.Writer, hub *cwhub.Hub) error {
log.Info("Collecting CAPI status")

out := new(bytes.Buffer)
cc := clicapi.New(cli.cfg)

err := cc.Status(out, hub)
err := cc.Status(ctx, out, hub)
if err != nil {
fmt.Fprintf(out, "%s\n", err)
}
Expand All @@ -267,13 +267,13 @@ func (cli *cliSupport) dumpCAPIStatus(zw *zip.Writer, hub *cwhub.Hub) error {
return nil
}

func (cli *cliSupport) dumpPAPIStatus(zw *zip.Writer, db *database.Client) error {
func (cli *cliSupport) dumpPAPIStatus(ctx context.Context, zw *zip.Writer, db *database.Client) error {
log.Info("Collecting PAPI status")

out := new(bytes.Buffer)
cp := clipapi.New(cli.cfg)

err := cp.Status(out, db)
err := cp.Status(ctx, out, db)
if err != nil {
fmt.Fprintf(out, "%s\n", err)
}
Expand Down Expand Up @@ -534,17 +534,17 @@ func (cli *cliSupport) dump(ctx context.Context, outFile string) error {
}

if !skipCAPI {
if err = cli.dumpCAPIStatus(zipWriter, hub); err != nil {
if err = cli.dumpCAPIStatus(ctx, zipWriter, hub); err != nil {
log.Warnf("could not collect CAPI status: %s", err)
}

if err = cli.dumpPAPIStatus(zipWriter, db); err != nil {
if err = cli.dumpPAPIStatus(ctx, zipWriter, db); err != nil {
log.Warnf("could not collect PAPI status: %s", err)
}
}

if !skipLAPI {
if err = cli.dumpLAPIStatus(zipWriter, hub); err != nil {
if err = cli.dumpLAPIStatus(ctx, zipWriter, hub); err != nil {
log.Warnf("could not collect LAPI status: %s", err)
}

Expand Down
4 changes: 2 additions & 2 deletions pkg/apiserver/papi.go
Original file line number Diff line number Diff line change
Expand Up @@ -156,11 +156,11 @@ func (p *Papi) handleEvent(event longpollclient.Event, sync bool) error {
return nil
}

func (p *Papi) GetPermissions() (PapiPermCheckSuccess, error) {
func (p *Papi) GetPermissions(ctx context.Context) (PapiPermCheckSuccess, error) {
httpClient := p.apiClient.GetClient()
papiCheckUrl := fmt.Sprintf("%s%s%s", p.URL, types.PAPIVersion, types.PAPIPermissionsUrl)

req, err := http.NewRequest(http.MethodGet, papiCheckUrl, nil)
req, err := http.NewRequestWithContext(ctx, http.MethodGet, papiCheckUrl, nil)
if err != nil {
return PapiPermCheckSuccess{}, fmt.Errorf("failed to create request: %w", err)
}
Expand Down

0 comments on commit 4f04b70

Please sign in to comment.