@ -179,15 +179,38 @@ func (e *AzureResourceGraphDatasource) executeQuery(ctx context.Context, query *
if err != nil {
return dataResponseErrorWithExecuted ( err )
}
if frame . Meta == nil {
frame . Meta = & data . FrameMeta { }
azurePortalUrl , err := getAzurePortalUrl ( dsInfo . Cloud )
if err != nil {
return dataResponseErrorWithExecuted ( err )
}
frame . Meta . ExecutedQueryString = req . URL . RawQuery
dataResponse . Frames = data . Frames { frame }
url := azurePortalUrl + "/#blade/HubsExtension/ArgQueryBlade/query/" + url . PathEscape ( query . InterpolatedQuery )
frameWithLink := addConfigData ( * frame , url )
if frameWithLink . Meta == nil {
frameWithLink . Meta = & data . FrameMeta { }
}
frameWithLink . Meta . ExecutedQueryString = req . URL . RawQuery
dataResponse . Frames = data . Frames { & frameWithLink }
return dataResponse
}
func addConfigData ( frame data . Frame , dl string ) data . Frame {
for i := range frame . Fields {
if frame . Fields [ i ] . Config == nil {
frame . Fields [ i ] . Config = & data . FieldConfig { }
}
deepLink := data . DataLink {
Title : "View in Azure Portal" ,
TargetBlank : true ,
URL : dl ,
}
frame . Fields [ i ] . Config . Links = append ( frame . Fields [ i ] . Config . Links , deepLink )
}
return frame
}
func ( e * AzureResourceGraphDatasource ) createRequest ( ctx context . Context , dsInfo datasourceInfo , reqBody [ ] byte , url string ) ( * http . Request , error ) {
req , err := http . NewRequest ( http . MethodPost , url , bytes . NewBuffer ( reqBody ) )
if err != nil {
@ -228,3 +251,18 @@ func (e *AzureResourceGraphDatasource) unmarshalResponse(res *http.Response) (Az
return data , nil
}
func getAzurePortalUrl ( azureCloud string ) ( string , error ) {
switch azureCloud {
case setting . AzurePublic :
return "https://portal.azure.com" , nil
case setting . AzureChina :
return "https://portal.azure.cn" , nil
case setting . AzureUSGovernment :
return "https://portal.azure.us" , nil
case setting . AzureGermany :
return "https://portal.microsoftazure.de" , nil
default :
return "" , fmt . Errorf ( "the cloud is not supported" )
}
}