From d1ba1cd7e1c1d0cbb98ad3de835d6d5d687f3b1d Mon Sep 17 00:00:00 2001 From: dprizentsov Date: Thu, 21 Aug 2025 11:02:56 +0200 Subject: [PATCH 01/15] send table data, interval info and caption in separate frames Signed-off-by: dprizentsov --- grafana/rmf-app/pkg/plugin/datasource.go | 8 +- grafana/rmf-app/pkg/plugin/frame/frame.go | 98 +++++++++++++++++-- grafana/rmf-app/pkg/plugin/query.go | 21 ++++ .../report/table-component/table.helper.ts | 63 ++++-------- 4 files changed, 138 insertions(+), 52 deletions(-) diff --git a/grafana/rmf-app/pkg/plugin/datasource.go b/grafana/rmf-app/pkg/plugin/datasource.go index 4b052967..e1fb9e1e 100644 --- a/grafana/rmf-app/pkg/plugin/datasource.go +++ b/grafana/rmf-app/pkg/plugin/datasource.go @@ -276,7 +276,7 @@ func (ds *RMFDatasource) QueryData(ctx context.Context, req *backend.QueryDataRe r := dds.NewRequest(params.Resource.Value, q.TimeRange.From.UTC(), q.TimeRange.To.UTC(), mintime) response = &backend.DataResponse{} // FIXME: doesn't it need to be cached? - if newFrame, err := ds.getFrame(r, false); err != nil { + if fms, err := ds.getFrame2(r); err != nil { var msg *dds.Message if errors.As(err, &msg) { response.Error = err @@ -285,8 +285,10 @@ func (ds *RMFDatasource) QueryData(ctx context.Context, req *backend.QueryDataRe response.Error = log.FrameErrorWithId(logger, err) response.Status = backend.StatusInternal } - } else if newFrame != nil { - response.Frames = append(response.Frames, newFrame) + } else if fms != nil { + for _, f := range fms { + response.Frames = append(response.Frames, f) + } } } } diff --git a/grafana/rmf-app/pkg/plugin/frame/frame.go b/grafana/rmf-app/pkg/plugin/frame/frame.go index f85268d7..bd762c03 100644 --- a/grafana/rmf-app/pkg/plugin/frame/frame.go +++ b/grafana/rmf-app/pkg/plugin/frame/frame.go @@ -50,32 +50,41 @@ func NoDataFrame(t time.Time) *data.Frame { ) } -func Build(ddsResponse *dds.Response, headers *dds.HeaderMap, wide bool) (*data.Frame, error) { +func validateResponse(ddsResponse *dds.Response) error { logger := log.Logger.With("func", "Build") reportsNum := len(ddsResponse.Reports) if reportsNum == 0 { - return nil, errors.New("no reports in DDS response") + return errors.New("no reports in DDS response") } else if reportsNum > 1 { - return nil, fmt.Errorf("too many reports (%d) in DDS response", reportsNum) + return fmt.Errorf("too many reports (%d) in DDS response", reportsNum) } report := ddsResponse.Reports[0] if message := report.Message; message != nil { if _, ok := dds.AcceptableMessages[message.Id]; !ok { - return nil, message + return message } else { logger.Debug(message.Error()) } } if report.TimeData == nil { - return nil, errors.New("no time data in DDS response") + return errors.New("no time data in DDS response") } if report.Metric == nil { - return nil, errors.New("no metric data in DDS response") + return errors.New("no metric data in DDS response") } if _, ok := dds.SupportedFormats[report.Metric.Format]; !ok { - return nil, fmt.Errorf("unsupported data format (%s) in DDS response", report.Metric.Format) + return fmt.Errorf("unsupported data format (%s) in DDS response", report.Metric.Format) } + return nil +} + +func Build(ddsResponse *dds.Response, headers *dds.HeaderMap, wide bool) (*data.Frame, error) { + err := validateResponse(ddsResponse) + if err != nil { + return nil, err + } + report := ddsResponse.Reports[0] format := report.Metric.Format frameName := strings.Trim(report.Metric.Description, " ") @@ -91,6 +100,15 @@ func Build(ddsResponse *dds.Response, headers *dds.HeaderMap, wide bool) (*data. return newFrame, nil } +func Build2(ddsResponse *dds.Response, headers *dds.HeaderMap) ([]*data.Frame, error) { + err := validateResponse(ddsResponse) + if err != nil { + return nil, err + } + report := ddsResponse.Reports[0] + return buildForReport2(&report, headers), nil +} + // buildWideForMetric creates a time series data frame for a metric from pre-parsed DDS response. // Grafana frame format: wide. func buildWideForMetric(report *dds.Report, frameName string) *data.Frame { @@ -243,6 +261,72 @@ func buildForReport(report *dds.Report, headers *dds.HeaderMap, frameName string return frame } +func buildForReport2(report *dds.Report, headers *dds.HeaderMap) []*data.Frame { + reportName := report.Metric.Id + captionFrame := data.NewFrame(reportName + "_CAP") + intervalFrame := data.NewFrame(reportName + "_INT") + reportFrame := data.NewFrame(reportName) + + for i, col := range report.Headers.Cols { + header := headers.Get(reportName, col.Id) + var field *data.Field = nil + for _, row := range report.Rows { + rawValue := row.Cols[i] + if field == nil { + if col.Type == dds.NumericColType { + field = data.NewField(header, nil, []*float64{parseFloat(rawValue)}) + } else { + field = data.NewField(header, nil, []string{rawValue}) + } + continue + } + if col.Type == dds.NumericColType { + field.Append(parseFloat(rawValue)) + } else { + field.Append(rawValue) + } + } + reportFrame.Fields = append(reportFrame.Fields, field) + } + + buildField := func(name string, prefix string, value string) *data.Field { + // All the frames must have the same number of rows. + values := make([]*string, 1+len(report.Rows)) + values[0] = &value + field := data.NewField(prefix+name, nil, values) + return field + } + + timeData := report.TimeData + + field := buildField("Samples", BannerPrefix, strconv.Itoa(timeData.NumSamples)) + intervalFrame.Fields = append(intervalFrame.Fields, field) + if timeData.NumSystems != nil { + field = buildField("Systems", BannerPrefix, strconv.Itoa(*timeData.NumSystems)) + intervalFrame.Fields = append(intervalFrame.Fields, field) + } + field = buildField("Time range", BannerPrefix, + fmt.Sprintf("%s - %s", + timeData.LocalStart.Format(ReportDateFormat), + timeData.LocalEnd.Format(ReportDateFormat))) + intervalFrame.Fields = append(intervalFrame.Fields, field) + field = buildField("Interval", BannerPrefix, + timeData.LocalEnd.Sub(timeData.LocalStart.Time).String()) + intervalFrame.Fields = append(intervalFrame.Fields, field) + + for _, caption := range report.Caption.Vars { + name := headers.Get(reportName, caption.Name) + field := buildField(name, CaptionPrefix, caption.Value) + captionFrame.Fields = append(captionFrame.Fields, field) + } + + result := make([]*data.Frame, 3) + result[0] = reportFrame + result[1] = intervalFrame + result[2] = captionFrame + return result +} + func parseFloat(value string) *float64 { // Value can contain different kinds of text meaning n/a: NaN, blank value, Deact, etc. if parsed, err := strconv.ParseFloat(value, 64); err == nil && !math.IsNaN(parsed) { diff --git a/grafana/rmf-app/pkg/plugin/query.go b/grafana/rmf-app/pkg/plugin/query.go index 49e79f21..cea2bda1 100644 --- a/grafana/rmf-app/pkg/plugin/query.go +++ b/grafana/rmf-app/pkg/plugin/query.go @@ -50,6 +50,27 @@ func (ds *RMFDatasource) getFrame(r *dds.Request, wide bool) (*data.Frame, error } } +func (ds *RMFDatasource) getFrame2(r *dds.Request) ([]*data.Frame, error) { + key := cache.FrameKey(r, false) + result, err, _ := ds.single.Do(string(key), func() (interface{}, error) { + ddsResponse, err := ds.ddsClient.GetByRequest(r) + if err != nil { + return nil, err + } + headers := ds.ddsClient.GetCachedHeaders() + fms, err := frame.Build2(ddsResponse, headers) + if err != nil { + return nil, err + } + return fms, nil + }) + if result != nil { + return result.([]*data.Frame), err + } else { + return nil, err + } +} + // getStep calculates the most appropriate time series step. // There's no ideal solution. We assume that it aligns with one hour. // If it doesn't, streaming will still work, but some queries will miss cache. diff --git a/grafana/rmf-app/src/panels/report/table-component/table.helper.ts b/grafana/rmf-app/src/panels/report/table-component/table.helper.ts index 68b190ad..f44dc9f0 100644 --- a/grafana/rmf-app/src/panels/report/table-component/table.helper.ts +++ b/grafana/rmf-app/src/panels/report/table-component/table.helper.ts @@ -48,6 +48,14 @@ export const InitFrameData = (data: PanelData): DataFrame[] => { fields: data.series[0].fields, length: data.series[0].fields[0].values.length, } as DataFrame, + { + fields: data.series[1].fields, + length: data.series[1].fields[0].values.length, + } as DataFrame, + { + fields: data.series[2].fields, + length: data.series[2].fields[0].values.length, + } as DataFrame, ] as DataFrame[]; } @@ -68,45 +76,16 @@ export const applySelectedDefaultsAndOverrides = ( fieldConfig: FieldConfigSource, data: DataFrame[] ): ReportData => { - // FIXME: send banner, captions and table data in different frames. - let result = applyRawFieldOverrides(data); - let bannerFields: Field[] = []; - let captionFields: Field[] = []; - let tableFields: Field[] = []; - - let targetArray: Field[]; - let sliceStart: number; - let sliceEnd: number | undefined; - - for (let i = 0; i < result[0].fields.length; i++) { - let field: V9CompatField = result[0].fields[i]; - if (field.name.startsWith(BANNER_PREFIX)) { - targetArray = bannerFields; - sliceStart = 0; - sliceEnd = 1; - } else if (field.name.startsWith(CAPTION_PREFIX)) { - targetArray = captionFields; - sliceStart = 0; - sliceEnd = 1; - } else { - targetArray = tableFields; - sliceStart = 1; - sliceEnd = undefined; - } - let values = field.values?.buffer ?? field.values; - values = values.slice(sliceStart, sliceEnd); - if (field.values?.buffer !== undefined) { - field.values.buffer = values; - } else { - field.values = values; - } - targetArray.push(field); - } - result[0].fields = tableFields; - result[0].length -= 1; + let frames = applyRawFieldOverrides(data); + let reportFrame: DataFrame = frames[0]; + let intervalFrame: DataFrame = frames[1]; + let captionFrame: DataFrame = frames[2]; + let bannerFields: Field[] = intervalFrame.fields; + let captionFields: Field[] = captionFrame.fields; + let tableFields: Field[] = reportFrame.fields; // First apply default settings - result[0].fields.map((field: Field) => { + tableFields.map((field: Field) => { if (fieldConfig.defaults.thresholds !== undefined) { field.config.thresholds = fieldConfig.defaults.thresholds; } @@ -128,7 +107,7 @@ export const applySelectedDefaultsAndOverrides = ( if (ovItem.matcher.id === 'byName') { ovItem.properties.map((ovrProp) => { if (ovrProp.id === 'custom.cellOptions') { - result[0].fields.map((field: Field, index: number) => { + tableFields.map((field: Field, index: number) => { if (field.name === ovItem.matcher.options) { field = applyNearestPercentage(field, 100); field.config.custom = { @@ -138,7 +117,7 @@ export const applySelectedDefaultsAndOverrides = ( }); } if (ovrProp.id === 'custom.filterable') { - result[0].fields.map((field: Field, index: number) => { + tableFields.map((field: Field, index: number) => { if (field.name === ovItem.matcher.options) { if (field.config.custom !== undefined && field.config.custom.cellOptions !== undefined) { field.config.custom = { @@ -154,7 +133,7 @@ export const applySelectedDefaultsAndOverrides = ( }); } if (ovrProp.id === 'color') { - result[0].fields.map((field: Field) => { + tableFields.map((field: Field) => { if (field.name === ovItem.matcher.options && ovrProp && ovrProp.value && ovrProp.value.mode) { field.config.color = { mode: ovrProp.value.mode, @@ -164,7 +143,7 @@ export const applySelectedDefaultsAndOverrides = ( }); } if (ovrProp.id === 'thresholds') { - result[0].fields.map((field: Field) => { + tableFields.map((field: Field) => { if (field.name === ovItem.matcher.options && ovrProp && ovrProp.value && ovrProp.value.mode) { field.config.thresholds = { mode: ovrProp.value.mode, @@ -177,7 +156,7 @@ export const applySelectedDefaultsAndOverrides = ( } }); } - return { bannerFields: bannerFields, captionFields: captionFields, tableData: result }; + return { bannerFields: bannerFields, captionFields: captionFields, tableData: frames }; }; export const applyFieldOverridesForBarGauge = (finalData: DataFrame[]): DataFrame[] => { From ab6f1111f6011aaae4409b24db3e606c2a27a176 Mon Sep 17 00:00:00 2001 From: dprizentsov Date: Fri, 22 Aug 2025 16:03:47 +0200 Subject: [PATCH 02/15] send table data, interval info and caption in separate frames, fixes, add sysplex name Signed-off-by: dprizentsov --- grafana/rmf-app/pkg/plugin/datasource.go | 2 +- grafana/rmf-app/pkg/plugin/dds/client.go | 14 +++ grafana/rmf-app/pkg/plugin/dds/response.go | 15 +++ grafana/rmf-app/pkg/plugin/frame/frame.go | 101 ++++-------------- .../rmf-app/pkg/plugin/frame/frame_test.go | 4 +- grafana/rmf-app/pkg/plugin/query.go | 30 ++---- .../table-component/table.component.tsx | 1 + .../report/table-component/table.helper.ts | 46 +++++--- 8 files changed, 89 insertions(+), 124 deletions(-) diff --git a/grafana/rmf-app/pkg/plugin/datasource.go b/grafana/rmf-app/pkg/plugin/datasource.go index e1fb9e1e..fdce41e6 100644 --- a/grafana/rmf-app/pkg/plugin/datasource.go +++ b/grafana/rmf-app/pkg/plugin/datasource.go @@ -276,7 +276,7 @@ func (ds *RMFDatasource) QueryData(ctx context.Context, req *backend.QueryDataRe r := dds.NewRequest(params.Resource.Value, q.TimeRange.From.UTC(), q.TimeRange.To.UTC(), mintime) response = &backend.DataResponse{} // FIXME: doesn't it need to be cached? - if fms, err := ds.getFrame2(r); err != nil { + if fms, err := ds.getFrame(r, false); err != nil { var msg *dds.Message if errors.As(err, &msg) { response.Error = err diff --git a/grafana/rmf-app/pkg/plugin/dds/client.go b/grafana/rmf-app/pkg/plugin/dds/client.go index 7d47c293..8ab16459 100644 --- a/grafana/rmf-app/pkg/plugin/dds/client.go +++ b/grafana/rmf-app/pkg/plugin/dds/client.go @@ -64,6 +64,7 @@ type Client struct { httpClient *http.Client headerMap *HeaderMap timeData *TimeData + resource *Resource useXmlExt atomic.Bool stopChan chan struct{} @@ -257,8 +258,13 @@ func (c *Client) updateTimeData() *TimeData { logger.Error("unable to fetch DDS time data", "error", "no time data in DDS response") return nil, err } + resource := response.Reports[0].Resource + if resource == nil { + logger.Error("unable to fetch DDS resource", "error", "no resource data in DDS response") + } c.rwMutex.Lock() c.timeData = timeData + c.resource = resource c.rwMutex.Unlock() logger.Debug("DDS time data updated") return timeData, nil @@ -277,3 +283,11 @@ func (c *Client) GetCachedMintime() time.Duration { } return time.Duration(minTime) * time.Second } + +func (c *Client) GetSysplex() string { + c.ensureTimeData() + if c.resource != nil { + return c.resource.GetName() + } + return "" +} diff --git a/grafana/rmf-app/pkg/plugin/dds/response.go b/grafana/rmf-app/pkg/plugin/dds/response.go index 65d731c6..77df93a0 100644 --- a/grafana/rmf-app/pkg/plugin/dds/response.go +++ b/grafana/rmf-app/pkg/plugin/dds/response.go @@ -19,6 +19,7 @@ package dds import ( "fmt" + "strings" "time" ) @@ -55,6 +56,7 @@ type Report struct { Metric *Metric Message *Message Caption Caption + Resource *Resource `json:"resource"` Headers struct { Cols []Col `json:"col"` } `json:"columnHeaders"` @@ -81,6 +83,19 @@ type TimeData struct { } `json:"dataRange"` } +type Resource struct { + Reslabel string `json:"reslabel"` + Restype string `json:"restype"` +} + +func (r Resource) GetName() string { + ss := strings.Split(r.Reslabel, ",") + if len(ss) > 1 { + return ss[1] + } + return r.Reslabel +} + type DateTime struct { time.Time } diff --git a/grafana/rmf-app/pkg/plugin/frame/frame.go b/grafana/rmf-app/pkg/plugin/frame/frame.go index bd762c03..afb0a45d 100644 --- a/grafana/rmf-app/pkg/plugin/frame/frame.go +++ b/grafana/rmf-app/pkg/plugin/frame/frame.go @@ -79,34 +79,26 @@ func validateResponse(ddsResponse *dds.Response) error { return nil } -func Build(ddsResponse *dds.Response, headers *dds.HeaderMap, wide bool) (*data.Frame, error) { +func Build(sysplex string, ddsResponse *dds.Response, headers *dds.HeaderMap, wide bool) ([]*data.Frame, error) { err := validateResponse(ddsResponse) if err != nil { return nil, err } report := ddsResponse.Reports[0] - format := report.Metric.Format frameName := strings.Trim(report.Metric.Description, " ") - var newFrame *data.Frame if format == dds.ReportFormat { - newFrame = buildForReport(&report, headers, frameName) + return buildForReport(sysplex, &report, headers), nil } else if wide { - return buildWideForMetric(&report, frameName), nil + result := make([]*data.Frame, 1) + result[0] = buildWideForMetric(&report, frameName) + return result, nil } else { - return buildLongForMetric(&report, frameName), nil - } - return newFrame, nil -} - -func Build2(ddsResponse *dds.Response, headers *dds.HeaderMap) ([]*data.Frame, error) { - err := validateResponse(ddsResponse) - if err != nil { - return nil, err + result := make([]*data.Frame, 1) + result[0] = buildLongForMetric(&report, frameName) + return result, nil } - report := ddsResponse.Reports[0] - return buildForReport2(&report, headers), nil } // buildWideForMetric creates a time series data frame for a metric from pre-parsed DDS response. @@ -199,72 +191,10 @@ func iterateMetricRows(report *dds.Report, defaultName string, process func(name } } -func buildForReport(report *dds.Report, headers *dds.HeaderMap, frameName string) *data.Frame { - logger := log.Logger.With("func", "buildForReport") - frame := data.NewFrame(frameName) +func buildForReport(sysplex string, report *dds.Report, headers *dds.HeaderMap) []*data.Frame { reportName := report.Metric.Id - - for i, col := range report.Headers.Cols { - header := headers.Get(reportName, col.Id) - var field *data.Field - // The first value is a dummy to fit in captions and header. - if col.Type == dds.NumericColType { - field = data.NewField(header, nil, []*float64{nil}) - } else { - if col.Type != dds.TextColType { - logger.Warn("unsupported column type, considering as string", "type", col.Type) - } - field = data.NewField(header, nil, []string{""}) - } - for _, row := range report.Rows { - rawValue := row.Cols[i] - if col.Type == dds.NumericColType { - field.Append(parseFloat(rawValue)) - } else { - field.Append(rawValue) - } - } - frame.Fields = append(frame.Fields, field) - } - - buildField := func(name string, prefix string, value string) *data.Field { - // All the frames must have the same number of rows. - values := make([]*string, 1+len(report.Rows)) - values[0] = &value - field := data.NewField(prefix+name, nil, values) - return field - } - - timeData := report.TimeData - - field := buildField("Samples", BannerPrefix, strconv.Itoa(timeData.NumSamples)) - frame.Fields = append(frame.Fields, field) - if timeData.NumSystems != nil { - field = buildField("Systems", BannerPrefix, strconv.Itoa(*timeData.NumSystems)) - frame.Fields = append(frame.Fields, field) - } - field = buildField("Time range", BannerPrefix, - fmt.Sprintf("%s - %s", - timeData.LocalStart.Format(ReportDateFormat), - timeData.LocalEnd.Format(ReportDateFormat))) - frame.Fields = append(frame.Fields, field) - field = buildField("Interval", BannerPrefix, - timeData.LocalEnd.Sub(timeData.LocalStart.Time).String()) - frame.Fields = append(frame.Fields, field) - - for _, caption := range report.Caption.Vars { - name := headers.Get(reportName, caption.Name) - field := buildField(name, CaptionPrefix, caption.Value) - frame.Fields = append(frame.Fields, field) - } - - return frame -} - -func buildForReport2(report *dds.Report, headers *dds.HeaderMap) []*data.Frame { - reportName := report.Metric.Id - captionFrame := data.NewFrame(reportName + "_CAP") - intervalFrame := data.NewFrame(reportName + "_INT") + captionFrame := data.NewFrame("Caption::" + reportName) + intervalFrame := data.NewFrame("Banner::" + reportName) reportFrame := data.NewFrame(reportName) for i, col := range report.Headers.Cols { @@ -286,7 +216,9 @@ func buildForReport2(report *dds.Report, headers *dds.HeaderMap) []*data.Frame { field.Append(rawValue) } } - reportFrame.Fields = append(reportFrame.Fields, field) + if field != nil { + reportFrame.Fields = append(reportFrame.Fields, field) + } } buildField := func(name string, prefix string, value string) *data.Field { @@ -314,6 +246,11 @@ func buildForReport2(report *dds.Report, headers *dds.HeaderMap) []*data.Frame { timeData.LocalEnd.Sub(timeData.LocalStart.Time).String()) intervalFrame.Fields = append(intervalFrame.Fields, field) + field = buildField("Sysplex", BannerPrefix, sysplex) + intervalFrame.Fields = append(intervalFrame.Fields, field) + field = buildField("Name", BannerPrefix, report.Resource.GetName()) + intervalFrame.Fields = append(intervalFrame.Fields, field) + for _, caption := range report.Caption.Vars { name := headers.Get(reportName, caption.Name) field := buildField(name, CaptionPrefix, caption.Value) diff --git a/grafana/rmf-app/pkg/plugin/frame/frame_test.go b/grafana/rmf-app/pkg/plugin/frame/frame_test.go index 491e2b52..08230e43 100644 --- a/grafana/rmf-app/pkg/plugin/frame/frame_test.go +++ b/grafana/rmf-app/pkg/plugin/frame/frame_test.go @@ -64,9 +64,9 @@ func TestFrame(t *testing.T) { var expectedJson bytes.Buffer err := json.Indent(&expectedJson, testCase.ExpectedFrame, "", " ") if assert.NoError(t, err, "failed to indent") { - frame, err := Build(testCase.DdsResponse, nil, testCase.Wide) + frame, err := Build("", testCase.DdsResponse, nil, testCase.Wide) if err == nil { - actualJson, _ := json.MarshalIndent(frame, "", " ") + actualJson, _ := json.MarshalIndent(frame[0], "", " ") assert.JSONEq(t, expectedJson.String(), string(actualJson), "frames are not identical") } else { assert.Equal(t, testCase.ExpectedError, err.Error(), "unexpected error message") diff --git a/grafana/rmf-app/pkg/plugin/query.go b/grafana/rmf-app/pkg/plugin/query.go index cea2bda1..996f5f34 100644 --- a/grafana/rmf-app/pkg/plugin/query.go +++ b/grafana/rmf-app/pkg/plugin/query.go @@ -29,28 +29,7 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/data" ) -func (ds *RMFDatasource) getFrame(r *dds.Request, wide bool) (*data.Frame, error) { - key := cache.FrameKey(r, wide) - result, err, _ := ds.single.Do(string(key), func() (interface{}, error) { - ddsResponse, err := ds.ddsClient.GetByRequest(r) - if err != nil { - return nil, err - } - headers := ds.ddsClient.GetCachedHeaders() - f, err := frame.Build(ddsResponse, headers, wide) - if err != nil { - return nil, err - } - return f, nil - }) - if result != nil { - return result.(*data.Frame), err - } else { - return nil, err - } -} - -func (ds *RMFDatasource) getFrame2(r *dds.Request) ([]*data.Frame, error) { +func (ds *RMFDatasource) getFrame(r *dds.Request, wide bool) ([]*data.Frame, error) { key := cache.FrameKey(r, false) result, err, _ := ds.single.Do(string(key), func() (interface{}, error) { ddsResponse, err := ds.ddsClient.GetByRequest(r) @@ -58,7 +37,8 @@ func (ds *RMFDatasource) getFrame2(r *dds.Request) ([]*data.Frame, error) { return nil, err } headers := ds.ddsClient.GetCachedHeaders() - fms, err := frame.Build2(ddsResponse, headers) + sysplex := ds.ddsClient.GetSysplex() + fms, err := frame.Build(sysplex, ddsResponse, headers, wide) if err != nil { return nil, err } @@ -114,6 +94,7 @@ func (ds *RMFDatasource) getCachedTSFrames(r *dds.Request, stop time.Time, step func (ds *RMFDatasource) serveTSFrame(ctx context.Context, sender *backend.StreamSender, fields frame.SeriesFields, r *dds.Request, hist bool) error { logger := log.Logger.With("func", "serveTSFrame") + var fa []*data.Frame var f *data.Frame var err error @@ -127,11 +108,12 @@ func (ds *RMFDatasource) serveTSFrame(ctx context.Context, sender *backend.Strea time.Sleep(d) } logger.Debug("executing query", "request", r.String()) - f, err = ds.getFrame(r, true) + fa, err = ds.getFrame(r, true) if err != nil { logger.Error("failed to get data", "request", r.String(), "reason", err) f = frame.NoDataFrame(r.TimeRange.To) } else { + f = fa[0] if !hist { t, ok := f.Fields[0].At(0).(time.Time) if !ok || t.Before(r.TimeRange.To) { diff --git a/grafana/rmf-app/src/panels/report/table-component/table.component.tsx b/grafana/rmf-app/src/panels/report/table-component/table.component.tsx index 32c3e412..9ca282de 100644 --- a/grafana/rmf-app/src/panels/report/table-component/table.component.tsx +++ b/grafana/rmf-app/src/panels/report/table-component/table.component.tsx @@ -68,6 +68,7 @@ export const TableComponent: React.FC = ({ options, fieldConfig, data, wi { data.series.length > 0 && data.series[0].fields !== undefined ) { - frameData = [ - { + frameData = [] as DataFrame[]; + if (data.series.length > 0 && !data.series[0].name?.startsWith(BANNER_PREFIX) && !data.series[0].name?.startsWith(CAPTION_PREFIX)) { + frameData.push({ + name: data.series[0].name, fields: data.series[0].fields, length: data.series[0].fields[0].values.length, - } as DataFrame, - { + } as DataFrame) + } else { + frameData.push({ + fields: [], + length: 0, + } as DataFrame) + } + if (data.series.length > 1) { + frameData.push({ fields: data.series[1].fields, length: data.series[1].fields[0].values.length, - } as DataFrame, - { + } as DataFrame) + } + if (data.series.length > 2) { + frameData.push({ fields: data.series[2].fields, length: data.series[2].fields[0].values.length, - } as DataFrame, - ] as DataFrame[]; + } as DataFrame) + } } return frameData; @@ -77,12 +88,17 @@ export const applySelectedDefaultsAndOverrides = ( data: DataFrame[] ): ReportData => { let frames = applyRawFieldOverrides(data); - let reportFrame: DataFrame = frames[0]; - let intervalFrame: DataFrame = frames[1]; - let captionFrame: DataFrame = frames[2]; - let bannerFields: Field[] = intervalFrame.fields; - let captionFields: Field[] = captionFrame.fields; - let tableFields: Field[] = reportFrame.fields; + let tableFields: Field[] = frames[0].fields; + + let bannerFields: Field[] = [] + if (frames.length > 1) { + bannerFields = frames[1].fields; + } + + let captionFields: Field[] = []; + if (frames.length > 2) { + captionFields = frames[2].fields; + } // First apply default settings tableFields.map((field: Field) => { @@ -156,7 +172,7 @@ export const applySelectedDefaultsAndOverrides = ( } }); } - return { bannerFields: bannerFields, captionFields: captionFields, tableData: frames }; + return { bannerFields: bannerFields, captionFields: captionFields, tableData: [{fields: tableFields, length: tableFields.length} as DataFrame] }; }; export const applyFieldOverridesForBarGauge = (finalData: DataFrame[]): DataFrame[] => { From dcd07398602e5495bb125ea863852a6c79fdb379 Mon Sep 17 00:00:00 2001 From: dprizentsov Date: Mon, 25 Aug 2025 17:27:43 +0200 Subject: [PATCH 03/15] send table data, interval info and caption in separate frames, request frame by index Signed-off-by: dprizentsov --- grafana/rmf-app/grammar/RMFQuery.g4 | 6 ++++-- grafana/rmf-app/pkg/plugin/datasource.go | 8 ++++++-- grafana/rmf-app/pkg/plugin/dds/request.go | 9 +++++++++ grafana/rmf-app/pkg/plugin/frame/frame.go | 12 ++++++++++-- .../datasources/rmf-datasource/parser/core/parser.ts | 9 ++++++++- .../report/table-component/table.component.tsx | 4 ++-- .../panels/report/table-component/table.helper.ts | 2 +- 7 files changed, 40 insertions(+), 10 deletions(-) diff --git a/grafana/rmf-app/grammar/RMFQuery.g4 b/grafana/rmf-app/grammar/RMFQuery.g4 index c2a5d61d..74fe5f87 100644 --- a/grafana/rmf-app/grammar/RMFQuery.g4 +++ b/grafana/rmf-app/grammar/RMFQuery.g4 @@ -36,9 +36,10 @@ query: WS* RES_TYPE (DOT REPORT)? DOT identifier WS* qualifiers? WS* EOF; // string literals which we also support. identifier: stringSpaced; qualifiers: LBRACE WS* qualifier WS* (COMMA WS* qualifier WS*)* RBRACE; -qualifier: ulq | name | filter | workscope; +qualifier: ulq | name | filter | workscope | frame; ulq: ULQ EQUAL string; name: NAME EQUAL string; +frame: FRAME EQUAL string; filter: FILTER EQUAL filterValue; filterValue: filterItem (SEMI filterItem)*; filterItem: pat | lb | ub | hi | lo | ord; @@ -55,12 +56,13 @@ workscopeValue: string? COMMA string? COMMA WORKSCOPE_TYPE; number: INTEGER | DECIMAL; stringUnquoted : IDENTIFIER | RES_TYPE | REPORT | WORKSCOPE | RANGE | ULQ | NAME | FILTER - | PAT | LB | UB | HI | LO | ORD | ORD_OPTION | INTEGER | STRING_UNQUOTED; + | PAT | LB | UB | HI | LO | ORD | ORD_OPTION | INTEGER | STRING_UNQUOTED | FRAME; stringSpaced: stringUnquoted (WS + stringUnquoted)*; stringDotted: stringUnquoted (DOT stringUnquoted)*; string: stringDotted | STRING_QUOTED; +FRAME: F R A M E; REPORT: R E P O R T; WORKSCOPE: W O R K S C O P E; RANGE: R A N G E; diff --git a/grafana/rmf-app/pkg/plugin/datasource.go b/grafana/rmf-app/pkg/plugin/datasource.go index fdce41e6..9aa15df2 100644 --- a/grafana/rmf-app/pkg/plugin/datasource.go +++ b/grafana/rmf-app/pkg/plugin/datasource.go @@ -286,8 +286,12 @@ func (ds *RMFDatasource) QueryData(ctx context.Context, req *backend.QueryDataRe response.Status = backend.StatusInternal } } else if fms != nil { - for _, f := range fms { - response.Frames = append(response.Frames, f) + if r.Frame < 0 { + for _, f := range fms { + response.Frames = append(response.Frames, f) + } + } else { + response.Frames = append(response.Frames, fms[r.Frame]) } } } diff --git a/grafana/rmf-app/pkg/plugin/dds/request.go b/grafana/rmf-app/pkg/plugin/dds/request.go index c5106831..9469a522 100644 --- a/grafana/rmf-app/pkg/plugin/dds/request.go +++ b/grafana/rmf-app/pkg/plugin/dds/request.go @@ -20,6 +20,7 @@ package dds import ( "fmt" "net/url" + "strconv" "strings" "time" @@ -29,11 +30,19 @@ import ( type Request struct { Resource string TimeRange data.TimeRange + Frame int } func NewRequest(res string, from time.Time, to time.Time, step time.Duration) *Request { + frame := -1 + i := strings.Index(res, "&frame=") + if i > 0 { + frame, _ = strconv.Atoi(res[i+7 : i+8]) + res = res[:i] + } q := Request{Resource: res, TimeRange: data.TimeRange{From: from, To: to}} q.Align(step) + q.Frame = frame return &q } diff --git a/grafana/rmf-app/pkg/plugin/frame/frame.go b/grafana/rmf-app/pkg/plugin/frame/frame.go index afb0a45d..b0c52cf5 100644 --- a/grafana/rmf-app/pkg/plugin/frame/frame.go +++ b/grafana/rmf-app/pkg/plugin/frame/frame.go @@ -204,14 +204,14 @@ func buildForReport(sysplex string, report *dds.Report, headers *dds.HeaderMap) rawValue := row.Cols[i] if field == nil { if col.Type == dds.NumericColType { - field = data.NewField(header, nil, []*float64{parseFloat(rawValue)}) + field = data.NewField(header, nil, []float64{parseFloat2(rawValue)}) } else { field = data.NewField(header, nil, []string{rawValue}) } continue } if col.Type == dds.NumericColType { - field.Append(parseFloat(rawValue)) + field.Append(parseFloat2(rawValue)) } else { field.Append(rawValue) } @@ -271,3 +271,11 @@ func parseFloat(value string) *float64 { } return nil } + +func parseFloat2(value string) float64 { + // Value can contain different kinds of text meaning n/a: NaN, blank value, Deact, etc. + if parsed, err := strconv.ParseFloat(value, 64); err == nil && !math.IsNaN(parsed) { + return parsed + } + return 0.0 +} diff --git a/grafana/rmf-app/src/datasources/rmf-datasource/parser/core/parser.ts b/grafana/rmf-app/src/datasources/rmf-datasource/parser/core/parser.ts index c062dcc3..ed7dbb91 100644 --- a/grafana/rmf-app/src/datasources/rmf-datasource/parser/core/parser.ts +++ b/grafana/rmf-app/src/datasources/rmf-datasource/parser/core/parser.ts @@ -53,7 +53,7 @@ export class Parser { const isReport = tree.REPORT() !== null; const identifier = (tree.identifier()?.getText() || '').trim(); - let qualifierValues = { name: '', ulq: '', workscope: '' }; + let qualifierValues = { name: '', ulq: '', workscope: '', frame: '' }; let filters: string[] = []; for (let qual of tree.qualifiers()?.qualifier_list() || []) { let q; @@ -66,6 +66,9 @@ export class Parser { if ((q = qual.workscope())) { qualifierValues['workscope'] = (q.workscopeValue()?.getText() || '').trim().toUpperCase(); } + if ((q = qual.frame())) { + qualifierValues['frame'] = (q.string_()?.getText() || '').trim().toUpperCase(); + } if ((q = qual.filter())) { let filterValue = (q.filterValue()?.getText() || '').trim(); for (let value of filterValue.split(';')) { @@ -76,6 +79,7 @@ export class Parser { let resource = `${qualifierValues['ulq'] || ''},${qualifierValues['name'] || ''},${resType}`; let workscope = qualifierValues['workscope']; + let frame = qualifierValues['frame']; let query = `${isReport ? 'report' : 'id'}=${identifier}&resource=${resource}`; if (filters.length > 0) { query += `&filter=${filters.join('%3B')}`; @@ -83,6 +87,9 @@ export class Parser { if (workscope) { query += `&workscope=${workscope}`; } + if (frame) { + query += `&frame=${frame}`; + } parserGrammarResult.query = query; lexerGrammarResult = lexerCustomErrorListener.getResult(); diff --git a/grafana/rmf-app/src/panels/report/table-component/table.component.tsx b/grafana/rmf-app/src/panels/report/table-component/table.component.tsx index 9ca282de..4e7d3444 100644 --- a/grafana/rmf-app/src/panels/report/table-component/table.component.tsx +++ b/grafana/rmf-app/src/panels/report/table-component/table.component.tsx @@ -67,8 +67,8 @@ export const TableComponent: React.FC = ({ options, fieldConfig, data, wi {( tableData && tableData.length > 0 && tableData[0].fields && tableData[0].fields.length > 0) ? (
{ From 7cd52a81da8519e7cc64d16342befc8e02c4e33d Mon Sep 17 00:00:00 2001 From: dprizentsov Date: Tue, 26 Aug 2025 18:20:41 +0200 Subject: [PATCH 04/15] variable query implementations for sysplex and systems Signed-off-by: dprizentsov --- grafana/rmf-app/pkg/plugin/datasource.go | 20 ++++++++++++++++--- grafana/rmf-app/pkg/plugin/dds/client.go | 10 +++++++++- grafana/rmf-app/pkg/plugin/dds/response.go | 10 ++++++++++ .../rmf-datasource/common/common.helper.ts | 6 ++++++ .../datasources/rmf-datasource/datasource.ts | 9 +++++++++ 5 files changed, 51 insertions(+), 4 deletions(-) diff --git a/grafana/rmf-app/pkg/plugin/datasource.go b/grafana/rmf-app/pkg/plugin/datasource.go index 9aa15df2..e53fbbdf 100644 --- a/grafana/rmf-app/pkg/plugin/datasource.go +++ b/grafana/rmf-app/pkg/plugin/datasource.go @@ -23,6 +23,7 @@ import ( "errors" "net/http" "runtime/debug" + "slices" "strings" "sync" "time" @@ -148,13 +149,26 @@ func (ds *RMFDatasource) CallResource(ctx context.Context, req *backend.CallReso switch req.Path { // FIXME: it's a contained.xml request for M3 resource tree. Re-factor accordingly. case "variablequery": - // Extract the query parameter from the POST request - jsonStr := string(req.Body) varRequest := VariableQueryRequest{} - err := json.Unmarshal([]byte(jsonStr), &varRequest) + err := json.Unmarshal(req.Body, &varRequest) if err != nil { return log.ErrorWithId(logger, log.InternalError, "could not unmarshal data", "error", err) } + q := varRequest.Query + q = strings.Trim(q, " ") + q = strings.ToLower(q) + + if "sysplex" == q { + sysplex := ds.ddsClient.GetSysplex() + return sender.Send(&backend.CallResourceResponse{Status: http.StatusOK, Body: []byte(sysplex)}) + } else if "systems" == q { + systems := ds.ddsClient.GetSystems() + slices.Sort(systems) + result := strings.Join(systems, "\n") + return sender.Send(&backend.CallResourceResponse{Status: http.StatusOK, Body: []byte(result)}) + } + + // Extract the query parameter from the POST request ddsResource := varRequest.Query if len(strings.TrimSpace(ddsResource)) == 0 { return log.ErrorWithId(logger, log.InputError, "variable query cannot be blank") diff --git a/grafana/rmf-app/pkg/plugin/dds/client.go b/grafana/rmf-app/pkg/plugin/dds/client.go index 8ab16459..a064b307 100644 --- a/grafana/rmf-app/pkg/plugin/dds/client.go +++ b/grafana/rmf-app/pkg/plugin/dds/client.go @@ -65,6 +65,7 @@ type Client struct { headerMap *HeaderMap timeData *TimeData resource *Resource + systems []string useXmlExt atomic.Bool stopChan chan struct{} @@ -248,7 +249,7 @@ func (c *Client) ensureTimeData() *TimeData { func (c *Client) updateTimeData() *TimeData { logger := log.Logger.With("func", "updateTimeData") result, _, _ := c.single.Do("timeData", func() (any, error) { - response, err := c.Get(PerformPath, "resource", ",,SYSPLEX", "id", "8D0D50") + response, err := c.Get(PerformPath, "resource", ",,SYSPLEX", "id", "8D0D60") if err != nil { logger.Error("unable to fetch DDS time data", "error", err) return nil, err @@ -262,9 +263,11 @@ func (c *Client) updateTimeData() *TimeData { if resource == nil { logger.Error("unable to fetch DDS resource", "error", "no resource data in DDS response") } + systems := response.Reports[0].GetRowNames() c.rwMutex.Lock() c.timeData = timeData c.resource = resource + c.systems = systems c.rwMutex.Unlock() logger.Debug("DDS time data updated") return timeData, nil @@ -291,3 +294,8 @@ func (c *Client) GetSysplex() string { } return "" } + +func (c *Client) GetSystems() []string { + c.ensureTimeData() + return c.systems +} diff --git a/grafana/rmf-app/pkg/plugin/dds/response.go b/grafana/rmf-app/pkg/plugin/dds/response.go index 77df93a0..d1cc8002 100644 --- a/grafana/rmf-app/pkg/plugin/dds/response.go +++ b/grafana/rmf-app/pkg/plugin/dds/response.go @@ -63,6 +63,16 @@ type Report struct { Rows []Row `json:"row"` } +func (r Report) GetRowNames() []string { + var names []string + if r.Rows != nil { + for _, row := range r.Rows { + names = append(names, row.Cols[0]) + } + } + return names +} + type TimeData struct { // FIXME: don't use these in report headers: they are in DDS timezone. Remove from the mapping. LocalStart DateTime `json:"localStart"` diff --git a/grafana/rmf-app/src/datasources/rmf-datasource/common/common.helper.ts b/grafana/rmf-app/src/datasources/rmf-datasource/common/common.helper.ts index 2e2d29af..4227256f 100644 --- a/grafana/rmf-app/src/datasources/rmf-datasource/common/common.helper.ts +++ b/grafana/rmf-app/src/datasources/rmf-datasource/common/common.helper.ts @@ -149,6 +149,12 @@ export const queryValidation = (query: string, resourceBaseData: any): QueryVali columnName: '', errorMessage: '', }; + if ("sysplex" == query.toLowerCase() || + "systems" == query.toLowerCase()) { + queryResult.result = true + queryResult.resourceCommand = query + return queryResult + } let result = true; if (query === '' || query.length < 20) { result = false; diff --git a/grafana/rmf-app/src/datasources/rmf-datasource/datasource.ts b/grafana/rmf-app/src/datasources/rmf-datasource/datasource.ts index bbe086d5..8b5c5275 100644 --- a/grafana/rmf-app/src/datasources/rmf-datasource/datasource.ts +++ b/grafana/rmf-app/src/datasources/rmf-datasource/datasource.ts @@ -76,6 +76,15 @@ export class DataSource extends DataSourceWithBackend { const metricFindValue = this.loadDataFromService(resourceString, id, options) .then((resp: any) => { + if ("sysplex" == queryResult.resourceCommand.toLowerCase() || + "systems" == queryResult.resourceCommand.toLowerCase()) { + const retResult: MetricFindValue[] = []; + let lines = (resp.data as string).split('\n'); + for (var line of lines) { + retResult.push({ text: line }); + } + return retResult; + } const result = JSON.parse(resp.data); let resNames = getResourceName(result); const retResult: MetricFindValue[] = []; From 60625543e5cbb002004f35550b8e44291f85ce15 Mon Sep 17 00:00:00 2001 From: dprizentsov Date: Thu, 28 Aug 2025 19:15:49 +0200 Subject: [PATCH 05/15] add link to external dashboards while installing dasbords, add variables, fixes Signed-off-by: dprizentsov --- grafana/rmf-app/pkg/plugin/config.go | 13 +- grafana/rmf-app/pkg/plugin/datasource.go | 60 ++++++++- grafana/rmf-app/pkg/plugin/frame/frame.go | 11 +- grafana/rmf-app/pkg/plugin/query.go | 3 +- grafana/rmf-app/src/components/Root/Root.tsx | 46 +++++-- grafana/rmf-app/src/components/Root/types.ts | 6 + grafana/rmf-app/src/components/Root/utils.ts | 126 +++++++++++++++++- .../rmf-datasource/common/common.helper.ts | 5 +- .../rmf-datasource/common/types.ts | 1 + .../config-editor/config-editor.component.tsx | 17 +++ .../datasources/rmf-datasource/datasource.ts | 9 -- 11 files changed, 252 insertions(+), 45 deletions(-) diff --git a/grafana/rmf-app/pkg/plugin/config.go b/grafana/rmf-app/pkg/plugin/config.go index 5ab25b57..902d0112 100644 --- a/grafana/rmf-app/pkg/plugin/config.go +++ b/grafana/rmf-app/pkg/plugin/config.go @@ -44,12 +44,13 @@ type Config struct { // Custom RMF settings. CacheSizeRaw string `json:"cacheSize"` // Legacy custom RMF settings. We should ge rid of these at some point. - Server *string `json:"path"` - Port string `json:"port"` - SSL bool `json:"ssl"` - Username string `json:"userName"` - Password string `json:"password"` - SSLVerify bool `json:"skipVerify"` // NB: the meaning of JSON field is inverted. + Server *string `json:"path"` + Port string `json:"port"` + SSL bool `json:"ssl"` + Username string `json:"userName"` + Password string `json:"password"` + SSLVerify bool `json:"skipVerify"` // NB: the meaning of JSON field is inverted. + OmegamonDs string `json:"omegamonDs"` } } diff --git a/grafana/rmf-app/pkg/plugin/datasource.go b/grafana/rmf-app/pkg/plugin/datasource.go index e53fbbdf..b0020076 100644 --- a/grafana/rmf-app/pkg/plugin/datasource.go +++ b/grafana/rmf-app/pkg/plugin/datasource.go @@ -64,6 +64,7 @@ type RMFDatasource struct { frameCache *cache.FrameCache ddsClient *dds.Client single singleflight.Group + omegamonDs string } // NewRMFDatasource creates a new instance of the RMF datasource. @@ -80,6 +81,7 @@ func NewRMFDatasource(ctx context.Context, settings backend.DataSourceInstanceSe config.JSON.TlsSkipVerify, config.JSON.DisableCompression) ds.channelCache = cache.NewChannelCache(ChannelCacheSizeMB) ds.frameCache = cache.NewFrameCache(config.CacheSize) + ds.omegamonDs = config.JSON.OmegamonDs logger.Info("initialized a datasource", "uid", settings.UID, "name", settings.Name, "url", config.URL, "timeout", config.Timeout, "cacheSize", config.CacheSize, @@ -159,13 +161,15 @@ func (ds *RMFDatasource) CallResource(ctx context.Context, req *backend.CallReso q = strings.ToLower(q) if "sysplex" == q { - sysplex := ds.ddsClient.GetSysplex() - return sender.Send(&backend.CallResourceResponse{Status: http.StatusOK, Body: []byte(sysplex)}) + data, _ := ds.sysplexContainedJson() + logger.Info("### " + string(data)) + return sender.Send(&backend.CallResourceResponse{Status: http.StatusOK, Body: data}) } else if "systems" == q { - systems := ds.ddsClient.GetSystems() - slices.Sort(systems) - result := strings.Join(systems, "\n") - return sender.Send(&backend.CallResourceResponse{Status: http.StatusOK, Body: []byte(result)}) + data, _ := ds.systemsContainedJson() + return sender.Send(&backend.CallResourceResponse{Status: http.StatusOK, Body: data}) + } else if "omegamonds" == q { + data, _ := ds.omegamonContainedJson() + return sender.Send(&backend.CallResourceResponse{Status: http.StatusOK, Body: data}) } // Extract the query parameter from the POST request @@ -198,6 +202,50 @@ func (ds *RMFDatasource) CallResource(ctx context.Context, req *backend.CallReso } } +func (ds *RMFDatasource) sysplexContainedJson() ([]byte, error) { + sysplex := ds.ddsClient.GetSysplex() + return toContainedJson([]string{sysplex}) +} + +func (ds *RMFDatasource) systemsContainedJson() ([]byte, error) { + systems := ds.ddsClient.GetSystems() + slices.Sort(systems) + return toContainedJson(systems) +} + +func (ds *RMFDatasource) omegamonContainedJson() ([]byte, error) { + return toContainedJson([]string{ds.omegamonDs}) +} + +func toContainedJson(resources []string) ([]byte, error) { + type Resource struct { + Reslabel string `json:"reslabel"` + } + type Contained struct { + Resource []Resource `json:"resource"` + } + type ContainedResource struct { + Contained Contained `json:"contained"` + } + type Ddsml struct { + ContainedResourcesList []ContainedResource `json:"containedResourcesList"` + } + + contained := Contained{Resource: []Resource{}} + for _, res := range resources { + contained.Resource = append(contained.Resource, Resource{Reslabel: "," + res + ","}) + } + + result := Ddsml{ + ContainedResourcesList: []ContainedResource{ + ContainedResource{ + Contained: contained, + }, + }, + } + return json.Marshal(result) +} + type RequestParams struct { Resource struct { Value string `json:"value"` diff --git a/grafana/rmf-app/pkg/plugin/frame/frame.go b/grafana/rmf-app/pkg/plugin/frame/frame.go index b0c52cf5..e7e913d3 100644 --- a/grafana/rmf-app/pkg/plugin/frame/frame.go +++ b/grafana/rmf-app/pkg/plugin/frame/frame.go @@ -79,7 +79,7 @@ func validateResponse(ddsResponse *dds.Response) error { return nil } -func Build(sysplex string, ddsResponse *dds.Response, headers *dds.HeaderMap, wide bool) ([]*data.Frame, error) { +func Build(ddsResponse *dds.Response, headers *dds.HeaderMap, wide bool) ([]*data.Frame, error) { err := validateResponse(ddsResponse) if err != nil { return nil, err @@ -89,7 +89,7 @@ func Build(sysplex string, ddsResponse *dds.Response, headers *dds.HeaderMap, wi frameName := strings.Trim(report.Metric.Description, " ") if format == dds.ReportFormat { - return buildForReport(sysplex, &report, headers), nil + return buildForReport(&report, headers), nil } else if wide { result := make([]*data.Frame, 1) result[0] = buildWideForMetric(&report, frameName) @@ -191,7 +191,7 @@ func iterateMetricRows(report *dds.Report, defaultName string, process func(name } } -func buildForReport(sysplex string, report *dds.Report, headers *dds.HeaderMap) []*data.Frame { +func buildForReport(report *dds.Report, headers *dds.HeaderMap) []*data.Frame { reportName := report.Metric.Id captionFrame := data.NewFrame("Caption::" + reportName) intervalFrame := data.NewFrame("Banner::" + reportName) @@ -246,11 +246,6 @@ func buildForReport(sysplex string, report *dds.Report, headers *dds.HeaderMap) timeData.LocalEnd.Sub(timeData.LocalStart.Time).String()) intervalFrame.Fields = append(intervalFrame.Fields, field) - field = buildField("Sysplex", BannerPrefix, sysplex) - intervalFrame.Fields = append(intervalFrame.Fields, field) - field = buildField("Name", BannerPrefix, report.Resource.GetName()) - intervalFrame.Fields = append(intervalFrame.Fields, field) - for _, caption := range report.Caption.Vars { name := headers.Get(reportName, caption.Name) field := buildField(name, CaptionPrefix, caption.Value) diff --git a/grafana/rmf-app/pkg/plugin/query.go b/grafana/rmf-app/pkg/plugin/query.go index 996f5f34..0fd39813 100644 --- a/grafana/rmf-app/pkg/plugin/query.go +++ b/grafana/rmf-app/pkg/plugin/query.go @@ -37,8 +37,7 @@ func (ds *RMFDatasource) getFrame(r *dds.Request, wide bool) ([]*data.Frame, err return nil, err } headers := ds.ddsClient.GetCachedHeaders() - sysplex := ds.ddsClient.GetSysplex() - fms, err := frame.Build(sysplex, ddsResponse, headers, wide) + fms, err := frame.Build(ddsResponse, headers, wide) if err != nil { return nil, err } diff --git a/grafana/rmf-app/src/components/Root/Root.tsx b/grafana/rmf-app/src/components/Root/Root.tsx index 330d525f..acd51cfe 100644 --- a/grafana/rmf-app/src/components/Root/Root.tsx +++ b/grafana/rmf-app/src/components/Root/Root.tsx @@ -24,7 +24,7 @@ import { GlobalSettings } from '../../types'; import { DASHBOARDS as DDS_DASHBOARDS } from '../../dashboards/dds'; import { DASHBOARDS as PROM_DASHBOARDS } from '../../dashboards/prometheus'; import { findFolder, deleteFolder, installDashboards } from './utils'; -import { FolderStatus, Operation, OperCode, OperStatus } from './types'; +import { FolderStatus, Operation, OperCode, OperStatus, FalconStatus } from './types'; import { StatusIcon } from './StatusIcon'; import { Space } from './Space'; import { Header } from './Header'; @@ -34,12 +34,15 @@ const DDS_FOLDER_NAME = 'IBM RMF (DDS)'; const PROM_FOLDER_UID = 'ibm-rmf-prometheus'; const PROM_FOLDER_NAME = 'IBM RMF (Prometheus)'; const DATASOURCE_API = '/api/datasources'; +const FALCON_AS_DASHBOARD = "d/de6imy1nncd1cf/system-cpu-overview" +const FALCON_SYS_DASHBOARD = "d/eefk6eunuubk0e/z-os-enterprise-overview" interface Props extends AppRootProps {} interface State { dds: FolderStatus; prom: FolderStatus; + falcon: FalconStatus; } export class Root extends PureComponent { @@ -56,6 +59,11 @@ export class Root extends PureComponent { installed: false, operation: { code: OperCode.None, status: OperStatus.None }, }, + falcon: { + enabled: false, + asDashboard: FALCON_AS_DASHBOARD, + sysDashboard: FALCON_SYS_DASHBOARD, + } }; } @@ -78,6 +86,9 @@ export class Root extends PureComponent { installed: promFolderPath !== undefined, folderPath: promFolderPath || PROM_FOLDER_NAME, }, + falcon: { + ...prevState.falcon, + } })); } catch (error) { console.error('failed to update state', error); @@ -113,7 +124,7 @@ export class Root extends PureComponent { })); }; - processFolder = async (folderUid: string, operCode: OperCode) => { + processFolder = async (folderUid: string, operCode: OperCode, falcon: FalconStatus) => { const isDds = folderUid === DDS_FOLDER_UID; const defaultFolderName = isDds ? DDS_FOLDER_NAME : PROM_FOLDER_NAME; const dashboards = isDds ? DDS_DASHBOARDS : PROM_DASHBOARDS; @@ -128,7 +139,7 @@ export class Root extends PureComponent { await deleteFolder(folderUid); } if (operCode === OperCode.Reset || operCode === OperCode.Install) { - await installDashboards(folderUid, defaultFolderName, dashboards); + await installDashboards(folderUid, defaultFolderName, dashboards, falcon); } this.setFolderState(isDds, { code: operCode, @@ -153,7 +164,7 @@ export class Root extends PureComponent { }; render() { - const { dds, prom } = this.state; + const { dds, prom, falcon } = this.state; const isBusy = dds.operation.status === OperStatus.InProgress || prom.operation.status === OperStatus.InProgress; return ( @@ -196,6 +207,21 @@ export class Root extends PureComponent { [UID='{DDS_FOLDER_UID}']

+

+ Link it with Omegamon Falcon UI (Experimental): + + {falcon.enabled = e.target.checked;}}/> +

+ Address Space Details Dashboard: + + {falcon.asDashboard = e.target.value;}}/> +

+

+ LPAR Details Dashboard: + + {falcon.sysDashboard = e.target.value;}}/> +

+

@@ -213,7 +239,7 @@ export class Root extends PureComponent { dds.operation.code === OperCode.Install || dds.operation.code === OperCode.Reset ) : async () => { - await this.processFolder(DDS_FOLDER_UID, OperCode.Install); + await this.processFolder(DDS_FOLDER_UID, OperCode.Install, falcon); } } > @@ -229,7 +255,7 @@ export class Root extends PureComponent { fill="outline" icon={'process'} onClick={async () => { - await this.processFolder(DDS_FOLDER_UID, OperCode.Reset); + await this.processFolder(DDS_FOLDER_UID, OperCode.Reset, falcon); }} > Update / Reset @@ -243,7 +269,7 @@ export class Root extends PureComponent { fill="outline" icon={'trash-alt'} onClick={async () => { - await this.processFolder(DDS_FOLDER_UID, OperCode.Delete); + await this.processFolder(DDS_FOLDER_UID, OperCode.Delete, falcon); }} > Delete @@ -289,7 +315,7 @@ export class Root extends PureComponent { prom.operation.code === OperCode.Install || prom.operation.code === OperCode.Reset ) : async () => { - await this.processFolder(PROM_FOLDER_UID, OperCode.Install); + await this.processFolder(PROM_FOLDER_UID, OperCode.Install, falcon); } } > @@ -305,7 +331,7 @@ export class Root extends PureComponent { fill="outline" icon={'process'} onClick={async () => { - await this.processFolder(PROM_FOLDER_UID, OperCode.Reset); + await this.processFolder(PROM_FOLDER_UID, OperCode.Reset, falcon); }} > Update / Reset @@ -319,7 +345,7 @@ export class Root extends PureComponent { fill="outline" icon={'trash-alt'} onClick={async () => { - await this.processFolder(PROM_FOLDER_UID, OperCode.Delete); + await this.processFolder(PROM_FOLDER_UID, OperCode.Delete, falcon); }} > Delete diff --git a/grafana/rmf-app/src/components/Root/types.ts b/grafana/rmf-app/src/components/Root/types.ts index 07ef1028..f2d9e1df 100644 --- a/grafana/rmf-app/src/components/Root/types.ts +++ b/grafana/rmf-app/src/components/Root/types.ts @@ -39,3 +39,9 @@ export interface FolderStatus { installed: boolean; operation: Operation; } + +export interface FalconStatus { + enabled: boolean; + asDashboard: string + sysDashboard: string +} \ No newline at end of file diff --git a/grafana/rmf-app/src/components/Root/utils.ts b/grafana/rmf-app/src/components/Root/utils.ts index db110d49..69f3ff52 100644 --- a/grafana/rmf-app/src/components/Root/utils.ts +++ b/grafana/rmf-app/src/components/Root/utils.ts @@ -14,8 +14,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { FalconStatus } from './types'; + const FOLDERS_API = '/api/folders'; const DASHBOARDS_API = '/api/dashboards/db'; +const SYSPLEX_NAME = "sysplex_name"; +const LPAR = "LPAR"; +const OMEGAMON_DS = "OmegamonDs"; +const OMEG_PLEX_LPAR_MVSSYS_EXPR = "${" + SYSPLEX_NAME + "}:${" + LPAR + "}:MVSSYS"; // Don't use `getBackendSrv` to avoid built-in notifications: they won't work as we need them. @@ -60,7 +66,13 @@ export async function deleteFolder(uid: string) { } } -async function createDashboard(folderUid: string, dashboard: object) { +async function createDashboard(folderUid: string, dashboard: object, falcon: FalconStatus) { + if (falcon.enabled && falconJobRelated(dashboard)) { + falconJobUpdate(falcon, dashboard); + } + if (falcon.enabled && falconSystemRelated(dashboard)) { + falconSystemUpdate(falcon, dashboard); + } // Don't use `getBackendSrv` to avoid notifications const res = await fetch(DASHBOARDS_API, { method: 'POST', @@ -74,10 +86,118 @@ async function createDashboard(folderUid: string, dashboard: object) { } } -export async function installDashboards(folderUid: string, defaultFolderName: string, dashboards: object[]) { +export async function installDashboards(folderUid: string, defaultFolderName: string, dashboards: object[], falcon: FalconStatus) { const folderPath = await findFolder(folderUid); if (folderPath === undefined) { await createFolder(folderUid, defaultFolderName); } - await Promise.all(dashboards.map((dashboard) => createDashboard(folderUid, dashboard))); + await Promise.all(dashboards.map((dashboard) => createDashboard(folderUid, dashboard, falcon))); +} + +export const FALCON_JOB_RELATED = [ + "PROC", "PROCU", "STOR", "STORC", "STORM", "USAGE"//TODO add more +]; + +export const FALCON_SYSTEM_RELATED = [ + "CPC",//TODO add more +]; + +function falconJobRelated(dashboard: any): boolean { + return FALCON_JOB_RELATED.indexOf(dashboard.title) > -1; +} + +function falconSystemRelated(dashboard: any): boolean { + return FALCON_SYSTEM_RELATED.indexOf(dashboard.title) > -1; +} + +function addVars(dashboard: any) { + dashboard.templating.list.forEach((t: any) => { + if (t.name === LPAR) { + t.query = "systems"; + t.definition = t.query; + } + }) + + dashboard.templating.list.push({ + name: SYSPLEX_NAME, + datasource: { + type: "ibm-rmf-datasource", + uid: "${sysplex}" + }, + type: "query", + query: "sysplex", + hide: 1, + includeAll: false, + multi: false, + allowCustomValue: false, + }) + + dashboard.templating.list.push({ + name: OMEGAMON_DS, + label: "Omegamon Data source", + description: "Omegamon Data source (optional)", + datasource: { + type: "ibm-rmf-datasource", + uid: "${sysplex}" + }, + type: "query", + query: "OmegamonDs", + hide: 0, + includeAll: false, + multi: false, + allowCustomValue: false, + }) +} + +function falconJobUpdate(falcon: FalconStatus, dashboard: any) { + addVars(dashboard); + + const JOB_NAME_EXPR = "${__data.fields[\"Job Name\"]}"; + const ASID_EXPR = "${__data.fields[\"ASID (dec)\"]}"; + let baseUrl = falcon.asDashboard; + if (baseUrl.indexOf("?") > -1) { + baseUrl += "&"; + } else { + baseUrl += "?"; + } + + dashboard.panels.forEach((p: any) => { + p.fieldConfig.defaults.links = []; + p.fieldConfig.defaults.links.push({ + targetBlank: true, + title: "Job Details ${__data.fields[\"Job Name\"]}", + url: baseUrl + "var-dataSource=${" + OMEGAMON_DS + "}" + + "&var-managedSystem=" + OMEG_PLEX_LPAR_MVSSYS_EXPR + + "&var-_addressSpaceName=" + JOB_NAME_EXPR + + "&var-_ASID=" + ASID_EXPR + + "&var-_iAddressSpaceName=" + JOB_NAME_EXPR + + "&var-_iASID=" + ASID_EXPR + + "&from=$__from" + + "&to=$__to", + }); + }); } + +function falconSystemUpdate(falcon: FalconStatus, dashboard: any) { + addVars(dashboard); + let baseUrl = falcon.sysDashboard; + if (baseUrl.indexOf("?") > -1) { + baseUrl += "&"; + } else { + baseUrl += "?"; + } + + if (!dashboard.links) { + dashboard.links = []; + } + + dashboard.links.push({ + type: "link", + icon: "dashboard", + keepTime: true, + targetBlank: true, + title: "z/OS Enterprise Overview", + url: baseUrl + "var-dataSource=${" + OMEGAMON_DS + "}" + + "&var-managedSystem=" + OMEG_PLEX_LPAR_MVSSYS_EXPR, + }); +} \ No newline at end of file diff --git a/grafana/rmf-app/src/datasources/rmf-datasource/common/common.helper.ts b/grafana/rmf-app/src/datasources/rmf-datasource/common/common.helper.ts index 4227256f..019489fa 100644 --- a/grafana/rmf-app/src/datasources/rmf-datasource/common/common.helper.ts +++ b/grafana/rmf-app/src/datasources/rmf-datasource/common/common.helper.ts @@ -149,10 +149,13 @@ export const queryValidation = (query: string, resourceBaseData: any): QueryVali columnName: '', errorMessage: '', }; + //TODO remove when deprecated if ("sysplex" == query.toLowerCase() || - "systems" == query.toLowerCase()) { + "systems" == query.toLowerCase() || + "omegamonds" == query.toLowerCase()) { queryResult.result = true queryResult.resourceCommand = query + queryResult.columnName = "RESLABEL" return queryResult } let result = true; diff --git a/grafana/rmf-app/src/datasources/rmf-datasource/common/types.ts b/grafana/rmf-app/src/datasources/rmf-datasource/common/types.ts index 3445c3af..703c6371 100644 --- a/grafana/rmf-app/src/datasources/rmf-datasource/common/types.ts +++ b/grafana/rmf-app/src/datasources/rmf-datasource/common/types.ts @@ -126,6 +126,7 @@ export interface RMFDataSourceJsonData extends DataSourceJsonData { userName?: string; // NB: the meaning of that is inverted. If set, we do verify certificates. skipVerify?: boolean; + omegamonDs?: string; } /** diff --git a/grafana/rmf-app/src/datasources/rmf-datasource/config-editor/config-editor.component.tsx b/grafana/rmf-app/src/datasources/rmf-datasource/config-editor/config-editor.component.tsx index 03b21d56..f42638e8 100644 --- a/grafana/rmf-app/src/datasources/rmf-datasource/config-editor/config-editor.component.tsx +++ b/grafana/rmf-app/src/datasources/rmf-datasource/config-editor/config-editor.component.tsx @@ -68,6 +68,7 @@ export default class ConfigEditor extends PureComponent { cacheSize: jsonData?.cacheSize || DEFAULT_CACHE_SIZE, tlsSkipVerify: jsonData?.tlsSkipVerify || false, disableCompression: jsonData?.disableCompression ?? false, + omegamonDs: jsonData?.omegamonDs ?? "", }; } onOptionsChange({ ...options }); @@ -289,6 +290,22 @@ export default class ConfigEditor extends PureComponent { {cacheSizeError && {cacheSizeError}} + +

Omegamon Data source (Experimental)

+
+
+ { + this.updateSettings({ jsonData: { omegamonDs: event.currentTarget.value } }); + }} + /> +
+
); } diff --git a/grafana/rmf-app/src/datasources/rmf-datasource/datasource.ts b/grafana/rmf-app/src/datasources/rmf-datasource/datasource.ts index 8b5c5275..bbe086d5 100644 --- a/grafana/rmf-app/src/datasources/rmf-datasource/datasource.ts +++ b/grafana/rmf-app/src/datasources/rmf-datasource/datasource.ts @@ -76,15 +76,6 @@ export class DataSource extends DataSourceWithBackend { const metricFindValue = this.loadDataFromService(resourceString, id, options) .then((resp: any) => { - if ("sysplex" == queryResult.resourceCommand.toLowerCase() || - "systems" == queryResult.resourceCommand.toLowerCase()) { - const retResult: MetricFindValue[] = []; - let lines = (resp.data as string).split('\n'); - for (var line of lines) { - retResult.push({ text: line }); - } - return retResult; - } const result = JSON.parse(resp.data); let resNames = getResourceName(result); const retResult: MetricFindValue[] = []; From 3b694495d1d63661a2c211747c3d0242a4222bc8 Mon Sep 17 00:00:00 2001 From: dprizentsov Date: Fri, 29 Aug 2025 12:22:54 +0200 Subject: [PATCH 06/15] add data links into job related dashboards and LPAR related, turn on ASID field, we need it for link Signed-off-by: dprizentsov --- grafana/rmf-app/src/components/Root/utils.ts | 80 +++++++++++-------- grafana/rmf-app/src/dashboards/dds/DELAY.json | 2 +- grafana/rmf-app/src/dashboards/dds/PROC.json | 2 +- grafana/rmf-app/src/dashboards/dds/PROCU.json | 2 +- grafana/rmf-app/src/dashboards/dds/STOR.json | 2 +- grafana/rmf-app/src/dashboards/dds/STORF.json | 2 +- grafana/rmf-app/src/dashboards/dds/USAGE.json | 2 +- 7 files changed, 54 insertions(+), 38 deletions(-) diff --git a/grafana/rmf-app/src/components/Root/utils.ts b/grafana/rmf-app/src/components/Root/utils.ts index 69f3ff52..1728e663 100644 --- a/grafana/rmf-app/src/components/Root/utils.ts +++ b/grafana/rmf-app/src/components/Root/utils.ts @@ -95,11 +95,14 @@ export async function installDashboards(folderUid: string, defaultFolderName: st } export const FALCON_JOB_RELATED = [ - "PROC", "PROCU", "STOR", "STORC", "STORM", "USAGE"//TODO add more + "DELAY", "OPD", "PROC", "PROCU", "STOR", "STORC", "STORCR", "STORF", "STORM", "USAGE" ]; export const FALCON_SYSTEM_RELATED = [ - "CPC",//TODO add more + ...FALCON_JOB_RELATED, + "CHANNEL", "CPC", "DELAY", "DEV", "DEVR", "DSND", "EADM", "ENCLAVE", "ENQ", "HSM", "JES", "IOQ", "LOCKSP", "LOCKSU", + "OPD", "PCIE", "PROC", "PROCU", "STOR", "STORC", "STORCR", "STORF", "STORM", "STORR", "STORS", "SYSINFO", "USAGE", + "Overall Image Activity", "Overall Image Activity (Timeline)", ]; function falconJobRelated(dashboard: any): boolean { @@ -111,42 +114,55 @@ function falconSystemRelated(dashboard: any): boolean { } function addVars(dashboard: any) { + var sysplex_name_exist: boolean = false; + var omegamon_ds_exist: boolean = false; dashboard.templating.list.forEach((t: any) => { if (t.name === LPAR) { t.query = "systems"; t.definition = t.query; } + if (t.name === SYSPLEX_NAME) { + sysplex_name_exist = true; + } + if (t.name === OMEGAMON_DS) { + omegamon_ds_exist = true; + } }) - dashboard.templating.list.push({ - name: SYSPLEX_NAME, - datasource: { - type: "ibm-rmf-datasource", - uid: "${sysplex}" - }, - type: "query", - query: "sysplex", - hide: 1, - includeAll: false, - multi: false, - allowCustomValue: false, - }) - - dashboard.templating.list.push({ - name: OMEGAMON_DS, - label: "Omegamon Data source", - description: "Omegamon Data source (optional)", - datasource: { - type: "ibm-rmf-datasource", - uid: "${sysplex}" - }, - type: "query", - query: "OmegamonDs", - hide: 0, - includeAll: false, - multi: false, - allowCustomValue: false, - }) + if (!sysplex_name_exist) { + dashboard.templating.list.push({ + name: SYSPLEX_NAME, + datasource: { + type: "ibm-rmf-datasource", + uid: "${sysplex}" + }, + type: "query", + query: "sysplex", + hide: 1, + includeAll: false, + multi: false, + allowCustomValue: false, + }) + } + + if (!omegamon_ds_exist) { + dashboard.templating.list.push({ + name: OMEGAMON_DS, + label: "Omegamon Data source", + description: "Omegamon Data source (optional)", + datasource: { + type: "ibm-rmf-datasource", + uid: "${sysplex}" + }, + type: "query", + query: "OmegamonDs", + hide: 0, + includeAll: false, + multi: false, + allowCustomValue: false, + }) + } + } function falconJobUpdate(falcon: FalconStatus, dashboard: any) { @@ -165,7 +181,7 @@ function falconJobUpdate(falcon: FalconStatus, dashboard: any) { p.fieldConfig.defaults.links = []; p.fieldConfig.defaults.links.push({ targetBlank: true, - title: "Job Details ${__data.fields[\"Job Name\"]}", + title: "Omegamon details for " + JOB_NAME_EXPR, url: baseUrl + "var-dataSource=${" + OMEGAMON_DS + "}" + "&var-managedSystem=" + OMEG_PLEX_LPAR_MVSSYS_EXPR + "&var-_addressSpaceName=" + JOB_NAME_EXPR diff --git a/grafana/rmf-app/src/dashboards/dds/DELAY.json b/grafana/rmf-app/src/dashboards/dds/DELAY.json index e789a543..b4c80340 100644 --- a/grafana/rmf-app/src/dashboards/dds/DELAY.json +++ b/grafana/rmf-app/src/dashboards/dds/DELAY.json @@ -122,7 +122,7 @@ "% Delay Mount": true, "% Delay Quiesce": true, "% Delay XCF": true, - "ASID (dec)": true, + "ASID (dec)": false, "Channel Measurement Group": true, "FICON Deferred Operation Rate": true, "LPAR MSG Rate": true, diff --git a/grafana/rmf-app/src/dashboards/dds/PROC.json b/grafana/rmf-app/src/dashboards/dds/PROC.json index 8779e370..016bfe9e 100644 --- a/grafana/rmf-app/src/dashboards/dds/PROC.json +++ b/grafana/rmf-app/src/dashboards/dds/PROC.json @@ -115,7 +115,7 @@ "% Using for Processor Type": false, "% Workflow": true, "AAP on CP % Using": true, - "ASID (dec)": true, + "ASID (dec)": false, "Appl % for Processor Type": true, "CBP on CP % Using": true, "Capping Delay %": true, diff --git a/grafana/rmf-app/src/dashboards/dds/PROCU.json b/grafana/rmf-app/src/dashboards/dds/PROCU.json index a566cb52..c7910eda 100644 --- a/grafana/rmf-app/src/dashboards/dds/PROCU.json +++ b/grafana/rmf-app/src/dashboards/dds/PROCU.json @@ -113,7 +113,7 @@ "excludeByName": { "AAP EAppl %": true, "AAP Time on CP %": true, - "ASID (dec)": true, + "ASID (dec)": false, "CBP EAppl %": true, "CBP Time on CP %": true, "Channel Measurement Group": true, diff --git a/grafana/rmf-app/src/dashboards/dds/STOR.json b/grafana/rmf-app/src/dashboards/dds/STOR.json index d2f49ad3..b57a006a 100644 --- a/grafana/rmf-app/src/dashboards/dds/STOR.json +++ b/grafana/rmf-app/src/dashboards/dds/STOR.json @@ -114,7 +114,7 @@ "% Delay HIPR": true, "% Delay VIO": true, "% Delay XMEM": true, - "ASID (dec)": true, + "ASID (dec)": false, "Active Frames": true, "Channel Measurement Group": true, "FICON Deferred Operation Rate": true, diff --git a/grafana/rmf-app/src/dashboards/dds/STORF.json b/grafana/rmf-app/src/dashboards/dds/STORF.json index e58f6335..02f7e0b0 100644 --- a/grafana/rmf-app/src/dashboards/dds/STORF.json +++ b/grafana/rmf-app/src/dashboards/dds/STORF.json @@ -113,7 +113,7 @@ "excludeByName": { "1 MB Frames Fixed": true, "2 GB Frames Fixed": true, - "ASID (dec)": true, + "ASID (dec)": false, "Channel Measurement Group": true, "FICON Deferred Operation Rate": true, "Freemained Frames": true, diff --git a/grafana/rmf-app/src/dashboards/dds/USAGE.json b/grafana/rmf-app/src/dashboards/dds/USAGE.json index 9e7f642b..1d8f8449 100644 --- a/grafana/rmf-app/src/dashboards/dds/USAGE.json +++ b/grafana/rmf-app/src/dashboards/dds/USAGE.json @@ -111,7 +111,7 @@ "id": "organize", "options": { "excludeByName": { - "ASID (dec)": true, + "ASID (dec)": false, "Channel Measurement Group": true, "Dispatching Priority": true, "FICON Deferred Operation Rate": true, From f7f7025243297eaad8bcb580cd3537a13086ee07 Mon Sep 17 00:00:00 2001 From: dprizentsov Date: Fri, 29 Aug 2025 16:16:56 +0200 Subject: [PATCH 07/15] rename dashboard variables Signed-off-by: dprizentsov --- grafana/rmf-app/src/components/Root/utils.ts | 9 ++-- .../rmf-app/src/dashboards/dds/CACHDET.json | 33 +++++++++--- .../rmf-app/src/dashboards/dds/CACHSUM.json | 33 +++++++++--- grafana/rmf-app/src/dashboards/dds/CFACT.json | 33 +++++++++--- .../rmf-app/src/dashboards/dds/CFOVER.json | 33 +++++++++--- grafana/rmf-app/src/dashboards/dds/CFSYS.json | 33 +++++++++--- .../rmf-app/src/dashboards/dds/CHANNEL.json | 37 ++++++++++---- grafana/rmf-app/src/dashboards/dds/CPC.json | 37 ++++++++++---- .../rmf-app/src/dashboards/dds/CRYOVW.json | 31 ++++++++--- .../Common Storage Activity (Timeline).json | 47 ++++++++++++----- .../dds/Common Storage Activity.json | 43 +++++++++++----- ...Coupling Facility Overview (Timeline).json | 41 +++++++++++---- .../dds/Coupling Facility Overview.json | 37 ++++++++++---- grafana/rmf-app/src/dashboards/dds/DELAY.json | 37 ++++++++++---- grafana/rmf-app/src/dashboards/dds/DEV.json | 37 ++++++++++---- grafana/rmf-app/src/dashboards/dds/DEVR.json | 37 ++++++++++---- grafana/rmf-app/src/dashboards/dds/DSND.json | 37 ++++++++++---- grafana/rmf-app/src/dashboards/dds/EADM.json | 37 ++++++++++---- .../rmf-app/src/dashboards/dds/ENCLAVE.json | 37 ++++++++++---- grafana/rmf-app/src/dashboards/dds/ENQ.json | 37 ++++++++++---- .../dds/Execution Velocity (Timeline).json | 37 ++++++++++---- .../dashboards/dds/Execution Velocity.json | 33 +++++++++--- .../dds/General Activity (Timeline).json | 49 ++++++++++++------ .../src/dashboards/dds/General Activity.json | 45 +++++++++++----- grafana/rmf-app/src/dashboards/dds/HSM.json | 37 ++++++++++---- grafana/rmf-app/src/dashboards/dds/IOQ.json | 37 ++++++++++---- grafana/rmf-app/src/dashboards/dds/JES.json | 37 ++++++++++---- .../rmf-app/src/dashboards/dds/LOCKSP.json | 37 ++++++++++---- .../rmf-app/src/dashboards/dds/LOCKSU.json | 37 ++++++++++---- grafana/rmf-app/src/dashboards/dds/OPD.json | 37 ++++++++++---- .../Overall Image Activity (Timeline).json | 51 +++++++++++++------ .../dds/Overall Image Activity.json | 47 ++++++++++++----- grafana/rmf-app/src/dashboards/dds/PCIE.json | 37 ++++++++++---- grafana/rmf-app/src/dashboards/dds/PROC.json | 37 ++++++++++---- grafana/rmf-app/src/dashboards/dds/PROCU.json | 37 ++++++++++---- .../dds/Performance Index (Timeline).json | 35 ++++++++++--- .../src/dashboards/dds/Performance Index.json | 31 ++++++++--- .../dds/Response Time (Timeline).json | 47 ++++++++++++----- .../src/dashboards/dds/Response Time.json | 43 +++++++++++----- .../rmf-app/src/dashboards/dds/SPACED.json | 31 ++++++++--- .../rmf-app/src/dashboards/dds/SPACEG.json | 31 ++++++++--- grafana/rmf-app/src/dashboards/dds/STOR.json | 37 ++++++++++---- grafana/rmf-app/src/dashboards/dds/STORC.json | 37 ++++++++++---- .../rmf-app/src/dashboards/dds/STORCR.json | 37 ++++++++++---- grafana/rmf-app/src/dashboards/dds/STORF.json | 37 ++++++++++---- grafana/rmf-app/src/dashboards/dds/STORM.json | 37 ++++++++++---- grafana/rmf-app/src/dashboards/dds/STORR.json | 37 ++++++++++---- grafana/rmf-app/src/dashboards/dds/STORS.json | 37 ++++++++++---- .../rmf-app/src/dashboards/dds/SYSINFO.json | 37 ++++++++++---- grafana/rmf-app/src/dashboards/dds/SYSRG.json | 31 ++++++++--- .../rmf-app/src/dashboards/dds/SYSSUM.json | 31 ++++++++--- grafana/rmf-app/src/dashboards/dds/USAGE.json | 37 ++++++++++---- .../dds/Using & Delays (Timeline).json | 51 +++++++++++++------ .../src/dashboards/dds/Using & Delays.json | 47 ++++++++++++----- .../dds/XCF Activity (Timeline).json | 47 ++++++++++++----- .../src/dashboards/dds/XCF Activity.json | 43 +++++++++++----- .../rmf-app/src/dashboards/dds/XCFGROUP.json | 31 ++++++++--- .../rmf-app/src/dashboards/dds/XCFOVW.json | 31 ++++++++--- .../rmf-app/src/dashboards/dds/XCFPATH.json | 31 ++++++++--- .../rmf-app/src/dashboards/dds/XCFSYS.json | 31 ++++++++--- grafana/rmf-app/src/dashboards/dds/ZFSFS.json | 31 ++++++++--- grafana/rmf-app/src/dashboards/dds/ZFSKN.json | 31 ++++++++--- .../rmf-app/src/dashboards/dds/ZFSOVW.json | 31 ++++++++--- 63 files changed, 1749 insertions(+), 570 deletions(-) diff --git a/grafana/rmf-app/src/components/Root/utils.ts b/grafana/rmf-app/src/components/Root/utils.ts index 1728e663..0ab79b47 100644 --- a/grafana/rmf-app/src/components/Root/utils.ts +++ b/grafana/rmf-app/src/components/Root/utils.ts @@ -18,7 +18,8 @@ import { FalconStatus } from './types'; const FOLDERS_API = '/api/folders'; const DASHBOARDS_API = '/api/dashboards/db'; -const SYSPLEX_NAME = "sysplex_name"; +const RMF_DATASOURCE_EXPR = "${datasource}" +const SYSPLEX_NAME = "sysplex"; const LPAR = "LPAR"; const OMEGAMON_DS = "OmegamonDs"; const OMEG_PLEX_LPAR_MVSSYS_EXPR = "${" + SYSPLEX_NAME + "}:${" + LPAR + "}:MVSSYS"; @@ -134,7 +135,7 @@ function addVars(dashboard: any) { name: SYSPLEX_NAME, datasource: { type: "ibm-rmf-datasource", - uid: "${sysplex}" + uid: RMF_DATASOURCE_EXPR }, type: "query", query: "sysplex", @@ -152,11 +153,11 @@ function addVars(dashboard: any) { description: "Omegamon Data source (optional)", datasource: { type: "ibm-rmf-datasource", - uid: "${sysplex}" + uid: RMF_DATASOURCE_EXPR }, type: "query", query: "OmegamonDs", - hide: 0, + hide: 2, includeAll: false, multi: false, allowCustomValue: false, diff --git a/grafana/rmf-app/src/dashboards/dds/CACHDET.json b/grafana/rmf-app/src/dashboards/dds/CACHDET.json index 8b3b3787..c90437ea 100644 --- a/grafana/rmf-app/src/dashboards/dds/CACHDET.json +++ b/grafana/rmf-app/src/dashboards/dds/CACHDET.json @@ -53,7 +53,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Control Unit Cache Details", "fieldConfig": { @@ -96,7 +96,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "a30ba0f0-e67a-44b0-bfe6-3b437603e414", @@ -391,15 +391,15 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, - "description": "Sysplex", + "description": "Data source", "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -407,6 +407,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/CACHSUM.json b/grafana/rmf-app/src/dashboards/dds/CACHSUM.json index 1c8c116c..a6f469aa 100644 --- a/grafana/rmf-app/src/dashboards/dds/CACHSUM.json +++ b/grafana/rmf-app/src/dashboards/dds/CACHSUM.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Control Unit Cache Summary", "fieldConfig": { @@ -96,7 +96,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "0a230d99-a837-4aff-b520-3b6c68d5a8e0", @@ -353,15 +353,15 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, - "description": "Sysplex", + "description": "Data source", "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -369,6 +369,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/CFACT.json b/grafana/rmf-app/src/dashboards/dds/CFACT.json index 9eb021ca..c61315ae 100644 --- a/grafana/rmf-app/src/dashboards/dds/CFACT.json +++ b/grafana/rmf-app/src/dashboards/dds/CFACT.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Coupling Facility Activity", "fieldConfig": { @@ -95,7 +95,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "26f5f14b-f506-4c31-907c-9f32ccd314e4", @@ -406,15 +406,15 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, - "description": "Sysplex", + "description": "Data source", "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -422,6 +422,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/CFOVER.json b/grafana/rmf-app/src/dashboards/dds/CFOVER.json index 1896fb2b..70aeed01 100644 --- a/grafana/rmf-app/src/dashboards/dds/CFOVER.json +++ b/grafana/rmf-app/src/dashboards/dds/CFOVER.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Coupling Facility Overview", "fieldConfig": { @@ -95,7 +95,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "0c882408-b619-4f60-a8a3-37be2c38af18", @@ -302,15 +302,15 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, - "description": "Sysplex", + "description": "Data source", "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -318,6 +318,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/CFSYS.json b/grafana/rmf-app/src/dashboards/dds/CFSYS.json index 7845b22d..fceb1eed 100644 --- a/grafana/rmf-app/src/dashboards/dds/CFSYS.json +++ b/grafana/rmf-app/src/dashboards/dds/CFSYS.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Coupling Facility Systems View", "fieldConfig": { @@ -95,7 +95,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "c699b2d0-fa49-4b45-bae9-913739728e44", @@ -297,15 +297,15 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, - "description": "Sysplex", + "description": "Data source", "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -313,6 +313,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/CHANNEL.json b/grafana/rmf-app/src/dashboards/dds/CHANNEL.json index 3d3888f2..ceae07b8 100644 --- a/grafana/rmf-app/src/dashboards/dds/CHANNEL.json +++ b/grafana/rmf-app/src/dashboards/dds/CHANNEL.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "I/O Channels", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "9f386c5a-cffd-4367-8065-189a5e4fe925", @@ -142,14 +142,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -161,15 +161,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/CPC.json b/grafana/rmf-app/src/dashboards/dds/CPC.json index 61808ddc..1658e384 100644 --- a/grafana/rmf-app/src/dashboards/dds/CPC.json +++ b/grafana/rmf-app/src/dashboards/dds/CPC.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Central Processor Complex", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "de465562-c3f1-4548-93fb-d19e0cdb70e6", @@ -304,14 +304,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -323,15 +323,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/CRYOVW.json b/grafana/rmf-app/src/dashboards/dds/CRYOVW.json index 8281d798..7c84938d 100644 --- a/grafana/rmf-app/src/dashboards/dds/CRYOVW.json +++ b/grafana/rmf-app/src/dashboards/dds/CRYOVW.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Crypto Hardware Overview", "fieldConfig": { @@ -95,7 +95,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "8ad04b33-d007-4e2c-866c-7f2dbeb9b6be", @@ -324,15 +324,15 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "description": "Sysplex", "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -340,6 +340,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/Common Storage Activity (Timeline).json b/grafana/rmf-app/src/dashboards/dds/Common Storage Activity (Timeline).json index 675e60c9..33ef0a97 100644 --- a/grafana/rmf-app/src/dashboards/dds/Common Storage Activity (Timeline).json +++ b/grafana/rmf-app/src/dashboards/dds/Common Storage Activity (Timeline).json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -129,7 +129,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -151,7 +151,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -178,7 +178,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -259,7 +259,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -281,7 +281,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -308,7 +308,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -385,7 +385,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "e0bde46f-4da8-44b3-9d7a-47a1885e9c4c", @@ -403,7 +403,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -480,7 +480,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "38368e80-de64-4bac-ae20-c18a53ad82e6", @@ -505,14 +505,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -520,6 +520,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/Common Storage Activity.json b/grafana/rmf-app/src/dashboards/dds/Common Storage Activity.json index 00bcdc3b..3529c97c 100644 --- a/grafana/rmf-app/src/dashboards/dds/Common Storage Activity.json +++ b/grafana/rmf-app/src/dashboards/dds/Common Storage Activity.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -171,7 +171,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -193,7 +193,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -229,7 +229,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -343,7 +343,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -365,7 +365,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -401,7 +401,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -497,7 +497,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -523,7 +523,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -621,7 +621,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -659,9 +659,9 @@ }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -669,6 +669,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/Coupling Facility Overview (Timeline).json b/grafana/rmf-app/src/dashboards/dds/Coupling Facility Overview (Timeline).json index ebcaf8e9..29fc475f 100644 --- a/grafana/rmf-app/src/dashboards/dds/Coupling Facility Overview (Timeline).json +++ b/grafana/rmf-app/src/dashboards/dds/Coupling Facility Overview (Timeline).json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "", "fieldConfig": { @@ -137,7 +137,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -164,7 +164,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "", "fieldConfig": { @@ -248,7 +248,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -275,7 +275,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "", "fieldConfig": { @@ -359,7 +359,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -381,7 +381,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "refId": "B", @@ -408,14 +408,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -423,6 +423,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/Coupling Facility Overview.json b/grafana/rmf-app/src/dashboards/dds/Coupling Facility Overview.json index 67a4ab70..4601f4f3 100644 --- a/grafana/rmf-app/src/dashboards/dds/Coupling Facility Overview.json +++ b/grafana/rmf-app/src/dashboards/dds/Coupling Facility Overview.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "", "fieldConfig": { @@ -155,7 +155,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -182,7 +182,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "", "fieldConfig": { @@ -273,7 +273,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -300,7 +300,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "", "fieldConfig": { @@ -415,7 +415,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -437,7 +437,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "refId": "B", @@ -480,9 +480,9 @@ }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -490,6 +490,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/DELAY.json b/grafana/rmf-app/src/dashboards/dds/DELAY.json index b4c80340..46971326 100644 --- a/grafana/rmf-app/src/dashboards/dds/DELAY.json +++ b/grafana/rmf-app/src/dashboards/dds/DELAY.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "All kinds of delays", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "b91a33da-135f-44a5-cfed-b3689f07856b", @@ -155,14 +155,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -174,15 +174,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/DEV.json b/grafana/rmf-app/src/dashboards/dds/DEV.json index 76e901c1..65fd2089 100644 --- a/grafana/rmf-app/src/dashboards/dds/DEV.json +++ b/grafana/rmf-app/src/dashboards/dds/DEV.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Device delays", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "b088b1b8-86f7-4a06-ed7c-33f4859c3030", @@ -159,14 +159,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -178,15 +178,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/DEVR.json b/grafana/rmf-app/src/dashboards/dds/DEVR.json index 9e034da9..f5fe7548 100644 --- a/grafana/rmf-app/src/dashboards/dds/DEVR.json +++ b/grafana/rmf-app/src/dashboards/dds/DEVR.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Device Resource Delays", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "5e502a01-3a37-4873-94ff-7b635ecaee3a", @@ -190,14 +190,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -209,15 +209,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/DSND.json b/grafana/rmf-app/src/dashboards/dds/DSND.json index e6639037..a963352c 100644 --- a/grafana/rmf-app/src/dashboards/dds/DSND.json +++ b/grafana/rmf-app/src/dashboards/dds/DSND.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Dataset Delays", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "1f674985-8c23-483d-bf70-7d637d6e262", @@ -142,14 +142,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -161,15 +161,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/EADM.json b/grafana/rmf-app/src/dashboards/dds/EADM.json index 89f2733b..3815f3fd 100644 --- a/grafana/rmf-app/src/dashboards/dds/EADM.json +++ b/grafana/rmf-app/src/dashboards/dds/EADM.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Extended Asynchronous Data Mover", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "dda59d24-7686-49e6-b45f-0f8e5b449dee", @@ -156,14 +156,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -175,15 +175,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/ENCLAVE.json b/grafana/rmf-app/src/dashboards/dds/ENCLAVE.json index e660dc6e..86321333 100644 --- a/grafana/rmf-app/src/dashboards/dds/ENCLAVE.json +++ b/grafana/rmf-app/src/dashboards/dds/ENCLAVE.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Enclaves", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "87fa8279-0f6c-425e-835d-652e59e29ed9", @@ -305,14 +305,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -324,15 +324,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/ENQ.json b/grafana/rmf-app/src/dashboards/dds/ENQ.json index 97f791f5..af1567ee 100644 --- a/grafana/rmf-app/src/dashboards/dds/ENQ.json +++ b/grafana/rmf-app/src/dashboards/dds/ENQ.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Enqueue Delays", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "2e245147-c660-4f64-bcaf-326ba6d434ac", @@ -142,14 +142,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -161,15 +161,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/Execution Velocity (Timeline).json b/grafana/rmf-app/src/dashboards/dds/Execution Velocity (Timeline).json index 7a56b535..2e33ecc5 100644 --- a/grafana/rmf-app/src/dashboards/dds/Execution Velocity (Timeline).json +++ b/grafana/rmf-app/src/dashboards/dds/Execution Velocity (Timeline).json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -137,7 +137,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -159,7 +159,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -187,7 +187,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -265,7 +265,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -298,14 +298,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -313,6 +313,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/Execution Velocity.json b/grafana/rmf-app/src/dashboards/dds/Execution Velocity.json index 1964f757..08eb46ea 100644 --- a/grafana/rmf-app/src/dashboards/dds/Execution Velocity.json +++ b/grafana/rmf-app/src/dashboards/dds/Execution Velocity.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -167,7 +167,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -189,7 +189,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -225,7 +225,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -318,7 +318,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -359,9 +359,9 @@ }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -369,6 +369,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/General Activity (Timeline).json b/grafana/rmf-app/src/dashboards/dds/General Activity (Timeline).json index 3dfd8020..be267f9a 100644 --- a/grafana/rmf-app/src/dashboards/dds/General Activity (Timeline).json +++ b/grafana/rmf-app/src/dashboards/dds/General Activity (Timeline).json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -129,7 +129,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "b6137830-43ac-4fec-b516-07e80b0ab57a", @@ -143,7 +143,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "refId": "B", @@ -162,7 +162,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -239,7 +239,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "923072ca-7c82-42af-ea41-8c254f58da85", @@ -253,7 +253,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "refId": "B", @@ -268,7 +268,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "refId": "C", @@ -287,7 +287,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -364,7 +364,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "ab8cdb99-7217-42df-e6c1-a1602887bbd8", @@ -382,7 +382,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -459,7 +459,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "8cede5b5-8778-4862-8b7e-f476a6b9e56a", @@ -484,14 +484,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -499,6 +499,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/General Activity.json b/grafana/rmf-app/src/dashboards/dds/General Activity.json index db70fe1e..c4b16dee 100644 --- a/grafana/rmf-app/src/dashboards/dds/General Activity.json +++ b/grafana/rmf-app/src/dashboards/dds/General Activity.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -161,7 +161,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -183,7 +183,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -219,7 +219,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "", "fieldConfig": { @@ -302,7 +302,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -324,7 +324,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -347,7 +347,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -375,7 +375,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -468,7 +468,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -494,7 +494,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -587,7 +587,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -625,9 +625,9 @@ }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -635,6 +635,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/HSM.json b/grafana/rmf-app/src/dashboards/dds/HSM.json index 4a03d484..ada9eaa0 100644 --- a/grafana/rmf-app/src/dashboards/dds/HSM.json +++ b/grafana/rmf-app/src/dashboards/dds/HSM.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Hierarchical Storage Manager Delays", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "4ca5f811-7ce7-4cb5-9c8e-e82c744f7689", @@ -149,14 +149,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -168,15 +168,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/IOQ.json b/grafana/rmf-app/src/dashboards/dds/IOQ.json index eaa172fe..5497cc1c 100644 --- a/grafana/rmf-app/src/dashboards/dds/IOQ.json +++ b/grafana/rmf-app/src/dashboards/dds/IOQ.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "I/O Queuing", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "c53199a2-81e7-4063-9aa8-814de9ddec89", @@ -160,14 +160,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -179,15 +179,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/JES.json b/grafana/rmf-app/src/dashboards/dds/JES.json index 86c073c6..fd3a91b9 100644 --- a/grafana/rmf-app/src/dashboards/dds/JES.json +++ b/grafana/rmf-app/src/dashboards/dds/JES.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Job Entry Subsystem Delays", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "9b725562-731d-424f-840e-832de4a70f2c", @@ -149,14 +149,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -168,15 +168,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/LOCKSP.json b/grafana/rmf-app/src/dashboards/dds/LOCKSP.json index 360dc13a..98137698 100644 --- a/grafana/rmf-app/src/dashboards/dds/LOCKSP.json +++ b/grafana/rmf-app/src/dashboards/dds/LOCKSP.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Spin Lock Report", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "1898c684-d2dd-4b95-a655-e1c7170ad8e8", @@ -142,14 +142,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -161,15 +161,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/LOCKSU.json b/grafana/rmf-app/src/dashboards/dds/LOCKSU.json index 3cfc439a..eda2b2c9 100644 --- a/grafana/rmf-app/src/dashboards/dds/LOCKSU.json +++ b/grafana/rmf-app/src/dashboards/dds/LOCKSU.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Suspend Lock Report", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "8003e165-ab46-4b61-94b7-a37f69adc5c8", @@ -142,14 +142,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -161,15 +161,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/OPD.json b/grafana/rmf-app/src/dashboards/dds/OPD.json index aae6683f..e1bd2f82 100644 --- a/grafana/rmf-app/src/dashboards/dds/OPD.json +++ b/grafana/rmf-app/src/dashboards/dds/OPD.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "OMVS Process Data", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "1af174dd-1466-4d45-8c07-41f3f574f692", @@ -151,14 +151,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -167,18 +167,37 @@ "skipUrlSync": false, "type": "datasource" }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/Overall Image Activity (Timeline).json b/grafana/rmf-app/src/dashboards/dds/Overall Image Activity (Timeline).json index c237d4c4..ee3146f3 100644 --- a/grafana/rmf-app/src/dashboards/dds/Overall Image Activity (Timeline).json +++ b/grafana/rmf-app/src/dashboards/dds/Overall Image Activity (Timeline).json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -130,7 +130,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -152,7 +152,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -179,7 +179,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "", "fieldConfig": { @@ -258,7 +258,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -284,7 +284,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -362,7 +362,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -388,7 +388,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -466,7 +466,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -499,14 +499,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -518,15 +518,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/Overall Image Activity.json b/grafana/rmf-app/src/dashboards/dds/Overall Image Activity.json index a2b8b445..7a861c80 100644 --- a/grafana/rmf-app/src/dashboards/dds/Overall Image Activity.json +++ b/grafana/rmf-app/src/dashboards/dds/Overall Image Activity.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -145,7 +145,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -167,7 +167,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -203,7 +203,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "", "fieldConfig": { @@ -327,7 +327,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -353,7 +353,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -482,7 +482,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -508,7 +508,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -585,7 +585,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -623,9 +623,9 @@ }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -634,19 +634,38 @@ "skipUrlSync": false, "type": "datasource" }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, { "current": {}, "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/PCIE.json b/grafana/rmf-app/src/dashboards/dds/PCIE.json index cdf5cbd5..3ab1bcf3 100644 --- a/grafana/rmf-app/src/dashboards/dds/PCIE.json +++ b/grafana/rmf-app/src/dashboards/dds/PCIE.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "PCIE Activity", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "refId": "A", @@ -181,14 +181,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -200,15 +200,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/PROC.json b/grafana/rmf-app/src/dashboards/dds/PROC.json index 016bfe9e..6d07b194 100644 --- a/grafana/rmf-app/src/dashboards/dds/PROC.json +++ b/grafana/rmf-app/src/dashboards/dds/PROC.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Processor Delays", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "271e34ff-d57f-43d4-a897-6b8053983d24", @@ -185,14 +185,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -204,15 +204,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/PROCU.json b/grafana/rmf-app/src/dashboards/dds/PROCU.json index c7910eda..9b65f8c6 100644 --- a/grafana/rmf-app/src/dashboards/dds/PROCU.json +++ b/grafana/rmf-app/src/dashboards/dds/PROCU.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Processor Usage", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "908ddeb5-eef7-4ab9-a3f0-4727805960d5", @@ -157,14 +157,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -176,15 +176,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/Performance Index (Timeline).json b/grafana/rmf-app/src/dashboards/dds/Performance Index (Timeline).json index 85ffae53..a2cda9e4 100644 --- a/grafana/rmf-app/src/dashboards/dds/Performance Index (Timeline).json +++ b/grafana/rmf-app/src/dashboards/dds/Performance Index (Timeline).json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -129,7 +129,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -155,7 +155,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -236,7 +236,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -269,14 +269,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -284,6 +284,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/Performance Index.json b/grafana/rmf-app/src/dashboards/dds/Performance Index.json index 51c781a7..a2ac9a56 100644 --- a/grafana/rmf-app/src/dashboards/dds/Performance Index.json +++ b/grafana/rmf-app/src/dashboards/dds/Performance Index.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -171,7 +171,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -198,7 +198,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -316,7 +316,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -357,9 +357,9 @@ }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -367,6 +367,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/Response Time (Timeline).json b/grafana/rmf-app/src/dashboards/dds/Response Time (Timeline).json index 634e99bd..13912433 100644 --- a/grafana/rmf-app/src/dashboards/dds/Response Time (Timeline).json +++ b/grafana/rmf-app/src/dashboards/dds/Response Time (Timeline).json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -130,7 +130,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -152,7 +152,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -179,7 +179,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -257,7 +257,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -279,7 +279,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -306,7 +306,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "", "fieldConfig": { @@ -386,7 +386,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -412,7 +412,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -491,7 +491,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -524,14 +524,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -539,6 +539,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/Response Time.json b/grafana/rmf-app/src/dashboards/dds/Response Time.json index e32c7a0d..14ff318d 100644 --- a/grafana/rmf-app/src/dashboards/dds/Response Time.json +++ b/grafana/rmf-app/src/dashboards/dds/Response Time.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -161,7 +161,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -183,7 +183,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -219,7 +219,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -328,7 +328,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -351,7 +351,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -386,7 +386,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "", "fieldConfig": { @@ -465,7 +465,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -491,7 +491,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -581,7 +581,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -622,9 +622,9 @@ }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -632,6 +632,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/SPACED.json b/grafana/rmf-app/src/dashboards/dds/SPACED.json index 2132c296..6f2dd24f 100644 --- a/grafana/rmf-app/src/dashboards/dds/SPACED.json +++ b/grafana/rmf-app/src/dashboards/dds/SPACED.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Disk space", "fieldConfig": { @@ -95,7 +95,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "346e1b6d-c49a-455f-81af-b18f52fea63a", @@ -296,15 +296,15 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "description": "Sysplex", "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -312,6 +312,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/SPACEG.json b/grafana/rmf-app/src/dashboards/dds/SPACEG.json index 16afe690..9a0a3a7c 100644 --- a/grafana/rmf-app/src/dashboards/dds/SPACEG.json +++ b/grafana/rmf-app/src/dashboards/dds/SPACEG.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Storage space", "fieldConfig": { @@ -95,7 +95,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "3414ef3c-2a88-49dc-a6a3-362d2b69c5b1", @@ -296,15 +296,15 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "description": "Sysplex", "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -312,6 +312,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/STOR.json b/grafana/rmf-app/src/dashboards/dds/STOR.json index b57a006a..503ad7d2 100644 --- a/grafana/rmf-app/src/dashboards/dds/STOR.json +++ b/grafana/rmf-app/src/dashboards/dds/STOR.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Storage Delays", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "f171daf4-2cd7-4209-a752-3a901b8ff6c3", @@ -170,14 +170,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -189,15 +189,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/STORC.json b/grafana/rmf-app/src/dashboards/dds/STORC.json index 58ca486b..c6253543 100644 --- a/grafana/rmf-app/src/dashboards/dds/STORC.json +++ b/grafana/rmf-app/src/dashboards/dds/STORC.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Common Storage", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "b28c67d8-2f71-4e81-a797-b8b8ca413910", @@ -206,14 +206,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -225,15 +225,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/STORCR.json b/grafana/rmf-app/src/dashboards/dds/STORCR.json index a1524647..59984487 100644 --- a/grafana/rmf-app/src/dashboards/dds/STORCR.json +++ b/grafana/rmf-app/src/dashboards/dds/STORCR.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Common Storage Remaining", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "d6900151-5042-4f06-aaa7-cc8088cdbe4e", @@ -144,14 +144,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -163,15 +163,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/STORF.json b/grafana/rmf-app/src/dashboards/dds/STORF.json index 02f7e0b0..20589c38 100644 --- a/grafana/rmf-app/src/dashboards/dds/STORF.json +++ b/grafana/rmf-app/src/dashboards/dds/STORF.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Storage Frames Overview", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "a3b4e537-0ff9-4b37-b673-d2d27d82d1e6", @@ -153,14 +153,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -172,15 +172,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/STORM.json b/grafana/rmf-app/src/dashboards/dds/STORM.json index 9df35ecd..75a068ea 100644 --- a/grafana/rmf-app/src/dashboards/dds/STORM.json +++ b/grafana/rmf-app/src/dashboards/dds/STORM.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Storage Memory Objects", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "35036b16-3f54-4417-9905-c5644da37dd5", @@ -231,14 +231,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -250,15 +250,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/STORR.json b/grafana/rmf-app/src/dashboards/dds/STORR.json index b34633e1..69d8639d 100644 --- a/grafana/rmf-app/src/dashboards/dds/STORR.json +++ b/grafana/rmf-app/src/dashboards/dds/STORR.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Storage Resource Delays", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "7eb3af2b-4fd9-4751-982a-05a7faa388b1", @@ -224,14 +224,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -243,15 +243,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/STORS.json b/grafana/rmf-app/src/dashboards/dds/STORS.json index 07f1dac1..7f512ff7 100644 --- a/grafana/rmf-app/src/dashboards/dds/STORS.json +++ b/grafana/rmf-app/src/dashboards/dds/STORS.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Storage by WLM class", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "4289baf1-221c-4be3-b469-ad2ec1c31848", @@ -197,14 +197,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -216,15 +216,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/SYSINFO.json b/grafana/rmf-app/src/dashboards/dds/SYSINFO.json index 7c75a93c..e5a27680 100644 --- a/grafana/rmf-app/src/dashboards/dds/SYSINFO.json +++ b/grafana/rmf-app/src/dashboards/dds/SYSINFO.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "System Info by WLM class", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "6a55cb0b-c2bc-4586-b79d-53c103b29550", @@ -317,14 +317,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -336,15 +336,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/SYSRG.json b/grafana/rmf-app/src/dashboards/dds/SYSRG.json index 6939ab50..8f8494d2 100644 --- a/grafana/rmf-app/src/dashboards/dds/SYSRG.json +++ b/grafana/rmf-app/src/dashboards/dds/SYSRG.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Sysplex WLM Resource Group Activity", "fieldConfig": { @@ -95,7 +95,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "1ba9a8c4-b112-48ab-b8ff-d7979197efc4", @@ -268,15 +268,15 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "description": "Sysplex", "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -284,6 +284,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/SYSSUM.json b/grafana/rmf-app/src/dashboards/dds/SYSSUM.json index a3990783..dd999830 100644 --- a/grafana/rmf-app/src/dashboards/dds/SYSSUM.json +++ b/grafana/rmf-app/src/dashboards/dds/SYSSUM.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Sysplex WLM Classes Summary Report", "fieldConfig": { @@ -95,7 +95,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "48f2221c-2282-4937-85e0-b52a71e1d93e", @@ -296,15 +296,15 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "description": "Sysplex", "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -312,6 +312,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/USAGE.json b/grafana/rmf-app/src/dashboards/dds/USAGE.json index 1d8f8449..1354fc95 100644 --- a/grafana/rmf-app/src/dashboards/dds/USAGE.json +++ b/grafana/rmf-app/src/dashboards/dds/USAGE.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "Job Oriented Usage", "fieldConfig": { @@ -93,7 +93,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "aa2f5d29-d19b-4e8f-b782-32468729ab3f", @@ -191,14 +191,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -210,15 +210,34 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" }, - "definition": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "definition": "systems", "hide": 0, "includeAll": false, "multi": false, "name": "LPAR", "options": [], - "query": "select label from resource where name=\"${sysplex}\" and type=\"SYSPLEX\" and filter=\"MVS_IMAGE\"", + "query": "systems", "refresh": 1, "regex": "", "skipUrlSync": false, diff --git a/grafana/rmf-app/src/dashboards/dds/Using & Delays (Timeline).json b/grafana/rmf-app/src/dashboards/dds/Using & Delays (Timeline).json index e3ee97bf..1f71261f 100644 --- a/grafana/rmf-app/src/dashboards/dds/Using & Delays (Timeline).json +++ b/grafana/rmf-app/src/dashboards/dds/Using & Delays (Timeline).json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -129,7 +129,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -151,7 +151,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -174,7 +174,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -201,7 +201,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -278,7 +278,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -300,7 +300,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -323,7 +323,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -346,7 +346,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -369,7 +369,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -392,7 +392,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -415,7 +415,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -449,14 +449,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -464,6 +464,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/Using & Delays.json b/grafana/rmf-app/src/dashboards/dds/Using & Delays.json index db93eee4..d299eceb 100644 --- a/grafana/rmf-app/src/dashboards/dds/Using & Delays.json +++ b/grafana/rmf-app/src/dashboards/dds/Using & Delays.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -175,7 +175,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -197,7 +197,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -220,7 +220,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -248,7 +248,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -431,7 +431,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "loadDataSource": "METRICS", "refId": "A", @@ -453,7 +453,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -476,7 +476,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -499,7 +499,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -522,7 +522,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -545,7 +545,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -568,7 +568,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "loadDataSource": "METRICS", @@ -610,9 +610,9 @@ }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -620,6 +620,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/XCF Activity (Timeline).json b/grafana/rmf-app/src/dashboards/dds/XCF Activity (Timeline).json index 6ee46fdd..84284714 100644 --- a/grafana/rmf-app/src/dashboards/dds/XCF Activity (Timeline).json +++ b/grafana/rmf-app/src/dashboards/dds/XCF Activity (Timeline).json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -130,7 +130,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "3bdf9ae8-f62b-40ec-b854-6ed5b66656a0", @@ -144,7 +144,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "refId": "B", @@ -163,7 +163,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -241,7 +241,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "e074ed81-e389-4db3-bee6-ce27191643a2", @@ -255,7 +255,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "refId": "B", @@ -274,7 +274,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -352,7 +352,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "ab9c1f60-2901-4a38-9500-b775cd4df2b5", @@ -370,7 +370,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -448,7 +448,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "03d3c3a6-1ba1-4c49-969b-2b904b785419", @@ -473,14 +473,14 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -488,6 +488,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/XCF Activity.json b/grafana/rmf-app/src/dashboards/dds/XCF Activity.json index 2b6ae1c2..e462f4f9 100644 --- a/grafana/rmf-app/src/dashboards/dds/XCF Activity.json +++ b/grafana/rmf-app/src/dashboards/dds/XCF Activity.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -160,7 +160,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "834a08f0-4082-498b-86fe-976e27223b27", @@ -174,7 +174,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "refId": "B", @@ -202,7 +202,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -310,7 +310,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "e75b194d-7adf-4104-beac-ca1a998154f8", @@ -324,7 +324,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "hide": false, "refId": "B", @@ -352,7 +352,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -445,7 +445,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "fc948aa9-f052-4eab-ada8-e61c33ccc362", @@ -463,7 +463,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "fieldConfig": { "defaults": { @@ -556,7 +556,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "31e6a5ca-3144-4422-9d08-25e3b319a833", @@ -589,9 +589,9 @@ }, "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -599,6 +599,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/XCFGROUP.json b/grafana/rmf-app/src/dashboards/dds/XCFGROUP.json index 18180edf..3d23d231 100644 --- a/grafana/rmf-app/src/dashboards/dds/XCFGROUP.json +++ b/grafana/rmf-app/src/dashboards/dds/XCFGROUP.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "XCF Group Statistics", "fieldConfig": { @@ -95,7 +95,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "5e57a653-10c8-461d-8991-ada953c73ba8", @@ -300,15 +300,15 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "description": "Sysplex", "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -316,6 +316,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/XCFOVW.json b/grafana/rmf-app/src/dashboards/dds/XCFOVW.json index 56d67182..51f0a9b1 100644 --- a/grafana/rmf-app/src/dashboards/dds/XCFOVW.json +++ b/grafana/rmf-app/src/dashboards/dds/XCFOVW.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "XCF Systems Overview", "fieldConfig": { @@ -95,7 +95,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "aa73ed04-967c-469d-a5f8-9eb0d1c8b092", @@ -300,15 +300,15 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "description": "Sysplex", "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -316,6 +316,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/XCFPATH.json b/grafana/rmf-app/src/dashboards/dds/XCFPATH.json index 98737444..b862cf89 100644 --- a/grafana/rmf-app/src/dashboards/dds/XCFPATH.json +++ b/grafana/rmf-app/src/dashboards/dds/XCFPATH.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "XCF Path Statistics", "fieldConfig": { @@ -122,7 +122,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "3282dc77-1ad7-4380-9a9a-0f846ea8af6a", @@ -306,15 +306,15 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "description": "Sysplex", "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -322,6 +322,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/XCFSYS.json b/grafana/rmf-app/src/dashboards/dds/XCFSYS.json index c2bff750..e16dcfa0 100644 --- a/grafana/rmf-app/src/dashboards/dds/XCFSYS.json +++ b/grafana/rmf-app/src/dashboards/dds/XCFSYS.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "XCF System Statistics", "fieldConfig": { @@ -126,7 +126,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "056aa738-d1cf-46a4-aee4-2f7176b48b13", @@ -295,15 +295,15 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "description": "Sysplex", "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -311,6 +311,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/ZFSFS.json b/grafana/rmf-app/src/dashboards/dds/ZFSFS.json index 1408bcf3..8b54c1c1 100644 --- a/grafana/rmf-app/src/dashboards/dds/ZFSFS.json +++ b/grafana/rmf-app/src/dashboards/dds/ZFSFS.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "zFS File System", "fieldConfig": { @@ -95,7 +95,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "d4867b70-6f07-4a87-8390-5d947a775d05", @@ -316,15 +316,15 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "description": "Sysplex", "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -332,6 +332,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/ZFSKN.json b/grafana/rmf-app/src/dashboards/dds/ZFSKN.json index 507400e3..c7d42900 100644 --- a/grafana/rmf-app/src/dashboards/dds/ZFSKN.json +++ b/grafana/rmf-app/src/dashboards/dds/ZFSKN.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "(zFS Kernel", "fieldConfig": { @@ -95,7 +95,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "31e86a06-d0fb-46e5-970a-d86e4c098749", @@ -296,15 +296,15 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "description": "Sysplex", "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -312,6 +312,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, diff --git a/grafana/rmf-app/src/dashboards/dds/ZFSOVW.json b/grafana/rmf-app/src/dashboards/dds/ZFSOVW.json index c306f6ff..b472e535 100644 --- a/grafana/rmf-app/src/dashboards/dds/ZFSOVW.json +++ b/grafana/rmf-app/src/dashboards/dds/ZFSOVW.json @@ -52,7 +52,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "description": "zFS Overview", "fieldConfig": { @@ -95,7 +95,7 @@ { "datasource": { "type": "ibm-rmf-datasource", - "uid": "${sysplex}" + "uid": "${datasource}" }, "refId": "A", "rmfPanelGuid": "56006a7e-0517-4de8-80c8-29db0310d5a6", @@ -346,15 +346,15 @@ { "current": { "selected": false, - "text": "${sysplex}", - "value": "${sysplex}" + "text": "${datasource}", + "value": "${datasource}" }, "description": "Sysplex", "hide": 0, "includeAll": false, - "label": "Sysplex", + "label": "Data source", "multi": false, - "name": "sysplex", + "name": "datasource", "options": [], "query": "ibm-rmf-datasource", "queryValue": "", @@ -362,6 +362,25 @@ "regex": "", "skipUrlSync": false, "type": "datasource" + }, + { + "datasource": { + "type": "ibm-rmf-datasource", + "uid": "${datasource}" + }, + "definition": "sysplex", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "sysplex", + "options": [], + "query": "sysplex", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query", + "allowCustomValue": false } ] }, From bf4e5ed6771079639aa33c2dec7deaa2b9904ef1 Mon Sep 17 00:00:00 2001 From: dprizentsov Date: Mon, 1 Sep 2025 14:17:29 +0200 Subject: [PATCH 08/15] show list of available omegamon-datasource to associate with RMF datasource Signed-off-by: dprizentsov --- grafana/rmf-app/src/components/Root/Root.tsx | 4 +-- grafana/rmf-app/src/constants.ts | 2 ++ .../rmf-datasource/common/configSettings.ts | 2 ++ .../config-editor/config-editor.component.tsx | 34 +++++++++++++++---- 4 files changed, 32 insertions(+), 10 deletions(-) diff --git a/grafana/rmf-app/src/components/Root/Root.tsx b/grafana/rmf-app/src/components/Root/Root.tsx index acd51cfe..858945c3 100644 --- a/grafana/rmf-app/src/components/Root/Root.tsx +++ b/grafana/rmf-app/src/components/Root/Root.tsx @@ -19,7 +19,7 @@ import { PanelContainer, Button, TextLink, Box, Icon, Alert } from '@grafana/ui' import { locationService, getBackendSrv, getDataSourceSrv, getAppEvents } from '@grafana/runtime'; import { AppRootProps, AppEvents } from '@grafana/data'; -import { DDS_OPEN_METRICS_DOC_URL, DATA_SOURCE_TYPE, APP_LOGO_URL } from '../../constants'; +import { DDS_OPEN_METRICS_DOC_URL, DATA_SOURCE_TYPE, APP_LOGO_URL, FALCON_AS_DASHBOARD, FALCON_SYS_DASHBOARD } from '../../constants'; import { GlobalSettings } from '../../types'; import { DASHBOARDS as DDS_DASHBOARDS } from '../../dashboards/dds'; import { DASHBOARDS as PROM_DASHBOARDS } from '../../dashboards/prometheus'; @@ -34,8 +34,6 @@ const DDS_FOLDER_NAME = 'IBM RMF (DDS)'; const PROM_FOLDER_UID = 'ibm-rmf-prometheus'; const PROM_FOLDER_NAME = 'IBM RMF (Prometheus)'; const DATASOURCE_API = '/api/datasources'; -const FALCON_AS_DASHBOARD = "d/de6imy1nncd1cf/system-cpu-overview" -const FALCON_SYS_DASHBOARD = "d/eefk6eunuubk0e/z-os-enterprise-overview" interface Props extends AppRootProps {} diff --git a/grafana/rmf-app/src/constants.ts b/grafana/rmf-app/src/constants.ts index 4d388c6f..bad9f8cd 100644 --- a/grafana/rmf-app/src/constants.ts +++ b/grafana/rmf-app/src/constants.ts @@ -27,3 +27,5 @@ export const DATA_SOURCE_TYPE = dataSourcePluginJson.id; export const DATA_SOURCE_NAME = dataSourcePluginJson.name; export const DDS_OPEN_METRICS_DOC_URL = 'https://www.ibm.com/docs/en/zos/3.1.0?topic=functions-setting-up-distributed-data-server-zos'; +export const FALCON_AS_DASHBOARD = "d/de6imy1nncd1cf/system-cpu-overview"; +export const FALCON_SYS_DASHBOARD = "d/eefk6eunuubk0e/z-os-enterprise-overview"; \ No newline at end of file diff --git a/grafana/rmf-app/src/datasources/rmf-datasource/common/configSettings.ts b/grafana/rmf-app/src/datasources/rmf-datasource/common/configSettings.ts index 432d9c08..aed3bd9f 100644 --- a/grafana/rmf-app/src/datasources/rmf-datasource/common/configSettings.ts +++ b/grafana/rmf-app/src/datasources/rmf-datasource/common/configSettings.ts @@ -27,3 +27,5 @@ export class ConfigSettings { IMAGE_URL: `/gpm/include/`, }; } + +export const OMEGAMON_DS_TYPE_NAME = "omegamon-datasource"; \ No newline at end of file diff --git a/grafana/rmf-app/src/datasources/rmf-datasource/config-editor/config-editor.component.tsx b/grafana/rmf-app/src/datasources/rmf-datasource/config-editor/config-editor.component.tsx index f42638e8..9faf03b4 100644 --- a/grafana/rmf-app/src/datasources/rmf-datasource/config-editor/config-editor.component.tsx +++ b/grafana/rmf-app/src/datasources/rmf-datasource/config-editor/config-editor.component.tsx @@ -14,10 +14,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import React, { PureComponent } from 'react'; +import React, { PureComponent, ReactNode } from 'react'; import { DataSourcePluginOptionsEditorProps } from '@grafana/data'; import { FieldValidationMessage, InlineField, InlineSwitch, LegacyForms, SecretInput } from '@grafana/ui'; import { RMFDataSourceSettings, RMFDataSourceJsonData, RMFDataSourceSecureJsonData } from '../common/types'; +import { OMEGAMON_DS_TYPE_NAME } from '../common/configSettings'; +import { getBackendSrv } from '@grafana/runtime'; require('./config-editor.component.css'); @@ -38,6 +40,7 @@ interface State { httpTimeoutError?: string; basicAuthUserError?: string; cacheSizeError?: string; + omegOptionsArray?: Array; } // TODO: somehow prometheus can validate fields from "run and test" in v11 export default class ConfigEditor extends PureComponent { @@ -137,6 +140,24 @@ export default class ConfigEditor extends PureComponent { }); }; + async componentDidMount() { + await this.updateDatasourceList(OMEGAMON_DS_TYPE_NAME); + } + + updateDatasourceList = async (type: string) => { + var optionsArray: Array = new Array; + var datasources: any = await getBackendSrv().get("/api/datasources") + datasources.forEach((ds: any) => { + if (ds.type === type) { + optionsArray.push(React.createElement("option", null, ds.name)); + } + }); + this.setState((prevState) => ({ + ...prevState, + omegOptionsArray: optionsArray + })); + } + render() { const { options } = this.props; const { urlError, httpTimeoutError, basicAuthUserError, cacheSizeError } = this.state; @@ -294,16 +315,15 @@ export default class ConfigEditor extends PureComponent {

Omegamon Data source (Experimental)

- { this.updateSettings({ jsonData: { omegamonDs: event.currentTarget.value } }); }} - /> + > + {this.state.omegOptionsArray} +
From 71dfe6aa455b8604adaf090b2c81bf1cf081ec41 Mon Sep 17 00:00:00 2001 From: dprizentsov Date: Tue, 2 Sep 2025 12:57:42 +0200 Subject: [PATCH 09/15] fix controp layout and datasource selection Signed-off-by: dprizentsov --- grafana/rmf-app/src/components/Root/Root.tsx | 8 +++++--- .../config-editor/config-editor.component.tsx | 3 +++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/grafana/rmf-app/src/components/Root/Root.tsx b/grafana/rmf-app/src/components/Root/Root.tsx index 858945c3..a2ccca33 100644 --- a/grafana/rmf-app/src/components/Root/Root.tsx +++ b/grafana/rmf-app/src/components/Root/Root.tsx @@ -206,9 +206,11 @@ export class Root extends PureComponent { [UID='{DDS_FOLDER_UID}']

- Link it with Omegamon Falcon UI (Experimental): - - {falcon.enabled = e.target.checked;}}/> +

+ Link it with Omegamon Falcon UI (Experimental): + + {falcon.enabled = e.target.checked;}}/> +

Address Space Details Dashboard: diff --git a/grafana/rmf-app/src/datasources/rmf-datasource/config-editor/config-editor.component.tsx b/grafana/rmf-app/src/datasources/rmf-datasource/config-editor/config-editor.component.tsx index 9faf03b4..80296610 100644 --- a/grafana/rmf-app/src/datasources/rmf-datasource/config-editor/config-editor.component.tsx +++ b/grafana/rmf-app/src/datasources/rmf-datasource/config-editor/config-editor.component.tsx @@ -146,6 +146,9 @@ export default class ConfigEditor extends PureComponent { updateDatasourceList = async (type: string) => { var optionsArray: Array = new Array; + if (this.props.options.jsonData?.omegamonDs) { + optionsArray.push(React.createElement("option", null, this.props.options.jsonData?.omegamonDs)); + } var datasources: any = await getBackendSrv().get("/api/datasources") datasources.forEach((ds: any) => { if (ds.type === type) { From 578d37300ec8c2ca88174e7df2c92d3289bdcfa3 Mon Sep 17 00:00:00 2001 From: dprizentsov Date: Tue, 2 Sep 2025 13:23:50 +0200 Subject: [PATCH 10/15] fix datasource list Signed-off-by: dprizentsov --- .../config-editor/config-editor.component.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/grafana/rmf-app/src/datasources/rmf-datasource/config-editor/config-editor.component.tsx b/grafana/rmf-app/src/datasources/rmf-datasource/config-editor/config-editor.component.tsx index 80296610..c9cc1e09 100644 --- a/grafana/rmf-app/src/datasources/rmf-datasource/config-editor/config-editor.component.tsx +++ b/grafana/rmf-app/src/datasources/rmf-datasource/config-editor/config-editor.component.tsx @@ -145,13 +145,18 @@ export default class ConfigEditor extends PureComponent { } updateDatasourceList = async (type: string) => { + var items: Set = new Set(); var optionsArray: Array = new Array; if (this.props.options.jsonData?.omegamonDs) { + items.add(this.props.options.jsonData?.omegamonDs); optionsArray.push(React.createElement("option", null, this.props.options.jsonData?.omegamonDs)); + } else { + optionsArray.push(React.createElement("option", null, " {falcon.enabled = e.target.checked;}}/>

diff --git a/grafana/rmf-app/src/components/Root/utils.ts b/grafana/rmf-app/src/components/Root/utils.ts index 0ab79b47..bb7fd803 100644 --- a/grafana/rmf-app/src/components/Root/utils.ts +++ b/grafana/rmf-app/src/components/Root/utils.ts @@ -149,8 +149,8 @@ function addVars(dashboard: any) { if (!omegamon_ds_exist) { dashboard.templating.list.push({ name: OMEGAMON_DS, - label: "Omegamon Data source", - description: "Omegamon Data source (optional)", + label: "OMEGAMON Data source", + description: "OMEGAMON Data source (optional)", datasource: { type: "ibm-rmf-datasource", uid: RMF_DATASOURCE_EXPR @@ -182,7 +182,7 @@ function falconJobUpdate(falcon: FalconStatus, dashboard: any) { p.fieldConfig.defaults.links = []; p.fieldConfig.defaults.links.push({ targetBlank: true, - title: "Omegamon details for " + JOB_NAME_EXPR, + title: "OMEGAMON details for " + JOB_NAME_EXPR, url: baseUrl + "var-dataSource=${" + OMEGAMON_DS + "}" + "&var-managedSystem=" + OMEG_PLEX_LPAR_MVSSYS_EXPR + "&var-_addressSpaceName=" + JOB_NAME_EXPR diff --git a/grafana/rmf-app/src/constants.ts b/grafana/rmf-app/src/constants.ts index bad9f8cd..17a0c99b 100644 --- a/grafana/rmf-app/src/constants.ts +++ b/grafana/rmf-app/src/constants.ts @@ -27,5 +27,5 @@ export const DATA_SOURCE_TYPE = dataSourcePluginJson.id; export const DATA_SOURCE_NAME = dataSourcePluginJson.name; export const DDS_OPEN_METRICS_DOC_URL = 'https://www.ibm.com/docs/en/zos/3.1.0?topic=functions-setting-up-distributed-data-server-zos'; -export const FALCON_AS_DASHBOARD = "d/de6imy1nncd1cf/system-cpu-overview"; +export const FALCON_AS_DASHBOARD = "d/ees8cbtsyfshse/job-cpu-details"; export const FALCON_SYS_DASHBOARD = "d/eefk6eunuubk0e/z-os-enterprise-overview"; \ No newline at end of file diff --git a/grafana/rmf-app/src/datasources/rmf-datasource/config-editor/config-editor.component.tsx b/grafana/rmf-app/src/datasources/rmf-datasource/config-editor/config-editor.component.tsx index c9cc1e09..2b4c4e2f 100644 --- a/grafana/rmf-app/src/datasources/rmf-datasource/config-editor/config-editor.component.tsx +++ b/grafana/rmf-app/src/datasources/rmf-datasource/config-editor/config-editor.component.tsx @@ -16,7 +16,7 @@ */ import React, { PureComponent, ReactNode } from 'react'; import { DataSourcePluginOptionsEditorProps } from '@grafana/data'; -import { FieldValidationMessage, InlineField, InlineSwitch, LegacyForms, SecretInput } from '@grafana/ui'; +import { FieldValidationMessage, InlineField, InlineSwitch, LegacyForms, SecretInput, Combobox, ComboboxOption } from '@grafana/ui'; import { RMFDataSourceSettings, RMFDataSourceJsonData, RMFDataSourceSecureJsonData } from '../common/types'; import { OMEGAMON_DS_TYPE_NAME } from '../common/configSettings'; import { getBackendSrv } from '@grafana/runtime'; @@ -140,31 +140,24 @@ export default class ConfigEditor extends PureComponent { }); }; - async componentDidMount() { - await this.updateDatasourceList(OMEGAMON_DS_TYPE_NAME); - } - - updateDatasourceList = async (type: string) => { + loadDatasourceList = async (inputValue: string) => { var items: Set = new Set(); - var optionsArray: Array = new Array; + var optionsArray: Array> = new Array; if (this.props.options.jsonData?.omegamonDs) { items.add(this.props.options.jsonData?.omegamonDs); - optionsArray.push(React.createElement("option", null, this.props.options.jsonData?.omegamonDs)); + optionsArray.push({value: this.props.options.jsonData?.omegamonDs} as ComboboxOption); } else { - optionsArray.push(React.createElement("option", null, ""} as ComboboxOption); } var datasources: any = await getBackendSrv().get("/api/datasources") datasources.forEach((ds: any) => { - if (ds.type === type && !items.has(ds.name)) { + if (ds.type === OMEGAMON_DS_TYPE_NAME && !items.has(ds.name)) { items.add(ds.name); - optionsArray.push(React.createElement("option", null, ds.name)); + optionsArray.push({value: ds.name} as ComboboxOption); } }); - this.setState((prevState) => ({ - ...prevState, - omegOptionsArray: optionsArray - })); - } + return optionsArray; + }; render() { const { options } = this.props; @@ -320,18 +313,15 @@ export default class ConfigEditor extends PureComponent { -

Omegamon Data source (Experimental)

+

OMEGAMON Data source (Experimental)

- + this.updateSettings({ jsonData: { omegamonDs: String(event.value) } }); + }}/>
From a4fee21a327f075fbf587784b455d8bf1d10cd62 Mon Sep 17 00:00:00 2001 From: dprizentsov Date: Thu, 4 Sep 2025 13:49:11 +0200 Subject: [PATCH 12/15] another way to request particular frame from report response, REPORTONLY, REPORTBANNER, REPORTCAPTION Signed-off-by: dprizentsov --- grafana/rmf-app/grammar/RMFQuery.g4 | 7 +++++-- .../datasources/rmf-datasource/parser/core/parser.ts | 11 ++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/grafana/rmf-app/grammar/RMFQuery.g4 b/grafana/rmf-app/grammar/RMFQuery.g4 index 74fe5f87..1a90f6de 100644 --- a/grafana/rmf-app/grammar/RMFQuery.g4 +++ b/grafana/rmf-app/grammar/RMFQuery.g4 @@ -30,7 +30,7 @@ Examples: grammar RMFQuery; -query: WS* RES_TYPE (DOT REPORT)? DOT identifier WS* qualifiers? WS* EOF; +query: WS* RES_TYPE (DOT (REPORT | REPORTONLY | REPORTBANNER | REPORTCAPTION))? DOT identifier WS* qualifiers? WS* EOF; // A workaround: some reports are also resource TYPES (e.g. CPC). // In general, the problem is that we define keywords that are not distiguashable for antlr from // string literals which we also support. @@ -55,7 +55,7 @@ workscopeValue: string? COMMA string? COMMA WORKSCOPE_TYPE; // Another workaround: it won't work on token level. number: INTEGER | DECIMAL; stringUnquoted - : IDENTIFIER | RES_TYPE | REPORT | WORKSCOPE | RANGE | ULQ | NAME | FILTER + : IDENTIFIER | RES_TYPE | REPORT | REPORTONLY | REPORTBANNER | REPORTCAPTION | WORKSCOPE | RANGE | ULQ | NAME | FILTER | PAT | LB | UB | HI | LO | ORD | ORD_OPTION | INTEGER | STRING_UNQUOTED | FRAME; stringSpaced: stringUnquoted (WS + stringUnquoted)*; stringDotted: stringUnquoted (DOT stringUnquoted)*; @@ -64,6 +64,9 @@ string: stringDotted | STRING_QUOTED; FRAME: F R A M E; REPORT: R E P O R T; +REPORTONLY: R E P O R T O N L Y; +REPORTBANNER: R E P O R T B A N N E R; +REPORTCAPTION: R E P O R T C A P T I O N; WORKSCOPE: W O R K S C O P E; RANGE: R A N G E; ULQ: U L Q; diff --git a/grafana/rmf-app/src/datasources/rmf-datasource/parser/core/parser.ts b/grafana/rmf-app/src/datasources/rmf-datasource/parser/core/parser.ts index ed7dbb91..192a599a 100644 --- a/grafana/rmf-app/src/datasources/rmf-datasource/parser/core/parser.ts +++ b/grafana/rmf-app/src/datasources/rmf-datasource/parser/core/parser.ts @@ -51,6 +51,9 @@ export class Parser { const resType = (tree.RES_TYPE()?.getText() || '').trim().toUpperCase(); const isReport = tree.REPORT() !== null; + const isReportOnly = tree.REPORTONLY() !== null; + const isReportBanner = tree.REPORTBANNER() !== null; + const isReportCaption = tree.REPORTCAPTION() !== null; const identifier = (tree.identifier()?.getText() || '').trim(); let qualifierValues = { name: '', ulq: '', workscope: '', frame: '' }; @@ -80,7 +83,7 @@ export class Parser { let resource = `${qualifierValues['ulq'] || ''},${qualifierValues['name'] || ''},${resType}`; let workscope = qualifierValues['workscope']; let frame = qualifierValues['frame']; - let query = `${isReport ? 'report' : 'id'}=${identifier}&resource=${resource}`; + let query = `${(isReport || isReportOnly || isReportBanner || isReportCaption) ? 'report' : 'id'}=${identifier}&resource=${resource}`; if (filters.length > 0) { query += `&filter=${filters.join('%3B')}`; } @@ -89,6 +92,12 @@ export class Parser { } if (frame) { query += `&frame=${frame}`; + } else if (isReportOnly) { + query += `&frame=0`; + } else if (isReportBanner) { + query += `&frame=1`; + } else if (isReportCaption) { + query += `&frame=2`; } parserGrammarResult.query = query; From 41bc981d335f58ece3e0788322d4cfeae89660e0 Mon Sep 17 00:00:00 2001 From: dprizentsov Date: Fri, 5 Sep 2025 11:15:07 +0200 Subject: [PATCH 13/15] copilot findings fixes Signed-off-by: dprizentsov --- grafana/rmf-app/pkg/plugin/frame/frame_test.go | 2 +- .../datasources/rmf-datasource/common/common.helper.ts | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/grafana/rmf-app/pkg/plugin/frame/frame_test.go b/grafana/rmf-app/pkg/plugin/frame/frame_test.go index 08230e43..9d9f1e72 100644 --- a/grafana/rmf-app/pkg/plugin/frame/frame_test.go +++ b/grafana/rmf-app/pkg/plugin/frame/frame_test.go @@ -64,7 +64,7 @@ func TestFrame(t *testing.T) { var expectedJson bytes.Buffer err := json.Indent(&expectedJson, testCase.ExpectedFrame, "", " ") if assert.NoError(t, err, "failed to indent") { - frame, err := Build("", testCase.DdsResponse, nil, testCase.Wide) + frame, err := Build(testCase.DdsResponse, nil, testCase.Wide) if err == nil { actualJson, _ := json.MarshalIndent(frame[0], "", " ") assert.JSONEq(t, expectedJson.String(), string(actualJson), "frames are not identical") diff --git a/grafana/rmf-app/src/datasources/rmf-datasource/common/common.helper.ts b/grafana/rmf-app/src/datasources/rmf-datasource/common/common.helper.ts index 019489fa..d6349d97 100644 --- a/grafana/rmf-app/src/datasources/rmf-datasource/common/common.helper.ts +++ b/grafana/rmf-app/src/datasources/rmf-datasource/common/common.helper.ts @@ -153,10 +153,10 @@ export const queryValidation = (query: string, resourceBaseData: any): QueryVali if ("sysplex" == query.toLowerCase() || "systems" == query.toLowerCase() || "omegamonds" == query.toLowerCase()) { - queryResult.result = true - queryResult.resourceCommand = query - queryResult.columnName = "RESLABEL" - return queryResult + queryResult.result = true; + queryResult.resourceCommand = query; + queryResult.columnName = "RESLABEL"; + return queryResult; } let result = true; if (query === '' || query.length < 20) { From b221985d62940db1ea7ace590897d98e4af2958a Mon Sep 17 00:00:00 2001 From: dprizentsov Date: Mon, 8 Sep 2025 11:24:05 +0200 Subject: [PATCH 14/15] linter related fixes Signed-off-by: dprizentsov --- grafana/rmf-app/pkg/plugin/datasource.go | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/grafana/rmf-app/pkg/plugin/datasource.go b/grafana/rmf-app/pkg/plugin/datasource.go index b0020076..cbf181e3 100644 --- a/grafana/rmf-app/pkg/plugin/datasource.go +++ b/grafana/rmf-app/pkg/plugin/datasource.go @@ -160,14 +160,13 @@ func (ds *RMFDatasource) CallResource(ctx context.Context, req *backend.CallReso q = strings.Trim(q, " ") q = strings.ToLower(q) - if "sysplex" == q { + if q == "sysplex" { data, _ := ds.sysplexContainedJson() - logger.Info("### " + string(data)) return sender.Send(&backend.CallResourceResponse{Status: http.StatusOK, Body: data}) - } else if "systems" == q { + } else if q == "systems" { data, _ := ds.systemsContainedJson() return sender.Send(&backend.CallResourceResponse{Status: http.StatusOK, Body: data}) - } else if "omegamonds" == q { + } else if q == "omegamonds" { data, _ := ds.omegamonContainedJson() return sender.Send(&backend.CallResourceResponse{Status: http.StatusOK, Body: data}) } @@ -236,12 +235,12 @@ func toContainedJson(resources []string) ([]byte, error) { contained.Resource = append(contained.Resource, Resource{Reslabel: "," + res + ","}) } + var containedResource = ContainedResource{ + Contained: contained, + } + result := Ddsml{ - ContainedResourcesList: []ContainedResource{ - ContainedResource{ - Contained: contained, - }, - }, + ContainedResourcesList: []ContainedResource{containedResource}, } return json.Marshal(result) } From b5348a2182eb149ac2fe184e89703cee1a511047 Mon Sep 17 00:00:00 2001 From: dprizentsov Date: Mon, 8 Sep 2025 11:40:31 +0200 Subject: [PATCH 15/15] linter related fixes Signed-off-by: dprizentsov --- grafana/rmf-app/pkg/plugin/datasource.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/grafana/rmf-app/pkg/plugin/datasource.go b/grafana/rmf-app/pkg/plugin/datasource.go index cbf181e3..7a22eb06 100644 --- a/grafana/rmf-app/pkg/plugin/datasource.go +++ b/grafana/rmf-app/pkg/plugin/datasource.go @@ -160,13 +160,14 @@ func (ds *RMFDatasource) CallResource(ctx context.Context, req *backend.CallReso q = strings.Trim(q, " ") q = strings.ToLower(q) - if q == "sysplex" { + switch q { + case "sysplex": data, _ := ds.sysplexContainedJson() return sender.Send(&backend.CallResourceResponse{Status: http.StatusOK, Body: data}) - } else if q == "systems" { + case "systems": data, _ := ds.systemsContainedJson() return sender.Send(&backend.CallResourceResponse{Status: http.StatusOK, Body: data}) - } else if q == "omegamonds" { + case "omegamonds": data, _ := ds.omegamonContainedJson() return sender.Send(&backend.CallResourceResponse{Status: http.StatusOK, Body: data}) }