Qlik Community

Qlik Sense Integration, Extensions, & APIs

Discussion board where members can learn more about Integration, Extensions and API’s for Qlik Sense.

Announcements
Qlik Analytics Tour 2020 Online. Begins August 10th. Register Today
cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Partner
Partner

Download LOG file using QRS API

Hi All,

I am trying to figure out a way to be able to download the log file using the REST API.

I able to locate the file using the API endpoint FileReference. However, i am not able to figure out a way to be able to download the file as  a result of the API call.

here is what i am using 

REST call:  <servername>/qrs/filereference/<filereference_id>

Response:

id                 : fd8ad364-109b-4924-adfa-7ae285bbf00d
createdDate        : 2019-03-05T10:38:35.354Z
modifiedDate       : 2019-03-05T10:38:35.354Z
modifiedByUserName : INTERNAL\sa_scheduler
location           : myserver\Script\40ab5878-2164-4275-bbe0-0824fa04e040.2019_03_05_10_19_11.B5B796AD93CF2FFCEC06.log
size               : 309341
hash               : flG4jmMasEaHO7OJiV9Nxbw==
syncDirection      : 1
fileType           : 1
privileges         : 
schemaPath         : FileReference

 

As you can see, i have the log file name and the path under the location key.

Can someone help me figure out how to download the file.

 

Thanks,

Aadil

1 Solution

Accepted Solutions
Highlighted
Employee
Employee

Re: Download LOG file using QRS API

GET /qrs/ReloadTask/{ReloadTaskID}
Response:
You need the "operational"."fileReferenceID"
GET /qrs/ReloadTask/{ReloadTaskID}/scriptlog?fileReferenceId={fileReferenceID}
Example Response:
{
"value": "99ceba11-8ca5-4b0b-ba3d-e08fc8643863"
}
GET /qrs/download/reloadtask/{ID from previous call}/{ArbitraryFileName.FileExt}

View solution in original post

3 Replies
Highlighted
Employee
Employee

Re: Download LOG file using QRS API

GET /qrs/ReloadTask/{ReloadTaskID}
Response:
You need the "operational"."fileReferenceID"
GET /qrs/ReloadTask/{ReloadTaskID}/scriptlog?fileReferenceId={fileReferenceID}
Example Response:
{
"value": "99ceba11-8ca5-4b0b-ba3d-e08fc8643863"
}
GET /qrs/download/reloadtask/{ID from previous call}/{ArbitraryFileName.FileExt}

View solution in original post

Highlighted
Partner
Partner

Re: Download LOG file using QRS API

Hello,

If interested, this is some Qlik Sense script code to download the log file and save it locally. 
It is assuming you have a working REST data connection to QRS API named 'QRS API'

and it uses both 

https://localhost/qrs/ReloadTask/$(sTaskId)/scriptlog 
https://localhost/qrs/download/reloadtask/$(vFileReferenceID)/<tmp file>

repository API 

We are using it to retrieve regularly the logs of failed jobs before they get overwritten by latest reload task and to fill a Qlik application to track job execution

Thomas

 

 

// -------------- GetLog --------------------
// Download a task log file via QRS API  
// - Save it locally as log file named sLogName

sub TaskLogs.GetLog(sLogName,sTaskId,sReferenceId)

  TRACE *** Retrieving log ""$(sLogName)"" from taskID $(sTaskId)], referenceId $(sReferenceId);

  // Parameters for QRS API calls
  set vlQRSAPIXrfkey='adcdef0123456789';
  set ErrorMode=0;
  
  TRACE *** Starting qrs/ReloadTask import;

  // Get the "operational"."fileReferenceID" 
  // see https://community.qlik.com/t5/Qlik-Sense-Integration/Download-LOG-file-using-QRS-API/m-p/1567020#M10312 
  LIB CONNECT TO 'QRS API';
  RestConnectorMasterTable:
  SQL SELECT 
      "value"
  FROM JSON (wrap on) "root" 
      WITH CONNECTION ( 
          URL "https://localhost/qrs/ReloadTask/$(sTaskId)/scriptlog", 
          QUERY "fileReferenceId" "$(sReferenceId)",
          QUERY "Xrfkey" "$(vlQRSAPIXrfkey)",
          HTTPHEADER "X-Qlik-Xrfkey" "$(vlQRSAPIXrfkey)",
          HTTPHEADER "User-Agent" "Windows"
      );

  // Verify the validity of the RestConnectorMasterTable
  if IsNull(TableNumber('RestConnectorMasterTable')) or NoOfRows('RestConnectorMasterTable')=0 then
      TRACE *** ERROR: Failure when calling QRS API with  ReloadTask/$(sTaskId)/scriptlog...; 
  else   
    [root]:
    LOAD	[value]
    RESIDENT RestConnectorMasterTable;
    DROP TABLE RestConnectorMasterTable;

    let vFileReferenceID=Peek('value',0,'root');
    TRACE *** TaskLogs.Add retrieved vFileReferenceID $(vFileReferenceID);
    DROP TABLE root;
  end if;  
    
  // Get the file and save it 
  // As this is not true CSV, we need to use a improbable delimiter like 'µ'
  // This is working unless you are trying to get a log which contains this 
  // particular character 
  // if you have a better idea please let me know...
  RestConnectorMasterTable:
  SQL SELECT 
    "col_1"
  FROM CSV (header off, delimiter "µ", quote """" ) "TaskLogs"
  WITH CONNECTION ( 
            URL "https://localhost/qrs/download/reloadtask/$(vFileReferenceID)/tmp.log", 
            QUERY "Xrfkey" "$(vlQRSAPIXrfkey)",
            HTTPHEADER "X-Qlik-Xrfkey" "$(vlQRSAPIXrfkey)",
            HTTPHEADER "User-Agent" "Windows"
        );

  // Verify the validity of the RestConnectorMasterTable
  if IsNull(TableNumber('RestConnectorMasterTable')) or NoOfRows('RestConnectorMasterTable')=0 then
      TRACE *** ERROR: Failure when calling QRS API with download/reloadtask/$(vFileReferenceID)/tmp.log...; 
  else   
    [Log]:
    LOAD	"col_1" as "line"
    RESIDENT RestConnectorMasterTable;
    DROP TABLE RestConnectorMasterTable;

    if ( NoOfRows('Log') > 1 ) then
      STORE "Log" INTO [$(sLogName)] (txt);
    end if;  

    DROP TABLE [Log];
  end if;  

  set vFileReferenceID=;
  set vlQRSAPIXrfkey=;
  set ErrorMode=1;

end sub;
Highlighted
Partner
Partner

Re: Download LOG file using QRS API

Thanks. This is cool.