@@ -8,15 +8,15 @@ import {
88 MutableDataFrame ,
99 FieldType ,
1010} from '@grafana/data' ;
11- import { getBackendSrv } from '@grafana/runtime' ;
11+ import { FetchResponse , getBackendSrv , BackendSrvRequest } from '@grafana/runtime' ;
1212
1313import { buildRequestBody , combinedDesc , graphDefinitionRequest } from './graphspecs' ;
14- import { MyQuery , defaultQuery , MyDataSourceOptions } from './types' ;
14+ import { MyQuery , defaultQuery , MyDataSourceOptions , ResponseData , ResponseDataCurves } from './types' ;
1515
1616export const buildUrlWithParams = ( url : string , params : Record < string , string > ) =>
1717 url + '?' + new URLSearchParams ( params ) . toString ( ) ;
1818
19- function buildMetricDataFrame ( response : any , query : MyQuery ) {
19+ function buildMetricDataFrame ( response : FetchResponse < ResponseData < ResponseDataCurves > > , query : MyQuery ) {
2020 if ( response . data . result_code !== 0 ) {
2121 throw new Error ( `${ response . data . result } ` ) ;
2222 }
@@ -25,12 +25,10 @@ function buildMetricDataFrame(response: any, query: MyQuery) {
2525 const frame = new MutableDataFrame ( {
2626 refId : query . refId ,
2727 fields : [ { name : 'Time' , type : FieldType . time } ] . concat (
28- curves . map ( ( x : any ) => ( { name : x . title , type : FieldType . number } ) )
28+ curves . map ( ( x ) => ( { name : x . title , type : FieldType . number } ) )
2929 ) ,
3030 } ) ;
31- zip ( ...curves . map ( ( x : any ) => x . rrddata ) ) . forEach ( ( d : any , i : number ) =>
32- frame . appendRow ( [ ( start_time + i * step ) * 1000 , ...d ] )
33- ) ;
31+ zip ( ...curves . map ( ( x ) => x . rrddata ) ) . forEach ( ( d , i ) => frame . appendRow ( [ ( start_time + i * step ) * 1000 , ...d ] ) ) ;
3432 return frame ;
3533}
3634
@@ -56,7 +54,7 @@ export class DataSource extends DataSourceApi<MyQuery> {
5654 return new MutableDataFrame ( ) ;
5755 }
5856 const editionMode = get ( this , 'instanceSettings.jsonData.edition' , 'CEE' ) ;
59- const response = await this . doRequest ( {
57+ const response = await this . doRequest < ResponseDataCurves > ( {
6058 ...query ,
6159 params : { action : 'get_graph' } ,
6260 data : graphDefinitionRequest ( editionMode , query , range ) ,
@@ -93,27 +91,27 @@ export class DataSource extends DataSourceApi<MyQuery> {
9391 } ) ;
9492 }
9593
96- async doRequest ( options : MyQuery ) {
97- return this . cmkRequest ( {
94+ async doRequest < T > ( options : MyQuery ) : Promise < FetchResponse < ResponseData < T > > > {
95+ return this . cmkRequest < T > ( {
9896 method : options . data == null ? 'GET' : 'POST' ,
9997 headers : { 'Content-Type' : 'application/x-www-form-urlencoded' } ,
10098 url : buildUrlWithParams ( `${ this . instanceSettings . url } /cmk/check_mk/webapi.py` , { ...options . params } ) ,
10199 data : options . data ,
102100 } ) ;
103101 }
104102
105- async restRequest ( api_url : string , data : any ) {
106- return this . cmkRequest ( {
103+ async restRequest < T > ( api_url : string , data : any ) : Promise < FetchResponse < ResponseData < T > > > {
104+ return this . cmkRequest < T > ( {
107105 method : 'POST' ,
108106 headers : { 'Content-Type' : 'application/x-www-form-urlencoded' } ,
109107 url : `${ this . instanceSettings . url } /cmk/check_mk/${ api_url } ` ,
110108 data : buildRequestBody ( data ) ,
111109 } ) ;
112110 }
113111
114- async cmkRequest ( request : any ) {
112+ async cmkRequest < T > ( request : BackendSrvRequest ) : Promise < FetchResponse < ResponseData < T > > > {
115113 const result = await getBackendSrv ( )
116- . fetch < { result_code : number , result : any } > ( request )
114+ . fetch < ResponseData < T > > ( request )
117115 . toPromise ( )
118116 . catch ( ( error ) => {
119117 if ( error . cancelled ) {
@@ -126,7 +124,7 @@ export class DataSource extends DataSourceApi<MyQuery> {
126124 } ) ;
127125
128126 if ( result === undefined ) {
129- return undefined ;
127+ throw new Error ( 'Got undefined result' ) ;
130128 }
131129
132130 if ( result . data instanceof String ) {
0 commit comments