From f333a1463e7f4014eaebde47eb93b5f939eaa635 Mon Sep 17 00:00:00 2001 From: Kamlendu Shekhar Date: Thu, 4 Jan 2024 16:14:23 -0500 Subject: [PATCH] adding servicelog check, interactive acceptance criteria, fixing integration teat failure by running go tidy, incorporating review comments https://github.com/openshift/osdctl/pull/486, GetServiceLogsSince to take time as an input rather then number of days --- cmd/cluster/context.go | 4 +++- cmd/org/context.go | 4 +++- cmd/servicelog/common.go | 5 ++--- cmd/servicelog/post.go | 26 +++++++++++++++++++++++++- go.mod | 2 +- 5 files changed, 34 insertions(+), 7 deletions(-) diff --git a/cmd/cluster/context.go b/cmd/cluster/context.go index df402171f..f33181a7d 100644 --- a/cmd/cluster/context.go +++ b/cmd/cluster/context.go @@ -9,6 +9,7 @@ import ( "strconv" "strings" "sync" + "time" v1 "github.com/openshift-online/ocm-sdk-go/servicelogs/v1" @@ -372,7 +373,8 @@ func (o *contextOptions) generateContextData() (*contextData, []error) { if o.verbose { fmt.Fprintln(os.Stderr, "Getting Service Logs...") } - data.ServiceLogs, err = servicelog.GetServiceLogsSince(cluster.ID(), o.days, false, false) + timeToCheckSvcLogs := time.Now().AddDate(0, 0, -o.days) + data.ServiceLogs, err = servicelog.GetServiceLogsSince(cluster.ID(), timeToCheckSvcLogs, false, false) if err != nil { errors = append(errors, fmt.Errorf("Error while getting the service logs: %v", err)) } diff --git a/cmd/org/context.go b/cmd/org/context.go index aad243175..8470dd9c1 100644 --- a/cmd/org/context.go +++ b/cmd/org/context.go @@ -9,6 +9,7 @@ import ( "os" "strconv" "sync" + "time" pd "github.com/PagerDuty/go-pagerduty" "github.com/andygrunwald/go-jira" @@ -285,7 +286,8 @@ func addLimitedSupportReasons(clusterInfo *ClusterInfo, ocmClient *sdk.Connectio func addServiceLogs(clusterInfo *ClusterInfo) error { var err error - clusterInfo.ServiceLogs, err = servicelog.GetServiceLogsSince(clusterInfo.ID, ServiceLogDaysSince, false, false) + timeToCheckSvcLogs := time.Now().AddDate(0, 0, -ServiceLogDaysSince) + clusterInfo.ServiceLogs, err = servicelog.GetServiceLogsSince(clusterInfo.ID, timeToCheckSvcLogs, false, false) if err != nil { return fmt.Errorf("failed to fetch service logs for cluster %v: %w", clusterInfo.ID, err) } diff --git a/cmd/servicelog/common.go b/cmd/servicelog/common.go index 8a858d915..7dd93014b 100644 --- a/cmd/servicelog/common.go +++ b/cmd/servicelog/common.go @@ -64,9 +64,8 @@ func validateBadResponse(body []byte) (badReply *servicelog.BadReply, err error) // time.Now() and time.Now()-duration. the first parameter will contain a slice // of the service logs from the given time period, while the second return value // indicates if an error has happened. -func GetServiceLogsSince(clusterID string, days int, allMessages bool, internalOnly bool) ([]*v1.LogEntry, error) { - // time.Now().Sub() returns the duration between two times, so we negate the duration in Add() - earliestTime := time.Now().AddDate(0, 0, -days) +func GetServiceLogsSince(clusterID string, timeSince time.Time, allMessages bool, internalOnly bool) ([]*v1.LogEntry, error) { + earliestTime := timeSince slResponse, err := FetchServiceLogs(clusterID, allMessages, internalOnly) if err != nil { diff --git a/cmd/servicelog/post.go b/cmd/servicelog/post.go index eef0d3dd5..1b86170e0 100644 --- a/cmd/servicelog/post.go +++ b/cmd/servicelog/post.go @@ -9,6 +9,7 @@ import ( "path/filepath" "regexp" "strings" + "time" cmdutil "k8s.io/kubectl/pkg/cmd/util" "k8s.io/utils/strings/slices" @@ -24,6 +25,7 @@ import ( log "github.com/sirupsen/logrus" "github.com/spf13/cobra" + "golang.org/x/term" ) type PostCmdOptions struct { @@ -89,6 +91,24 @@ func (o *PostCmdOptions) Validate() error { return nil } +func (o *PostCmdOptions) CheckServiceLogsLastHour() bool { + getAllMessages := false // we need just manual entries + getInternalLogsOnly := false // we need all messages + numberOfHours := 1 // number of hours we need to wait for svc logs + timeStampToCompare := time.Now().Add(-time.Hour * time.Duration(numberOfHours)) + serviceLogs, err := GetServiceLogsSince(o.ClusterId, timeStampToCompare, getAllMessages, getInternalLogsOnly) + if err != nil { + log.Fatalf("failed to fetch service logs: %q", err) + } + if len(serviceLogs) > 0 { + for _, svclog := range serviceLogs { + fmt.Println("Below service Log has been subitted in last 60 minutes\nDescription: ", svclog.Description()) + } + return true + } + return false +} + func (o *PostCmdOptions) Run() error { if err := o.Init(); err != nil { return err @@ -96,7 +116,11 @@ func (o *PostCmdOptions) Run() error { if err := o.Validate(); err != nil { return err } - + if term.IsTerminal(int(os.Stdout.Fd())) && o.CheckServiceLogsLastHour() { + if !ocmutils.ConfirmPrompt() { + return nil + } + } o.parseUserParameters() // parse all the '-p' user flags o.readFilterFile() // parse the ocm filters in file provided via '-f' flag o.readTemplate() // parse the given JSON template provided via '-t' flag diff --git a/go.mod b/go.mod index d28e1d217..783a951e9 100644 --- a/go.mod +++ b/go.mod @@ -47,6 +47,7 @@ require ( github.com/spf13/viper v1.18.1 go.uber.org/mock v0.3.0 golang.org/x/sync v0.5.0 + golang.org/x/term v0.15.0 google.golang.org/api v0.153.0 google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 gopkg.in/yaml.v2 v2.4.0 @@ -177,7 +178,6 @@ require ( golang.org/x/net v0.19.0 // indirect golang.org/x/oauth2 v0.15.0 // indirect golang.org/x/sys v0.15.0 // indirect - golang.org/x/term v0.15.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect