Skip to content

Commit ee0ee7b

Browse files
committed
fix: updated data frame with stream fields
1 parent ade8b62 commit ee0ee7b

File tree

3 files changed

+37
-32
lines changed

3 files changed

+37
-32
lines changed

src/components/QueryEditor.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useEffect, useRef, useState } from 'react';
1+
import React, { useEffect, useState } from 'react';
22
import { InlineLabel, Select, Switch } from '@grafana/ui';
33
import { QueryEditorProps } from '@grafana/data';
44
import { DataSource } from '../datasource';

src/components/ZincEditor.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ export function ZincEditor({ query, onChange, placeholder, fields, runQuery }: P
168168
const onEditorMount = (editor: any, monaco: any) => {
169169
console.log(reactMonacoEditorRef.current);
170170
monaco.languages.registerCompletionItemProvider('sql', {
171-
provideCompletionItems: function (model, position) {
171+
provideCompletionItems: function (model: any, position: any) {
172172
// find out if we are completing a property in the 'dependencies' object.
173173
let textUntilPosition = model.getValueInRange({
174174
startLineNumber: 1,

src/datasource.ts

Lines changed: 35 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -31,42 +31,47 @@ export class DataSource extends DataSourceApi<MyQuery, MyDataSourceOptions> {
3131
};
3232
}
3333

34+
buildLogsDataFrame(logs: any[], target: MyQuery) {
35+
const fieldsMapping: { [key: string]: FieldType } = {
36+
Utf8: FieldType.string,
37+
Int64: FieldType.number,
38+
timestamp: FieldType.time,
39+
};
40+
41+
const fields = [
42+
{ name: 'Time', type: FieldType.time },
43+
{ name: 'Content', type: FieldType.string },
44+
];
45+
46+
target.streamFields.forEach((field: any) => {
47+
fields.push({
48+
name: field.name,
49+
type: fieldsMapping[field.type],
50+
});
51+
});
52+
53+
const frame = new MutableDataFrame({
54+
refId: target.refId,
55+
meta: {
56+
preferredVisualisationType: 'logs',
57+
},
58+
fields,
59+
});
60+
61+
logs.forEach((log: any) => {
62+
frame.add({ ...log, Content: JSON.stringify(log) });
63+
});
64+
65+
return frame;
66+
}
67+
3468
async query(options: DataQueryRequest<MyQuery>): Promise<DataQueryResponse> {
3569
const timestamps = this.getConsumableTime(options.range);
3670
const promises = options.targets.map((target) => {
37-
// Your code goes here.
3871
const reqData = this.buildQuery(target, timestamps);
3972
return this.doRequest(target, reqData)
4073
.then((response) => {
41-
const frame = new MutableDataFrame({
42-
refId: target.refId,
43-
meta: {
44-
preferredVisualisationType: 'logs',
45-
},
46-
fields: [
47-
{ name: 'Time', type: FieldType.time },
48-
{ name: 'log', type: FieldType.string },
49-
{ name: 'kubernetes_container_hash', type: FieldType.string },
50-
{ name: 'kubernetes_container_image', type: FieldType.string },
51-
{ name: 'kubernetes_container_name', type: FieldType.string },
52-
{ name: 'kubernetes_docker_id', type: FieldType.string },
53-
{ name: 'kubernetes_labels_app_kubernetes_io_instance', type: FieldType.string },
54-
{ name: 'kubernetes_host', type: FieldType.string },
55-
],
56-
});
57-
response.hits.forEach((point: any) => {
58-
frame.appendRow([
59-
point.time,
60-
point.log,
61-
point.kubernetes_container_hash,
62-
point.kubernetes_container_image,
63-
point.kubernetes_container_name,
64-
point.kubernetes_docker_id,
65-
point.kubernetes_labels_app_kubernetes_io_instance,
66-
point.kubernetes_host,
67-
]);
68-
});
69-
return frame;
74+
return this.buildLogsDataFrame(response.hits, target);
7075
})
7176
.catch((err) => {
7277
let error = '';

0 commit comments

Comments
 (0)