Replace fmt prints with the logger (#220)

Now that we have the logger in place, we should use it
in place of fmt.Print calls for development and debugging output.
This commit is contained in:
Keepers 2022-06-17 13:45:22 -06:00 committed by GitHub
parent ccb3fa46a3
commit 243343c0e9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 84 additions and 46 deletions

View File

@ -9,6 +9,7 @@ import (
"github.com/alcionai/corso/cli/config"
"github.com/alcionai/corso/cli/utils"
"github.com/alcionai/corso/pkg/credentials"
"github.com/alcionai/corso/pkg/logger"
"github.com/alcionai/corso/pkg/repository"
)
@ -40,6 +41,12 @@ var exchangeCreateCmd = &cobra.Command{
// initializes a s3 repo.
func createExchangeCmd(cmd *cobra.Command, args []string) error {
ctx := cmd.Context()
if utils.HasNoFlagsAndShownHelp(cmd) {
return nil
}
s, cfgTenantID, err := config.MakeS3Config(true, nil)
if err != nil {
return err
@ -55,25 +62,24 @@ func createExchangeCmd(cmd *cobra.Command, args []string) error {
a.TenantID = cfgTenantID
}
fmt.Printf(
"Called - %s\n\t365TenantID:\t%s\n\t356Client:\t%s\n\tfound 356Secret:\t%v\n",
cmd.CommandPath(),
m365.TenantID,
m365.ClientID,
len(m365.ClientSecret) > 0)
logger.Ctx(ctx).Debugw(
"Called - "+cmd.CommandPath(),
"tenantID", m365.TenantID,
"clientID", m365.ClientID,
"hasClientSecret", len(m365.ClientSecret) > 0)
r, err := repository.Connect(cmd.Context(), a, s)
r, err := repository.Connect(ctx, a, s)
if err != nil {
return errors.Wrapf(err, "Failed to connect to the %s repository", s.Provider)
}
defer utils.CloseRepo(cmd.Context(), r)
defer utils.CloseRepo(ctx, r)
bo, err := r.NewBackup(cmd.Context(), []string{user})
bo, err := r.NewBackup(ctx, []string{user})
if err != nil {
return errors.Wrap(err, "Failed to initialize Exchange backup")
}
if _, err := bo.Run(cmd.Context()); err != nil {
if _, err := bo.Run(ctx); err != nil {
return errors.Wrap(err, "Failed to run Exchange backup")
}

View File

@ -52,7 +52,12 @@ var s3InitCmd = &cobra.Command{
// initializes a s3 repo.
func initS3Cmd(cmd *cobra.Command, args []string) error {
log := logger.Ctx(cmd.Context())
ctx := cmd.Context()
log := logger.Ctx(ctx)
if utils.HasNoFlagsAndShownHelp(cmd) {
return nil
}
overrides := map[string]string{
credentials.AWSAccessKeyID: accessKey,
@ -87,11 +92,11 @@ func initS3Cmd(cmd *cobra.Command, args []string) error {
"accessKey", s3Cfg.AccessKey,
"hasSecretKey", len(s3Cfg.SecretKey) > 0)
r, err := repository.Initialize(cmd.Context(), a, s)
r, err := repository.Initialize(ctx, a, s)
if err != nil {
return errors.Wrap(err, "Failed to initialize a new S3 repository")
}
defer utils.CloseRepo(cmd.Context(), r)
defer utils.CloseRepo(ctx, r)
fmt.Printf("Initialized a S3 repository within bucket %s.\n", s3Cfg.Bucket)
@ -112,7 +117,12 @@ var s3ConnectCmd = &cobra.Command{
// connects to an existing s3 repo.
func connectS3Cmd(cmd *cobra.Command, args []string) error {
log := logger.Ctx(cmd.Context())
ctx := cmd.Context()
log := logger.Ctx(ctx)
if utils.HasNoFlagsAndShownHelp(cmd) {
return nil
}
overrides := map[string]string{
credentials.AWSAccessKeyID: accessKey,
@ -147,11 +157,11 @@ func connectS3Cmd(cmd *cobra.Command, args []string) error {
"accessKey", s3Cfg.AccessKey,
"hasSecretKey", len(s3Cfg.SecretKey) > 0)
r, err := repository.Connect(cmd.Context(), a, s)
r, err := repository.Connect(ctx, a, s)
if err != nil {
return errors.Wrap(err, "Failed to connect to the S3 repository")
}
defer utils.CloseRepo(cmd.Context(), r)
defer utils.CloseRepo(ctx, r)
fmt.Printf("Connected to S3 bucket %s.\n", s3Cfg.Bucket)

View File

@ -9,6 +9,7 @@ import (
"github.com/alcionai/corso/cli/config"
"github.com/alcionai/corso/cli/utils"
"github.com/alcionai/corso/pkg/credentials"
"github.com/alcionai/corso/pkg/logger"
"github.com/alcionai/corso/pkg/repository"
)
@ -41,8 +42,9 @@ var exchangeCmd = &cobra.Command{
// initializes a s3 repo.
func createExchangeCmd(cmd *cobra.Command, args []string) error {
if cmd.Flags().NFlag() == 0 {
cmd.Help()
ctx := cmd.Context()
if utils.HasNoFlagsAndShownHelp(cmd) {
return nil
}
@ -65,25 +67,24 @@ func createExchangeCmd(cmd *cobra.Command, args []string) error {
a.TenantID = cfgTenantID
}
fmt.Printf(
"Called - %s\n\t365TenantID:\t%s\n\t356Client:\t%s\n\tfound 356Secret:\t%v\n",
cmd.CommandPath(),
m365.TenantID,
m365.ClientID,
len(m365.ClientSecret) > 0)
logger.Ctx(ctx).Debugw(
"Called - "+cmd.CommandPath(),
"tenantID", m365.TenantID,
"clientID", m365.ClientID,
"hasClientSecret", len(m365.ClientSecret) > 0)
r, err := repository.Connect(cmd.Context(), a, s)
r, err := repository.Connect(ctx, a, s)
if err != nil {
return errors.Wrapf(err, "Failed to connect to the %s repository", s.Provider)
}
defer utils.CloseRepo(cmd.Context(), r)
defer utils.CloseRepo(ctx, r)
ro, err := r.NewRestore(cmd.Context(), []string{user, folder, mail})
ro, err := r.NewRestore(ctx, []string{user, folder, mail})
if err != nil {
return errors.Wrap(err, "Failed to initialize Exchange restore")
}
if _, err := ro.Run(cmd.Context()); err != nil {
if _, err := ro.Run(ctx); err != nil {
return errors.Wrap(err, "Failed to run Exchange restore")
}

View File

@ -6,6 +6,7 @@ import (
"fmt"
"github.com/alcionai/corso/pkg/repository"
"github.com/spf13/cobra"
)
// RequireProps validates the existence of the properties
@ -25,3 +26,16 @@ func CloseRepo(ctx context.Context, r *repository.Repository) {
fmt.Print("Error closing repository:", err)
}
}
// HasNoFlagsAndShownHelp shows the Help output if no flags
// were provided to the command. Returns true if the help
// was shown.
// Use for when the non-flagged usage of a command
// (ex: corso backup restore exchange) is expected to no-op.
func HasNoFlagsAndShownHelp(cmd *cobra.Command) bool {
if cmd.Flags().NFlag() == 0 {
cmd.Help()
return true
}
return false
}

View File

@ -1,13 +1,15 @@
package connector
import (
"context"
"fmt"
"strings"
"github.com/pkg/errors"
multierror "github.com/hashicorp/go-multierror"
msgraph_errors "github.com/microsoftgraph/msgraph-sdk-go/models/odataerrors"
"github.com/pkg/errors"
"github.com/alcionai/corso/pkg/logger"
)
// WrapErrorAndAppend helper function used to attach identifying information to an error
@ -24,10 +26,10 @@ func WrapAndAppendf(identifier interface{}, e error, previous error) error {
// ListErrors is a helper method used to return the string of errors when
// the multiError library is used.
// depends on ConnectorStackErrorTrace
func ListErrors(multi multierror.Error) string {
func ListErrors(ctx context.Context, multi multierror.Error) string {
aString := ""
for idx, err := range multi.Errors {
detail := ConnectorStackErrorTrace(err)
detail := ConnectorStackErrorTrace(ctx, err)
if detail == "" {
detail = fmt.Sprintf("%v", err)
}
@ -49,7 +51,7 @@ func concatenateStringFromPointers(orig string, pointers []*string) string {
// ConnectorStackErrorTrace is a helper function that wraps the
// stack trace for oDataError types from querying the M365 back store.
func ConnectorStackErrorTrace(e error) string {
func ConnectorStackErrorTrace(ctx context.Context, e error) string {
eMessage := ""
if oDataError, ok := e.(msgraph_errors.ODataErrorable); ok {
// Get MainError
@ -81,7 +83,7 @@ func ConnectorStackErrorTrace(e error) string {
}
}
if inners != nil {
fmt.Println("Inners not nil")
logger.Ctx(ctx).Debug("error contains inner errors")
eMessage = eMessage + "\nConnector Section:"
client := inners.GetClientRequestId()
rId := inners.GetRequestId()

View File

@ -1,6 +1,7 @@
package connector
import (
"context"
"errors"
"fmt"
"strings"
@ -26,8 +27,8 @@ func (suite *GraphConnectorErrorSuite) TestWrapAndAppend() {
suite.True(strings.Contains(returnErr.Error(), "arc376"))
suite.Error(returnErr)
multi := &multierror.Error{Errors: []error{err1, err2}}
suite.True(strings.Contains(ListErrors(*multi), "two")) // Does not contain the wrapped information
suite.T().Log(ListErrors(*multi))
suite.True(strings.Contains(ListErrors(context.Background(), *multi), "two")) // Does not contain the wrapped information
suite.T().Log(ListErrors(context.Background(), *multi))
}
func (suite *GraphConnectorErrorSuite) TestWrapAndAppend_OnVar() {

View File

@ -4,6 +4,7 @@ package connector
import (
"bytes"
"context"
"fmt"
"io"
@ -17,6 +18,8 @@ import (
msuser "github.com/microsoftgraph/msgraph-sdk-go/users"
msfolder "github.com/microsoftgraph/msgraph-sdk-go/users/item/mailfolders"
"github.com/pkg/errors"
"github.com/alcionai/corso/pkg/logger"
)
const (
@ -130,11 +133,11 @@ func buildFromMap(isKey bool, mapping map[string]string) []string {
// Assumption: User exists
// TODO: https://github.com/alcionai/corso/issues/135
// Add iota to this call -> mail, contacts, calendar, etc.
func (gc *GraphConnector) ExchangeDataCollection(user string) ([]DataCollection, error) {
func (gc *GraphConnector) ExchangeDataCollection(ctx context.Context, user string) ([]DataCollection, error) {
// TODO replace with completion of Issue 124:
//TODO: Retry handler to convert return: (DataCollection, error)
return gc.serializeMessages(user)
return gc.serializeMessages(ctx, user)
}
// optionsForMailFolders creates transforms the 'select' into a more dynamic call for MailFolders.
@ -154,7 +157,7 @@ func optionsForMailFolders(moreOps []string) *msfolder.MailFoldersRequestBuilder
// restoreMessages: Utility function to connect to M365 backstore
// and upload messages from DataCollection.
// FullPath: tenantId, userId, <mailCategory>, FolderId
func (gc *GraphConnector) restoreMessages(dc DataCollection) error {
func (gc *GraphConnector) restoreMessages(ctx context.Context, dc DataCollection) error {
var errs error
// must be user.GetId(), PrimaryName no longer works 6-15-2022
user := dc.FullPath()[1]
@ -188,7 +191,7 @@ func (gc *GraphConnector) restoreMessages(dc DataCollection) error {
clone.SetIsDraft(&draft)
sentMessage, err := gc.client.UsersById(user).MailFoldersById(address).Messages().Post(clone)
if err != nil {
details := ConnectorStackErrorTrace(err)
details := ConnectorStackErrorTrace(ctx, err)
errs = WrapAndAppend(data.UUID()+": "+details, err, errs)
continue
// TODO: Add to retry Handler for the for failure
@ -206,7 +209,7 @@ func (gc *GraphConnector) restoreMessages(dc DataCollection) error {
// serializeMessages: Temp Function as place Holder until Collections have been added
// to the GraphConnector struct.
func (gc *GraphConnector) serializeMessages(user string) ([]DataCollection, error) {
func (gc *GraphConnector) serializeMessages(ctx context.Context, user string) ([]DataCollection, error) {
options := optionsForMailFolders([]string{})
response, err := gc.client.UsersById(user).MailFolders().GetWithRequestConfigurationAndResponseHandler(options, nil)
if err != nil {
@ -258,7 +261,7 @@ func (gc *GraphConnector) serializeMessages(user string) ([]DataCollection, erro
}
}
if err != nil {
fmt.Println("Retries exceeded")
logger.Ctx(ctx).Debug("exceeded maximum retries")
errs = WrapAndAppend(*message.GetId(), fmt.Errorf("attachment failed: %v ", err), errs)
}
}
@ -286,7 +289,7 @@ func (gc *GraphConnector) serializeMessages(user string) ([]DataCollection, erro
// Todo Retry Handler to be implemented
edc.FinishPopulation()
//fmt.Printf("Storing ExchangeDataColection with %d items\n", edc.Length())
logger.Ctx(ctx).Debugw("finished storing ExchangeDataColection", "itemCount", edc.Length())
collections = append(collections, &edc)
}
return collections, errs

View File

@ -1,6 +1,7 @@
package connector
import (
"context"
"testing"
"github.com/stretchr/testify/assert"
@ -63,7 +64,7 @@ func (suite *GraphConnectorIntegrationSuite) TestGraphConnector_ExchangeDataColl
if err := ctesting.RunOnAny(ctesting.CorsoCITests); err != nil {
suite.T().Skip(err)
}
collectionList, err := suite.connector.ExchangeDataCollection("lidiah@8qzvrj.onmicrosoft.com")
collectionList, err := suite.connector.ExchangeDataCollection(context.Background(), "lidiah@8qzvrj.onmicrosoft.com")
assert.NotNil(suite.T(), collectionList)
assert.Error(suite.T(), err) // TODO Remove after https://github.com/alcionai/corso/issues/140
if err != nil {
@ -89,7 +90,7 @@ func (suite *GraphConnectorIntegrationSuite) TestGraphConnector_restoreMessages(
edc := NewExchangeDataCollection("tenant", []string{"tenantId", evs[user], mailCategory, "Inbox"})
edc.PopulateCollection(ds)
edc.FinishPopulation()
err = suite.connector.restoreMessages(&edc)
err = suite.connector.restoreMessages(context.Background(), &edc)
assert.NoError(suite.T(), err)
}

View File

@ -55,7 +55,7 @@ func (op *BackupOperation) Run(ctx context.Context) (*kopia.BackupStats, error)
return nil, errors.Wrap(err, "connecting to graph api")
}
cs, err := gc.ExchangeDataCollection(op.Targets[0])
cs, err := gc.ExchangeDataCollection(ctx, op.Targets[0])
if err != nil {
return nil, errors.Wrap(err, "retrieving application data")
}