Skip to content

Commit b3cdd58

Browse files
committed
Feat: Provide the ability to exclude dqlite and clickhouse (timeseries) data collection
1 parent 4bcbf71 commit b3cdd58

File tree

4 files changed

+57
-23
lines changed

4 files changed

+57
-23
lines changed

cmd/nginx-supportpkg.go

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ func Execute() {
3333

3434
var namespaces []string
3535
var product string
36+
var excludeDBData bool
37+
var excludeTimeSeriesData bool
3638
var jobList []jobs.Job
3739

3840
var rootCmd = &cobra.Command{
@@ -47,6 +49,13 @@ func Execute() {
4749
os.Exit(1)
4850
}
4951

52+
if excludeDBData {
53+
collector.ExcludeDBData = true
54+
}
55+
if excludeTimeSeriesData {
56+
collector.ExcludeTimeSeriesData = true
57+
}
58+
5059
collector.Logger.Printf("Starting kubectl-nginx-supportpkg - version: %s - build: %s", version.Version, version.Build)
5160
collector.Logger.Printf("Input args are %v", os.Args)
5261

@@ -68,8 +77,10 @@ func Execute() {
6877
failedJobs := 0
6978
for _, job := range jobList {
7079
fmt.Printf("Running job %s...", job.Name)
71-
err = job.Collect(collector)
72-
if err != nil {
80+
err, Skipped := job.Collect(collector)
81+
if Skipped {
82+
fmt.Print(" SKIPPED\n")
83+
} else if err != nil {
7384
fmt.Printf(" Error: %s\n", err)
7485
failedJobs++
7586
} else {
@@ -108,6 +119,9 @@ func Execute() {
108119
os.Exit(1)
109120
}
110121

122+
rootCmd.Flags().BoolVarP(&excludeDBData, "exclude-db-data", "d", false, "exclude DB data collection")
123+
rootCmd.Flags().BoolVarP(&excludeTimeSeriesData, "exclude-time-series-data", "t", false, "exclude time series data collection")
124+
111125
versionStr := "nginx-supportpkg - version: " + version.Version + " - build: " + version.Build + "\n"
112126
rootCmd.SetVersionTemplate(versionStr)
113127
rootCmd.Version = versionStr
@@ -118,7 +132,8 @@ func Execute() {
118132
"\n nginx-supportpkg -h|--help" +
119133
"\n nginx-supportpkg -v|--version" +
120134
"\n nginx-supportpkg [-n|--namespace] ns1 [-n|--namespace] ns2 [-p|--product] [nic,ngf,ngx,nim]" +
121-
"\n nginx-supportpkg [-n|--namespace] ns1,ns2 [-p|--product] [nic,ngf,ngx,nim] \n")
135+
"\n nginx-supportpkg [-n|--namespace] ns1,ns2 [-p|--product] [nic,ngf,ngx,nim]" +
136+
"\n nginx-supportpkg [-n|--namespace] ns1 [-n|--namespace] ns2 [-p|--product] [nim] [-d|--exclude-db-data] [-t|--exclude-time-series-data] \n")
122137

123138
if err := rootCmd.Execute(); err != nil {
124139
fmt.Println(err)

pkg/data_collector/data_collector.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,17 @@ import (
4747
)
4848

4949
type DataCollector struct {
50-
BaseDir string
51-
Namespaces []string
52-
Logger *log.Logger
53-
LogFile *os.File
54-
K8sRestConfig *rest.Config
55-
K8sCoreClientSet *kubernetes.Clientset
56-
K8sCrdClientSet *crdClient.Clientset
57-
K8sMetricsClientSet *metricsClient.Clientset
58-
K8sHelmClientSet map[string]helmClient.Client
50+
BaseDir string
51+
Namespaces []string
52+
Logger *log.Logger
53+
LogFile *os.File
54+
K8sRestConfig *rest.Config
55+
K8sCoreClientSet *kubernetes.Clientset
56+
K8sCrdClientSet *crdClient.Clientset
57+
K8sMetricsClientSet *metricsClient.Clientset
58+
K8sHelmClientSet map[string]helmClient.Client
59+
ExcludeDBData bool
60+
ExcludeTimeSeriesData bool
5961
}
6062

6163
func NewDataCollector(namespaces ...string) (*DataCollector, error) {

pkg/jobs/job.go

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ package jobs
2020

2121
import (
2222
"context"
23-
"errors"
2423
"fmt"
25-
"github.com/nginxinc/nginx-k8s-supportpkg/pkg/data_collector"
2624
"os"
2725
"path/filepath"
2826
"time"
27+
28+
"github.com/nginxinc/nginx-k8s-supportpkg/pkg/data_collector"
2929
)
3030

3131
type Job struct {
@@ -35,11 +35,12 @@ type Job struct {
3535
}
3636

3737
type JobResult struct {
38-
Files map[string][]byte
39-
Error error
38+
Files map[string][]byte
39+
Error error
40+
Skipped bool
4041
}
4142

42-
func (j Job) Collect(dc *data_collector.DataCollector) error {
43+
func (j Job) Collect(dc *data_collector.DataCollector) (error, bool) {
4344
ch := make(chan JobResult, 1)
4445

4546
ctx, cancel := context.WithTimeout(context.Background(), j.Timeout)
@@ -51,28 +52,29 @@ func (j Job) Collect(dc *data_collector.DataCollector) error {
5152
select {
5253
case <-ctx.Done():
5354
dc.Logger.Printf("\tJob %s has timed out: %s\n---\n", j.Name, ctx.Err())
54-
return errors.New(fmt.Sprintf("Context cancelled: %v", ctx.Err()))
55+
err := fmt.Errorf("Context cancelled: %v", ctx.Err())
56+
return err, false
5557

5658
case jobResults := <-ch:
5759
if jobResults.Error != nil {
5860
dc.Logger.Printf("\tJob %s has failed: %s\n", j.Name, jobResults.Error)
59-
return jobResults.Error
61+
return jobResults.Error, jobResults.Skipped
6062
}
6163

6264
for fileName, fileValue := range jobResults.Files {
6365
err := os.MkdirAll(filepath.Dir(fileName), os.ModePerm)
6466
if err != nil {
65-
return fmt.Errorf("MkdirAll failed: %v", err)
67+
return fmt.Errorf("MkdirAll failed: %v", err), jobResults.Skipped
6668
}
6769
file, _ := os.Create(fileName)
6870
_, err = file.Write(fileValue)
6971
if err != nil {
70-
return fmt.Errorf("Write failed: %v", err)
72+
return fmt.Errorf("Write failed: %v", err), jobResults.Skipped
7173
}
7274
_ = file.Close()
7375
dc.Logger.Printf("\tJob %s wrote %d bytes to %s\n", j.Name, len(fileValue), fileName)
7476
}
7577
dc.Logger.Printf("\tJob %s completed successfully\n---\n", j.Name)
76-
return nil
78+
return nil, jobResults.Skipped
7779
}
7880
}

pkg/jobs/nim_job_list.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,14 @@ func NIMJobList() []Job {
151151
Timeout: time.Second * 600,
152152
Execute: func(dc *data_collector.DataCollector, ctx context.Context, ch chan JobResult) {
153153
jobResult := JobResult{Files: make(map[string][]byte), Error: nil}
154-
// command := []string{"clickhouse-client", "--database", "nms", "-q", "SHOW CREATE TABLE nms.events"}
154+
155+
if dc.ExcludeTimeSeriesData {
156+
dc.Logger.Printf("\tSkipping clickhouse data dump as ExcludeTimeSeriesData is set to true\n")
157+
jobResult.Skipped = true
158+
ch <- jobResult
159+
return
160+
}
161+
155162
for _, namespace := range dc.Namespaces {
156163
pods, err := dc.K8sCoreClientSet.CoreV1().Pods(namespace).List(ctx, metav1.ListOptions{})
157164
if err != nil {
@@ -191,6 +198,14 @@ func NIMJobList() []Job {
191198
Execute: func(dc *data_collector.DataCollector, ctx context.Context, ch chan JobResult) {
192199
jobResult := JobResult{Files: make(map[string][]byte), Error: nil}
193200

201+
if dc.ExcludeDBData {
202+
dc.Logger.Printf("\tSkipping dqlite dump as ExcludeDBData is set to true\n")
203+
jobResult.Skipped = true
204+
ch <- jobResult
205+
return
206+
}
207+
// Check if ExcludeDBData is set to true, skip dump if so
208+
// (already handled above with dc.ExcludeDBData)
194209
dbConfigs := []struct {
195210
dbName string
196211
containerName string

0 commit comments

Comments
 (0)