Skip to main content
Announcements
Marching toward a simplified navigation! READ ON
cancel
Showing results for 
Search instead for 
Did you mean: 
aadil_madarveet
Partner - Creator II
Partner - Creator II

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
Levi_Turner
Employee
Employee

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

4 Replies
Levi_Turner
Employee
Employee

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}
thomasmaure
Luminary Alumni
Luminary Alumni

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;
aadil_madarveet
Partner - Creator II
Partner - Creator II
Author

Thanks. This is cool.

subramani_r
Contributor III
Contributor III

Thanks a lot. I did all you said, but getting a 404 response. Can you please help in this regard?

subramani_r_0-1656693657851.png