Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: implement metricFindQuery #11

Merged
merged 59 commits into from
Aug 11, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
14b44b8
Initial commit
mure Jun 29, 2023
c0fdbb3
Templating
mure Jul 5, 2023
f609f89
Remove tag
mure Jul 5, 2023
b124b23
Add Data Frames data source
mure Jul 6, 2023
bce2267
Downloaded plugin template
ggracechoi Jul 17, 2023
2813cd8
solved merge conflicts
ggracechoi Jul 18, 2023
c94f08a
Add systems data source from template
mure Jul 18, 2023
4f11242
Edited README with a brief overview of plugin
ggracechoi Jul 19, 2023
2bc3048
Merge branch 'users/grchoi/systems-datasource' of https://github.com/…
ggracechoi Jul 19, 2023
130e98d
Updated proper README
ggracechoi Jul 19, 2023
4a8d748
remove workflows
mure Jul 19, 2023
0b4c173
testDataSource method completed
ggracechoi Jul 20, 2023
1501c2e
Merge remote-tracking branch 'origin/main' into users/grchoi/systems-…
ggracechoi Jul 20, 2023
6cced05
Merge branch 'users/grchoi/systems-datasource' of https://github.com/…
ggracechoi Jul 20, 2023
453cabf
Updated type.ts
ggracechoi Jul 21, 2023
d9d1478
Updated SystemQueryEditor.tsx
ggracechoi Jul 21, 2023
4a02579
Before W2
ggracechoi Jul 21, 2023
b45c22e
W2 done
ggracechoi Jul 24, 2023
e310e35
Deleted old code
ggracechoi Jul 24, 2023
512798b
Merge remote-tracking branch 'origin/main' into users/grchoi/systems-…
ggracechoi Jul 24, 2023
7421def
Update src/datasources/system/components/SystemQueryEditor.tsx
ggracechoi Jul 24, 2023
bc6eeb9
Update src/datasources/system/types.ts
ggracechoi Jul 24, 2023
5fb1b99
added getDefaultQuery
ggracechoi Jul 25, 2023
4bd162e
added utils.ts
ggracechoi Jul 25, 2023
0ef8ac7
Merge branch 'users/grchoi/systems-datasource' of https://github.com/…
ggracechoi Jul 25, 2023
8e50a42
added utils.test.ts
ggracechoi Jul 25, 2023
53e748e
ran lint
ggracechoi Jul 25, 2023
8d9aad1
updated types.ts
ggracechoi Jul 26, 2023
085f10c
User can visualize metadata
ggracechoi Jul 26, 2023
4727692
Ran lint
ggracechoi Jul 26, 2023
f249394
Renamed interface
ggracechoi Jul 26, 2023
d768009
Merge remote-tracking branch 'origin/main' into users/grchoi/systems-…
ggracechoi Jul 26, 2023
a5cf62a
testing query variable stuff (not done)
ggracechoi Jul 27, 2023
968a0eb
Merge remote-tracking branch 'origin/main' into users/grchoi/systems-…
ggracechoi Jul 27, 2023
67da162
accidentally pushed broken code - reverted back
ggracechoi Jul 27, 2023
94216d6
Merge remote-tracking branch 'origin/main' into users/grchoi/systems-…
ggracechoi Jul 27, 2023
1c034c9
Merge branch 'users/grchoi/systems-datasource' of https://github.com/…
ggracechoi Jul 27, 2023
0e4f8cd
Revert package-lock changes
mure Jul 28, 2023
aed6091
added constants.ts
ggracechoi Jul 31, 2023
617f01c
testing
ggracechoi Jul 31, 2023
9bae64c
extract first ip
ggracechoi Aug 1, 2023
49dbc88
Merge remote-tracking branch 'origin/main' into users/grchoi/systems-…
ggracechoi Aug 1, 2023
bbd1471
Merge branch 'users/grchoi/systems-datasource' of https://github.com/…
ggracechoi Aug 1, 2023
0af32e6
query variable test
ggracechoi Aug 2, 2023
f6f7a8b
User can create a query variable
ggracechoi Aug 2, 2023
1203239
Merge remote-tracking branch 'origin/main' into users/grchoi/systems-…
ggracechoi Aug 2, 2023
9a9498c
got rid of comments for testing
ggracechoi Aug 2, 2023
e274401
removed import
ggracechoi Aug 3, 2023
25a89cf
minion id
ggracechoi Aug 3, 2023
24cdbf9
minion id kinda works
ggracechoi Aug 3, 2023
b4ab1c8
Added variable support w/ minion id
ggracechoi Aug 4, 2023
b7d21cb
Addressed PR feedback
ggracechoi Aug 9, 2023
fcd3eb2
test
ggracechoi Aug 10, 2023
adcefc6
test
ggracechoi Aug 10, 2023
31ac6ea
test
ggracechoi Aug 10, 2023
6bb7c25
Properly displays workspace names
ggracechoi Aug 11, 2023
9892440
Revert accidental commits
mure Aug 11, 2023
1f0a6fb
Addressed feedback
ggracechoi Aug 11, 2023
b426f0c
Merge branch 'users/grchoi/systems-datasource' of https://github.com/…
ggracechoi Aug 11, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 28 additions & 15 deletions src/datasources/system/SystemDataSource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@ import {
FieldType,
CoreApp,
toDataFrame,
MetricFindValue,
} from '@grafana/data';

import { TestingStatus, getBackendSrv } from '@grafana/runtime';
import { TestingStatus, getBackendSrv, getTemplateSrv } from '@grafana/runtime';

import { QueryType, SystemMetadata, SystemQuery, SystemSummary } from './types';
import { QueryType, SystemMetadata, SystemQuery, SystemSummary, VariableQuery } from './types';
import { defaultProjection } from './constants';
import { NetworkUtils } from './network-utils';

Expand All @@ -22,7 +23,7 @@ export class SystemDataSource extends DataSourceApi<SystemQuery> {
this.baseUrl = this.instanceSettings.url + '/nisysmgmt/v1';
}

transformProjection(projections: string[]): string {
transformProjection(projections: string[]): string {
let result = "new(";

projections.forEach(function (field) {
Expand All @@ -40,6 +41,13 @@ export class SystemDataSource extends DataSourceApi<SystemQuery> {
return NetworkUtils.getIpAddressFromInterfaces(ip4Interface) || NetworkUtils.getIpAddressFromInterfaces(ip6Interface);
}

async metricFindQuery(query: VariableQuery, options?: any): Promise<MetricFindValue[]> {
const response = await getBackendSrv().post<{ data: VariableQuery[] }>(this.baseUrl + '/query-systems', { projection: "new(id, alias)" });
const values = response.data.map(frame => ({ text: frame.alias, value: frame.id }));

return values;
cameronwaterman marked this conversation as resolved.
Show resolved Hide resolved
}

async query(options: DataQueryRequest<SystemQuery>): Promise<DataQueryResponse> {
// Return a constant for each query.
const data = await Promise.all(options.targets.map(async (target) => {
Expand All @@ -53,20 +61,25 @@ export class SystemDataSource extends DataSourceApi<SystemQuery> {
],
});
} else {
let metadataResponse = await getBackendSrv().post<{ data: SystemMetadata[] }>(this.baseUrl + '/query-systems', { projection: this.transformProjection(defaultProjection) });

const resolvedId = getTemplateSrv().replace(target.systemName, options.scopedVars);
const postBody = {
filter: resolvedId ? `id = "${resolvedId}" || alias = "${resolvedId}"` : '',
projection: this.transformProjection(defaultProjection),
orderBy: 'createdTimeStamp DESC'
};
let metadataResponse = await getBackendSrv().post<{ data: SystemMetadata[] }>(this.baseUrl + '/query-systems', postBody);
return toDataFrame({
fields: [
{ name: 'id', values: metadataResponse.data.map(m => m.id)},
{ name: 'alias', values: metadataResponse.data.map(m => m.alias)},
{ name: 'connection status', values: metadataResponse.data.map(m => m.state)},
{ name: 'locked status', values: metadataResponse.data.map(m => m.locked)},
{ name: 'system start time', values: metadataResponse.data.map(m => m.systemStartTime)},
{ name: 'model', values: metadataResponse.data.map(m => m.model)},
{ name: 'vendor', values: metadataResponse.data.map(m => m.vendor)},
{ name: 'operating system', values: metadataResponse.data.map(m => m.osFullName)},
{ name: 'ip address', values: metadataResponse.data.map(m => this.getIpAddress(m.ip4Interfaces, m.ip6Interfaces))},
{ name: 'workspace', values: metadataResponse.data.map(m => m.workspace)},
{ name: 'id', values: metadataResponse.data.map(m => m.id) },
{ name: 'alias', values: metadataResponse.data.map(m => m.alias) },
{ name: 'connection status', values: metadataResponse.data.map(m => m.state) },
{ name: 'locked status', values: metadataResponse.data.map(m => m.locked) },
{ name: 'system start time', values: metadataResponse.data.map(m => m.systemStartTime) },
{ name: 'model', values: metadataResponse.data.map(m => m.model) },
{ name: 'vendor', values: metadataResponse.data.map(m => m.vendor) },
{ name: 'operating system', values: metadataResponse.data.map(m => m.osFullName) },
{ name: 'ip address', values: metadataResponse.data.map(m => this.getIpAddress(m.ip4Interfaces, m.ip6Interfaces)) },
{ name: 'workspace', values: metadataResponse.data.map(m => m.workspace) },
]
});
}
Expand Down
15 changes: 14 additions & 1 deletion src/datasources/system/components/SystemQueryEditor.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React from 'react';
import { InlineField, InlineFieldRow, RadioButtonGroup } from '@grafana/ui';
import { InlineField, InlineFieldRow, Input, RadioButtonGroup } from '@grafana/ui';
ggracechoi marked this conversation as resolved.
Show resolved Hide resolved
import { QueryEditorProps } from '@grafana/data';
import { SystemDataSource } from '../SystemDataSource';
import { QueryType, SystemQuery } from '../types';
Expand All @@ -13,13 +13,26 @@ export function SystemQueryEditor({ query, onChange, onRunQuery }: Props) {
onRunQuery();
}

const onIdBlur = (e: React.FocusEvent<HTMLInputElement>) => {
const id = e.currentTarget.value;
if (query.systemName !== id) {
onChange({ ...query, systemName: id })
onRunQuery();
}
}

return (
<div>
<InlineFieldRow >
<InlineField label="Query type">
<RadioButtonGroup options={enumToOptions(QueryType)} onChange={onQueryTypeChange} value={query.queryKind} />
</InlineField>
</InlineFieldRow>
<InlineFieldRow>
<InlineField label="System" tooltip="Enter system ID or alias" >
<Input placeholder="All systems" onBlur={onIdBlur} defaultValue={query.systemName} />
</InlineField>
</InlineFieldRow>
</div>
);
}
3 changes: 2 additions & 1 deletion src/datasources/system/module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ import { HttpConfigEditor } from 'core/components/HttpConfigEditor';

export const plugin = new DataSourcePlugin(SystemDataSource)
.setConfigEditor(HttpConfigEditor)
.setQueryEditor(SystemQueryEditor);
.setQueryEditor(SystemQueryEditor)
.setVariableQueryEditor(() => null);
cameronwaterman marked this conversation as resolved.
Show resolved Hide resolved
8 changes: 7 additions & 1 deletion src/datasources/system/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ export enum QueryType {
}

export interface SystemQuery extends DataQuery {
queryKind: QueryType
queryKind: QueryType,
systemName: string
}

export interface SystemSummary {
Expand All @@ -27,3 +28,8 @@ export interface SystemMetadata {
ip6Interfaces: Record<string, string[]>,
workspace: string
}

export interface VariableQuery {
id: string,
alias: string
}