This is the multi-page printable view of this section. Click here to print.
Documentation
- 1: Overview
- 2: Getting Started
- 2.1: Security
- 2.2: Authentication with Sense
- 2.3: Colors & formatting
- 2.4: Dry runs
- 3: Commands
- 3.1: App scripts
- 3.2: Bookmarks
- 3.3: Connection test
- 3.4: Custom properties
- 3.5: Dimensions
- 3.6: Measures
- 3.7: Scramble fields
- 3.8: Sessions
- 3.9: Tasks
- 3.10: Variables
- 3.11: Export
- 3.12: Import
- 3.12.1: Apps
- 3.12.2: Master items
- 3.12.3: Tasks
- 4: Examples
1 - Overview
What is Ctrl-Q?
The focus of Ctrl-Q is on slightly more complex use cases that are not handled out of the box by other tools such as Qlik’s official Qlik CLI tool or Adam Haydon’s Qlik CLI Windows tool.
Both are exceptional tools and extremely useful, but especially when it comes to interactions with the Qlik Sense engine they fall a bit short.
Ctrl-Q also tries to fill niches that are not covered by the various members of the Butler family of open source SenseOps tools.
The Butler tools each focus on a specific feature (or features in the case of the original Butler tool) and goes fairly deep in those areas.
For example, Butler SOS focus on getting real-time metrics and events out of Sense and into a wide range of target databases and monitoring tools.
Butler Sheet Icons creates sheet thumbnails for Sense apps - but offers lots of flexibility and power around that use case.
What can Ctrl-Q do for me?
Ctrl-Q focus on specific, high-value uses cases that tend to be very time consuming and/or error prone to do manually.
The list of features include:
- Get all current sessions, including user ID, virtual proxy, load balanced servers and more.
- Delete all or some sessions for a given virtual proxy / proxy service.
- Get complete definition of all reload tasks and external program tasks as tree view, network graph, tabular view or JSON. Show on screen or save to disk file.
- Bulk import of reload and external program tasks from disk files. Optionally also import QVF files.
- Build task chains using newly imported and/or existing tasks.
- All options available in the QMC (and then some!) can be defined.
- Bulk import of QVF files into Sense apps, including (re-)publishing of the apps.
- Update custom properties for multiple tasks.
- Import master dimensions and master measures from definitions in Excel file, including per dimension/measure colors.
- Show complete definitions for all master measures in a Sense app.
- Delete master measures from a Sense app.
- Show complete definitions for all master dimensions in a Sense app.
- Delete variables in one or more apps.
- List complete defintions for all variables in one or more apps.
- Delete master dimensions from a Sense app.
- Show complete definition of all bookmarks in a Sense app.
- Scramble fields in Sense apps.
- Get load script from Sense app.
As Ctrl-Q is completely command line driven it is very suitable to be used in CI/CD pipelines, with time savings, increased reusability and higher app quality as a result.
Maybe Qlik’s CLI tool will evolve to include more of these use cases and engine-focused features too - great if so.
Until then Ctrl-Q can hopefully make life a bit easier for Sense developers and admins out there.
Where can I find out more?
There are several blog posts on ptarmiganlabs.com where various Ctrl-Q features are examined in detail.
Everything from short overviews of new features to very thorough, step-by-step instructions for how to use Ctrl-Q to solve some challenging Qlik Sense related task.
Where should I go next?
- Getting Started: Get started with Ctrl-Q
2 - Getting Started
Download and install
There is no need to install Ctrl-Q. Just download and run.
The GitHub release page has ready-to-run binaries for Windows, macOS and Linux.
The macOS binary is security scanned and signed by Apple, using their standard notarization process. This means you won’t get those annoying unsigned-app-warnings when using the app on macOS.
The Windows binary is signed by an official/commercial app signing certificate that can be verified when needed.
Logging
Logging is controlled by the –log-level option.
Valid values are (in order of increasing verbosity): error, warn, info, verbose, debug, silly.
Note: When using log level silly all websocket communication to/from the Sense server will be logged to the console. This means lots of log output.
2.1 - Security
Ctrl-Q is open source and you have access to all source code.
It is your responsibility to determine if Ctrl-Q is suitable for your use case.
The creators of Ctrl-Q, including Ptarmigan Labs, GΓΆran Sander or any other contributor, can and must never be held liable to past or future security issues of Ctrl-Q.
If you have security concerns or ideas around Ctrl-Q, please get involved in the project and contribute to making it better!
If you discover a serious bug with Ctrl-Q that may pose a security problem, please disclose it
confidentially to security@ptarmiganlabs.com first, so it can be assessed and hopefully fixed
prior to being exploited.
Please do not raise GitHub issues for serious security-related doubts or problems.
Virus scanning
Every time a Ctrl-Q release is done the created binaries are sent to VirusTotal for scanning.
VirusTotal acts as an aggregated virus scanner that sends the Ctrl-Q binaries to dozens of anti-virus scanners, including many of the major/most widely used ones.
Links to the VirusTotal scan report are included in each release notes, making it easy to check the status of each binary:
A VirusTotal scan that reports “no risks found” can look like this:
Positive scan vs false positives
If one or more of the security vendors used by VirusTotal reports an issue you have to make a decision.
Is it a real issue or a false positive?
You have to decide this yourself, but some general lines of thought can be:
Is it a single vendor that reports the Ctrl-Q binary file to be a risk, or several vendors?
If one vendor reports an issue and 60+ vendors don't, you might be looking at a false positive.
But again - at the end of the day it’s you that must make that decision.
A scan where a single security vendor reports an issue can look like this:
Signed binaries
The macOS executable binary is signed and notarized by Apple’s standard process.
A warning may still be shown first time the app is started. This is expected and normal.
The Windows executable binary is signed by “Ptarmigan Labs AB”.
2.2 - Authentication with Sense
Certificates
If the --auth-type
option is set to cert
, Ctrl-Q will authenticate with Qlik Sense Enterprise using certificates.
This is the default authentication method that will be used if no --auth-type
option is specified.
These certificates are exported from the QMC and stored on disk in PEM format.
Three certificate files are needed (and exported from the QMC):
- The client certificate, which is used to authenticate with the Sense engine.
- The client key, which is used to authenticate with the Sense engine.
- The root certificate, which is needed to verify the Sense server’s certificate (as Qlik Sense uses a self-signed certificate).
Ctrl-Q can reference these certificates in two ways:
- if one or more of the
--auth-cert-file
,auth-cert-key-file
and--auth-root-cert-file
options are used, Ctrl-Q will read the certificates from the disk file(s) pointed to by those options. - If one or more of the options above are not specified when Ctrl-Q is started, it will look for certificates in the
config
folder in the same folder as the Ctrl-Q executable.- The certificate files must then be named
client.pem
,client_key.pem
androot.pem
, i.e. the names used by the QMC when exporting the certificates.
- The certificate files must then be named
If the -secure false
option is used, Ctrl-Q will not verify the Sense server’s certificate.
This is not recommended from a security perspective, but can still be useful if you are having trouble getting Ctrl-Q to authenticate with Sense.
The options --auth-user-dir
and -auth-user-id
are also needed to authenticate with Sense.
They define which user will be used when interacting with both the engine and repository APIs.
Strict or relaxed certificate validation
When using certificate authentication, Ctrl-Q will by default validate the Sense server’s certificate.
This happens as the default value for the --secure
option is true
.
What does “validate the certificate” mean?
Validating a certificate means that Ctrl-Q will check that the certificate is signed by a trusted authority, that it has not expired, and that the server’s hostname matches the certificate’s common name.
For example, if the certificate is created for a host called pro2-win1.lab.ptarmiganlabs.net
, Ctrl-Q will - by verifying the server certificate - check that the server it is connecting to is indeed pro2-win1.lab.ptarmiganlabs.net
.
If the server’s hostname does not match the certificate’s common name, Ctrl-Q will refuse to connect.
Looks like this:
PS C:\tools\ctrl-q> .\ctrl-q.exe connection-test `
>> --host pro2-win1.ptarmiganlabs.net `
>> --auth-user-dir LAB `
>> --auth-user-id goran
2024-03-09T13:42:31.263Z info: -----------------------------------------------------------
2024-03-09T13:42:31.263Z info: | Ctrl-Q
2024-03-09T13:42:31.263Z info: |
2024-03-09T13:42:31.263Z info: | Version : 3.15.2
2024-03-09T13:42:31.263Z info: | Log level : info
2024-03-09T13:42:31.263Z info: |
2024-03-09T13:42:31.263Z info: | Command : connection-test
2024-03-09T13:42:31.263Z info: | : test connection to Qlik Sense server.
2024-03-09T13:42:31.263Z info: |
2024-03-09T13:42:31.263Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-09T13:42:31.263Z info: |
2024-03-09T13:42:31.263Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-09T13:42:31.263Z info: ----------------------------------------------------------
2024-03-09T13:42:31.263Z info:
2024-03-09T13:42:31.278Z info: Testing connection to Qlik Sense server pro2-win1.ptarmiganlabs.net on port 4242
2024-03-09T13:42:31.403Z error: GET ABOUT INFO: Hostname/IP does not match certificate's altnames: Host: pro2-win1.ptarmiganlabs.net. is not in the cert's altnames: DNS:pro2-win1.lab.ptarmiganlabs.net
Ctrl-Q tells us that something is not right with the certificate and we even get a pretty clear message about what is wrong.
Changing the command to use the correct hostname makes the error go away and the command works as expected:
PS C:\tools\ctrl-q> .\ctrl-q.exe connection-test `
>> --host pro2-win1.lab.ptarmiganlabs.net `
>> --auth-user-dir LAB `
>> --auth-user-id goran
2024-03-09T13:50:10.741Z info: -----------------------------------------------------------
2024-03-09T13:50:10.741Z info: | Ctrl-Q
2024-03-09T13:50:10.741Z info: |
2024-03-09T13:50:10.741Z info: | Version : 3.15.2
2024-03-09T13:50:10.741Z info: | Log level : info
2024-03-09T13:50:10.741Z info: |
2024-03-09T13:50:10.741Z info: | Command : connection-test
2024-03-09T13:50:10.741Z info: | : test connection to Qlik Sense server.
2024-03-09T13:50:10.741Z info: |
2024-03-09T13:50:10.741Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-09T13:50:10.741Z info: |
2024-03-09T13:50:10.757Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-09T13:50:10.757Z info: ----------------------------------------------------------
2024-03-09T13:50:10.757Z info:
2024-03-09T13:50:10.757Z info: Testing connection to Qlik Sense server pro2-win1.lab.ptarmiganlabs.net on port 4242
2024-03-09T13:50:10.913Z info: Successfully connected to Qlik Sense server pro2-win1.lab.ptarmiganlabs.net on port 4242
2024-03-09T13:50:10.913Z info: Qlik Sense repository build version: 31.36.2.0
2024-03-09T13:50:10.913Z info: Qlik Sense repository build date: 1/11/2024 22:04:12 PM
All this said, if you are having trouble getting Ctrl-Q to connect to Sense, you can use the --secure false
option to disable certificate validation.
Not preferred from a security perspective, but it can still be useful if you are having trouble getting Ctrl-Q to authenticate with Sense.
Ports used for certificate authentication
When using certificate authentication, Ctrl-Q will connect to the Qlik Engine API on port 4747.
When using certificate authentication, Ctrl-Q will connect directly to the various Qlik Sense services on the port exposed by each service:
- Qlik Repository Service (QRS) on port 4242
- Qlik Proxy Service (QPS) on port 4243
- Qlik Engine Service (QES) on port 4747
If the default ports are not used, each Ctrl-Q command allows you to specify the port to use for each Sense service.
JWTs
If the --auth-type
option is set to jwt
, Ctrl-Q will authenticate with Qlik Sense Enterprise using JWTs.
JWTs - JSON Web Tokens - are a standard way of authenticating with web services, where a token is issued by an authentication service and then used to authenticate with other services.
JWTs contain a number of claims, including the user ID, which is used to identify the user.
π‘ Remember
JWTs are essentially full credentials in a single file.
I.e. anyone with a JWT can authenticate with Sense as the user that the JWT was issued for.
Treat JWTs as you would any other credentials (e.g. passwords etc).
When Ctrl-Q is started with --auth-type
option set to jwt
, it will then look for an option called --auth-jwt
.
Pass in the JWT as the value of this option, and Ctrl-Q will use it to authenticate with Sense.
Embed the JWT in double quotes if it contains special characters (e.g. spaces).
Ports used for JWT authentication
Given the nature of JWT authentication and the fact that it is handled on a virtual proxy level, Ctrl-Q cannot connect directly to the Qlik Sense services when using JWT authentication.
Instead all access must go via a virtual proxy that is configured to use JWT authentication.
This in turn means that Ctrl-Q will need to use whatever port the virtual proxy is configured to use.
Usually this is port 443, but it can be any port, as configured in the proxy linked to the virtual proxy.
Remember to specify the correct port when using JWT authentication, using the --port
(might be called --proxy-port
or similar in some Ctrl-Q commands) option.
2.3 - Colors & formatting
Some of the Ctrl-Q commands use colors and emojis to better communicate the information retrieved from Qlik Sense.
The task tree view is an example, but more commands may use colors in the future.
The use of colors in console/command line applications has been around since at least the 80s.
MS-DOS supported it, as did early Windows versions.
Today this feature is quite fragmented.
Console applications using colors are natively supported on macOS and Linux.
On Windows Server 2016 and earlier it’s very hard to get this working, later versions may be easier.
On Windows 10 and later it’s possible to use Microsoft’s excellent new command line shell, Windows Terminal.
Highly recommended if you use a desktop Windows operating system!
Ctrl-Q tries to offer plain text visuals unless extra features, flare and color is enabled via command line parameters.
Some examples follow, showing different views of reload task trees.
All OSs: plain text
The command for the most basic task tree is
.\ctrl-q.exe task-get `
--auth-type cert `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran `
--output-format tree `
--output-dest screen
Add the --tree-details
option and the result contains a lot more details for each task. Not very easy to read though.
Note: the task-get
command has lots of options, these are described in more detail on this page.
.\ctrl-q.exe task-get `
--auth-type cert `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran `
--output-format tree `
--output-dest screen `
--tree-details
Windows 10 using Windows Terminal
Thanks to Windows Terminal handling text coloring and emojis we can add a couple of options:
--tree-icons
to get emojis showing the result from each task’s last execution (success, fail etc)--text-color yes
to get nicely colored text in the task tree
.\ctrl-q.exe task-get `
--auth-type cert `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran `
--output-format tree `
--output-dest screen `
--tree-icons `
--text-color yes
Adding --tree-details
gives us a tree that’s a lot easier to read compared to previous, uncolored version.
.\ctrl-q.exe task-get `
--auth-type cert `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran `
--output-format tree `
--output-dest screen `
--tree-icons `
--text-color yes `
--tree-details
macOS and Linux
A task tree with colors on macOS and Linux versions of Ctrl-Q looks exactly like same as in Windows Terminal.
The only difference is that you don’t have to install a new command line shell.
2.4 - Dry runs
Many of Ctrl-Q’s commands will create, update or delete things in Sense.
As long as you have specified the correct parameters that’s all good - but there is also the risk of using incorrect parameters or filters, causing too many (or too few or the wrong) resources in Sense to be affected.
Most Ctrl-Q commands that change things in Sense have a --dry-run
option.
If used, Ctrl-Q will not make any changes in Sense, but instead only show what would happen.
It’s thus a very good idea to first do a dry run of the intended command, verify that the correct things would happen and then finally do a real execution of the desired Ctrl-Q command.
Might take a bit of extra time, but better safe than sorry.
3 - Commands
List available commands
If unsure about which command to use, run ctrl-q help
to get a list of commands available in the Ctrl-Q version you are using.
Using Windows Terminal/PowerShell:
.\ctrl-q.exe help
Using macOS/Linux:
./ctrl-q help
Usage: ctrl-q [options] [command]
Ctrl-Q is a command line utility for interacting with client-managed Qlik Sense Enterprise on Windows servers.
Among other things the tool does bulk import of apps and tasks, manipulates master items and scrambles in-app data.
Version: 3.16.0
Options:
-V, --version output the version number
-h, --help display help for command
Commands:
app-export [options] export Qlik Sense apps to QVF files on disk.
app-import [options] import apps/upload QVF files on disk to Sense based on definitions in Excel file.
bookmark-get [options] get info about one or more bookmarks
connection-test [options] test connection to Qlik Sense server.
field-scramble [options] scramble one or more fields in an app. A new app with the scrambled data is created.
help [command] display help for command
master-item-dim-delete [options] delete master dimension(s)
master-item-dim-get [options] get info about one or more master dimensions
master-item-import [options] create master items based on definitions in a file on disk
master-item-measure-delete [options] delete master measure(s)
master-item-measure-get [options] get info about one or more master measures
script-get [options] get script from Qlik Sense app
session-delete [options] delete proxy session(s) on a specific virtual proxy and proxy service
session-get [options] get info about proxy sessions on one or more virtual proxies
task-custom-property-set [options] update a custom property of one or more tasks
task-get [options] get info about one or more tasks
task-import [options] create tasks based on definitions in a file on disk, optionally also importing apps from QVF files.
task-vis [options] visualise task network
variable-delete [options] delete one or more variables in one or more apps
variable-get [options] get variable definitions in one or more apps
version [options] show version info
3.1 - App scripts
Page contents:
Get script
Get script and associated metadata for a Sense app.
.\ctrl-q.exe script-get `
--host pro2-win1.lab.ptarmiganlabs.net `
--app-id a3e0f5d2-000a-464f-998d-33d333b175d7 `
--auth-user-dir LAB `
--auth-user-id goran
2024-04-22T19:01:50.098Z info: -----------------------------------------------------------
2024-04-22T19:01:50.099Z info: | Ctrl-Q
2024-04-22T19:01:50.099Z info: |
2024-04-22T19:01:50.099Z info: | Version : 3.17.0
2024-04-22T19:01:50.099Z info: | Log level : info
2024-04-22T19:01:50.100Z info: |
2024-04-22T19:01:50.100Z info: | Command : script-get
2024-04-22T19:01:50.100Z info: | : get script from Qlik Sense app
2024-04-22T19:01:50.100Z info: |
2024-04-22T19:01:50.100Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-04-22T19:01:50.101Z info: |
2024-04-22T19:01:50.101Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-04-22T19:01:50.101Z info: ----------------------------------------------------------
2024-04-22T19:01:50.101Z info:
2024-04-22T19:01:51.496Z info: ----- Script metadata -----
2024-04-22T19:01:51.496Z info: App id: a3e0f5d2-000a-464f-998d-33d333b175d7
2024-04-22T19:01:51.496Z info: Created date: 2021-06-03T22:04:52.283Z
2024-04-22T19:01:51.497Z info: Modified date: 2024-03-20T08:02:25.153Z
2024-04-22T19:01:51.497Z info: ----- End script metadata -----
///$tab Main
SET ThousandSep=',';
SET DecimalSep='.';
SET MoneyThousandSep=',';
SET MoneyDecimalSep='.';
SET MoneyFormat='$#,##0.00;-$#,##0.00';
SET TimeFormat='h:mm:ss TT';
SET DateFormat='M/D/YYYY';
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
SET FirstWeekDay=6;
SET BrokenWeeks=1;
SET ReferenceDay=0;
SET FirstMonthOfYear=1;
SET CollationLocale='en-US';
SET CreateSearchIndexOnReload=1;
SET MonthNames='Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec';
SET LongMonthNames='January;February;March;April;May;June;July;August;September;October;November;December';
SET DayNames='Mon;Tue;Wed;Thu;Fri;Sat;Sun';
SET LongDayNames='Monday;Tuesday;Wednesday;Thursday;Friday;Saturday;Sunday';
SET NumericalAbbreviation='3:k;6:M;9:G;12:T;15:P;18:E;21:Z;24:Y;-3:m;-6:ΞΌ;-9:n;-12:p;-15:f;-18:a;-21:z;-24:y';
Characters:
Load Chr(RecNo()+Ord('A')-1) as Alpha, RecNo() as Num autogenerate 26;
ASCII:
Load
if(RecNo()>=65 and RecNo()<=90,RecNo()-64) as Num,
Chr(RecNo()) as AsciiAlpha,
RecNo() as AsciiNum
autogenerate 255
Where (RecNo()>=32 and RecNo()<=126) or RecNo()>=160 ;
Transactions:
Load
TransLineID,
TransID,
mod(TransID,26)+1 as Num,
Pick(Ceil(3*Rand1),'A','B','C') as Dim1,
Pick(Ceil(6*Rand1),'a','b','c','d','e','f') as Dim2,
Pick(Ceil(3*Rand()),'X','Y','Z') as Dim3,
Round(1000*Rand()*Rand()*Rand1) as Expression1,
Round( 10*Rand()*Rand()*Rand1) as Expression2,
Round(Rand()*Rand1,0.00001) as Expression3;
Load
Rand() as Rand1,
IterNo() as TransLineID,
RecNo() as TransID
Autogenerate 1000
While Rand()<=0.5 or IterNo()=1;
Comment Field Dim1 With "This is a field comment";
let var1 = 'This is variable 1';
let var2 = 1234;
// Dummy country data.
// Courtesty of Bing AI chat "please give me an inline qlik sense table with countries in it"
LOAD * INLINE [
Country, Population
Afghanistan, 38,928,346
Albania, 2,877,797
Algeria, 43,851,044
Andorra, 77,265
Angola, 32,866,272
];
3.2 - Bookmarks
Page contents:
List bookmarks in a Sense app
.\ctrl-q.exe bookmark-get `
--host pro2-win1.lab.ptarmiganlabs.net `
--app-id a3e0f5d2-000a-464f-998d-33d333b175d7 `
--output-format table `
--auth-user-dir LAB `
--auth-user-id goran
2024-03-12T08:35:08.407Z info: -----------------------------------------------------------
2024-03-12T08:35:08.407Z info: | Ctrl-Q
2024-03-12T08:35:08.407Z info: |
2024-03-12T08:35:08.407Z info: | Version : 3.16.0
2024-03-12T08:35:08.407Z info: | Log level : info
2024-03-12T08:35:08.407Z info: |
2024-03-12T08:35:08.407Z info: | Command : bookmark-get
2024-03-12T08:35:08.407Z info: | : get info about one or more bookmarks
2024-03-12T08:35:08.407Z info: |
2024-03-12T08:35:08.407Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T08:35:08.407Z info: |
2024-03-12T08:35:08.407Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T08:35:08.407Z info: ----------------------------------------------------------
2024-03-12T08:35:08.407Z info:
2024-03-12T08:35:08.422Z info: Get bookmarks
2024-03-12T08:35:08.938Z info: Bookmarks
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Bookmarks (1 bookmark(s) found in the app)
β
ββββββββββββββββββββββββββββββββββββββββ¬βββββββββββ¬ββββββββββββ¬ββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ¬βββββββββββ¬ββββββββββββ¬βββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββ¬ββββββββββββ€
β Id β Type β Title β Description β Bookmark definition β Approved β Published β Publish time β Created date β Modified date β Owner β
ββββββββββββββββββββββββββββββββββββββββΌβββββββββββΌββββββββββββΌββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββΌββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌββββββββββββ€
β 81ec0c0d-c90c-431b-8c19-eff4048de404 β bookmark β Bookmark1 β BM1 description β {"qStateData":[{"qStateName":"$","qFieldItems":[{"qDef":{"qName":"Dim1","qType":"PRESENT"},"qSelectI β false β false β 1753-01-01T00:00:00.000Z β 2021-07-06T15:09:38.565Z β 2021-07-06T15:09:38.565Z β LAB\goran β
β β β β β nfo":{"qRangeLo":"NaN","qRangeHi":"NaN","qNumberFormat":{"qType":"U","qnDec":10,"qUseThou":0},"qRang β β β β β β β
β β β β β eInfo":[],"qContinuousRangeInfo":[]},"qValues":[],"qExcludedValues":[]}]}],"qUtcModifyTime":44383.71 β β β β β β β
β β β β β 498842593,"qVariableItems":[],"qPatches":[]} β β β β β β β
ββββββββββββββββββββββββββββββββββββββββ΄βββββββββββ΄ββββββββββββ΄ββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ΄βββββββββββ΄ββββββββββββ΄βββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββ΄ββββββββββββ
3.3 - Connection test
Page contents:
Test connection to Qlik Sense server
Some of the Ctrl-Q commands are rather complex and it can be difficult to figure out what is wrong if the command fails.
To rule out any connection issues between the machine running Ctrl-Q and the Qlik Sense server it is possible to run the connection-test
command.
Here that command is executed using certificate authentication, using the default certificates, port (for connecting to QRS using certificates) and virtual proxy.
.\ctrl-q.exe connection-test `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran
2024-03-12T08:35:45.058Z info: -----------------------------------------------------------
2024-03-12T08:35:45.058Z info: | Ctrl-Q
2024-03-12T08:35:45.058Z info: |
2024-03-12T08:35:45.058Z info: | Version : 3.16.0
2024-03-12T08:35:45.058Z info: | Log level : info
2024-03-12T08:35:45.058Z info: |
2024-03-12T08:35:45.058Z info: | Command : connection-test
2024-03-12T08:35:45.058Z info: | : test connection to Qlik Sense server.
2024-03-12T08:35:45.058Z info: |
2024-03-12T08:35:45.058Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T08:35:45.058Z info: |
2024-03-12T08:35:45.058Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T08:35:45.058Z info: ----------------------------------------------------------
2024-03-12T08:35:45.058Z info:
2024-03-12T08:35:45.058Z info: Testing connection to Qlik Sense server pro2-win1.lab.ptarmiganlabs.net on port 4242
2024-03-12T08:35:45.198Z info: Successfully connected to Qlik Sense server pro2-win1.lab.ptarmiganlabs.net on port 4242
2024-03-12T08:35:45.198Z info: Qlik Sense repository build version: 31.36.2.0
2024-03-12T08:35:45.198Z info: Qlik Sense repository build date: 1/11/2024 22:04:12 PM
3.4 - Custom properties
Page contents:
Set custom property of reload task
Setting custom properties of reload tasks can be very time consuming if there are lots of tasks and/or custom propertis.
Ctrl-Q makes it possible to update many takes at once with a single command.
Note:
- ONE custom property can be updated each time Ctrl-Q is executed.
If several custom properties should be updated Ctrl-Q must be started several times. - The custom property to be updated must exist before Ctrl-Q is executed. Create the custom property in the QMC first.
- The custom property values to be set must exist before Ctrl-Q is executed. Create the custom property in the QMC first.
- Task IDs and task tags can be useed to specifiy which tasks’ custom properties should be updated.
- The
--task-id
and--task-tag
options are additive, i.e. the union of tasks matching the task IDs and tags will be updated.
- The
- The
--update-mode
option controls how custom properties are updated.- Setting the option to
append
will add the specified values to any other values already set for the custom property. - Setting the option to
replace
will delete any already set values for the custom property and then add the specified values.
- Setting the option to
In the example below 5 tasks will be updated: 3 based on task IDs and 2 based on the task tag “apiCreated”.
The values “Finance” and “Sales” will be added to the custom property “Department”.
Existing custom property values are preserved (i.e. the new values are appended to any already existing values) by appending new values rather than replacing (--update-mode append
option).
If a task already has values for this custom property new values will be added without asking first (--overwrite
option)
.\ctrl-q.exe task-custom-property-set `
--auth-type cert `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran `
--task-id 82bc3e66-c899-4e44-b52f-552145da5ee0 5748afa9-3abe-43ab-bb1f-127c48ced075 5520e710-91ad-41d2-aeb6-434cafbf366b `
--task-tag 'apiCreated' `
--custom-property-name Department `
--custom-property-value Finance Sales `
--overwrite `
--update-mode append
2024-03-12T08:36:20.324Z info: -----------------------------------------------------------
2024-03-12T08:36:20.324Z info: | Ctrl-Q
2024-03-12T08:36:20.324Z info: |
2024-03-12T08:36:20.324Z info: | Version : 3.16.0
2024-03-12T08:36:20.324Z info: | Log level : info
2024-03-12T08:36:20.324Z info: |
2024-03-12T08:36:20.324Z info: | Command : task-custom-property-set
2024-03-12T08:36:20.324Z info: | : update a custom property of one or more tasks
2024-03-12T08:36:20.324Z info: |
2024-03-12T08:36:20.324Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T08:36:20.324Z info: |
2024-03-12T08:36:20.324Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T08:36:20.324Z info: ----------------------------------------------------------
2024-03-12T08:36:20.324Z info:
2024-03-12T08:36:20.699Z info: Number of tasks that will be updated: 5
2024-03-12T08:36:20.699Z info:
2024-03-12T08:36:20.699Z info: -----------------------------------------------------------
2024-03-12T08:36:20.699Z info: Processing task "Reload of Test data - Seattle checkouts by title3" with ID=82bc3e66-c899-4e44-b52f-552145da5ee0
2024-03-12T08:36:20.699Z info: Starting updating custom property "Department" of task "Reload of Test data - Seattle checkouts by title3" with ID=82bc3e66-c899-4e44-b52f-552145da5ee0
2024-03-12T08:36:21.013Z info: ...Custom property "Department" on task "Reload of Test data - Seattle checkouts by title3" successfully updated.
2024-03-12T08:36:21.013Z info:
2024-03-12T08:36:21.013Z info: -----------------------------------------------------------
2024-03-12T08:36:21.013Z info: Processing task "Reload task of Lab 1_1" with ID=5748afa9-3abe-43ab-bb1f-127c48ced075
2024-03-12T08:36:21.013Z info: Starting updating custom property "Department" of task "Reload task of Lab 1_1" with ID=5748afa9-3abe-43ab-bb1f-127c48ced075
2024-03-12T08:36:21.235Z info: ...Custom property "Department" on task "Reload task of Lab 1_1" successfully updated.
2024-03-12T08:36:21.235Z info:
2024-03-12T08:36:21.235Z info: -----------------------------------------------------------
2024-03-12T08:36:21.235Z info: Processing task "Reload of Test data - Seattle library checkouts & collection inventory" with ID=5520e710-91ad-41d2-aeb6-434cafbf366b
2024-03-12T08:36:21.235Z info: Starting updating custom property "Department" of task "Reload of Test data - Seattle library checkouts & collection inventory" with ID=5520e710-91ad-41d2-aeb6-434cafbf366b
2024-03-12T08:36:21.427Z info: ...Custom property "Department" on task "Reload of Test data - Seattle library checkouts & collection inventory" successfully updated.
2024-03-12T08:36:21.427Z info:
2024-03-12T08:36:21.427Z info: -----------------------------------------------------------
2024-03-12T08:36:21.427Z info: Processing task "Reload Operations Monitor" with ID=fbf645f0-0c92-40a4-af9a-6e3eb1d3c35c
2024-03-12T08:36:21.427Z info: Starting updating custom property "Department" of task "Reload Operations Monitor" with ID=fbf645f0-0c92-40a4-af9a-6e3eb1d3c35c
2024-03-12T08:36:21.629Z info: ...Custom property "Department" on task "Reload Operations Monitor" successfully updated.
2024-03-12T08:36:21.629Z info:
2024-03-12T08:36:21.629Z info: -----------------------------------------------------------
2024-03-12T08:36:21.629Z info: Processing task "Reload task of App ageing" with ID=5217e6b2-65ce-4535-ad2a-37b62e66d12c
2024-03-12T08:36:21.629Z info: Starting updating custom property "Department" of task "Reload task of App ageing" with ID=5217e6b2-65ce-4535-ad2a-37b62e66d12c
2024-03-12T08:36:21.832Z info: ...Custom property "Department" on task "Reload task of App ageing" successfully updated.
3.5 - Dimensions
Page contents:
List master item dimensions in a Sense app
.\ctrl-q.exe master-item-dim-get `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran `
--app-id a3e0f5d2-000a-464f-998d-33d333b175d7 `
--output-format table
2024-03-12T08:36:53.124Z info: -----------------------------------------------------------
2024-03-12T08:36:53.140Z info: | Ctrl-Q
2024-03-12T08:36:53.140Z info: |
2024-03-12T08:36:53.140Z info: | Version : 3.16.0
2024-03-12T08:36:53.140Z info: | Log level : info
2024-03-12T08:36:53.140Z info: |
2024-03-12T08:36:53.140Z info: | Command : master-item-dim-get
2024-03-12T08:36:53.140Z info: | : get info about one or more master dimensions
2024-03-12T08:36:53.140Z info: |
2024-03-12T08:36:53.140Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T08:36:53.140Z info: |
2024-03-12T08:36:53.140Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T08:36:53.140Z info: ----------------------------------------------------------
2024-03-12T08:36:53.140Z info:
2024-03-12T08:36:53.140Z info: Get master dimensions
2024-03-12T08:36:53.687Z info:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Dimensions (6 dimension(s) found in the app) β
ββββββββββββββββββββββββββββββββββββββββ¬ββββββββββββ¬ββββββββββββββββββ¬βββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββ¬βββββββββββββββββββ¬βββββββββββββββββββ¬ββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ¬βββββββββββ¬βββββββββββ¬ββββββββββββ¬βββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββ¬ββββββββββββ¬βββββββββββββββββ€
β Id β Type β Title β Description (static) β Description (from expression) β Description expression β Label expression β Definition count β Definition β Coloring β Grouping β Approved β Published β Publish time β Created date β Modified date β Owner β Tags β
ββββββββββββββββββββββββββββββββββββββββΌββββββββββββΌββββββββββββββββββΌβββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββΌββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββΌβββββββββββΌββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌββββββββββββΌβββββββββββββββββ€
β JDWuPK β dimension β Dimension 2-3-1 β Description for 2-3-1 β β β β 3 β Dim2 β Dimension color: β H β false β false β 1753-01-01T00:00:00.000Z β 2021-06-07T02:31:02.093Z β 2021-06-07T02:31:02.093Z β LAB\goran β My awesome tag β
β β β β β β β β β Dim3 β {"color":"#ffffff","index":1} β β β β β β β β β
β β β β β β β β β Dim1 β β β β β β β β β β
β β β β β β β β β β β β β β β β β β β
ββββββββββββββββββββββββββββββββββββββββΌββββββββββββΌββββββββββββββββββΌβββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββΌββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββΌβββββββββββΌββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌββββββββββββΌβββββββββββββββββ€
β cb922a28-ff2d-4d97-a9fd-5d99eae2a490 β dimension β Color β Color of sold unit β β β ='Unit color' β 1 β UnitColor β β N β false β false β 1753-01-01T00:00:00.000Z β 2023-05-09T15:11:34.957Z β 2023-06-05T18:39:33.522Z β LAB\goran β Sales, Color β
ββββββββββββββββββββββββββββββββββββββββΌββββββββββββΌββββββββββββββββββΌβββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββΌββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββΌβββββββββββΌββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌββββββββββββΌβββββββββββββββββ€
β 3047e493-f24f-4d31-a0fb-6b797874b049 β dimension β Salesperson β The person who sold the unit. β β β ='Salesperson' β 1 β Salesperson β Value colors: β N β false β false β 1753-01-01T00:00:00.000Z β 2023-03-08T16:45:26.610Z β 2023-06-05T18:39:32.990Z β LAB\goran β Staff, Sales β
β β β β β β β β β β {"colors":[{"value":"Afghanistan","baseColor":{"color":"#8a85c6","index":-1}},{"value":"Albania","ba β β β β β β β β β
β β β β β β β β β β seColor":{"color":"#aaaaaa","index":-1}},{"value":"Algeria","baseColor":{"color":"#a16090","index":9 β β β β β β β β β
β β β β β β β β β β }}],"nul":{"color":"#c8c7a9","index":16},"oth":{"color":"#ffec6e","index":-1},"pal":null,"single":nu β β β β β β β β β
β β β β β β β β β β ll,"usePal":true,"autoFill":true} β β β β β β β β β
ββββββββββββββββββββββββββββββββββββββββΌββββββββββββΌββββββββββββββββββΌβββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββΌββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββΌβββββββββββΌββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌββββββββββββΌβββββββββββββββββ€
β 6f375071-5603-401c-815a-9bd59e02623b β dimension β DimDrill β Drill-down 1 β β β β 3 β Dim1 β Dimension color: β H β false β false β 1753-01-01T00:00:00.000Z β 2023-06-05T18:39:33.522Z β 2023-11-19T19:32:56.466Z β LAB\goran β Staff, Color β
β β β β β β β β β Dim2 β {"color":"#bbbbbb","index":-1} β β β β β β β β β
β β β β β β β β β Dim3 β β β β β β β β β β
β β β β β β β β β β β β β β β β β β β
ββββββββββββββββββββββββββββββββββββββββΌββββββββββββΌββββββββββββββββββΌβββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββΌββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββΌβββββββββββΌββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌββββββββββββΌβββββββββββββββββ€
β 295cd9f4-3703-49e6-b2e8-68347d6975b3 β dimension β Sales month β Date in which a unit was sold. β β β ='Sales month' β 1 β Month_Sales β Dimension color: β N β false β false β 1753-01-01T00:00:00.000Z β 2023-11-19T19:32:53.930Z β 2023-11-19T19:32:53.930Z β LAB\goran β β
β β β β β β β β β β {"color":"#bbbbbb","index":-1} β β β β β β β β β
β β β β β β β β β β β β β β β β β β β
β β β β β β β β β β β β β β β β β β β
ββββββββββββββββββββββββββββββββββββββββΌββββββββββββΌββββββββββββββββββΌβββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββΌββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββΌβββββββββββΌββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌββββββββββββΌβββββββββββββββββ€
β 473bdb09-33ee-452f-802b-e1da00241e25 β dimension β Country β Country where a unit was sold. β β β ='Country sold' β 1 β Country β Dimension color: β N β false β false β 1753-01-01T00:00:00.000Z β 2023-11-19T19:32:53.930Z β 2023-11-19T19:32:53.930Z β LAB\goran β Geo, DimCat1 β
β β β β β β β β β β {"color":"#bbbbbb","index":-1} β β β β β β β β β
β β β β β β β β β β β β β β β β β β β
β β β β β β β β β β Value colors: β β β β β β β β β
β β β β β β β β β β {"colors":[{"value":"Afghanistan","baseColor":{"color":"#8a85c6","index":-1}},{"value":"Albania","ba β β β β β β β β β
β β β β β β β β β β seColor":{"color":"#aaaaaa","index":-1}},{"value":"Algeria","baseColor":{"color":"#a16090","index":9 β β β β β β β β β
β β β β β β β β β β }}],"nul":{"color":"#c8c7a9","index":16},"oth":{"color":"#ffec6e","index":-1},"pal":null,"single":nu β β β β β β β β β
β β β β β β β β β β ll,"usePal":true,"autoFill":true} β β β β β β β β β
ββββββββββββββββββββββββββββββββββββββββ΄ββββββββββββ΄ββββββββββββββββββ΄βββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββ΄βββββββββββββββββββ΄βββββββββββββββββββ΄ββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ΄βββββββββββ΄βββββββββββ΄ββββββββββββ΄βββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββ΄ββββββββββββ΄βββββββββββββββββ
Delete master item dimensions in a Sense app
.\ctrl-q.exe master-item-dim-delete `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran `
--app-id a3e0f5d2-000a-464f-998d-33d333b175d7 `
--id-type name `
--master-item 'Country' 'Sales month'
2024-03-12T08:37:39.057Z info: -----------------------------------------------------------
2024-03-12T08:37:39.057Z info: | Ctrl-Q
2024-03-12T08:37:39.057Z info: |
2024-03-12T08:37:39.057Z info: | Version : 3.16.0
2024-03-12T08:37:39.057Z info: | Log level : info
2024-03-12T08:37:39.057Z info: |
2024-03-12T08:37:39.057Z info: | Command : master-item-dim-delete
2024-03-12T08:37:39.057Z info: | : delete master dimension(s)
2024-03-12T08:37:39.057Z info: |
2024-03-12T08:37:39.057Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T08:37:39.057Z info: |
2024-03-12T08:37:39.057Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T08:37:39.057Z info: ----------------------------------------------------------
2024-03-12T08:37:39.057Z info:
2024-03-12T08:37:39.057Z info: Delete master dimensions
2024-03-12T08:37:39.542Z info: (1/2) Deleted master item dimension "Country", id=d404a273-01d4-4ca4-975e-2dea2cce89ee in app "a3e0f5d2-000a-464f-998d-33d333b175d7"
2024-03-12T08:37:39.542Z info: (2/2) Deleted master item dimension "Sales month", id=0e85b6af-1ddb-4c2d-bd2e-b0e80464e8cf in app "a3e0f5d2-000a-464f-998d-33d333b175d7"
3.6 - Measures
Page contents:
List master item measures in a Sense app
.\ctrl-q.exe master-item-measure-get `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran `
--app-id a3e0f5d2-000a-464f-998d-33d333b175d7 `
--output-format table
2024-03-12T08:38:15.661Z info: -----------------------------------------------------------
2024-03-12T08:38:15.661Z info: | Ctrl-Q
2024-03-12T08:38:15.661Z info: |
2024-03-12T08:38:15.661Z info: | Version : 3.16.0
2024-03-12T08:38:15.661Z info: | Log level : info
2024-03-12T08:38:15.661Z info: |
2024-03-12T08:38:15.661Z info: | Command : master-item-measure-get
2024-03-12T08:38:15.661Z info: | : get info about one or more master measures
2024-03-12T08:38:15.661Z info: |
2024-03-12T08:38:15.661Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T08:38:15.661Z info: |
2024-03-12T08:38:15.661Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T08:38:15.661Z info: ----------------------------------------------------------
2024-03-12T08:38:15.661Z info:
2024-03-12T08:38:15.676Z info: Get master measures
2024-03-12T08:38:16.191Z info:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Measures (4 measure(s) found in the app) β
ββββββββββββββββββββββββββββββββββββββββ¬ββββββββββ¬βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββ¬βββββββββββββββββββ¬βββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββ¬βββββββββββ¬βββββββββββ¬ββββββββββββ¬βββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββ¬ββββββββββββ¬ββββββββββββ€
β Id β Type β Title β Description β Label β Label expression β Definition β Coloring β Number format β Grouping β Approved β Published β Publish time β Created date β Modified date β Owner β Tags β
ββββββββββββββββββββββββββββββββββββββββΌββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββΌβββββββββββΌβββββββββββΌββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌββββββββββββΌββββββββββββ€
β 0a4151cf-0b3d-423d-84d7-eb18ff4ce07a β measure β Profit EUR β Profit during selected time period. β ='Profit' β ='Profit' β Sum(Profit) β β {"qType":"U","qnDec":10,"qUseThou":0} β N β false β false β 1753-01-01T00:00:00.000Z β 2023-05-09T18:48:43.431Z β 2023-06-05T18:39:32.990Z β LAB\goran β Sales β
ββββββββββββββββββββββββββββββββββββββββΌββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββΌβββββββββββΌβββββββββββΌββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌββββββββββββΌββββββββββββ€
β 9d563fc2-ad00-41db-ad15-0f80c522686d β measure β Revenue EUR (LY) β Revenue during last year. β ='Revenue LY' β ='Revenue LY' β Sum(Revenue_LY) β β {"qType":"U","qnDec":10,"qUseThou":0} β N β false β false β 1753-01-01T00:00:00.000Z β 2023-05-09T15:18:20.753Z β 2023-05-09T15:40:12.804Z β LAB\goran β Sales, LY β
ββββββββββββββββββββββββββββββββββββββββΌββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββΌβββββββββββΌβββββββββββΌββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌββββββββββββΌββββββββββββ€
β a260c5a2-21e9-4ce5-92d9-c3e7837e51a2 β measure β No. of sold units (LY) β Number of units sold last year. β ='Sold units LY' β ='Sold units LY' β Sum(UnitsInOrder_LY) β Measure color: β {"qType":"U","qnDec":10,"qUseThou":0} β N β false β false β 1753-01-01T00:00:00.000Z β 2023-05-09T15:18:20.753Z β 2023-05-09T15:40:12.804Z β LAB\goran β Sales, LY β
β β β β β β β β {"color":"#8a85c6","index":8} β β β β β β β β β β
β β β β β β β β β β β β β β β β β β
β β β β β β β β β β β β β β β β β β
ββββββββββββββββββββββββββββββββββββββββΌββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββΌβββββββββββΌβββββββββββΌββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌββββββββββββΌββββββββββββ€
β 94631826-88b0-4e84-bf71-9667972e8f15 β measure β No. of sold units β Number of units sold during selected time period. β ='Sold units' β ='Sold units' β =Sum(UnitsInOrder) β Measure color: β {"qType":"U","qnDec":10,"qUseThou":0} β N β false β false β 1753-01-01T00:00:00.000Z β 2023-05-09T18:48:43.431Z β 2023-06-05T18:39:32.990Z β LAB\goran β Sales β
β β β β β β β β {"color":"#8a85c6","index":8} β β β β β β β β β β
β β β β β β β β β β β β β β β β β β
β β β β β β β β Segment colors: β β β β β β β β β β
β β β β β β β β {"colors":[{"color":"#006580","index":6},{"color":"#ac4d58","index":10},{"color":"#4477aa","index":- β β β β β β β β β β
β β β β β β β β 1},{"color":"#7db8da","index":-1}],"breakTypes":[true,true,false],"limits":[0.223,0.491,0.728],"limi β β β β β β β β β β
β β β β β β β β tType":"percent"} β β β β β β β β β β
ββββββββββββββββββββββββββββββββββββββββ΄ββββββββββ΄βββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββ΄βββββββββββββββββββ΄βββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββββββ΄βββββββββββ΄βββββββββββ΄ββββββββββββ΄βββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββ΄ββββββββββββ΄ββββββββββββ
Delete master item measures in a Sense app
.\ctrl-q.exe master-item-measure-delete `
--host pro2-win1.lab.ptarmiganlabs.net `
--app-id a3e0f5d2-000a-464f-998d-33d333b175d7 `
--auth-user-dir LAB `
--auth-user-id goran `
--id-type name `
--master-item 'Revenue EUR' 'Profit EUR (LY)'
2024-03-12T08:38:49.705Z info: -----------------------------------------------------------
2024-03-12T08:38:49.705Z info: | Ctrl-Q
2024-03-12T08:38:49.705Z info: |
2024-03-12T08:38:49.705Z info: | Version : 3.16.0
2024-03-12T08:38:49.705Z info: | Log level : info
2024-03-12T08:38:49.705Z info: |
2024-03-12T08:38:49.705Z info: | Command : master-item-measure-delete
2024-03-12T08:38:49.705Z info: | : delete master measure(s)
2024-03-12T08:38:49.719Z info: |
2024-03-12T08:38:49.719Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T08:38:49.719Z info: |
2024-03-12T08:38:49.719Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T08:38:49.719Z info: ----------------------------------------------------------
2024-03-12T08:38:49.719Z info:
2024-03-12T08:38:49.719Z info: Delete master measures
2024-03-12T08:38:50.188Z info: (1/2) Deleted master item measure "Revenue EUR", id=5a166d1d-b873-4fbf-b4fa-9b38cb271d54 in app "a3e0f5d2-000a-464f-998d-33d333b175d7"
2024-03-12T08:38:50.188Z info: (2/2) Deleted master item measure "Profit EUR (LY)", id=a9f885bd-9648-4216-8faa-c895bbf9d6b7 in app "a3e0f5d2-000a-464f-998d-33d333b175d7"
3.7 - Scramble fields
Page contents:
Scramble fields in Sense app
Scramble one or more fields in an app using Qlik Sense’s internal scrambling feature.
Note:
- If more than one field is to be scrambled, the indidivudal field names should be separated by the character or string specified in the
--separator
option. - The entire list of field names (the
--fieldname
option) should be surrounded by double quotes. - A new app with the scrambled data will be created. Specify its name in the
--newappname
option.
.\ctrl-q.exe field-scramble `
--host pro2-win1.lab.ptarmiganlabs.net `
--app-id a3e0f5d2-000a-464f-998d-33d333b175d7 `
--auth-user-dir LAB `
--auth-user-id goran `
--field-name Expression1 Dim1 AsciiAlpha `
--new-app-name __ScrambledTest1
2024-03-12T08:39:17.987Z info: -----------------------------------------------------------
2024-03-12T08:39:18.004Z info: | Ctrl-Q
2024-03-12T08:39:18.004Z info: |
2024-03-12T08:39:18.004Z info: | Version : 3.16.0
2024-03-12T08:39:18.004Z info: | Log level : info
2024-03-12T08:39:18.004Z info: |
2024-03-12T08:39:18.004Z info: | Command : field-scramble
2024-03-12T08:39:18.004Z info: | : scramble one or more fields in an app. A new app with the scrambled data is created.
2024-03-12T08:39:18.004Z info: |
2024-03-12T08:39:18.004Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T08:39:18.004Z info: |
2024-03-12T08:39:18.004Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T08:39:18.004Z info: ----------------------------------------------------------
2024-03-12T08:39:18.004Z info:
2024-03-12T08:39:18.004Z info: Scramble field
2024-03-12T08:39:18.502Z info: Scrambled field "Expression1"
2024-03-12T08:39:18.502Z info: Scrambled field "Dim1"
2024-03-12T08:39:18.518Z info: Scrambled field "AsciiAlpha"
2024-03-12T08:39:19.127Z info: Scrambled data written to new app "__ScrambledTest1" with app ID: 65091695-a23c-432e-a430-b2ff4e367ea2
3.8 - Sessions
Each time a user connects to a client-managed Qlik Sense server a proxy session is created.
In busy environments with many users the number of proxy sessions can thus grow to a large number.
Knowing which users are connected to the system can be useful for system administrators.
For example, when a server is to be restarted, it’s good to know if there are any active users connected to the system - and if so, who they are.
- The
session-get
command lists active proxy sessions for parts of, or the entire, Sense environment. - The
session-delete
command can be used to delete a single or many proxy sessions.
Note: Given how Sense’s proxy API works it is only possible to authenthicate using certificates.
I.e. JWT authentication is not supported.
Page contents:
List proxy sessions
Let’s first take a look at what proxy sessions are active in a Qlik Sense environment.
.\ctrl-q.exe session-get `
--auth-type cert `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran `
--output-format table
The command gives us several pieces of information:
- Information about all proxies in the Qlik Sense environment, including how many virtual proxies are linked to each one.
- Warnings about some virtual proxies not having any linked proxy services. This is not an error per se, but the virtual proxies will not function given this configuration.
- Detailed information about all active sessions.
In the examplel below there is a single session active, for user goran
in the LAB
user directory.
2024-03-12T10:14:50.543Z info: -----------------------------------------------------------
2024-03-12T10:14:50.543Z info: | Ctrl-Q
2024-03-12T10:14:50.543Z info: |
2024-03-12T10:14:50.543Z info: | Version : 3.16.0
2024-03-12T10:14:50.543Z info: | Log level : info
2024-03-12T10:14:50.543Z info: |
2024-03-12T10:14:50.543Z info: | Command : session-get
2024-03-12T10:14:50.543Z info: | : get info about proxy sessions on one or more virtual proxies
2024-03-12T10:14:50.558Z info: |
2024-03-12T10:14:50.558Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T10:14:50.558Z info: |
2024-03-12T10:14:50.558Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T10:14:50.558Z info: ----------------------------------------------------------
2024-03-12T10:14:50.558Z info:
2024-03-12T10:14:50.558Z info: Get Qlik Sense proxy sessions
2024-03-12T10:14:51.043Z info: Successfully retrieved 29 virtual proxies from host pro2-win1.lab.ptarmiganlabs.net
2024-03-12T10:14:51.371Z info: Successfully retrieved 2 proxies from host pro2-win1.lab.ptarmiganlabs.net
2024-03-12T10:14:51.387Z info: Available Proxy services.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Available proxy services. β
β β
β Note: The "sessions-get" command will only work correctly if the correct --host parameter is used when ca β
β lling Ctrl-Q. β
β The --host parameter should be one of the host names listed below. β
βββββββββββ¬ββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββ€
β Name β Host name β Id β Linked virtual proxies β
βββββββββββΌββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β Central β pro2-win1.lab.ptarmiganlabs.net β 9d5d7900-3e52-4f22-b6b9-51f38a3afe86 β 24 β
βββββββββββΌββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β dev1 β pro2-win2.lab.ptarmiganlabs.net β d0510bbe-c686-459b-b10e-713fcf3951e8 β 5 β
βββββββββββ΄ββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββ
2024-03-12T10:14:51.481Z warn: Virtual proxy is not linked to any proxy. Prefix="mobile", Session cookie header name="X-Qlik-Session-mob"
2024-03-12T10:14:51.840Z warn: Virtual proxy is not linked to any proxy. Prefix="hdr", Session cookie header name="X-Qlik-Session-hdr-dev"
2024-03-12T10:14:53.340Z warn: Virtual proxy is not linked to any proxy. Prefix="hdr-access1", Session cookie header name="X-Qlik-Session-hdr-access1"
2024-03-12T10:14:54.605Z info:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β -- Sessions per virtual proxy and proxy services -- β
β β
β Total number of sessions: 1 β
β β
β Sessions per proxy service: β
β Central: pro2-win1.lab.ptarmiganlabs.net: 1 β
β dev1: pro2-win2.lab.ptarmiganlabs.net: 0 β
β β
βββββββββββββββββββββββββββββ¬βββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββ¬ββββββββββββββββββ¬ββββββββββββββββββββ¬βββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ€
β Virtual proxy description β Virtual proxy prefix β Virtual proxy session cookie header β Linked proxy service β Load balancing nodes β Session user directory β Session user ID β Session user name β Session attributes β Session ID β
βββββββββββββββββββββββββββββΌβββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββΌβββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββ€
β Central Proxy (Default) β β X-Qlik-Session β Central: β Central: pro2-win1.lab.ptarmiganlabs.net β LAB β goran β β β a906ee6b-a8da-4c66-9700-48036c96de7b β
β β β β pro2-win1.lab.ptarmiganlabs.net β β β β β β β
βββββββββββββββββββββββββββββ΄βββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββ΄ββββββββββββββββββ΄ββββββββββββββββββββ΄βββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ
Add some sessions
To explore the various options for the session-get
command, let’s first add some sessions to the Sense environment.
This can be done in different ways:
- Manully by logging in as different users in incognito/private browser windows.
- Using the Qlik Scalability Tools.
- By scripting the creation of sessions using browser automation tools, example in this blog post.
In this example we’ll use the last option above, and create a few sessions by remote controlling/automating the Safari browser in macOS.
Two connections have been created to https://qliksense.ptarmiganlabs.net/finance
, and two to https://qliksense.ptarmiganlabs.net/win
.
I.e. there should be two new sessions to the finance
virtual proxy, and two to the win
virtual proxy.
Let’s see what the session-get
command returns now
.\ctrl-q.exe session-get `
--auth-type cert `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran `
--output-format table
The output now shows the new sessions:
2024-03-12T10:55:50.652Z info: -----------------------------------------------------------
2024-03-12T10:55:50.652Z info: | Ctrl-Q
2024-03-12T10:55:50.652Z info: |
2024-03-12T10:55:50.652Z info: | Version : 3.16.0
2024-03-12T10:55:50.652Z info: | Log level : info
2024-03-12T10:55:50.652Z info: |
2024-03-12T10:55:50.652Z info: | Command : session-get
2024-03-12T10:55:50.652Z info: | : get info about proxy sessions on one or more virtual proxies
2024-03-12T10:55:50.652Z info: |
2024-03-12T10:55:50.652Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T10:55:50.652Z info: |
2024-03-12T10:55:50.652Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T10:55:50.652Z info: ----------------------------------------------------------
2024-03-12T10:55:50.652Z info:
2024-03-12T10:55:50.668Z info: Get Qlik Sense proxy sessions
2024-03-12T10:55:50.981Z info: Successfully retrieved 29 virtual proxies from host pro2-win1.lab.ptarmiganlabs.net
2024-03-12T10:55:51.262Z info: Successfully retrieved 2 proxies from host pro2-win1.lab.ptarmiganlabs.net
2024-03-12T10:55:51.277Z info: Available Proxy services.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Available proxy services. β
β β
β Note: The "sessions-get" command will only work correctly if the correct --host parameter is used when ca β
β lling Ctrl-Q. β
β The --host parameter should be one of the host names listed below. β
βββββββββββ¬ββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββ€
β Name β Host name β Id β Linked virtual proxies β
βββββββββββΌββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β Central β pro2-win1.lab.ptarmiganlabs.net β 9d5d7900-3e52-4f22-b6b9-51f38a3afe86 β 24 β
βββββββββββΌββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β dev1 β pro2-win2.lab.ptarmiganlabs.net β d0510bbe-c686-459b-b10e-713fcf3951e8 β 5 β
βββββββββββ΄ββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββ
2024-03-12T10:55:51.386Z warn: Virtual proxy is not linked to any proxy. Prefix="mobile", Session cookie header name="X-Qlik-Session-mob"
2024-03-12T10:55:51.761Z warn: Virtual proxy is not linked to any proxy. Prefix="hdr", Session cookie header name="X-Qlik-Session-hdr-dev"
2024-03-12T10:55:52.746Z warn: Virtual proxy is not linked to any proxy. Prefix="hdr-access1", Session cookie header name="X-Qlik-Session-hdr-access1"
2024-03-12T10:55:53.949Z info:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β -- Sessions per virtual proxy and proxy services -- β
β β
β Total number of sessions: 5 β
β β
β Sessions per proxy service: β
β Central: pro2-win1.lab.ptarmiganlabs.net: 5 β
β dev1: pro2-win2.lab.ptarmiganlabs.net: 0 β
β β
βββββββββββββββββββββββββββββ¬βββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββ¬ββββββββββββββββββ¬ββββββββββββββββββββ¬βββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ€
β Virtual proxy description β Virtual proxy prefix β Virtual proxy session cookie header β Linked proxy service β Load balancing nodes β Session user directory β Session user ID β Session user name β Session attributes β Session ID β
βββββββββββββββββββββββββββββΌβββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββΌβββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββ€
β Central Proxy (Default) β β X-Qlik-Session β Central: β Central: pro2-win1.lab.ptarmiganlabs.net β LAB β goran β β β a906ee6b-a8da-4c66-9700-48036c96de7b β
β β β β pro2-win1.lab.ptarmiganlabs.net β β β β β β β
βββββββββββββββββββββββββββββΌβββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββΌβββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββ€
β finance virtual proxy β finance β X-Qlik-Session-finance β Central: β Central: pro2-win1.lab.ptarmiganlabs.net β LAB β testuser_2 β β β d1b5d953-4312-4cf2-a106-1992a84dd82b β
β β β β pro2-win1.lab.ptarmiganlabs.net β dev1: pro2-win2.lab.ptarmiganlabs.net β β β β β β
βββββββββββββββββββββββββββββΌβββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββΌβββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββ€
β finance virtual proxy β finance β X-Qlik-Session-finance β Central: β Central: pro2-win1.lab.ptarmiganlabs.net β LAB β testuser_1 β β β 55142b14-8d2d-43b3-a522-4b2fb46b2798 β
β β β β pro2-win1.lab.ptarmiganlabs.net β dev1: pro2-win2.lab.ptarmiganlabs.net β β β β β β
βββββββββββββββββββββββββββββΌβββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββΌβββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββ€
β Central Win auth β win β X-Qlik-Session-win β Central: β Central: pro2-win1.lab.ptarmiganlabs.net β LAB β testuser_3 β β β e9a9c1d3-2d75-4559-9a68-48d1180b3859 β
β β β β pro2-win1.lab.ptarmiganlabs.net β β β β β β β
βββββββββββββββββββββββββββββΌβββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββΌβββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββ€
β Central Win auth β win β X-Qlik-Session-win β Central: β Central: pro2-win1.lab.ptarmiganlabs.net β LAB β testuser_4 β β β 6ac3b0ea-7d87-41d6-bede-89eb43c63e38 β
β β β β pro2-win1.lab.ptarmiganlabs.net β β β β β β β
βββββββββββββββββββββββββββββ΄βββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββ΄ββββββββββββββββββ΄ββββββββββββββββββββ΄βββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ
It is also possible to filter the output to only show sessions for a specific virtual proxy or proxy service.
This is done using the --session-virtual-proxy
and -proxy-host
options.
Each of them takes one or more values.
Usage: ctrl-q session-get [options]
get info about proxy sessions on one or more virtual proxies
Options:
--log-level <level> log level (choices: "error", "warn", "info", "verbose", "debug", "silly", default: "info")
--host <host> Qlik Sense host (IP/FQDN) where Qlik Repository Service (QRS) is running
--qrs-port <port> Qlik Sense repository service (QRS) port (usually 4242) (default: "4242")
--virtual-proxy <prefix> Qlik Sense virtual proxy prefix to access QRS via (default: "")
--secure <true|false> https connection to Qlik Sense must use correct certificate. Invalid certificates will result in rejected/failed connection. (default: true)
--session-virtual-proxy <prefix...> one or more Qlik Sense virtual proxies to get sessions for
--host-proxy <host...> Qlik Sense hosts/proxies (IP/FQDN) to get sessions from. Must match the host names of the Sense nodes
--qps-port <port> Qlik Sense proxy service (QPS) port (usually 4243) (default: "4243")
--auth-user-dir <directory> user directory for user to connect with
--auth-user-id <userid> user ID for user to connect with
-a, --auth-type <type> authentication type (choices: "cert", default: "cert")
--auth-cert-file <file> Qlik Sense certificate file (exported from QMC) (default: "./cert/client.pem")
--auth-cert-key-file <file> Qlik Sense certificate key file (exported from QMC) (default: "./cert/client_key.pem")
--auth-root-cert-file <file> Qlik Sense root certificate file (exported from QMC) (default: "./cert/root.pem")
--output-format <json|table> output format (default: "json")
-s, --sort-by <column> column to sort output table by (choices: "prefix", "proxyhost", "proxyname", "userdir", "userid", "username", default: "prefix")
-h, --help display help for command
Let’s filter to only show the sessions connected to the finance
virtual proxy:
.\ctrl-q.exe session-get `
--auth-type cert `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran `
--output-format table `
--session-virtual-proxy finance
2024-03-12T11:03:10.614Z info: -----------------------------------------------------------
2024-03-12T11:03:10.628Z info: | Ctrl-Q
2024-03-12T11:03:10.628Z info: |
2024-03-12T11:03:10.628Z info: | Version : 3.16.0
2024-03-12T11:03:10.628Z info: | Log level : info
2024-03-12T11:03:10.628Z info: |
2024-03-12T11:03:10.628Z info: | Command : session-get
2024-03-12T11:03:10.628Z info: | : get info about proxy sessions on one or more virtual proxies
2024-03-12T11:03:10.628Z info: |
2024-03-12T11:03:10.628Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T11:03:10.628Z info: |
2024-03-12T11:03:10.628Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T11:03:10.628Z info: ----------------------------------------------------------
2024-03-12T11:03:10.628Z info:
2024-03-12T11:03:10.628Z info: Get Qlik Sense proxy sessions
2024-03-12T11:03:10.769Z info: Successfully retrieved 1 virtual proxies from host pro2-win1.lab.ptarmiganlabs.net
2024-03-12T11:03:11.066Z info: Successfully retrieved 2 proxies from host pro2-win1.lab.ptarmiganlabs.net
2024-03-12T11:03:11.066Z info: Available Proxy services.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Available proxy services. β
β β
β Note: The "sessions-get" command will only work correctly if the correct --host parameter is used when ca β
β lling Ctrl-Q. β
β The --host parameter should be one of the host names listed below. β
βββββββββββ¬ββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββ€
β Name β Host name β Id β Linked virtual proxies β
βββββββββββΌββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β Central β pro2-win1.lab.ptarmiganlabs.net β 9d5d7900-3e52-4f22-b6b9-51f38a3afe86 β 24 β
βββββββββββΌββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β dev1 β pro2-win2.lab.ptarmiganlabs.net β d0510bbe-c686-459b-b10e-713fcf3951e8 β 5 β
βββββββββββ΄ββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββ
2024-03-12T11:03:11.269Z info:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β -- Sessions per virtual proxy and proxy services -- β
β β
β Total number of sessions: 2 β
β β
β Sessions per proxy service: β
β Central: pro2-win1.lab.ptarmiganlabs.net: 2 β
β dev1: pro2-win2.lab.ptarmiganlabs.net: 0 β
β β
βββββββββββββββββββββββββββββ¬βββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββ¬ββββββββββββββββββ¬ββββββββββββββββββββ¬βββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ€
β Virtual proxy description β Virtual proxy prefix β Virtual proxy session cookie header β Linked proxy service β Load balancing nodes β Session user directory β Session user ID β Session user name β Session attributes β Session ID β
βββββββββββββββββββββββββββββΌβββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββΌβββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββ€
β finance virtual proxy β finance β X-Qlik-Session-finance β Central: β Central: pro2-win1.lab.ptarmiganlabs.net β LAB β testuser_2 β β β d1b5d953-4312-4cf2-a106-1992a84dd82b β
β β β β pro2-win1.lab.ptarmiganlabs.net β dev1: pro2-win2.lab.ptarmiganlabs.net β β β β β β
βββββββββββββββββββββββββββββΌβββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββΌβββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββ€
β finance virtual proxy β finance β X-Qlik-Session-finance β Central: β Central: pro2-win1.lab.ptarmiganlabs.net β LAB β testuser_1 β β β 55142b14-8d2d-43b3-a522-4b2fb46b2798 β
β β β β pro2-win1.lab.ptarmiganlabs.net β dev1: pro2-win2.lab.ptarmiganlabs.net β β β β β β
Similarly, it is possible to filter to only show sessions for a specific proxy service by specifying one or more proxy hosts in the --host-proxy
option.
Delete proxy sessions
Deleting proxy sessions it is only possible for one virtual proxy and proxy service at a time.
If one or more session IDs are provided to Ctrl-Q, those sessions will be deleted.
If no session IDs are provided, all sessions for the specified virtual proxy and proxy service will be deleted.
The `session-delete` command has the following options:
```powershell
.\ctrl-q.exe session-delete --help
Usage: ctrl-q session-delete [options]
delete proxy session(s) on a specific virtual proxy and proxy service
Options:
--log-level <level> log level (choices: "error", "warn", "info", "verbose", "debug", "silly", default: "info")
--host <host> Qlik Sense host (IP/FQDN) where Qlik Repository Service (QRS) is running
--qrs-port <port> Qlik Sense repository service (QRS) port (usually 4242) (default: "4242")
--virtual-proxy <prefix> Qlik Sense virtual proxy prefix to access QRS via (default: "")
--secure <true|false> https connection to Qlik Sense must use correct certificate. Invalid certificates will result in rejected/failed connection. (default: true)
--session-id <id...> session IDs to delete
--session-virtual-proxy <prefix> Qlik Sense virtual proxy (prefix) to delete proxy session(s) on (default: "")
--host-proxy <host> Qlik Sense proxy (IP/FQDN) where sessions should be deleted. Must match the host name of a Sense node
--qps-port <port> Qlik Sense proxy service (QPS) port (usually 4243) (default: "4243")
--auth-user-dir <directory> user directory for user to connect with
--auth-user-id <userid> user ID for user to connect with
-a, --auth-type <type> authentication type (choices: "cert", default: "cert")
--auth-cert-file <file> Qlik Sense certificate file (exported from QMC) (default: "./cert/client.pem")
--auth-cert-key-file <file> Qlik Sense certificate key file (exported from QMC) (default: "./cert/client_key.pem")
--auth-root-cert-file <file> Qlik Sense root certificate file (exported from QMC) (default: "./cert/root.pem")
-h, --help display help for command
Delete specific sessions
Let’s delete two specific sessions, using the session IDs from the previous example, for the win
virtual proxy on the pro2-win1.lab.ptarmiganlabs.net
host.
.\ctrl-q.exe session-delete `
--auth-type cert `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran `
--host-proxy pro2-win1.lab.ptarmiganlabs.net `
--session-virtual-proxy "win" `
--session-id e9a9c1d3-2d75-4559-9a68-48d1180b3859 6ac3b0ea-7d87-41d6-bede-89eb43c63e38
The output shows that the sessions were deleted:
2024-03-12T11:10:04.861Z info: -----------------------------------------------------------
2024-03-12T11:10:04.861Z info: | Ctrl-Q
2024-03-12T11:10:04.861Z info: |
2024-03-12T11:10:04.861Z info: | Version : 3.16.0
2024-03-12T11:10:04.861Z info: | Log level : info
2024-03-12T11:10:04.861Z info: |
2024-03-12T11:10:04.861Z info: | Command : session-delete
2024-03-12T11:10:04.861Z info: | : delete proxy session(s) on a specific virtual proxy and proxy service
2024-03-12T11:10:04.861Z info: |
2024-03-12T11:10:04.861Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T11:10:04.877Z info: |
2024-03-12T11:10:04.877Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T11:10:04.877Z info: ----------------------------------------------------------
2024-03-12T11:10:04.877Z info:
2024-03-12T11:10:04.877Z info: Delete Qlik Sense proxy sessions
2024-03-12T11:10:04.877Z info: Deleting sessions on proxy "pro2-win1.lab.ptarmiganlabs.net", virtual proxy "win"
2024-03-12T11:10:05.017Z info: Successfully retrieved 1 virtual proxies from host pro2-win1.lab.ptarmiganlabs.net
2024-03-12T11:10:05.345Z info: Successfully retrieved 2 proxies from host pro2-win1.lab.ptarmiganlabs.net
2024-03-12T11:10:05.345Z info: Available Proxy services.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Available proxy services. β
β β
β Note: The "sessions-get" command will only work correctly if the correct --host parameter is used when ca β
β lling Ctrl-Q. β
β The --host parameter should be one of the host names listed below. β
βββββββββββ¬ββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββ€
β Name β Host name β Id β Linked virtual proxies β
βββββββββββΌββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β Central β pro2-win1.lab.ptarmiganlabs.net β 9d5d7900-3e52-4f22-b6b9-51f38a3afe86 β 24 β
βββββββββββΌββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β dev1 β pro2-win2.lab.ptarmiganlabs.net β d0510bbe-c686-459b-b10e-713fcf3951e8 β 5 β
βββββββββββ΄ββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββ
2024-03-12T11:10:05.345Z info: β
All host names specified in the --host-proxy parameter are valid.
2024-03-12T11:10:05.564Z info: Session ID "e9a9c1d3-2d75-4559-9a68-48d1180b3859" successfully deleted. User: LAB\testuser_3
2024-03-12T11:10:05.658Z info: Session ID "6ac3b0ea-7d87-41d6-bede-89eb43c63e38" successfully deleted. User: LAB\testuser_4
2024-03-12T11:10:05.658Z info:
2024-03-12T11:10:05.658Z info: Deleted 2 sessions
Delete all sessions connected to a virtual proxy
To delete all sessions connected to a specific virtual proxy via its linked proxy service, simply omit the --session-id
option.
This will prompt for confirmation before deleting the sessions.
Let’s delete all sessions connected to the finance
virtual proxy on the pro2-win1.lab.ptarmiganlabs.net
host:
.\ctrl-q.exe session-delete `
--auth-type cert `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran `
--host-proxy pro2-win1.lab.ptarmiganlabs.net `
--session-virtual-proxy "finance"
The output shows that the sessions were deleted:
2024-03-12T11:13:20.260Z info: -----------------------------------------------------------
2024-03-12T11:13:20.260Z info: | Ctrl-Q
2024-03-12T11:13:20.260Z info: |
2024-03-12T11:13:20.260Z info: | Version : 3.16.0
2024-03-12T11:13:20.260Z info: | Log level : info
2024-03-12T11:13:20.260Z info: |
2024-03-12T11:13:20.260Z info: | Command : session-delete
2024-03-12T11:13:20.260Z info: | : delete proxy session(s) on a specific virtual proxy and proxy service
2024-03-12T11:13:20.260Z info: |
2024-03-12T11:13:20.260Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T11:13:20.260Z info: |
2024-03-12T11:13:20.260Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T11:13:20.260Z info: ----------------------------------------------------------
2024-03-12T11:13:20.260Z info:
2024-03-12T11:13:20.275Z info: Delete Qlik Sense proxy sessions
2024-03-12T11:13:20.275Z info: Deleting sessions on proxy "pro2-win1.lab.ptarmiganlabs.net", virtual proxy "finance"
2024-03-12T11:13:20.416Z info: Successfully retrieved 1 virtual proxies from host pro2-win1.lab.ptarmiganlabs.net
2024-03-12T11:13:20.728Z info: Successfully retrieved 2 proxies from host pro2-win1.lab.ptarmiganlabs.net
2024-03-12T11:13:20.728Z info: Available Proxy services.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Available proxy services. β
β β
β Note: The "sessions-get" command will only work correctly if the correct --host parameter is used when ca β
β lling Ctrl-Q. β
β The --host parameter should be one of the host names listed below. β
βββββββββββ¬ββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββ€
β Name β Host name β Id β Linked virtual proxies β
βββββββββββΌββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β Central β pro2-win1.lab.ptarmiganlabs.net β 9d5d7900-3e52-4f22-b6b9-51f38a3afe86 β 24 β
βββββββββββΌββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β dev1 β pro2-win2.lab.ptarmiganlabs.net β d0510bbe-c686-459b-b10e-713fcf3951e8 β 5 β
βββββββββββ΄ββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββ
2024-03-12T11:13:20.728Z info: β
All host names specified in the --host-proxy parameter are valid.
2024-03-12T11:13:21.400Z info:
No session IDs specified, meaning that all existing sessions will be deleted for proxy "pro2-win1.lab.ptarmiganlabs.net" and virtual proxy "finance".
Are you sure you want to continue? (y/n) y
2024-03-12T11:13:26.871Z info:
2024-03-12T11:13:26.871Z info: Deleting sessions...
2024-03-12T11:13:26.981Z info: Session ID "d1b5d953-4312-4cf2-a106-1992a84dd82b" successfully deleted. User: LAB\testuser_2
2024-03-12T11:13:27.075Z info: Session ID "55142b14-8d2d-43b3-a522-4b2fb46b2798" successfully deleted. User: LAB\testuser_1
2024-03-12T11:13:27.090Z info:
2024-03-12T11:13:27.090Z info: Deleted 2 sessions
At this point there is only one session left, the one for the LAB\goran
user.
2024-03-12T11:14:55.678Z info: -----------------------------------------------------------
2024-03-12T11:14:55.678Z info: | Ctrl-Q
2024-03-12T11:14:55.678Z info: |
2024-03-12T11:14:55.678Z info: | Version : 3.16.0
2024-03-12T11:14:55.678Z info: | Log level : info
2024-03-12T11:14:55.678Z info: |
2024-03-12T11:14:55.678Z info: | Command : session-get
2024-03-12T11:14:55.678Z info: | : get info about proxy sessions on one or more virtual proxies
2024-03-12T11:14:55.678Z info: |
2024-03-12T11:14:55.678Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T11:14:55.678Z info: |
2024-03-12T11:14:55.678Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T11:14:55.678Z info: ----------------------------------------------------------
2024-03-12T11:14:55.678Z info:
2024-03-12T11:14:55.693Z info: Get Qlik Sense proxy sessions
2024-03-12T11:14:56.005Z info: Successfully retrieved 29 virtual proxies from host pro2-win1.lab.ptarmiganlabs.net
2024-03-12T11:14:56.288Z info: Successfully retrieved 2 proxies from host pro2-win1.lab.ptarmiganlabs.net
2024-03-12T11:14:56.302Z info: Available Proxy services.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Available proxy services. β
β β
β Note: The "sessions-get" command will only work correctly if the correct --host parameter is used when ca β
β lling Ctrl-Q. β
β The --host parameter should be one of the host names listed below. β
βββββββββββ¬ββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββ€
β Name β Host name β Id β Linked virtual proxies β
βββββββββββΌββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β Central β pro2-win1.lab.ptarmiganlabs.net β 9d5d7900-3e52-4f22-b6b9-51f38a3afe86 β 24 β
βββββββββββΌββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β dev1 β pro2-win2.lab.ptarmiganlabs.net β d0510bbe-c686-459b-b10e-713fcf3951e8 β 5 β
βββββββββββ΄ββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββ
2024-03-12T11:14:56.412Z warn: Virtual proxy is not linked to any proxy. Prefix="mobile", Session cookie header name="X-Qlik-Session-mob"
2024-03-12T11:14:56.771Z warn: Virtual proxy is not linked to any proxy. Prefix="hdr", Session cookie header name="X-Qlik-Session-hdr-dev"
2024-03-12T11:14:57.693Z warn: Virtual proxy is not linked to any proxy. Prefix="hdr-access1", Session cookie header name="X-Qlik-Session-hdr-access1"
2024-03-12T11:14:58.896Z info:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β -- Sessions per virtual proxy and proxy services -- β
β β
β Total number of sessions: 1 β
β β
β Sessions per proxy service: β
β Central: pro2-win1.lab.ptarmiganlabs.net: 1 β
β dev1: pro2-win2.lab.ptarmiganlabs.net: 0 β
β β
βββββββββββββββββββββββββββββ¬βββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββ¬ββββββββββββββββββ¬ββββββββββββββββββββ¬βββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ€
β Virtual proxy description β Virtual proxy prefix β Virtual proxy session cookie header β Linked proxy service β Load balancing nodes β Session user directory β Session user ID β Session user name β Session attributes β Session ID β
βββββββββββββββββββββββββββββΌβββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββΌβββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββ€
β Central Proxy (Default) β β X-Qlik-Session β Central: β Central: pro2-win1.lab.ptarmiganlabs.net β LAB β goran β β β a906ee6b-a8da-4c66-9700-48036c96de7b β
β β β β pro2-win1.lab.ptarmiganlabs.net β β β β β β β
βββββββββββββββββββββββββββββ΄βββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββ΄ββββββββββββββββββ΄ββββββββββββββββββββ΄βββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ
3.9 - Tasks
Page contents:
List tasks as tree
This command provides a hierarchical tree view of reload tasks and external program tasks, similar to what is available in QlikView.
The tree view can be enhanced with colors (see this page) and task details.
There are quite a few customisation options available when creating a task tree.
Note that some options are used when creating task tables, these are not applicable for task trees. Ctrl-Q will show an error when invalid combinations of options are used.
Here Windows Terminal is used to run Ctrl-Q.
Let’s first take a look at the options for thetask-get
command:
.\ctrl-q.exe task-get --help
Usage: ctrl-q task-get [options]
get info about one or more tasks
Options:
--log-level <level> log level (choices: "error", "warn", "info", "verbose", "debug", "silly", default: "info")
--host <host> Qlik Sense server IP/FQDN
--port <port> Qlik Sense repository service (QRS) port (usually 4242 for cert auth, 443 for jwt auth) (default: "4242")
--schema-version <string> Qlik Sense engine schema version (default: "12.612.0")
--virtual-proxy <prefix> Qlik Sense virtual proxy prefix (default: "")
--secure <true|false> https connection to Qlik Sense must use correct certificate. Invalid certificates will result in rejected/failed connection. (default: true)
--auth-user-dir <directory> user directory for user to connect with
--auth-user-id <userid> user ID for user to connect with
-a, --auth-type <type> authentication type (choices: "cert", "jwt", default: "cert")
--auth-cert-file <file> Qlik Sense certificate file (exported from QMC) (default: "./cert/client.pem")
--auth-cert-key-file <file> Qlik Sense certificate key file (exported from QMC) (default: "./cert/client_key.pem")
--auth-root-cert-file <file> Qlik Sense root certificate file (exported from QMC) (default: "./cert/root.pem")
--auth-jwt <jwt> JSON Web Token (JWT) to use for authentication with Qlik Sense server
--task-type <type...> type of tasks to include (choices: "reload", "ext-program")
--task-id <ids...> use task IDs to select which tasks to retrieve. Only allowed when --output-format=table
--task-tag <tags...> use tags to select which tasks to retrieve. Only allowed when --output-format=table
--output-format <format> output format (choices: "table", "tree", default: "tree")
--output-dest <dest> where to send task info (choices: "screen", "file", default: "screen")
--output-file-name <name> file name to store task info in (default: "")
--output-file-format <format> file type/format (choices: "excel", "csv", "json", default: "excel")
--output-file-overwrite overwrite output file without asking
--text-color <show> use colored text in task views (choices: "yes", "no", default: "yes")
--tree-icons display task status icons in tree view
--tree-details [detail...] display details for each task in tree view (choices: "taskid", "laststart", "laststop", "nextstart", "appname", "appstream", default: "")
--table-details [detail...] which aspects of tasks should be included in table view. Not choosing any details will show all (choices: "common", "lastexecution", "tag", "customproperty", "schematrigger", "compositetrigger", default:
"")
-h, --help display help for command
Note:
Task trees are currently an all-or-nothing feature.
It is not possible to use the --task-id
or --task-tag
options when showing task trees.
Tree icons
If --tree-icons
is used when starting Ctrl-Q emojis will be used to indicate the last known state for each task.
The used emojis are
Descriptions | |
---|---|
β° | Shown at the top of the tree of scheduled tasks. All tasks below this node have a time-based scheduled. |
β | Finished successfully. |
β | Failed |
π« | Skipped |
π | Aborted |
π€ | Never started |
β | Unknown |
Text color
If --text-color yes
is specified (yes
is also the default value) colors will be used to make the created tree more readable.
--text-color no
will create a plain-text tree (no colors).
Task tree details
The --tree-details
option makes it possible to switch on/off individual task details. This can be useful to make the task tree easier to read.
The allowed values for this option are taskid
, laststart
, laststop
, nextstart
, appname
, appstream
.
Let’s say we want a task tree with the app name and next start time for the task:
.\ctrl-q.exe task-get `
--auth-type cert `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran `
--output-format tree `
--output-dest screen `
--tree-icons `
--text-color yes `
--tree-details nextstart appname
Note how Ctrl-Q detects and warns about cyclic task dependencies:
Save tree to disk file
Under the hood the task tree is stored as a JSON structure.
It’s possible to save this JSON to disk:
.\ctrl-q.exe task-get `
--auth-type cert `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran `
--output-format tree `
--output-dest file `
--tree-details appname `
--output-file-name tasktree.json `
--output-file-format json
2024-03-12T08:41:11.115Z info: -----------------------------------------------------------
2024-03-12T08:41:11.115Z info: | Ctrl-Q
2024-03-12T08:41:11.115Z info: |
2024-03-12T08:41:11.115Z info: | Version : 3.16.0
2024-03-12T08:41:11.115Z info: | Log level : info
2024-03-12T08:41:11.115Z info: |
2024-03-12T08:41:11.115Z info: | Command : task-get
2024-03-12T08:41:11.115Z info: | : get info about one or more tasks
2024-03-12T08:41:11.115Z info: |
2024-03-12T08:41:11.115Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T08:41:11.115Z info: |
2024-03-12T08:41:11.115Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T08:41:11.115Z info: ----------------------------------------------------------
2024-03-12T08:41:11.115Z info:
2024-03-12T08:41:11.286Z info: Successfully retrieved 28 tags from QSEoW
2024-03-12T08:41:13.114Z warn: Cyclic dependency detected in task tree, from task "[ctrl-q task chain 11.1] Reload task of Ctrl-Q reload chain app 1-1" to "[ctrl-q task chain 2] Reload task of Ctrl-Q reload chain app 2-1". Won't go deeper.
2024-03-12T08:41:13.114Z warn: Cyclic dependency detected in task tree, from task "[ctrl-q task chain 10.1] Reload task of Ctrl-Q reload chain app 1-1" to "[ctrl-q task chain 11.1] Reload task of Ctrl-Q reload chain app 1-1". Won't go deeper.
2024-03-12T08:41:13.130Z info: β
Writing task tree to disk file "tasktree.json".
Running the same command again, when the destination file already exists, results in a question to overwrite the file:
2024-03-12T08:41:32.882Z info: -----------------------------------------------------------
2024-03-12T08:41:32.882Z info: | Ctrl-Q
2024-03-12T08:41:32.882Z info: |
2024-03-12T08:41:32.882Z info: | Version : 3.16.0
2024-03-12T08:41:32.882Z info: | Log level : info
2024-03-12T08:41:32.882Z info: |
2024-03-12T08:41:32.882Z info: | Command : task-get
2024-03-12T08:41:32.882Z info: | : get info about one or more tasks
2024-03-12T08:41:32.897Z info: |
2024-03-12T08:41:32.897Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T08:41:32.897Z info: |
2024-03-12T08:41:32.897Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T08:41:32.897Z info: ----------------------------------------------------------
2024-03-12T08:41:32.897Z info:
2024-03-12T08:41:33.023Z info: Successfully retrieved 28 tags from QSEoW
2024-03-12T08:41:34.898Z warn: Cyclic dependency detected in task tree, from task "[ctrl-q task chain 11.1] Reload task of Ctrl-Q reload chain app 1-1" to "[ctrl-q task chain 2] Reload task of Ctrl-Q reload chain app 2-1". Won't go deeper.
2024-03-12T08:41:34.898Z warn: Cyclic dependency detected in task tree, from task "[ctrl-q task chain 10.1] Reload task of Ctrl-Q reload chain app 1-1" to "[ctrl-q task chain 11.1] Reload task of Ctrl-Q reload chain app 1-1". Won't go deeper.
2024-03-12T08:41:34.898Z info:
Destination file "tasktree.json" exists. Do you want to overwrite it? (y/n) y
2024-03-12T08:41:35.694Z info:
2024-03-12T08:41:35.694Z info: β
Writing task tree to disk file "tasktree.json".
To forcibly overwrite the destination file the --output-file-overwrite
option can be specified.
List tasks as table
This command provides a tabular view of tasks.
Tags, custom properties, schedules, triggers and references to other tasks are all included in the table.
This tabular task view can be shown on screen or saved to disk as Excel or CSV files.
The idea is that all information needed to recreate the tasks should be included in the table.
In reality a few more fields are included, for example app name for the app associated with a task.
The table view can be enhanced with colours (see this page) and task details.
There are quite a few customisation options available when creating a task tree.
Note that some options are used when creating task tables, these are not applicable for task trees. Ctrl-Q will show an error when invalid combinations of options are used.
Show task table on screen
Show a list of tasks on screen, including main task fields as well as any tags defined for the tasks.
.\ctrl-q.exe task-get `
--auth-type cert `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran `
--output-format table `
--output-dest screen `
--task-type reload ext-program `
--table-details common tag
Note:
It’s possible to get more information about tasks by adding additional values to the --table-details
option.
Run .\ctrl-q.exe task-get --help
to show a complete list of all options and their allowed values.
If --table-details
is not specified all available information will be showed about the tasks.
This will result in a very wide table!
2024-03-12T08:42:10.554Z info: -----------------------------------------------------------
2024-03-12T08:42:10.554Z info: | Ctrl-Q
2024-03-12T08:42:10.554Z info: |
2024-03-12T08:42:10.554Z info: | Version : 3.16.0
2024-03-12T08:42:10.554Z info: | Log level : info
2024-03-12T08:42:10.554Z info: |
2024-03-12T08:42:10.554Z info: | Command : task-get
2024-03-12T08:42:10.569Z info: | : get info about one or more tasks
2024-03-12T08:42:10.569Z info: |
2024-03-12T08:42:10.569Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T08:42:10.569Z info: |
2024-03-12T08:42:10.569Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T08:42:10.569Z info: ----------------------------------------------------------
2024-03-12T08:42:10.569Z info:
2024-03-12T08:42:10.710Z info: Successfully retrieved 28 tags from QSEoW
2024-03-12T08:42:12.540Z info: # rows in table: 90
2024-03-12T08:42:12.540Z info: # reload tasks in table: 76
2024-03-12T08:42:12.540Z info: # external program tasks in table: 14
2024-03-12T08:42:12.680Z info:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β # reload tasks: 68, # external program tasks: 8, # rows in table: 76
β
ββββββββββββββββ¬βββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ¬βββββββββββββββ¬βββββββββββββββ¬βββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββ¬βββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Task counter β Task type β Task name β Task id β Task enabled β Task timeout β Task retries β App id β Partial reload β Manually triggered β Ext program path β Ext program parameters
β Tags β
ββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 1 β External program β App snapshots end of September 2022 β c5cc047d-e520-4ccb-b88f-ac4f9d49d4be β true β 60 β 1 β β β β powershell.exe β -File \\pro2-win1\c$\tools\script\qs_archive_apps_to_stream_end_of_sept.ps1 β β
ββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 2 β External program β Ext program task chaining 1 β 4ce41cf3-bc6a-4f66-ad00-ffdeb9a7e468 β true β 15 β 0 β β β β powershell.exe β -File \\pro2-win1\c$\tools\script\ext_task_1.ps1
β β
ββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 3 β External program β Node-RED ext program task demo 1 β d6bfc66a-393b-4eea-8ecd-1b1629c91683 β true β 30 β 0 β β β β powershell.exe β
β Ctrl-Q demo β
ββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 4 β External program β PowerShell export data connections β e7b8d484-5297-4caf-a727-38200905171e β true β 15 β 1 β β β β powershell β -File \\pro2-win1\c$\tools\script\qs_export_data_connections.ps1 β β
ββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 5 β External program β PowerShell export tags (ext pgm task) β 1d5dc4c1-8bd3-455a-9e6a-873da103a950 β true β 15 β 0 β β β β powershell β -File \\pro2-win1\c$\tools\script\qs_export_tags_cps.ps1 β β
ββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 6 β External program β Sample external task β 7d4617cd-a9d5-433a-8c82-742e58bfb38b β true β 1440 β 0 β β β β C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe β -File \\pro2-win1\c$\tools\script\ext_task_1.ps1
β β
ββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
...
...
The --task-id
and --task-tag
options take a list of task IDs and tags, respectively.
When used only the tasks matching the specified task IDs and tags will be included in the created table.
These options can be used both when showing the task table on screen and when storing it on disk.
Example command using these options. Note the double quotes around the task tags:
.\ctrl-q.exe task-get `
--auth-type cert `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran `
--output-format table `
--output-dest screen `
--table-details common tag `
--task-id e3b27f50-b1c0-4879-88fc-c7cdd9c1cf3e 09b3c78f-04dd-45e3-a4bf-1b074d6572fa `
--task-tag "Demo apps" "Finance" "Sales forecast"
Save task to disk file in tabular format
Saving a task table to disk file (Excel and CSV file formats supported) is done via the task-get
command, adding --output-format table
, --output-dest file
, --output-file-format csv
and --output-file-name <filename>
options.
Here the most common task fileds together with task tags are included in the table written to a CSV file:
.\ctrl-q.exe task-get `
--auth-type cert `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran `
--output-format table `
--output-dest file `
--table-details common tag `
--output-file-format csv `
--output-file-name tasktable.csv
2024-03-12T08:43:16.986Z info: -----------------------------------------------------------
2024-03-12T08:43:16.986Z info: | Ctrl-Q
2024-03-12T08:43:16.986Z info: |
2024-03-12T08:43:16.986Z info: | Version : 3.16.0
2024-03-12T08:43:16.986Z info: | Log level : info
2024-03-12T08:43:16.986Z info: |
2024-03-12T08:43:16.986Z info: | Command : task-get
2024-03-12T08:43:16.986Z info: | : get info about one or more tasks
2024-03-12T08:43:16.986Z info: |
2024-03-12T08:43:16.986Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T08:43:16.986Z info: |
2024-03-12T08:43:16.986Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T08:43:16.986Z info: ----------------------------------------------------------
2024-03-12T08:43:16.986Z info:
2024-03-12T08:43:17.124Z info: Successfully retrieved 28 tags from QSEoW
2024-03-12T08:43:18.969Z info: β
Writing task table to disk file "tasktable.csv".
Save task to disk file as JSON
If task defintions should be read by some other system the task definitions can be saved as JSON.
Here only the most basic task info included via the --table-details
option.
.\ctrl-q.exe task-get `
--auth-type cert `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran `
--output-format table `
--output-dest file `
--table-details common `
--output-file-format json `
--output-file-name tasks.json
2024-03-12T08:43:53.762Z info: -----------------------------------------------------------
2024-03-12T08:43:53.762Z info: | Ctrl-Q
2024-03-12T08:43:53.762Z info: |
2024-03-12T08:43:53.762Z info: | Version : 3.16.0
2024-03-12T08:43:53.762Z info: | Log level : info
2024-03-12T08:43:53.762Z info: |
2024-03-12T08:43:53.762Z info: | Command : task-get
2024-03-12T08:43:53.762Z info: | : get info about one or more tasks
2024-03-12T08:43:53.762Z info: |
2024-03-12T08:43:53.762Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T08:43:53.762Z info: |
2024-03-12T08:43:53.762Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T08:43:53.762Z info: ----------------------------------------------------------
2024-03-12T08:43:53.762Z info:
2024-03-12T08:43:53.903Z info: Successfully retrieved 28 tags from QSEoW
2024-03-12T08:43:55.747Z info: β
Writing task table to disk file "tasks.json".
The resulting JSON file looks like this:
[
[
"Task counter",
"Task type",
"Task name",
"Task id",
"Task enabled",
"Task timeout",
"Task retries",
"App id",
"Partial reload",
"Manually triggered"
],
[
1,
"Reload",
"Manually triggered reload of Always failing reload (no delay)",
"0d815a99-1ca3-4131-a398-6878bd735fd8",
true,
1440,
0,
"deba4bcf-47e4-472e-97b2-4fe8d6498e11",
false,
true
],
[
2,
"Reload",
"Manually triggered reload of App1 π",
"b37f8034-faee-4e9b-bbca-5aba0cdf5df2",
true,
1440,
0,
"26634113-9163-44e4-a879-d87817d6e887",
false,
true
],
...
...
]
List tasks as network graph
This command provides an interactive network graph view of reload tasks and external program tasks.
First Ctrl-Q will retrieve information about all reload and external program tasks from the Qlik Sense repository service (QRS).
This includes information about last execution results for the tasks.
A web server is then started on the local computer where Ctrl-Q is running, serving a web page with the network graph in it.
A link to the web page is shown in the console where Ctrl-Q is running.
In the example below the link is http://localhost:3000
.
Beta feature
Graph visualisation of Qlik Sense tasks is a beta feature.
Only a basic set of features are available at this point.
Performance is ok for small to medium sized Qlik Sense sites, but will slower for larger sites (many hundreds or thousands of tasks).
On Windows using PowerShell it can look like this:
PS C:\tools\ctrl-q> .\ctrl-q.exe task-vis --host pro2-win1.lab.ptarmiganlabs.net --auth-type cert --auth-user-dir LAB --auth-user-id goran
2024-03-12T08:44:24.637Z info: -----------------------------------------------------------
2024-03-12T08:44:24.637Z info: | Ctrl-Q
2024-03-12T08:44:24.637Z info: |
2024-03-12T08:44:24.637Z info: | Version : 3.16.0
2024-03-12T08:44:24.637Z info: | Log level : info
2024-03-12T08:44:24.637Z info: |
2024-03-12T08:44:24.637Z info: | Command : task-vis
2024-03-12T08:44:24.637Z info: | : visualise task network
2024-03-12T08:44:24.637Z info: |
2024-03-12T08:44:24.637Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T08:44:24.637Z info: |
2024-03-12T08:44:24.637Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T08:44:24.637Z info: ----------------------------------------------------------
2024-03-12T08:44:24.637Z info:
2024-03-12T08:44:26.684Z info: Using vis.js to visualize tasks, more info at https://github.com/visjs/vis-network
2024-03-12T08:44:26.684Z info:
2024-03-12T08:44:26.684Z info: Task visualization server listening on http://localhost:3000
2024-03-12T08:44:26.684Z info: Press Ctrl-C to quit.
Ctrl-clicking (on Windows. Use Cmd-Clik on macOS) on the link will open the network graph in a browser:
Node types
Node type | Shape | Description |
---|---|---|
Schema trigger | Triangle | A schema trigger is a time-based task trigger. Orange if enabled, gray when disabled |
Composite trigger | Hexagon | If a task’s composite trigger has two or more upstream triggers the composite trigger will be shown as a hexagon. Orange if enabled, gray when disabled. If the composite trigger only has one upstream task the composite trigger will not be shown in the graph. In this case the arrow from the upstream task will go directly to the downstream task. |
Reload task | Rectangle | A reload task. Green when last reload finished successfully, red when last reload failed, gray when task is disabled, blue when task has never been started. |
External program task | Elipse | An external program task. Green when last run finished successfully, red when last run failed, gray when task is disabled, blue when task has never been started. |
User interface
The user interface consists of a toolbar at the top of the page and the network graph itself.
The toolbar has a fixed position and size at the top of the page, while the network graph will resize to fit the available space below the toolbar.
Collapsing/expanding node clusters
Networks with many tasks can be hard to read.
To make it easier to read such networks Ctrl-Q offers the possibility to collapse/expand node clusters and/or leaf nodes.
- A node cluster is a group of nodes that are connected to each other.
- A leaf node is a node that does not have any downstream nodes.
Here is an example where the “Cluster leaves” button has been clicked a few times.
Note the circular task chain that becomes very easy to see when the leaf nodes are collapsed:
Expanding the leaf nodes again makes is done by clicking the “Uncluster all” button.
Legend and network graph configuration
The “Legend” button will toggle the floating (also moveable!) legend window on/off.
The “Network config” button will toggle a network configuration pane to the left on/off:
The network configuration pane makes it possible to fine-tune the parameters used when creating the network graph.
Things like gravity, spring stiffness, overlap stragegy etc. can be adjusted.
If the network graph is hard to read it can be worth trying different values for these parameters.
Tip
If things don’t work out as expected the “Refresh” button in the top toolbar will reload tasks from Qlik Sense and reset all visualisation parameters to their default values.3.10 - Variables
Page contents:
List variables in a Sense app
The command below lists certain variables (named Ctrl-Q variable 1
, TimestampFormat
, var1
and vVar1
) in apps matching appId a3e0f5d2-000a-464f-998d-33d333b175d7
and app tags Ctrl-Q variable 1
and Ctrl-Q variable 2
.
If the --variable
option is not included all variables will be included in the table.
Use --output-format json
to get the results as JSON.
.\ctrl-q.exe variable-get `
--host pro2-win1.lab.ptarmiganlabs.net `
--qrs-port 4242 `
--auth-user-dir LAB `
--auth-user-id goran `
--app-id a3e0f5d2-000a-464f-998d-33d333b175d7 `
--app-tag 'Ctrl-Q variable 1' 'Ctrl-Q variable 2' `
--id-type name `
--variable 'Ctrl-Q variable 1' 'TimestampFormat' 'var1' 'vVar1' `
--output-format table
2024-03-12T08:44:59.101Z info: -----------------------------------------------------------
2024-03-12T08:44:59.101Z info: | Ctrl-Q
2024-03-12T08:44:59.101Z info: |
2024-03-12T08:44:59.101Z info: | Version : 3.16.0
2024-03-12T08:44:59.101Z info: | Log level : info
2024-03-12T08:44:59.101Z info: |
2024-03-12T08:44:59.101Z info: | Command : variable-get
2024-03-12T08:44:59.101Z info: | : get variable definitions in one or more apps
2024-03-12T08:44:59.101Z info: |
2024-03-12T08:44:59.101Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T08:44:59.101Z info: |
2024-03-12T08:44:59.101Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T08:44:59.101Z info: ----------------------------------------------------------
2024-03-12T08:44:59.101Z info:
2024-03-12T08:44:59.258Z info: Found 5 apps to process
2024-03-12T08:44:59.398Z info: Getting variables from app f16fa63d-54c7-4c8d-81f1-2d084d46bcfe, "Minecraft Metrics"
2024-03-12T08:44:59.743Z info: Getting variables from app e377d9b5-231a-4795-800f-3649983647dd, "LDAP lab"
2024-03-12T08:45:00.164Z info: Getting variables from app a3e0f5d2-000a-464f-998d-33d333b175d7, "Sheet thumbnails demo app"
2024-03-12T08:45:00.805Z info: Getting variables from app d1ace221-b80e-4754-98ea-3d0a9ebc9632, "Residential energy analysis"
2024-03-12T08:45:01.258Z info: Getting variables from app c840670c-7178-4a5e-8409-ba2da69127e2, "Meetup.com"
2024-03-12T08:45:01.851Z info:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β In-app variables β
ββββββββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββ¬ββββββββββββββββββββ¬βββββββββββ¬ββββββββββββββββββββββββββββ¬ββββββββββββββ¬ββββββββββββββββββββ¬βββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββ¬βββββββββββββββββββββ¬βββββββ¬ββββββββ¬ββββββββββββββββββββββββββββββββ¬ββββββββββββββββββ€
β App ID β App name β Variable ID β Variable name β Description β Type β Definition β Is reserved β Is script created β Created date β Modified date β Engine object type β Size β Title β Privileges β Tags β
ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββΌβββββββββββΌββββββββββββββββββββββββββββΌββββββββββββββΌββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββΌβββββββΌββββββββΌββββββββββββββββββββββββββββββββΌββββββββββββββββββ€
β f16fa63d-54c7-4c8d-81f1-2d084d46bcfe β Minecraft Metrics β cd5eb1a8-bd19-42f6-8d58-55905297572b β TimestampFormat β β variable β M/D/YYYY h:mm:ss[.fff] TT β true β true β β β β β β read,update,delete β β
ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββΌβββββββββββΌββββββββββββββββββββββββββββΌββββββββββββββΌββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββΌβββββββΌββββββββΌββββββββββββββββββββββββββββββββΌββββββββββββββββββ€
β e377d9b5-231a-4795-800f-3649983647dd β LDAP lab β c1a99293-51d0-426b-bdb7-a43b2d896dc9 β TimestampFormat β β variable β M/D/YYYY h:mm:ss[.fff] TT β true β true β β β β β β read,update,delete β β
ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββΌβββββββββββΌββββββββββββββββββββββββββββΌββββββββββββββΌββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββΌβββββββΌββββββββΌββββββββββββββββββββββββββββββββΌββββββββββββββββββ€
β a3e0f5d2-000a-464f-998d-33d333b175d7 β Sheet thumbnails demo app β 0155e35e-8054-4896-9dd7-d947405f3a90 β vVar1 β vVar1 description β variable β ='abc' & '123' β β β 2021-06-03T22:04:52.283Z β 2023-10-31T06:12:00.194Z β β -1 β β read,update,delete,exportdata β varTag1,varTag2 β
ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββΌβββββββββββΌββββββββββββββββββββββββββββΌββββββββββββββΌββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββΌβββββββΌββββββββΌββββββββββββββββββββββββββββββββΌββββββββββββββββββ€
β a3e0f5d2-000a-464f-998d-33d333b175d7 β Sheet thumbnails demo app β 8b9ed9b7-7db9-420f-8c00-308e19befd54 β TimestampFormat β β variable β M/D/YYYY h:mm:ss[.fff] TT β true β true β β β β β β read,update,delete β β
ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββΌβββββββββββΌββββββββββββββββββββββββββββΌββββββββββββββΌββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββΌβββββββΌββββββββΌββββββββββββββββββββββββββββββββΌββββββββββββββββββ€
β a3e0f5d2-000a-464f-998d-33d333b175d7 β Sheet thumbnails demo app β 548828d1-4e83-4e57-a0ed-b94119fc46ad β var1 β β variable β This is variable 1 β β true β β β β β β read,update,delete β β
ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββΌβββββββββββΌββββββββββββββββββββββββββββΌββββββββββββββΌββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββΌβββββββΌββββββββΌββββββββββββββββββββββββββββββββΌββββββββββββββββββ€
β d1ace221-b80e-4754-98ea-3d0a9ebc9632 β Residential energy analysis β 185378fa-4835-47db-b142-ecffb4ffe951 β TimestampFormat β β variable β M/D/YYYY h:mm:ss[.fff] TT β true β true β β β β β β read,update,delete β β
ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββΌββββββββββββββββββββΌβββββββββββΌββββββββββββββββββββββββββββΌββββββββββββββΌββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββΌβββββββΌββββββββΌββββββββββββββββββββββββββββββββΌββββββββββββββββββ€
β c840670c-7178-4a5e-8409-ba2da69127e2 β Meetup.com β 3773a685-d3ce-453f-9e7a-d88514207dbe β TimestampFormat β β variable β M/D/YYYY h:mm:ss[.fff] TT β true β true β β β β β β read,update,delete β β
ββββββββββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ΄ββββββββββββββββββ΄ββββββββββββββββββββ΄βββββββββββ΄ββββββββββββββββββββββββββββ΄ββββββββββββββ΄ββββββββββββββββββββ΄βββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββ΄βββββββββββββββββββββ΄βββββββ΄ββββββββ΄ββββββββββββββββββββββββββββββββ΄ββββββββββββββββββ
Delete variables in a Sense app
There are three kinds of variables in Sense:
- Variables created in the load script using
let
orset
statements. These variables will get the property “Is script created” set totrue
in the output table created by Ctrl-Q. - Variables created in the Sense app development UI. These will have a blank (=undefined) value in “Is script created”.
- Protected variables of different kinds, these have special meanings in the load script. Examples include system variables, error variables and Number interpretation variables.
These have the property “Is reserved” set totrue
in the variable table created by Ctrl-Q’svariable-get
command.
All the variables that are automatically inserted at the beginning of new apps are of this kind, see image below.
The protected variables cannot be deleted using the app development UI or by Ctrl-Q, neither can script-created variables.
To remove script created variables you must first remove them from the app’s load script and then reload the app. Those variables re
The example below deletes certain variables in several apps.
The --dry-run
option means Ctrl-Q will not delete any variables, but rather show what would be deleted.
If all variables should be deleted the --delete-all
option can be used.
Note that if --delete-all
is used --id-type
and --variable
must not be used.
.\ctrl-q.exe variable-delete `
--auth-type cert `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran `
--app-id a3e0f5d2-000a-464f-998d-33d333b175d7 2933711d-6638-41d4-a2d2-6dd2d965208b `
--app-tag 'Ctrl-Q variable 1' 'Ctrl-Q variable 2' `
--id-type name `
--variable a1 a2 a3 vVar1 `
--dry-run
2024-03-12T09:21:30.657Z info: -----------------------------------------------------------
2024-03-12T09:21:30.657Z info: | Ctrl-Q
2024-03-12T09:21:30.657Z info: |
2024-03-12T09:21:30.657Z info: | Version : 3.16.0
2024-03-12T09:21:30.657Z info: | Log level : info
2024-03-12T09:21:30.657Z info: |
2024-03-12T09:21:30.657Z info: | Command : variable-delete
2024-03-12T09:21:30.657Z info: | : delete one or more variables in one or more apps
2024-03-12T09:21:30.657Z info: |
2024-03-12T09:21:30.657Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T09:21:30.657Z info: |
2024-03-12T09:21:30.657Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T09:21:30.657Z info: ----------------------------------------------------------
2024-03-12T09:21:30.657Z info:
2024-03-12T09:21:31.126Z info: ------------------------
2024-03-12T09:21:31.126Z info: Deleting variables in app 2933711d-6638-41d4-a2d2-6dd2d965208b, "Ctrl-Q CLI"
2024-03-12T09:21:31.626Z info: DRY RUN: Delete of variable "a1" in app 2933711d-6638-41d4-a2d2-6dd2d965208b "Ctrl-Q CLI" would happen here
2024-03-12T09:21:31.626Z warn: Variable "a2" does not exist in app 2933711d-6638-41d4-a2d2-6dd2d965208b "Ctrl-Q CLI"
2024-03-12T09:21:31.626Z info: DRY RUN: Delete of variable "a3" in app 2933711d-6638-41d4-a2d2-6dd2d965208b "Ctrl-Q CLI" would happen here
2024-03-12T09:21:31.626Z warn: Variable "vVar1" does not exist in app 2933711d-6638-41d4-a2d2-6dd2d965208b "Ctrl-Q CLI"
2024-03-12T09:21:31.626Z info: ------------------------
2024-03-12T09:21:31.626Z info: Deleting variables in app f16fa63d-54c7-4c8d-81f1-2d084d46bcfe, "Minecraft Metrics"
2024-03-12T09:21:32.032Z warn: Variable "a1" does not exist in app f16fa63d-54c7-4c8d-81f1-2d084d46bcfe "Minecraft Metrics"
2024-03-12T09:21:32.032Z warn: Variable "a2" does not exist in app f16fa63d-54c7-4c8d-81f1-2d084d46bcfe "Minecraft Metrics"
2024-03-12T09:21:32.032Z warn: Variable "a3" does not exist in app f16fa63d-54c7-4c8d-81f1-2d084d46bcfe "Minecraft Metrics"
2024-03-12T09:21:32.032Z warn: Variable "vVar1" does not exist in app f16fa63d-54c7-4c8d-81f1-2d084d46bcfe "Minecraft Metrics"
2024-03-12T09:21:32.032Z info: ------------------------
2024-03-12T09:21:32.032Z info: Deleting variables in app e377d9b5-231a-4795-800f-3649983647dd, "LDAP lab"
2024-03-12T09:21:32.422Z warn: Variable "a1" does not exist in app e377d9b5-231a-4795-800f-3649983647dd "LDAP lab"
2024-03-12T09:21:32.422Z warn: Variable "a2" does not exist in app e377d9b5-231a-4795-800f-3649983647dd "LDAP lab"
2024-03-12T09:21:32.422Z warn: Variable "a3" does not exist in app e377d9b5-231a-4795-800f-3649983647dd "LDAP lab"
2024-03-12T09:21:32.422Z info: DRY RUN: Delete of variable "vVar1" in app e377d9b5-231a-4795-800f-3649983647dd "LDAP lab" would happen here
2024-03-12T09:21:32.422Z info: ------------------------
2024-03-12T09:21:32.422Z info: Deleting variables in app a3e0f5d2-000a-464f-998d-33d333b175d7, "Sheet thumbnails demo app"
2024-03-12T09:21:33.095Z info: DRY RUN: Delete of variable "a1" in app a3e0f5d2-000a-464f-998d-33d333b175d7 "Sheet thumbnails demo app" would happen here
2024-03-12T09:21:33.095Z info: DRY RUN: Delete of variable "a2" in app a3e0f5d2-000a-464f-998d-33d333b175d7 "Sheet thumbnails demo app" would happen here
2024-03-12T09:21:33.095Z warn: Variable "a3" does not exist in app a3e0f5d2-000a-464f-998d-33d333b175d7 "Sheet thumbnails demo app"
2024-03-12T09:21:33.095Z info: DRY RUN: Delete of variable "vVar1" in app a3e0f5d2-000a-464f-998d-33d333b175d7 "Sheet thumbnails demo app" would happen here
2024-03-12T09:21:33.095Z info: ------------------------
2024-03-12T09:21:33.095Z info: Deleting variables in app d1ace221-b80e-4754-98ea-3d0a9ebc9632, "Residential energy analysis"
2024-03-12T09:21:33.516Z warn: Variable "a1" does not exist in app d1ace221-b80e-4754-98ea-3d0a9ebc9632 "Residential energy analysis"
2024-03-12T09:21:33.532Z warn: Variable "a2" does not exist in app d1ace221-b80e-4754-98ea-3d0a9ebc9632 "Residential energy analysis"
2024-03-12T09:21:33.532Z warn: Variable "a3" does not exist in app d1ace221-b80e-4754-98ea-3d0a9ebc9632 "Residential energy analysis"
2024-03-12T09:21:33.532Z warn: Variable "vVar1" does not exist in app d1ace221-b80e-4754-98ea-3d0a9ebc9632 "Residential energy analysis"
2024-03-12T09:21:33.532Z info: ------------------------
2024-03-12T09:21:33.532Z info: Deleting variables in app c840670c-7178-4a5e-8409-ba2da69127e2, "Meetup.com"
2024-03-12T09:21:34.002Z warn: Variable "a1" does not exist in app c840670c-7178-4a5e-8409-ba2da69127e2 "Meetup.com"
2024-03-12T09:21:34.016Z warn: Variable "a2" does not exist in app c840670c-7178-4a5e-8409-ba2da69127e2 "Meetup.com"
2024-03-12T09:21:34.016Z warn: Variable "a3" does not exist in app c840670c-7178-4a5e-8409-ba2da69127e2 "Meetup.com"
2024-03-12T09:21:34.016Z warn: Variable "vVar1" does not exist in app c840670c-7178-4a5e-8409-ba2da69127e2 "Meetup.com"
3.11 - Export
Page contents:
Export tasks to Excel file
See this page for details on how to export task definitions to a disk file:
Save task to disk in tabular format
Export apps to QVF files
This command exports Sense apps to QVF files, with or without data.
The command optionally also creates an Excel file with metadata about each app, in the same format used by the app-import
command.
It is thus possible to first export apps and get a metadata Excel file, then import those QVFs into another Sense server, using the Excel file to control which apps are imported.
The command options are
.\ctrl-q.exe app-export --help
Usage: ctrl-q app-export [options]
export Qlik Sense apps to QVF files on disk.
Options:
--log-level <level> log level (choices: "error", "warn", "info", "verbose", "debug", "silly", default: "info")
--host <host> Qlik Sense server IP/FQDN
--port <port> Qlik Sense repository service (QRS) port (usually 4242 for cert auth, 443 for jwt auth) (default: "4242")
--schema-version <string> Qlik Sense engine schema version (default: "12.612.0")
--virtual-proxy <prefix> Qlik Sense virtual proxy prefix (default: "")
--secure <true|false> https connection to Qlik Sense must use correct certificate. Invalid certificates will result in
rejected/failed connection. (default: true)
--auth-user-dir <directory> user directory for user to connect with
--auth-user-id <userid> user ID for user to connect with
-a, --auth-type <type> authentication type (choices: "cert", "jwt", default: "cert")
--auth-cert-file <file> Qlik Sense certificate file (exported from QMC) (default: "./cert/client.pem")
--auth-cert-key-file <file> Qlik Sense certificate key file (exported from QMC) (default: "./cert/client_key.pem")
--auth-root-cert-file <file> Qlik Sense root certificate file (exported from QMC) (default: "./cert/root.pem")
--auth-jwt <jwt> JSON Web Token (JWT) to use for authentication with Qlik Sense server
--app-id <ids...> use app IDs to select which apps to export
--app-tag <tags...> use app tags to select which apps to export
--app-published export all published apps (default: false)
--output-dir <directory> relative or absolut path in which QVF files should be stored. (default: "qvf-export")
--qvf-name-format <format...> structure of QVF file name format (choices: "app-id", "app-name", "export-date", "export-time", default:
["app-name"])
--qvf-name-separator <separator> character used to separate parts of the QVF file name (choices: "-", "--", "_", "__", default: "_")
--qvf-overwrite overwrite existing QVF files without asking
--exclude-app-data <true|false> exclude or include app data in QVF file (default: true)
--limit-export-count <number> export at most x number of apps. Defaults to 0 = no limit (default: 0)
--sleep-app-export <milliseconds> Wait this long before continuing after each app has been exported. Defaults to 1000 = 1 second (default:
1000)
--metadata-file-create create a separate file with information about all exported apps
--metadata-file-name <name> file name to store app metadata in (default: "app_export.xlsx")
--metadata-file-format <format> file type/format (choices: "excel", default: "excel")
--metadata-file-overwrite overwrite app metadata file without asking
--dry-run do a dry run, i.e. do not export any apps - just show what would be done
-h, --help display help for command
The next example will
- Export apps (including the data in them) that have either of two different tags set, plus two apps identified by app id.
- If the QVF files exist a confirmation text will be shown for each existing app.
- The name of the QVF files will be
<app name>_<exportdate>.qvf
. - QVF files will be stored in a subdirectory
qvf-export
. - An Excel file will be created, containing select metadata about the apps.
- The certificate files are specifically named in the command, and are stored in a subdirectory
cert
. - Some of the apps are already present in the
qvf-export
directory, so the command will ask for confirmation before overwriting them.
.\ctrl-q.exe app-export `
--auth-type cert `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-cert-file ./cert/client.pem `
--auth-cert-key-file ./cert/client_key.pem `
--auth-root-cert-file ./cert/root.pem `
--auth-user-dir LAB `
--auth-user-id goran `
--output-dir qvf-export `
--app-tag apiCreated "Ctrl-Q import" `
--app-id eb3ab049-d007-43d3-93da-5962f9208c65 2933711d-6638-41d4-a2d2-6dd2d965208b `
--exclude-app-data false `
--qvf-name-format app-name export-date `
--qvf-name-separator _ `
--metadata-file-create
2024-04-30T06:30:22.361Z info: -----------------------------------------------------------
2024-04-30T06:30:22.362Z info: | Ctrl-Q
2024-04-30T06:30:22.362Z info: |
2024-04-30T06:30:22.362Z info: | Version : 3.18.0
2024-04-30T06:30:22.362Z info: | Log level : info
2024-04-30T06:30:22.363Z info: |
2024-04-30T06:30:22.363Z info: | Command : app-export
2024-04-30T06:30:22.363Z info: | : export Qlik Sense apps to QVF files on disk.
2024-04-30T06:30:22.363Z info: |
2024-04-30T06:30:22.363Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-04-30T06:30:22.364Z info: |
2024-04-30T06:30:22.364Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-04-30T06:30:22.364Z info: ----------------------------------------------------------
2024-04-30T06:30:22.364Z info:
2024-04-30T06:30:22.367Z info: Export apps to directory "/Users/goran/tools/ctrl-q demo/qvf-export"
2024-04-30T06:30:22.974Z info: Number of apps to export: 8
2024-04-30T06:30:23.707Z info: ------------------------------------
2024-04-30T06:30:23.707Z info: App [eb3ab049-d007-43d3-93da-5962f9208c65] "User retention.qvf", download starting
2024-04-30T06:30:24.571Z info: β
App [eb3ab049-d007-43d3-93da-5962f9208c65] "User retention.qvf", download complete. Size=360448 bytes
2024-04-30T06:30:26.676Z info: ------------------------------------
2024-04-30T06:30:26.677Z info: App [2933711d-6638-41d4-a2d2-6dd2d965208b] "Ctrl-Q CLI.qvf", download starting
2024-04-30T06:30:27.448Z info: β
App [2933711d-6638-41d4-a2d2-6dd2d965208b] "Ctrl-Q CLI.qvf", download complete. Size=720896 bytes
2024-04-30T06:30:29.261Z info: ------------------------------------
2024-04-30T06:30:29.261Z info: App [e9d2f9b2-b598-480e-b84f-4c5d34467f6f] "Performance review_2022-03-28.qvf", download starting
2024-04-30T06:30:30.177Z info: β
App [e9d2f9b2-b598-480e-b84f-4c5d34467f6f] "Performance review_2022-03-28.qvf", download complete. Size=327680 bytes
2024-04-30T06:30:32.234Z info: ------------------------------------
2024-04-30T06:30:32.234Z info: App [5733046b-df34-4989-bd33-56cde5ff779d] "App 2.qvf", download starting
2024-04-30T06:30:33.066Z info: β
App [5733046b-df34-4989-bd33-56cde5ff779d] "App 2.qvf", download complete. Size=245760 bytes
2024-04-30T06:30:34.565Z info: ------------------------------------
2024-04-30T06:30:34.565Z info: App [deba4bcf-47e4-472e-97b2-4fe8d6498e11] "Always failing reload (no delay).qvf", download starting
2024-04-30T06:30:34.810Z info: β
App [deba4bcf-47e4-472e-97b2-4fe8d6498e11] "Always failing reload (no delay).qvf", download complete. Size=180224 bytes
2024-04-30T06:30:36.431Z info:
Destination file "/Users/goran/tools/ctrl-q demo/qvf-export/App 2_2024-04-30.qvf" exists. Do you want to overwrite it? (y/n) y
2024-04-30T06:30:40.286Z info:
2024-04-30T06:30:40.286Z info: ------------------------------------
2024-04-30T06:30:40.286Z info: App [4e96965a-ebc9-4572-ad71-35d6cc7dbb23] "App 2.qvf", download starting
2024-04-30T06:30:41.324Z info: β
App [4e96965a-ebc9-4572-ad71-35d6cc7dbb23] "App 2.qvf", download complete. Size=245760 bytes
2024-04-30T06:30:42.988Z info: ------------------------------------
2024-04-30T06:30:42.988Z info: App [8272af5f-2677-459a-8d50-ee45a1c5a775] "App 1.qvf", download starting
2024-04-30T06:30:43.394Z info: β
App [8272af5f-2677-459a-8d50-ee45a1c5a775] "App 1.qvf", download complete. Size=245760 bytes
2024-04-30T06:30:45.138Z info:
Destination file "/Users/goran/tools/ctrl-q demo/qvf-export/App 1_2024-04-30.qvf" exists. Do you want to overwrite it? (y/n) y
2024-04-30T06:30:49.529Z info:
2024-04-30T06:30:49.531Z info: ------------------------------------
2024-04-30T06:30:49.531Z info: App [6bf8f41f-31d0-40b0-9e59-95ec8839eb57] "App 1.qvf", download starting
2024-04-30T06:30:49.973Z info: β
App [6bf8f41f-31d0-40b0-9e59-95ec8839eb57] "App 1.qvf", download complete. Size=245760 bytes
2024-04-30T06:30:50.984Z info: ------------------------------------
2024-04-30T06:30:50.984Z info:
App metadata file "/Users/goran/tools/ctrl-q demo/qvf-export/app_export.xlsx" exists. Do you want to overwrite it? (y/n) y
2024-04-30T06:30:52.867Z info:
2024-04-30T06:30:52.869Z info: β
Done writing app metadata file "app_export.xlsx" to disk
The qvf-export
directory now contains these files:
dir .\qvf-export\
Directory: C:\tools\ctrl-q\qvf-export
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 12/03/2024 10:26 180224 Always failing reload (no delay)_2024-03-12.qvf
-a---- 12/03/2024 10:27 245760 App 1_2024-03-12.qvf
-a---- 12/03/2024 10:27 245760 App 2_2024-03-12.qvf
-a---- 12/03/2024 10:27 20539 app_export.xlsx
-a---- 12/03/2024 10:26 720896 Ctrl-Q CLI_2024-03-12.qvf
-a---- 12/03/2024 10:26 327680 Performance review_2022-03-28_2024-03-12.qvf
-a---- 12/03/2024 10:26 360448 User retention_2024-03-12.qvf
The format of the created Excel file is almost identical to the one used when importing apps from QVF files, described here.
The only difference is that the app export format includes an “App id” column, which is not required when importing apps.
App import will however work just fine if there is an “App id” column present, it just won’t be used for anything.
3.12 - Import
Save time and avoid manual errors by automating the import of various information into Qlik Sense.
3.12.1 - Apps
Page contents:
All example below use Windows Terminal/PowerShell.
Import apps from QVF files
.QVF files are Sense apps stored on disk.
Ctrl-Q’s app-import
command does bulk import of such QVF files, as well as setting tags and custom properties on the created apps.
Importing apps defined on the App import
sheet of the tasks.xlsx
Excel file can be done with a command like this:
.\ctrl-q.exe app-import `
--auth-type cert `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-cert-file ./cert/client.pem `
--auth-cert-key-file ./cert/client_key.pem `
--auth-user-dir LAB `
--auth-user-id goran `
--file-name tasks.xlsx `
--sheet-name "App import"
2024-03-12T09:28:28.250Z info: -----------------------------------------------------------
2024-03-12T09:28:28.250Z info: | Ctrl-Q
2024-03-12T09:28:28.250Z info: |
2024-03-12T09:28:28.250Z info: | Version : 3.16.0
2024-03-12T09:28:28.250Z info: | Log level : info
2024-03-12T09:28:28.250Z info: |
2024-03-12T09:28:28.250Z info: | Command : app-import
2024-03-12T09:28:28.250Z info: | : import apps/upload QVF files on disk to Sense based on definitions in Excel file.
2024-03-12T09:28:28.250Z info: |
2024-03-12T09:28:28.250Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T09:28:28.250Z info: |
2024-03-12T09:28:28.250Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T09:28:28.250Z info: ----------------------------------------------------------
2024-03-12T09:28:28.250Z info:
2024-03-12T09:28:28.265Z info: Import apps from definitions in file "tasks.xlsx"
2024-03-12T09:28:28.406Z info: Successfully retrieved 28 tags from QSEoW
2024-03-12T09:28:28.515Z info: Successfully retrieved 31 custom properties from QSEoW
2024-03-12T09:28:28.547Z info: -------------------------------------------------------------------
2024-03-12T09:28:28.547Z info: Importing apps...
2024-03-12T09:28:28.547Z info: (1) Importing app "App 3" from file "C:/tools/ctrl-q/testdata/App import 3.qvf"
2024-03-12T09:28:33.079Z info: (1, delete-publish) App "App 3" published to stream "Ctrl-Q demo apps", the existing app (if one exists) with the same name in this stream has been deleted. Id of published app: 6668310c-19e8-416c-94b0-e32505e4de78
2024-03-12T09:28:33.079Z info: (2) Importing app "App 3" from file "C:/tools/ctrl-q/testdata/App import 3.qvf"
2024-03-12T09:28:39.055Z info: (2, publish-replace) App "App 3" published to stream "Ctrl-Q demo apps", replacing the existing app with the same name. Id of published app: 6668310c-19e8-416c-94b0-e32505e4de78
2024-03-12T09:28:39.055Z info: (3) Importing app "App 1" from file "C:/tools/ctrl-q/testdata/App import 1.qvf"
2024-03-12T09:28:43.024Z warn: (3) PUBLISH APP publish-replace: More than one app with the same name "App 1" in the target stream "Ctrl-Q demo apps". Impossible to know which one to replace. Skipping publishing for this app. The uploaded app is still present in the QMC (id=bcda9997-1a6c-42bb-b5aa-ff75fcad3f09).
2024-03-12T09:28:43.024Z error: (3) Failed publishing app "App 1" to stream "Ctrl-Q demo apps"
2024-03-12T09:28:43.024Z info: (4) Importing app "App 1" from file "C:/tools/ctrl-q/testdata/App import 1.qvf"
2024-03-12T09:28:47.243Z info: (4, publish-another) App "App 1" published to stream "Ctrl-Q demo apps". Id of published app: dda304b5-792e-4241-9bd8-b5e2e8ca21af
2024-03-12T09:28:47.243Z info: (5) Importing app "App 1" from file "C:/tools/ctrl-q/testdata/App import 1.qvf"
2024-03-12T09:28:51.117Z warn: (5) PUBLISH APP publish-replace: More than one app with the same name "App 1" in the target stream "Ctrl-Q demo apps". Impossible to know which one to replace. Skipping publishing for this app. The uploaded app is still present in the QMC (id=06d9f5d6-53a2-449c-ae7b-7033597cf88b).
2024-03-12T09:28:51.117Z error: (5) Failed publishing app "App 1" to stream "Ctrl-Q demo apps"
2024-03-12T09:28:51.117Z info: (6) Importing app "App 2" from file "C:/tools/ctrl-q/testdata/App import 2.qvf"
2024-03-12T09:28:54.610Z warn: Stream "Stream does not exist" does not exist.
2024-03-12T09:28:54.610Z error: (6) Failed publishing app "App 2" to stream "Stream does not exist". The uploaded app is still present in the QMC (id=3a7812fe-7d8c-467e-8fd0-62f4ee42a116).
2024-03-12T09:28:54.610Z info: (7) Importing app "App 3" from file "C:/tools/ctrl-q/testdata/App import 3.qvf"
2024-03-12T09:29:00.011Z info: (7, publish-replace) App "App 3" published to stream "Ctrl-Q demo apps", replacing the existing app with the same name. Id of published app: 6668310c-19e8-416c-94b0-e32505e4de78
NOTE 1: Qlik Sense implements rate limiting for QVF uploads. This means that if you plan to upload more than 60 QVF files you may be affected by this rate limiting.
Ctrl-Q detects that it’s being rate limited and implements a backoff strategy for retries, waiting longer and longer until it tries again.
Such retries are clearly shown in the Ctrl-Q logs.
The QMC now shows three new apps:
The Excel file with definitions on what QVF files should be imported, what the apps should be named etc looks like this:
The available columns in the Excel file are the same as when importing apps as part of task import.
The columns are described on the page describing app importing as part of task imports.
NOTE: A sample defintions Excel file is available in the GitHub repository.
If a valid app owner is specified in the Excel file it will be applied to the new app.
Similarly, if an already existing stream name (or ID of an existing stream) is specified in the Excel file, the new app will be published to that stream.
3.12.2 - Master items
Page contents:
All example below use Windows Terminal/PowerShell.
Import master items from Excel file
This command imports dimensions and measures defined in an Excel file into master items in a Sense app.
Both single and drill-down dimensions can be created (i.e. the same types that can be created using the Sense web UI), as well as measures.
The same coloring options are available as in the web UI for both dimensions and measures.
First let’s take a look at the command options:
.\ctrl-q.exe master-item-import --help
Usage: ctrl-q master-item-import [options]
create master items based on definitions in a file on disk
Options:
--log-level <level> log level (choices: "error", "warn", "info", "verbose", "debug", "silly", default: "info")
--host <host> Qlik Sense server IP/FQDN
--port <port> Qlik Sense server engine port (usually 4747 for cert auth, 443 for jwt auth) (default: "4747")
--schema-version <string> Qlik Sense engine schema version (default: "12.612.0")
--app-id <id> Qlik Sense app ID
--virtual-proxy <prefix> Qlik Sense virtual proxy prefix (default: "")
--secure <true|false> https connection to Qlik Sense must use correct certificate. Invalid certificates will result in rejected/failed connection. (default: true)
--auth-user-dir <directory> user directory for user to connect with
--auth-user-id <userid> user ID for user to connect with
-a, --auth-type <type> authentication type (choices: "cert", "jwt", default: "cert")
--auth-cert-file <file> Qlik Sense certificate file (exported from QMC) (default: "./cert/client.pem")
--auth-cert-key-file <file> Qlik Sense certificate key file (exported from QMC) (default: "./cert/client_key.pem")
--auth-root-cert-file <file> Qlik Sense root certificate file (exported from QMC) (default: "./cert/root.pem")
--auth-jwt <jwt> JSON Web Token (JWT) to use for authentication with Qlik Sense server
-t, --file-type <type> source file type (choices: "excel", default: "excel")
--file <filename> file containing master item definitions
--sheet <name> name of Excel sheet where dim/measure flag column is found
--col-ref-by <reftype> how to refer to columns in the source file. Options are by name or by position (zero based) (choices: "name", "position", default: "name")
--col-item-type <column position or name> column where dim/measure flag is found. Use "dim-single" in that column to create dimension, "dim-drilldown" for drill-down dimension, "measure" for measure (default: "Master item type")
--col-master-item-name <column position or name> column number (zero based) or name to use as master item name (default: "Master item name")
--col-master-item-descr <column position or name> column number (zero based) or name to use as master item description (default: "Description")
--col-master-item-label <column position or name> column number (zero based) or name to use as master item label (default: "Label")
--col-master-item-expr <column position or name> column number (zero based) or name to use as master item expression (default: "Expression")
--col-master-item-tag <column position or name> column number (zero based) or name to use as master item tags (default: "Tag")
--col-master-item-color <column position or name> column number (zero based) or name to use as color for dimensions/measures (default: "Color")
--col-master-item-per-value-color <column position or name> column number (zero based) or name to use as per-value/segment color for dimensions/measures (default: "Per value color")
--sleep-between-imports <milliseconds> sleep this many milliseconds between imports. Set to 0 to disable (default: 1000)
--limit-import-count <number> import at most x number of master items from the Excel file. Defaults to 0 = no limit (default: 0)
--dry-run do a dry run, i.e. do not create or update anything - just show what would be done
-h, --help display help for command
There are several options that allow for a great deal of flexibility.
For example, the --col-ref-by
option determines whether the --col-master-item-...
options refer to columns by position or name.
Column names will in most cases be easier to read and understand, but sometimes a zero-based column position might be preferred.
Similarly those --col-master-item-...
options let you use your own column names in the source file.
By adding the --help
option when running Ctrl-Q you get a list of all available options for the master-item-import
command.
--help
can be added to any Ctrl-Q command, even if there are already other options on the command line.
Some other options that might be useful:
--dry-run
- Don’t actually create or update any master items, just show what would have been done.--limit-import-count
- Only import the first N master items from the file. Useful for testing.--sleep-between-imports
- Pause for N milliseconds between each imported master item. Useful for decreasing the load on the Sense server.
Notes on using the master-item-import
command:
-
Master items are referred to by name. This means that if a master item in the source file already exists in the target Sense app, the app’s master item will be updated.
-
If a master item does not exist in the target app the master item will be created.
-
If a master item does_* exist in the target app its content will be overwritten with the info in the source Excel file.
-
The structure of the Excel file is fairly flexible, but some restrictions apply:
- The columns can be named anything. Use the
--col-item-type
and--col-master-item-...
columns to tell Ctrl-Q which columns contains what data. - The first row in the Excel sheet must contain column headers if columns are referenced by name.
- The columns can be named anything. Use the
-
Master item names, descriptions and labels can contain almost any characters and there are some restrictions on the length of these strings.
- See the Qlik Sense help for details.
- If a master item name or description is too long a warning will be shown and the text will be truncated to the max length allowed by Sense (see the link above).
- If a master item has more than 30 tags a warning will be shown and only the first 30 tags will be used.
- If a master item tag is longer than 31 characters a warning will be shown and the tag will be truncated to 31 characters.
- If a master item expression is too long an error will be shown and Ctrl-Q will exit. Notes on the example below:
-
The (intentional) warning for the incorrectly spelled master item type “measur” (which should have been “measure”, of course).
Now let’s run the command.
.\ctrl-q.exe master-item-import `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran `
--auth-type cert `
--app-id a3e0f5d2-000a-464f-998d-33d333b175d7 `
--file-type excel `
--file ./ctrl-q-master-items.xlsx `
--sheet Sales `
--col-ref-by name `
--col-item-type "Master item type" `
--col-master-item-name "Master Item Name" `
--col-master-item-descr Description `
--col-master-item-label Label `
--col-master-item-expr Expression `
--col-master-item-tag Tag `
--col-master-item-color Color `
--col-master-item-per-value-color 'Per value color'
2024-03-12T09:30:47.416Z info: -----------------------------------------------------------
2024-03-12T09:30:47.416Z info: | Ctrl-Q
2024-03-12T09:30:47.416Z info: |
2024-03-12T09:30:47.416Z info: | Version : 3.16.0
2024-03-12T09:30:47.416Z info: | Log level : info
2024-03-12T09:30:47.416Z info: |
2024-03-12T09:30:47.416Z info: | Command : master-item-import
2024-03-12T09:30:47.416Z info: | : create master items based on definitions in a file on disk
2024-03-12T09:30:47.416Z info: |
2024-03-12T09:30:47.416Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T09:30:47.416Z info: |
2024-03-12T09:30:47.416Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T09:30:47.416Z info: ----------------------------------------------------------
2024-03-12T09:30:47.416Z info:
2024-03-12T09:30:47.430Z info: Import master items from definitions in Excel file "./ctrl-q-master-items.xlsx"
2024-03-12T09:30:47.993Z info: (1/12) Updated existing measure "No. of sold units"
2024-03-12T09:30:49.009Z info: (2/12) Updated existing measure "No. of sold units (LY)"
2024-03-12T09:30:50.041Z info: (3/12) Created new measure "Revenue EUR"
2024-03-12T09:30:51.071Z info: (4/12) Updated existing measure "Revenue EUR (LY)"
2024-03-12T09:30:52.087Z info: (5/12) Updated existing measure "Profit EUR"
2024-03-12T09:30:53.102Z warn: (6/12) Found an unknown master item type: "measur". Ignoring this line in the imported file.
2024-03-12T09:30:54.119Z info: (7/12) Created new measure "Profit EUR (LY)"
2024-03-12T09:30:55.165Z info: (8/12) Created new dimension "Country"
2024-03-12T09:30:56.181Z info: (9/12) Created new dimension "Sales month"
2024-03-12T09:30:57.227Z info: (10/12) Updated existing dimension "Salesperson"
2024-03-12T09:30:58.258Z info: (11/12) Updated existing dimension "Color"
2024-03-12T09:30:59.292Z info: (12/12) Updated existing drill-down dimension "DimDrill"
2024-03-12T09:31:00.308Z info: Imported 12 master items from Excel file ./ctrl-q-master-items.xlsx
NOTE: A sample defintions Excel file is available in the GitHub repository. That file contains examples of most combinations of master item types and properties.
How to get correct color JSONs
If colors are to be associated with master items, the colors must be specified in JSON format, in the correct columns in the Excel file.
The easiest way to get the correct JSONs is to create a master item in the Sense web UI, set the master item’s color, and then use Ctrl-Q’s master-item-dim-get
and master-item-measure-get
commands to view the master item(s), either as a table or as JSON.
This will show you what the structure of the JSON looks like, or even provide you with the correct JSON if you entered the desired color info in the Sense web UI.
Different master item types have different coloring options:
- Drill-down dimensions
- A general dimension color set in the Excel file’s column specified by the
--col-master-item-color
option.
- A general dimension color set in the Excel file’s column specified by the
- Single dimensions
- A general dimension color set in the Excel file’s column specified by the
--col-master-item-color
option. - A per-value color that can be used to assign different colors to different values of the dimension. Set in the Excel file’s column specified by the
--col-master-item-per-value-color
option.
- A general dimension color set in the Excel file’s column specified by the
- Measures
- A general measure color set in the Excel file’s column specified by the
--col-master-item-color
option. - Segment colors that can be used to assign colors to value ranges of the measure. Set in the Excel file’s column specified by the
--col-master-item-per-value-color
option.
- A general measure color set in the Excel file’s column specified by the
Let’s look at some examples.
Here we want to get the JSON for the color of the master dimension “Country”.
.\ctrl-q.exe master-item-dim-get `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran `
--app-id a3e0f5d2-000a-464f-998d-33d333b175d7 `
--output-format table
The result will be a rather wide table, where the column named Coloring
contains the color JSONs.
The color data for the “Country” dimension looks like this:
Dimension color:
{"color":"#bbbbbb","index":-1}
Value colors:
{"colors":[{"value":"Afghanistan","baseColor":{"color":"#8a85c6","index":-1}},{"value":"Albania","ba
seColor":{"color":"#aaaaaa","index":-1}},{"value":"Algeria","baseColor":{"color":"#a16090","index":9
}}],"nul":{"color":"#c8c7a9","index":16},"oth":{"color":"#ffec6e","index":-1},"pal":null,"single":nu
ll,"usePal":true,"autoFill":true}
Let’s format those as proper JSONs to make them more readable.
These JSONs are what would go into the Excel file’s Color
and Per-value color
columns.
NOTE 1: If unsure about what data to put in some field, just use the ones returned by the
master-item-dim-get
command.
NOTE 2: The same concept works for drill-down dimensions and measures.
{
"color": "#bbbbbb",
"index": -1
}
{
"colors": [
{
"value": "Afghanistan",
"baseColor": {
"color": "#8a85c6",
"index": -1
}
},
{
"value": "Albania",
"baseColor":{
"color":"#aaaaaa",
"index":-1}
},
{
"value":"Algeria",
"baseColor":{
"color":"#a16090",
"index":9
}
}
],
"nul": {
"color": "#c8c7a9",
"index": 16
},
"oth": {
"color": "#ffec6e",
"index": -1
},
"pal": null,
"single":nu
ll,
"usePal": true,
"autoFill": true
}
3.12.3 - Tasks
Page contents:
- Import tasks from file
All example below use Windows Terminal/PowerShell.
Import tasks from file
Task definitions can be read from CSV or Excel files.
The options are as follows:
.\ctrl-q.exe task-import --help
Usage: ctrl-q task-import [options]
create tasks based on definitions in a file on disk, optionally also importing apps from QVF files.
Options:
--log-level <level> log level (choices: "error", "warn", "info", "verbose", "debug", "silly", default: "info")
--host <host> Qlik Sense server IP/FQDN
--port <port> Qlik Sense repository service (QRS) port (usually 4242 for cert auth, 443 for jwt auth) (default: "4242")
--schema-version <string> Qlik Sense engine schema version (default: "12.612.0")
--virtual-proxy <prefix> Qlik Sense virtual proxy prefix (default: "")
--secure <true|false> https connection to Qlik Sense must use correct certificate. Invalid certificates will result in rejected/failed connection. (default: true)
--auth-user-dir <directory> user directory for user to connect with
--auth-user-id <userid> user ID for user to connect with
-a, --auth-type <type> authentication type (choices: "cert", "jwt", default: "cert")
--auth-cert-file <file> Qlik Sense certificate file (exported from QMC) (default: "./cert/client.pem")
--auth-cert-key-file <file> Qlik Sense certificate key file (exported from QMC) (default: "./cert/client_key.pem")
--auth-root-cert-file <file> Qlik Sense root certificate file (exported from QMC) (default: "./cert/root.pem")
--auth-jwt <jwt> JSON Web Token (JWT) to use for authentication with Qlik Sense server
-t, --file-type <type> source file type (choices: "excel", "csv", default: "excel")
--file-name <filename> file containing task definitions
--sheet-name <name> name of Excel sheet where task info is found
--update-mode <mode> create new or update existing tasks (choices: "create", default: "create")
--limit-import-count <number> import at most x number of tasks from the source file. Defaults to 0 = no limit (default: 0)
--sleep-app-upload <milliseconds> Wait this long before continuing after each app has been uploaded to Sense. Defaults to 1000 = 1 second (default: 1000)
--import-app import Sense app QVFs from specified directory
--import-app-sheet-name <name> name of Excel sheet where app definitions are found
--dry-run do a dry run, i.e. do not create any reload tasks - just show what would be done
-h, --help display help for command
The options are almost the same irrespective of source file type:
The --sheet-name
is only used/valid/relevant when --file-type
is set to excel
.
Why? Because there are no sheets/tabs in CSV files.
Source file columns for task defintions
The source file format is quite relaxed, but a few rules apply:
- The first column in the source file must be the task number.
- This value uniquely identifies each task that should be imported and should be incremented by one for each task.
- If this first column is empty the whole row will be ignored.
- All other columns, mandatory and optional, beyond the first one may be placed in any order.
- For mandatory columns the names listed below must be used (but they can be placed in any order in the file, except the first column).
- All mandatory columns must be present in the source file, even if they are not used/empty. For example, there may not be any tasks with schema/scheduled triggers, but the schema trigger columns must still be present in the source file.
- “Counter” columns are used to indicate that rows in the file are associated.
- All rows involved in defining a certain task have the same “Task counter” value.
- All rows involved in defining a certain schema or composite event have the same “Event counter” value.
- All rows involved in defining a certain composite event rule have the same “Rule counter” value.
- The file format used when exporting task tables to disk is a superset of the format used for task import. It’s thus a good idea to first do a task export, look at the file format and then adopt as needed before importing.
The mandatory columns in the task definition file are:
Column name | Comment | Description | Valid values |
---|---|---|---|
Task counter | 1 | Counter starting at 1. Increments one step for each task. All rows associated with a specific task should have the same value in this column. | Integer > 0 |
Task type | 1 | Type of task. In the future Ctrl-Q may support more task types. | Reload / External program |
Task name | 1 | Name of the task that will be created. | Any string. Emojis allowed π€ͺ. |
Task id | 1 | When creating new tasks a new task ID will always be created. This column is instead used to create task chains: it links a composite trigger in a downstream task with an upstream task via this column’s value. | Any string, but to make it easier to verify task chains it’s recommended to use integers or an easy to understand format in this column. For example “3” or “new-task-3”. If no downstream task will link to the task being defined, this column can be left empty. |
Task enabled | 1 | Should the created task be enabled or not. | 1 / 0 / blank. 1=enabled, 0 or blank=disabled |
Task timeout | 1 | Timeout for the created task, i.e. number of seconds the task is allowed to run before it’s aborted. | Seconds |
Task retries | 1 | Number of retries to make if the task execution fails. | Integer >= 0 |
App id | 1 | The Sense app the task should be associated with. | If a valid GUID is specified it’s assumed to be an app id. The task will be associated with that app. If the app id starts with newapp- it is a reference to an app that is imported during the current Ctrl-Q execution. The integer following newapp- is the value in the App counter column in the Excel definitions file. |
Partial reload | 1 | Should the task do a partial or full reload of the app? | 1 / 0 / blank. 1=true, 0 or blank=false |
Manually triggered | 1 | Is the task manually triggered or not? | 1 / 0 / blank. 1=true, 0 or blank=false |
Tags | 1 | Tags to set on the created task. | Format is “tag1 / tag2 / tag with spaces in it”, i.e. separate tag names by “space-forward slash-space”. |
Custom properties | 1 | Custom properties to set on the created task. | Format is “CustPropName1=Value1 / CustPropName2=Value2” |
Event counter | 2 | Counter identifying events associated with the task defined in the previous line. One task can have zero or more events associated with it. | Integer > 0 |
Event type | 2 | Which event type does this line specify? Schema events deal with time-based execution of the task. Composite events are used to build task chains. | Schema / Composite |
Event name | 2 | Name of the event. | Any string |
Event enabled | 2 | Is event enabled. | 1 / 0 / blank. 1=enabled, 0 or blank=disabled |
Schema increment option | 3 | Type of schema event. For reference only, not used when Sense evaluates schema events. | once / hourly / daily / weekly / monthly / custom |
Schema increment description | 3 | Structured description of the schema increment option. For reference only, not used when Sense evaluates schema events. | Integers separated by space, e.g. “0 0 1 0” for weekly |
Daylight savings time | 3 | Control how the schema event should deal with dayligt savings time. | ObserveDaylightSavingTime / PermanentStandardTime / PermanentDaylightSavingTime |
Schema start | 3 | First valid time for the schema event. The event will not fire before this moment. | A valid timestamp string, e.g. 2022-10-19T10:19:30.000 |
Schema expiration | 3 | Last valid time for the schema event. The event will not fire after this moment. | A valid timestamp string or 9999-01-01T00:00:00.000 to signify “never” |
Schema filter description | 3 | Used to control when a schema event is allower to trigger. More info here. | Default: “* _ - _ * * *” |
Schema time zone | 3 | Time zone the schema event is evaluated in | E.g. “Europe/Paris” |
Time contstraint seconds | 4 | Used for composite events. Defines a window in which all dependent tasks have to complete. | Integer >= 0 |
Time contstraint minutes | 4 | Used for composite events. Defines a window in which all dependent tasks have to complete. | Integer >= 0 |
Time contstraint hours | 4 | Used for composite events. Defines a window in which all dependent tasks have to complete. | Integer >= 0 |
Time contstraint days | 4 | Used for composite events. Defines a window in which all dependent tasks have to complete. | Integer >= 0 |
Rule counter | 4 | Counter identifying rules that define upstream task executions the current task is depending on. | Integer > 0 |
Rule state | 4 | Is the rule waiting for success or failure of upstream task? | TaskSuccessful / TaskFail |
Rule task name | Name of the rule | Any string | |
Rule task id | 4 | Reference to the upstream task. | Any string (if referring to a task within the same file), or a valid id of a task that already exists in Sense. Two options exist: If the “Rule task id” has the same value as the “Task id” of another task in the source file, those two tasks will be linked via this rule. If the “Rule task id” refers to an existing task id in Sense, the new rule will link to that existing task. |
Meaning of “Comment” column above:
1: These columns are required for all lines where top-level task information is defined.
2: These columns are required for all lines where general event info (shared for schema and composite events) is defined. There may be zero or more such lines for a specific task.
3: These columns are required for all lines where schema events info are defined.
4: These columns are required for all lines where composite events (“task chains”) are defined.
π‘ Tip
Example task definition files are available on this page.Source file columns for app import definitions
If apps should be imported (by means of the --import-app
option) an Excel file must be provided with info about what app QVF files should be imported, as well as details about each app import.
A sheet name (where the app details are found) in the Excel file must also be specified using the --import-app-sheet-name
option.
The columns (case sensitive!) in the app import definition file are:
Column name | Description | Valid values |
---|---|---|
App counter | Counter starting at 1. Increments one step for each app. | Integer > 0 |
App name | Name of the app that will be created based on the specified QVF file. | Any string. Emojis allowed. |
QVF directory | Directory where app QVF files are stored | Any valid path, absolute or relative. |
QVF name | Name of QVD file, including extension. | Any valid file name. |
Exclude data connections | Should data connections stored in the QVF file be excluded during app import or not. | true / false |
App tags | Tags to set on the imported app. | Format is “tag1 / tag2 / tag with spaces in it”, i.e. separate tag names by “space-forward slash-space”. |
App custom properties | Custom properties to set on the imported app. | Format is “CustPropName1=Value1 / CustPropName2=Value2” |
Owner user directory | If app owner should be set for this app, specify the user directory name here. Both user directory and user id must be correctly defined for the app owner to be updated. | Any user directory currently defined in the QMC, or Internal for Sense internal accounts. |
Owner user id | If app owner should be set for this app, specify the user id here. Both user directory and user id must be correctly defined for the app owner to be updated. | Any user ID defined in the user directory defined in Owner user directory column (above). |
Publish to stream | If this app should be published, specify stream id or name here. If the id is not associated with a stream or the specified stream name does not exist the app will not be published | Any existing stream name or id associated with an existing stream. |
Publish options (optional) |
Specify publish options here, for example if an already published app with the same name should be overwritten or not. The default behaviour is publish-replace , which will be used when no “Publish options” column is present in the Excel sheet or that column exists but is empty. |
publish-replace : If there already exists a published app with the same name in the specified stream, replace that app with the new one. publish-another : If there already exists a published app with the same name in the specified stream, publish tnother one. delete-publish : First delete an already existing app (if there is one), then publish the new app. |
The publish options are described in more detail here.
Example: Export tasks to CSV, then import tasks from same CSV
This example will
- Export ca 50 tasks to a CSV file
- Import tasks from the just created CSV file
The CSV file created during the task export will contain some columns that are not needed during task import (last execution timestamp for each task and similar).
That’s fine though, during the task import Ctrl-Q will only look at the required columns and simply disregard all other columns.
Export tasks to CSV file:
.\ctrl-q.exe task-get `
--auth-type cert `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-user-dir LAB `
--auth-user-id goran `
--output-format table `
--output-dest file `
--output-file-name tasks.csv `
--output-file-format csv
2024-03-12T09:33:25.950Z info: -----------------------------------------------------------
2024-03-12T09:33:25.950Z info: | Ctrl-Q
2024-03-12T09:33:25.950Z info: |
2024-03-12T09:33:25.950Z info: | Version : 3.16.0
2024-03-12T09:33:25.950Z info: | Log level : info
2024-03-12T09:33:25.950Z info: |
2024-03-12T09:33:25.950Z info: | Command : task-get
2024-03-12T09:33:25.964Z info: | : get info about one or more tasks
2024-03-12T09:33:25.964Z info: |
2024-03-12T09:33:25.964Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T09:33:25.964Z info: |
2024-03-12T09:33:25.964Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T09:33:25.964Z info: ----------------------------------------------------------
2024-03-12T09:33:25.964Z info:
2024-03-12T09:33:26.089Z info: Successfully retrieved 28 tags from QSEoW
2024-03-12T09:33:27.918Z info: β
Writing task table to disk file "tasks.csv".
Now let’s import tasks from the tasks.csv
file:
.\ctrl-q.exe task-import `
--auth-type cert `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-cert-file ./cert/client.pem `
--auth-cert-key-file ./cert/client_key.pem `
--auth-user-dir LAB `
--auth-user-id goran `
--file-type csv `
--file-name tasks.csv
It’s worth noting that all the created tasks will be linked into the task chains that existed when the tasks where first exported into the CSV file.
This happens because the composite event rules that were exported into the CSV file (i.e. “start the task when task A and task B have successfully finished reloaded”) contain task IDs that point to already existing reload tasks in Sense.
When that’s the case the newly created tasks (based on the info in the CSV file) will link to those existing tasks.
This way a newly created task (based on info in the CSV file) can still be configured to start after some already existing task finish reloading.
Note how Ctrl-Q first creates the reload tasks and any associated schedule triggers in a first step, then add any composite triggers in the second step.
This is needed as a composite trigger may refer to an already existing and/or a newly created task (or multiple tasks of course), i.e. all tasks must first be created. Only then is it possible to create composite triggers.
2024-03-12T09:34:09.780Z info: -----------------------------------------------------------
2024-03-12T09:34:09.780Z info: | Ctrl-Q
2024-03-12T09:34:09.780Z info: |
2024-03-12T09:34:09.780Z info: | Version : 3.16.0
2024-03-12T09:34:09.780Z info: | Log level : info
2024-03-12T09:34:09.780Z info: |
2024-03-12T09:34:09.794Z info: | Command : task-import
2024-03-12T09:34:09.794Z info: | : create tasks based on definitions in a file on disk, optionally also importing apps from QVF files.
2024-03-12T09:34:09.794Z info: |
2024-03-12T09:34:09.794Z info: | Run Ctrl-Q with the '--help' option to see a list of all available options for this command.
2024-03-12T09:34:09.794Z info: |
2024-03-12T09:34:09.794Z info: | https://github.com/ptarmiganlabs/ctrl-q
2024-03-12T09:34:09.794Z info: ----------------------------------------------------------
2024-03-12T09:34:09.794Z info:
2024-03-12T09:34:09.794Z info: Import tasks from definitions in file "tasks.csv"
2024-03-12T09:34:09.935Z info: Successfully retrieved 28 tags from QSEoW
2024-03-12T09:34:10.044Z info: Successfully retrieved 31 custom properties from QSEoW
2024-03-12T09:34:10.155Z info: -------------------------------------------------------------------
2024-03-12T09:34:10.155Z info: Creating tasks...
2024-03-12T09:34:10.294Z info: (1) Created new external program task "App snapshots end of September 2022", new task id: 88bdbd10-eb45-4490-ac14-596e7e9bdaf3.
2024-03-12T09:34:10.419Z info: (2) Created new external program task "Ext program task chaining 1", new task id: 32222dad-ec1b-4a74-bd39-430619bba874.
2024-03-12T09:34:10.529Z info: (3) Created new external program task "Ext program task chaining 1", new task id: 1be0d039-b68f-4916-9fa5-2aa9d27f8344.
2024-03-12T09:34:10.686Z info: (4) Created new external program task "Ext task 1", new task id: ca37875a-d977-4d0f-a034-f2d9e3aee85c.
2024-03-12T09:34:10.810Z info: (5) Created new external program task "Ext task 2", new task id: d6b324ee-73e9-43dc-80be-164bd16daef8.
2024-03-12T09:34:10.951Z info: (6) Created new external program task "New external program task 1", new task id: 2a9f7d8d-9f98-4cb5-af0b-c0b7551064c4.
2024-03-12T09:34:11.077Z info: (7) Created new external program task "Node-RED ext program task demo 1", new task id: 0deb6ea6-896a-4363-a28c-ff0e227d4fc8.
2024-03-12T09:34:11.186Z info: (8) Created new external program task "PowerShell export data connections", new task id: 7eecf18d-479b-4834-9b95-2b5f71cc0a7b.
2024-03-12T09:34:11.388Z info: (9) Created new external program task "PowerShell export tags (ext pgm task)", new task id: 44cef627-81ce-4a5e-ab83-13390d822d93.
2024-03-12T09:34:11.498Z info: (10) Created new external program task "Sample external task", new task id: cfe6f6fe-b557-4e11-af92-1ec7dc05221b.
2024-03-12T09:34:12.077Z info: (11) Created new external program task "[ctrl-q task chain 3] Ext program task chaining", new task id: a751e35a-8ffe-4ee9-bc5f-e863c1f7c1b0.
2024-03-12T09:34:12.186Z info: (12) Created new external program task "[ctrl-q task chain 3] Ext program task chaining", new task id: f45382b1-1b6d-4f32-9549-90fe0ba65aeb.
2024-03-12T09:34:12.498Z info: (13) Created new external program task "[ctrl-q task chain 4] Ext program task chaining", new task id: f03da04c-8d0a-48ee-8643-42d429c69e12.
2024-03-12T09:34:12.623Z info: (14) Created new external program task "[ctrl-q task chain 4] Ext program task chaining", new task id: e00e097a-0316-4fe5-a767-82b00910e774.
2024-03-12T09:34:12.888Z info: (15) Created new reload task "Butler test failing reloads 1 task", new task id: ff1359b8-ff1e-4fef-b871-c44b2afce877.
2024-03-12T09:34:13.139Z info: (16) Created new reload task "Butler test failing reloads 1 task", new task id: a2a21c75-6fcd-4341-b927-47fd7fc7074d.
2024-03-12T09:34:13.436Z info: (17) Created new reload task "Manually triggered reload of Always failing reload (no delay)", new task id: f97e71c4-7a73-4de9-ade8-93dc87abb5f5.
2024-03-12T09:34:13.716Z info: (18) Created new reload task "Manually triggered reload of Butler 7 Slack debug", new task id: 835c8937-d3c5-45a8-93b1-42f987dbf6e8.
2024-03-12T09:34:13.983Z info: (19) Created new reload task "Manually triggered reload of Butler regression test app 1", new task id: 2653f70f-3d12-46f2-b45d-5af48f1c1708.
2024-03-12T09:34:14.217Z info: (20) Created new reload task "Manually triggered reload of Butler regression test app 2", new task id: 81d5ac39-ac60-432e-9331-211454282d01.
2024-03-12T09:34:14.463Z info: (21) Created new reload task "Manually triggered reload of Butler regression test app 3", new task id: 921d36b5-d46e-46f2-9cb8-1c2ef1dad4fe.
...
...
2024-03-12T09:34:38.450Z info: -------------------------------------------------------------------
2024-03-12T09:34:38.450Z info: Creating composite events for the just created tasks...
2024-03-12T09:34:38.607Z info: CREATE COMPOSITE EVENT IN QSEOW: Event name="When [ctrl-q 2] done" for task ID a751e35a-8ffe-4ee9-bc5f-e863c1f7c1b0. Result: 201/Created.
2024-03-12T09:34:38.747Z info: CREATE COMPOSITE EVENT IN QSEOW: Event name="Start ext pgm task when reload task done" for task ID a751e35a-8ffe-4ee9-bc5f-e863c1f7c1b0. Result: 201/Created.
2024-03-12T09:34:38.888Z info: CREATE COMPOSITE EVENT IN QSEOW: Event name="When [ctrl-q task chain 3] done" for task ID f03da04c-8d0a-48ee-8643-42d429c69e12. Result: 201/Created.
2024-03-12T09:34:39.012Z info: CREATE COMPOSITE EVENT IN QSEOW: Event name="When HR metrics done" for task ID 2079c888-537b-4bce-8252-8bac8517eff7. Result: 201/Created.
2024-03-12T09:34:39.137Z info: CREATE COMPOSITE EVENT IN QSEOW: Event name="When Operations monitor has reloaded" for task ID 73e89949-51ea-4b64-b74a-1aa625e064e0. Result: 201/Created.
2024-03-12T09:34:39.263Z info: CREATE COMPOSITE EVENT IN QSEOW: Event name="When NYT comments done" for task ID 28541735-b57a-4b03-85fe-d09062a9adfa. Result: 201/Created.
2024-03-12T09:34:39.395Z info: CREATE COMPOSITE EVENT IN QSEOW: Event name="Task event trigger" for task ID e818fa3f-c8ca-4399-ab21-c61c05087fb9. Result: 201/Created.
...
...
Example: Import apps from QVF files and create associated reload tasks
This example will
- Import 3 apps from QVF files. Definitions of which files to import are stored in an Excel file.
- Tags and custom properties will be set for the apps.
- New app owners will be set.
- The apps will be published to streams.
- Create reload tasks based on definitions in same Excel file (but on a different sheet).
- The reload tasks will be associated with the previously imported apps.
- The reload tasks will be linked in a task chain.
- Some imported tasks will be triggered by already existing Sense tasks while others will be triggered by newly created tasks.
- There will be a 2 second delay after each QVF file has finished uploading, to reduce load on the Sense server.
The task import command looks like this in PowerShell:
.\ctrl-q.exe task-import `
--auth-type cert `
--host pro2-win1.lab.ptarmiganlabs.net `
--auth-cert-file ./cert/client.pem `
--auth-cert-key-file ./cert/client_key.pem `
--auth-user-dir LAB `
--auth-user-id goran `
--file-type excel `
--file-name tasks.xlsx `
--sheet-name "Ctrl-Q task import 1" `
--import-app `
--import-app-sheet-name "App import" `
--sleep-app-upload 2000
Some comments about the above command:
- The certificates used to authenticate with Sense are stored in the
cert
subdirectory, right under where Ctrl-Q is started from.
That’s the default locataion, meaning that the options--auth-cert-file
and--auth-cert-key-file
are really not needed in this example. - The app and task definitions are found in a Excel file (
--file-type
option) namedtasks.xlsx
. - Task definitions are found in the Excel file’s sheet named
Ctrl-Q task import
. - The
--import-app
tells Ctrl-Q to import certain apps before tasks defined in theCtrl-Q task import 1
sheet are created. This parameter is optional. If it is not included no apps will be imported. - The
--import-app-sheet-name
tells Ctrl-Q that a list of apps to be imported (and import parameters for each app) is found theApp import
sheet of the Excel file.
NOTE 1: A sample defintions Excel file is available in the GitHub repository. NOTE 2: The structure of the Excel sheet specified by the
--import-app-sheet-name
is described above.
Defining tasks to be created
The format is the same as when importing tasks only (and no apps).
More info here.
Associating new tasks with imported and existing apps
A few special cases apply when tasks are created and apps also imported.
In this situation it’s important that tasks can be associated with either the newly imported apps or already existing apps.
Similarly, for composite task triggers (used to create task chains) it’s important that either newly created tasks or already existing tasks can be referenced.
Let’s say the following three QVF files should be imported into Sense.
Note the App counter
column, with values 1, 2 and 3.
Now let’s look at the tasks to be created.
In the image below the main info (task name etc) for each of the four tasks is shown.
Note that the Task id
column has both proper GUIDs and simple integers in it.
This will be important when defining composite triggers.
Finally let’s look at the composite triggers associated with the last of the four tasks.
That composite trigger relies on two tasks, one that should fail (TaskFail
) to trigger the composite trigger and one that should succeed (TaskSuccessful
).
The important part here is the last column, Rule task id
:
- If that column contains a valid GUID it is assumed to be a reference to an existing task.
- If the column contains an integer it is assumed to be a reference to a newly created task.
Which task? The one with the same integer number in theTask id
column (see previous paragraph).
This way it’s possible to chain new reload tasks to both already existing tasks and new ones.
4 - Examples
4.1 - Dissecting the task definition file
Page contents:
- Task file examples
- Example 1: Single reload task with no triggers
- Example 2: Single reload task with schema trigger
- Example 3: Single reload task triggered by existing reload task
- Example 4: Two reload tasks, one triggering the other
- Example 5: External program task, triggered by schema event
- Example 6: External program task, triggered by existing tasks
- Example 7: Complex example with multiple tasks and triggers
All example below use Windows Terminal/PowerShell.
Task file examples
The task definition file is a CSV or Excel file that contains all the information needed to create tasks in Sense.
Below you find increasingly complex examples of how to use the task definition file.
Example 1: Single reload task with no triggers
One tag, one custom property, no triggers.
A new task is created.
--- Single reload task --- flowchart LR subgraph New reload task 1 A[Reload] end
| Task counter | Task type | Task name | Task id | Task enabled | Task timeout | Task retries | App id | Partial reload | Manually triggered | Ext program path | Ext program parameters | Task status | Task started | Task ended | Task duration | Task executedon node | Tags | Custom properties | Event counter | Event type | Event name | Event enabled | Event created date | Event modified date | Event modified by | Schema increment option | Schema increment description | Daylight savings time | Schema start | Schema expiration | Schema filter description | Schema time zone | Time contstraint seconds | Time contstraint minutes | Time contstraint hours | Time contstraint days | Rule counter | Rule state | Rule task name | Rule task id |
| ------------ | --------- | ----------------- | ------- | ------------ | ------------ | ------------ | ------------------------------------ | -------------- | ------------------ | ---------------- | ---------------------- | ----------- | ------------ | ---------- | ------------- | -------------------- | --------------- | ----------------- | ------------- | ---------- | ---------- | ------------- | ------------------ | ------------------- | ----------------- | ----------------------- | ---------------------------- | --------------------- | ------------ | ----------------- | ------------------------- | ---------------- | ------------------------ | ------------------------ | ---------------------- | --------------------- | ------------ | ---------- | -------------- | ------------ |
| 1 | Reload | New reload task 1 | task-1 | 1 | 1440 | 0 | 4716f284-7790-45c3-a0a5-154c898766a0 | false | 1 | | | | | | 0:00:00 | | Butler 5.0 demo | TaskPriority=High | | | | | | | | | | | | | | | | | | | | | | |
Example 2: Single reload task with schema trigger
A single schema trigger called “weekly” is added to the created task.
--- Single reload task with schema trigger --- flowchart LR subgraph New reload task 1 A{{"fa:fa-clock"}} -- Weekly --> B[Reload] end
| Task counter | Task type | Task name | Task id | Task enabled | Task timeout | Task retries | App id | Partial reload | Manually triggered | Ext program path | Ext program parameters | Task status | Task started | Task ended | Task duration | Task executedon node | Tags | Custom properties | Event counter | Event type | Event name | Event enabled | Event created date | Event modified date | Event modified by | Schema increment option | Schema increment description | Daylight savings time | Schema start | Schema expiration | Schema filter description | Schema time zone | Time contstraint seconds | Time contstraint minutes | Time contstraint hours | Time contstraint days | Rule counter | Rule state | Rule task name | Rule task id |
| ------------ | --------- | ----------------- | ------- | ------------ | ------------ | ------------ | ------------------------------------ | -------------- | ------------------ | ---------------- | ---------------------- | ----------- | ------------ | ---------- | ------------- | -------------------- | --------------- | ----------------- | ------------- | ---------- | ---------- | ------------- | ------------------ | ------------------- | ----------------- | ----------------------- | ---------------------------- | --------------------- | ------------ | ----------------- | ------------------------- | ---------------- | ------------------------ | ------------------------ | ---------------------- | --------------------- | ------------ | ---------- | -------------- | ------------ |
| 1 | Reload | New reload task 1 | task-1 | 1 | 1440 | 0 | 4716f284-7790-45c3-a0a5-154c898766a0 | false | 1 | | | | | | 0:00:00 | | Butler 5.0 demo | TaskPriority=High | | | | | | | | | | | | | | | | | | | | | | |
| 1 | | | | | | | | | | | | | | | | | | | 1 | Schema | Weekly | | | | LAB\\goran | weekly | 0 0 1 0 | ObserveDaylightSavingTime | 2022-10-19T10:19:30.000 | 9999-01-01T00:00:00.000 | * * - 3 1 * * * | Europe/Paris | | | | | | | | |
Example 3: Single reload task triggered by existing reload task
The newly created task will be triggered by an already existing task, identified by its task ID.
--- Single reload task with composite trigger --- flowchart LR subgraph Existing task A["Existing task 502fbe0c-6178-447b-ac28-4e531fec2d8d"] end subgraph New reload task 1 B_comptrigger[["Composite trigger"]] style B_comptrigger fill:#bbf,stroke-width:2px,stroke-dasharray: 5 5 B[Reload] end A -- Success --> B_comptrigger B_comptrigger --> B
| Task counter | Task type | Task name | Task id | Task enabled | Task timeout | Task retries | App id | Partial reload | Manually triggered | Ext program path | Ext program parameters | Task status | Task started | Task ended | Task duration | Task executedon node | Tags | Custom properties | Event counter | Event type | Event name | Event enabled | Event created date | Event modified date | Event modified by | Schema increment option | Schema increment description | Daylight savings time | Schema start | Schema expiration | Schema filter description | Schema time zone | Time contstraint seconds | Time contstraint minutes | Time contstraint hours | Time contstraint days | Rule counter | Rule state | Rule task name | Rule task id |
| ------------ | --------- | ----------------- | ------- | ------------ | ------------ | ------------ | ------------------------------------ | -------------- | ------------------ | ---------------- | ---------------------- | ----------- | ------------ | ---------- | ------------- | -------------------- | --------------- | ----------------- | ------------- | ---------- | -------------------- | ------------- | ------------------ | ------------------- | ----------------- | ----------------------- | ---------------------------- | --------------------- | ------------ | ----------------- | ------------------------- | ---------------- | ------------------------ | ------------------------ | ---------------------- | --------------------- | ------------ | -------------- | ------------------------------------------------- | ------------------------------------ |
| 1 | Reload | New reload task 1 | task-1 | 1 | 1440 | 0 | 4716f284-7790-45c3-a0a5-154c898766a0 | 0 | 1 | | | | | | 0:00:00 | | Butler 5.0 demo | TaskPriority=High | | | | | | | | | | | | | | | | | | | | | | |
| 1 | | | | | | | | | | | | | | | | | | | 1 | Composite | When HR metrics done | 1 | | | LAB\\goran | | | | | | | | 0 | 360 | 0 | 0 | | | | |
| 1 | | | | | | | | | | | | | | | | | | | 1 | | | | | | | | | | | | | | | | | | 1 | TaskSuccessful | Manually triggered reload of HR metrics 2015-2020 | 6a42a7d0-bee9-4609-b340-8c8c50b3c4d9 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
Example 4: Two reload tasks, one triggering the other
Two new tasks are created.
- The first task is triggered by an hourly schema trigger.
- The second is triggered by successful completion of the first one, plus a daily schema trigger.
--- Two reload tasks, one triggering the other --- flowchart LR subgraph New reload task 1 A{{"fa:fa-clock"}} C[Reload] end subgraph New reload task 2 B{{"fa:fa-clock"}} D[Reload] end A -- Hourly --> C -- Success --> D B -- Daily --> D
| Task counter | Task type | Task name | Task id | Task enabled | Task timeout | Task retries | App id | Partial reload | Manually triggered | Ext program path | Ext program parameters | Task status | Task started | Task ended | Task duration | Task executedon node | Tags | Custom properties | Event counter | Event type | Event name | Event enabled | Event created date | Event modified date | Event modified by | Schema increment option | Schema increment description | Daylight savings time | Schema start | Schema expiration | Schema filter description | Schema time zone | Time contstraint seconds | Time contstraint minutes | Time contstraint hours | Time contstraint days | Rule counter | Rule state | Rule task name | Rule task id |
| ------------ | --------- | ----------------- | ------- | ------------ | ------------ | ------------ | ------------------------------------ | -------------- | ------------------ | ---------------- | ---------------------- | ----------- | ------------ | ---------- | ------------- | -------------------- | --------------- | ----------------- | ------------- | ---------- | ----------------------- | ------------- | ------------------ | ------------------- | ----------------- | ----------------------- | ---------------------------- | ------------------------- | ----------------------- | ----------------------- | ------------------------- | ---------------- | ------------------------ | ------------------------ | ---------------------- | --------------------- | ------------ | -------------- | -------------- | ------------ |
| 1 | Reload | New reload task 1 | task-1 | 1 | 1440 | 0 | 4716f284-7790-45c3-a0a5-154c898766a0 | 0 | 1 | | | | | | 0:00:00 | | Butler 5.0 demo | TaskPriority=High | | | | | | | | | | | | | | | | | | | | | | |
| 1 | | | | | | | | | | | | | | | | | | | 1 | Schema | Hourly | | | | LAB\\goran | hourly | 30 0 0 0 | ObserveDaylightSavingTime | 2021-12-08T14:21:49.000 | 9999-01-01T00:00:00.000 | * * - * * * * * | Europe/Paris | | | | | | | | |
| 2 | Reload | New reload task 2 | task-2 | 1 | 1440 | 0 | df013a07-d219-46c8-8d32-09b87fd87553 | 0 | 1 | | | | | | 0:00:00 | | Butler 5.0 demo | TaskPriority=High | | | | | | | | | | | | | | | | | | | | | | |
| 2 | | | | | | | | | | | | | | | | | | | 1 | Schema | Daily | 1 | | | LAB\\goran | daily | 0 0 1 0 | ObserveDaylightSavingTime | 2022-10-17T11:37:26.000 | 9999-01-01T00:00:00.000 | * * - * * * * * | Europe/Paris | | | | | | | | |
| 2 | | | | | | | | | | | | | | | | | | | 1 | Composite | When reload task 1 done | 1 | | | LAB\\goran | | | | | | | | 0 | 360 | 0 | 0 | | | | |
| 2 | | | | | | | | | | | | | | | | | | | 1 | | | | | | | | | | | | | | | | | | 1 | TaskSuccessful | | task-1 |
Example 5: External program task, triggered by schema event
--- External program task, triggered by schema event --- flowchart LR subgraph New external program task 1 A{{"fa:fa-clock"}} B[Ext. program] end A -- Daily --> B
| Task counter | Task type | Task name | Task id | Task enabled | Task timeout | Task retries | App id | Partial reload | Manually triggered | Ext program path | Ext program parameters | Task status | Task started | Task ended | Task duration | Task executedon node | Tags | Custom properties | Event counter | Event type | Event name | Event enabled | Event created date | Event modified date | Event modified by | Schema increment option | Schema increment description | Daylight savings time | Schema start | Schema expiration | Schema filter description | Schema time zone | Time contstraint seconds | Time contstraint minutes | Time contstraint hours | Time contstraint days | Rule counter | Rule state | Rule task name | Rule task id |
| ------------ | ---------------- | --------------------------- | ------- | ------------ | ------------ | ------------ | ------ | -------------- | ------------------ | -------------------------------------------------------------- | ------------------------------------------------------ | ----------- | ------------ | ---------- | ------------- | -------------------- | ---- | ------------------------------------- | ------------- | ---------- | ---------- | ------------- | ------------------ | ------------------- | ----------------- | ----------------------- | ---------------------------- | ------------------------- | ----------------------- | ----------------------- | ------------------------- | ---------------- | ------------------------ | ------------------------ | ---------------------- | --------------------- | ------------ | ---------- | -------------- | ------------ |
| 1 | External program | New external program task 1 | task-1 | 1 | 1440 | 3 | | | | C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe | -File \\\\pro2-win1\\c$\\tools\\script\\ext_task_1.ps1 | | | | 0:00:00 | | api1 | Department=Finance / Department=Sales | | | | | | | | | | | | | | | | | | | | | | |
| 1 | | | | | | | | | | | | | | | | | | | 1 | Schema | Daily | | | | LAB\\goran | daily | 0 0 1 0 | ObserveDaylightSavingTime | 2020-05-31T20:34:18.000 | 9999-01-01T00:00:00.000 | * * - * * * * * | Europe/Paris | | | | | | | | |
Example 6: External program task, triggered by existing tasks
--- External program task, triggered by existing tasks --- flowchart LR A["Existing reload task 9b8bd484-9cd9-4c83-b8e5-019176364b82"] B["Existing external program task d5f0b635-1feb-465e-a9c8-33f6e74b1248"] subgraph New external program task 1 C[Ext. program] C_comptrigger[["Composite trigger"]] style C_comptrigger fill:#bbf,stroke-width:2px,stroke-dasharray: 5 5 C_comptrigger --> C end A -- Success --> C_comptrigger B -- Fail --> C_comptrigger
| Task counter | Task type | Task name | Task id | Task enabled | Task timeout | Task retries | App id | Partial reload | Manually triggered | Ext program path | Ext program parameters | Task status | Task started | Task ended | Task duration | Task executedon node | Tags | Custom properties | Event counter | Event type | Event name | Event enabled | Event created date | Event modified date | Event modified by | Schema increment option | Schema increment description | Daylight savings time | Schema start | Schema expiration | Schema filter description | Schema time zone | Time contstraint seconds | Time contstraint minutes | Time contstraint hours | Time contstraint days | Rule counter | Rule state | Rule task name | Rule task id |
| ------------ | ---------------- | --------------------------- | ------- | ------------ | ------------ | ------------ | ------ | -------------- | ------------------ | -------------------------------------------------------------- | ------------------------------------------------------ | ----------- | ------------ | ---------- | ------------- | -------------------- | ---- | ------------------------------------- | ------------- | ---------- | ------------------------------------ | ------------- | ------------------ | ------------------- | ----------------- | ----------------------- | ---------------------------- | --------------------- | ------------ | ----------------- | ------------------------- | ---------------- | ------------------------ | ------------------------ | ---------------------- | --------------------- | ------------ | -------------- | -------------- | ------------------------------------ |
| 1 | External program | New external program task 1 | task-1 | 1 | 1440 | 3 | | | | C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe | -File \\\\pro2-win1\\c$\\tools\\script\\ext_task_1.ps1 | | | | 0:00:00 | | api1 | Department=Finance / Department=Sales | | | | | | | | | | | | | | | | | | | | | | |
| 1 | | | | | | | | | | | | | | | | | | | 2 | Composite | Trigger when upstream tasks are done | | | | LAB\\goran | | | | | | | | 0 | 360 | 0 | 0 | | | | |
| 1 | | | | | | | | | | | | | | | | | | | 2 | | | | | | | | | | | | | | | | | | 1 | TaskSuccessful | | 9b8bd484-9cd9-4c83-b8e5-019176364b82 |
| 1 | | | | | | | | | | | | | | | | | | | 2 | | | | | | | | | | | | | | | | | | 2 | TaskFail | | d5f0b635-1feb-465e-a9c8-33f6e74b1248 |
Example 7: Complex example with multiple tasks and triggers
Note that some composite trigger rules (the ones with UUIDs in them) refer to tasks that already exist in Sense, and some (e.g. “task-2”) refer to tasks that are defined in the task definition file itself.
The flowchart becomes quite complex for this example:
--- Complex example with multiple tasks and triggers --- flowchart TD subgraph New external program task 1 6751615b-4627-4d86-bd7e-d6bc1f4a81be["Ext. program"] end subgraph Ext program task chaining 1 d30b7f54-1b24-4eb0-befc-e97ad7f0daa6["Ext. program"] end subgraph Ext task 1 6097da0e-50d8-4c0f-b442-49739b556180["Ext. program"] A{{"fa:fa-clock"}} -- Weekly --> 6097da0e-50d8-4c0f-b442-49739b556180 6097da0e-50d8-4c0f-b442-49739b556180_ct_1[["Composite trigger"]] style 6097da0e-50d8-4c0f-b442-49739b556180_ct_1 fill:#bbf,stroke-width:2px,stroke-dasharray: 5 5 6097da0e-50d8-4c0f-b442-49739b556180_ct_1 --> 6097da0e-50d8-4c0f-b442-49739b556180 end subgraph Ext task 2 78db1ac3-0035-4b5c-bf35-14e1cbd2b0bf["Ext. program"] 78db1ac3-0035-4b5c-bf35-14e1cbd2b0bf_ct_1[["Composite trigger"]] style 78db1ac3-0035-4b5c-bf35-14e1cbd2b0bf_ct_1 fill:#bbf,stroke-width:2px,stroke-dasharray: 5 5 B{{"fa:fa-clock"}} -- Weekly --> 78db1ac3-0035-4b5c-bf35-14e1cbd2b0bf 78db1ac3-0035-4b5c-bf35-14e1cbd2b0bf_ct_1 --> 78db1ac3-0035-4b5c-bf35-14e1cbd2b0bf end subgraph "[ctrl-q task chain 3] Ext program task chaining" 166e2d6a-89c4-4021-a04d-01c8c20f1cfa["Ext. program"] 166e2d6a-89c4-4021-a04d-01c8c20f1cfa_ct_1[["Composite trigger"]] style 166e2d6a-89c4-4021-a04d-01c8c20f1cfa_ct_1 fill:#bbf,stroke-width:2px,stroke-dasharray: 5 5 166e2d6a-89c4-4021-a04d-01c8c20f1cfa_ct_1 --> 166e2d6a-89c4-4021-a04d-01c8c20f1cfa end subgraph "[ctrl-q task chain 4] Ext program task chaining" afc250bc-28c3-49a2-8d63-80966749abe3["Ext. program"] afc250bc-28c3-49a2-8d63-80966749abe3_ct_1[["Composite trigger"]] style afc250bc-28c3-49a2-8d63-80966749abe3_ct_1 fill:#bbf,stroke-width:2px,stroke-dasharray: 5 5 afc250bc-28c3-49a2-8d63-80966749abe3_ct_1 --> afc250bc-28c3-49a2-8d63-80966749abe3 end subgraph "Butler test failing reloads 1 task" 3920e8d7-8109-446f-8bb3-5464df03facc["Reload"] end subgraph "Reload task of Lab 1_1" 30c6a76a-ece6-4a4a-b476-56155a5a85b8["Reload"] 30c6a76a-ece6-4a4a-b476-56155a5a85b8_schema_1{{"fa:fa-clock"}} -- Daily --> 30c6a76a-ece6-4a4a-b476-56155a5a85b8 30c6a76a-ece6-4a4a-b476-56155a5a85b8_schema_2{{"fa:fa-clock"}} -- Custom cron --> 30c6a76a-ece6-4a4a-b476-56155a5a85b8 30c6a76a-ece6-4a4a-b476-56155a5a85b8_ct_1[["Composite trigger"]] style 30c6a76a-ece6-4a4a-b476-56155a5a85b8_ct_1 fill:#bbf,stroke-width:2px,stroke-dasharray: 5 5 30c6a76a-ece6-4a4a-b476-56155a5a85b8_ct_1 --> 30c6a76a-ece6-4a4a-b476-56155a5a85b8 end subgraph "[ctrl-q task chain 1] Reload task of Ctrl-Q reload chain app 1-1" ece63341-7d57-4093-b972-fd130c2290e7["Reload"] end subgraph "[ctrl-q task chain 2] Reload task of Ctrl-Q reload chain app 2-1" ad188c0e-f196-449d-9662-f33998f56b78["Reload"] ad188c0e-f196-449d-9662-f33998f56b78_ct_1[["Composite trigger"]] style ad188c0e-f196-449d-9662-f33998f56b78_ct_1 fill:#bbf,stroke-width:2px,stroke-dasharray: 5 5 ad188c0e-f196-449d-9662-f33998f56b78_ct_1 --> ad188c0e-f196-449d-9662-f33998f56b78 end subgraph "[ctrl-q task chain 5.1] Reload task of Ctrl-Q reload chain app 3-1" 2e549e47-13e7-4f02-91c2-34f7bf3d57eb["Reload"] 2e549e47-13e7-4f02-91c2-34f7bf3d57eb_ct_1[["Composite trigger"]] style 2e549e47-13e7-4f02-91c2-34f7bf3d57eb_ct_1 fill:#bbf,stroke-width:2px,stroke-dasharray: 5 5 2e549e47-13e7-4f02-91c2-34f7bf3d57eb_ct_1 --> 2e549e47-13e7-4f02-91c2-34f7bf3d57eb end subgraph "[ctrl-q task chain 5.2] Reload task of Ctrl-Q reload chain app 3-2" f402f48a-8590-4fc1-bf5e-ae30b4d9f2eb["Reload"] f402f48a-8590-4fc1-bf5e-ae30b4d9f2eb_ct_1[["Composite trigger"]] style f402f48a-8590-4fc1-bf5e-ae30b4d9f2eb_ct_1 fill:#bbf,stroke-width:2px,stroke-dasharray: 5 5 f402f48a-8590-4fc1-bf5e-ae30b4d9f2eb_ct_1 --> f402f48a-8590-4fc1-bf5e-ae30b4d9f2eb end subgraph "[ctrl-q task chain 6.1] Reload task of Ctrl-Q reload chain app 1-1" c7f83305-6fd5-4926-bc1f-abfc05d0729c["Reload"] c7f83305-6fd5-4926-bc1f-abfc05d0729c_ct_1[["Composite trigger"]] style c7f83305-6fd5-4926-bc1f-abfc05d0729c_ct_1 fill:#bbf,stroke-width:2px,stroke-dasharray: 5 5 c7f83305-6fd5-4926-bc1f-abfc05d0729c_ct_1 --> c7f83305-6fd5-4926-bc1f-abfc05d0729c end subgraph "[ctrl-q task chain 7.1] Reload task of Ctrl-Q reload chain app 1-1" b9532a39-a69f-4857-acc1-4762a90fd784["Reload"] b9532a39-a69f-4857-acc1-4762a90fd784_ct_1[["Composite trigger"]] style b9532a39-a69f-4857-acc1-4762a90fd784_ct_1 fill:#bbf,stroke-width:2px,stroke-dasharray: 5 5 b9532a39-a69f-4857-acc1-4762a90fd784_ct_1 --> b9532a39-a69f-4857-acc1-4762a90fd784 end subgraph "[ctrl-q task chain 8.1] Reload task of Ctrl-Q reload chain app 1-1" ad6114d8-9b79-4342-8d2d-b9565506ec1a["Reload"] ad6114d8-9b79-4342-8d2d-b9565506ec1a_ct_1[["Composite trigger"]] style ad6114d8-9b79-4342-8d2d-b9565506ec1a_ct_1 fill:#bbf,stroke-width:2px,stroke-dasharray: 5 5 ad6114d8-9b79-4342-8d2d-b9565506ec1a_ct_1 --> ad6114d8-9b79-4342-8d2d-b9565506ec1a end subgraph "[ctrl-q task chain 9.1] Reload task of Ctrl-Q reload chain app 1-1" 5b1cdbe5-58a9-4743-ba3f-68a5dc772391["Reload"] 5b1cdbe5-58a9-4743-ba3f-68a5dc772391_ct_1[["Composite trigger"]] style 5b1cdbe5-58a9-4743-ba3f-68a5dc772391_ct_1 fill:#bbf,stroke-width:2px,stroke-dasharray: 5 5 5b1cdbe5-58a9-4743-ba3f-68a5dc772391_ct_1 --> 5b1cdbe5-58a9-4743-ba3f-68a5dc772391 end subgraph "[ctrl-q task chain 10.1] Reload task of Ctrl-Q reload chain app 1-1" 08e2cbca-0687-4c96-8914-dbb0e6515b1f["Reload"] 08e2cbca-0687-4c96-8914-dbb0e6515b1f_ct_1[["Composite trigger"]] style 08e2cbca-0687-4c96-8914-dbb0e6515b1f_ct_1 fill:#bbf,stroke-width:2px,stroke-dasharray: 5 5 08e2cbca-0687-4c96-8914-dbb0e6515b1f_ct_1 --> 08e2cbca-0687-4c96-8914-dbb0e6515b1f end subgraph "[ctrl-q task chain 11.1] Reload task of Ctrl-Q reload chain app 1-1" 63206b08-516c-4e43-8fc9-2e47581d0b1a["Reload"] 63206b08-516c-4e43-8fc9-2e47581d0b1a_ct_1[["Composite trigger"]] style 63206b08-516c-4e43-8fc9-2e47581d0b1a_ct_1 fill:#bbf,stroke-width:2px,stroke-dasharray: 5 5 63206b08-516c-4e43-8fc9-2e47581d0b1a_ct_1 --> 63206b08-516c-4e43-8fc9-2e47581d0b1a end 77f11a41-af3a-4bca-bf67-725be92a88f6[Existing task 77f11a41-af3a-4bca-bf67-725be92a88f6] bea1f18f-b476-4d8e-b9d4-640fe62fbe8a[Existing task bea1f18f-b476-4d8e-b9d4-640fe62fbe8a] 8b4fe424-d90c-493f-a61d-0ce91cd485c9[Existing task 8b4fe424-d90c-493f-a61d-0ce91cd485c9] 30f8a2e9-f0d3-482e-af58-aed6b77d3dd5[Existing task 30f8a2e9-f0d3-482e-af58-aed6b77d3dd5] 77f11a41-af3a-4bca-bf67-725be92a88f6 -- Success --> 6097da0e-50d8-4c0f-b442-49739b556180_ct_1 bea1f18f-b476-4d8e-b9d4-640fe62fbe8a -- Fail --> 6097da0e-50d8-4c0f-b442-49739b556180_ct_1 8b4fe424-d90c-493f-a61d-0ce91cd485c9 -- Success --> 6097da0e-50d8-4c0f-b442-49739b556180_ct_1 30f8a2e9-f0d3-482e-af58-aed6b77d3dd5 -- Success ---> 6097da0e-50d8-4c0f-b442-49739b556180_ct_1 afc250bc-28c3-49a2-8d63-80966749abe3 -- Success ---> 6097da0e-50d8-4c0f-b442-49739b556180_ct_1 6097da0e-50d8-4c0f-b442-49739b556180 -- Success --> 78db1ac3-0035-4b5c-bf35-14e1cbd2b0bf_ct_1 ad188c0e-f196-449d-9662-f33998f56b78 -- Success --> 166e2d6a-89c4-4021-a04d-01c8c20f1cfa_ct_1 166e2d6a-89c4-4021-a04d-01c8c20f1cfa -- Success--> afc250bc-28c3-49a2-8d63-80966749abe3_ct_1 77f11a41-af3a-4bca-bf67-725be92a88f6 -- Success ---> 30c6a76a-ece6-4a4a-b476-56155a5a85b8_ct_1 bea1f18f-b476-4d8e-b9d4-640fe62fbe8a -- Fail ---> 30c6a76a-ece6-4a4a-b476-56155a5a85b8_ct_1 8b4fe424-d90c-493f-a61d-0ce91cd485c9 -- Success ---> 30c6a76a-ece6-4a4a-b476-56155a5a85b8_ct_1 30f8a2e9-f0d3-482e-af58-aed6b77d3dd5 -- Success ---> 30c6a76a-ece6-4a4a-b476-56155a5a85b8_ct_1 afc250bc-28c3-49a2-8d63-80966749abe3 -- Success ---> 30c6a76a-ece6-4a4a-b476-56155a5a85b8_ct_1 5b1cdbe5-58a9-4743-ba3f-68a5dc772391 -- Success --> 08e2cbca-0687-4c96-8914-dbb0e6515b1f_ct_1 08e2cbca-0687-4c96-8914-dbb0e6515b1f -- Success --> 63206b08-516c-4e43-8fc9-2e47581d0b1a_ct_1 ece63341-7d57-4093-b972-fd130c2290e7 -- Success --> ad188c0e-f196-449d-9662-f33998f56b78_ct_1 afc250bc-28c3-49a2-8d63-80966749abe3 -- Success --> 2e549e47-13e7-4f02-91c2-34f7bf3d57eb_ct_1 afc250bc-28c3-49a2-8d63-80966749abe3 -- Success --> f402f48a-8590-4fc1-bf5e-ae30b4d9f2eb_ct_1 f402f48a-8590-4fc1-bf5e-ae30b4d9f2eb -- Success --> c7f83305-6fd5-4926-bc1f-abfc05d0729c_ct_1 c7f83305-6fd5-4926-bc1f-abfc05d0729c -- Success --> b9532a39-a69f-4857-acc1-4762a90fd784_ct_1 b9532a39-a69f-4857-acc1-4762a90fd784 -- Success --> ad6114d8-9b79-4342-8d2d-b9565506ec1a_ct_1 ad6114d8-9b79-4342-8d2d-b9565506ec1a -- Success --> 5b1cdbe5-58a9-4743-ba3f-68a5dc772391_ct_1
π‘ Tip
The “Rule task name” field for composite trigger rules can contain any information.
It is not used when determining which upstream task the task should be triggered by, but it is convenient to have a human-readable name there.
| Task counter | Task type | Task name | Task id | Task enabled | Task timeout | Task retries | App id | Partial reload | Manually triggered | Ext program path | Ext program parameters | Task status | Task started | Task ended | Task duration | Task executedon node | Tags | Custom properties | Event counter | Event type | Event name | Event enabled | Event created date | Event modified date | Event modified by | Schema increment option | Schema increment description | Daylight savings time | Schema start | Schema expiration | Schema filter description | Schema time zone | Time contstraint seconds | Time contstraint minutes | Time contstraint hours | Time contstraint days | Rule counter | Rule state | Rule task name | Rule task id |
| ------------ | ---------------- | ------------------------------------------------------------------- | -------------- | ------------ | ------------ | ------------ | ------------------------------------ | -------------- | ------------------ | -------------------------------------------------------------- | ------------------------------------------------------ | -------------- | ------------------------ | ------------------------ | ------------- | ------------------------------- | ------------------------ | ---------------------------------------------------------------------- | ------------- | ---------- | -------------------------------------- | ------------- | -------------------- | ------------------- | ----------------- | ----------------------- | ---------------------------- | ------------------------- | ----------------------- | ----------------------- | ------------------------- | ---------------- | ------------------------ | ------------------------ | ---------------------- | --------------------- | ------------ | -------------- | ------------------------------------------------------------------- | ------------------------------------ |
| 1 | External program | New external program task 1 | task-1 | 1 | 1440 | 3 | | | | C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe | -File \\\\pro2-win1\\c$\\tools\\script\\ext_task_1.ps1 | | | | 0:00:00 | | api1 | Department=Finance / Department=Sales | | | | | | | | | | | | | | | | | | | | | | |
| 2 | External program | Ext program task chaining 1 | task-2 | 1 | 15 | 0 | | | | powershell.exe | -File \\\\pro2-win1\\c$\\tools\\script\\ext_task_1.ps1 | | 2023-09-26T05:58:55.590Z | 2023-09-26T06:23:38.346Z | 0:24:42 | pro2-win1.lab.ptarmiganlabs.net | | | | | | | | | | | | | | | | | | | | | | | | |
| 3 | External program | Ext task 1 | task-3 | 1 | 1440 | 3 | | | | C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe | -File \\\\pro2-win1\\c$\\tools\\script\\ext_task_1.ps1 | | | | 0:00:00 | | api1 | Department=Finance / Department=Sales | | | | | | | | | | | | | | | | | | | | | | |
| 3 | | | | | | | | | | | | | | | | | | | 1 | Schema | Weekly | | | | | weekly | 0 0 1 0 | ObserveDaylightSavingTime | 2022-10-19T10:19:30.000 | 9999-01-01T00:00:00.000 | * * - 3 1 * * * | Europe/Paris | | | | | | | | |
| 3 | | | | | | | | | | | | | | | | | | | 2 | Composite | 2 Trigger when upstream tasks are done | | | | | | | | | | | | 0 | 360 | 0 | 0 | | | | |
| 3 | | | | | | | | | | | | | | | | | | | 2 | | | | | | | | | | | | | | | | | | 1 | TaskSuccessful | Manually triggered reload of Butler 7 Slack debug | 77f11a41-af3a-4bca-bf67-725be92a88f6 |
| 3 | | | | | | | | | | | | | | | | | | | 2 | | | | | | | | | | | | | | | | | | 2 | TaskFail | Manually triggered reload of App1 π | bea1f18f-b476-4d8e-b9d4-640fe62fbe8a |
| 3 | | | | | | | | | | | | | | | | | | | 2 | | | | | | | | | | | | | | | | | | 3 | TaskSuccessful | Reload task of EV chargers | 8b4fe424-d90c-493f-a61d-0ce91cd485c9 |
| 3 | | | | | | | | | | | | | | | | | | | 2 | | | | | | | | | | | | | | | | | | 4 | TaskSuccessful | Reload task of Residential energy analysis | 30f8a2e9-f0d3-482e-af58-aed6b77d3dd5 |
| 3 | | | | | | | | | | | | | | | | | | | 2 | | | | | | | | | | | | | | | | | | 5 | TaskSuccessful | [ctrl-q task chain 4] Ext program task chaining | special-task-1 |
| 4 | External program | Ext task 2 | task-4 | 1 | 1440 | 3 | | | | C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe | -File \\\\pro2-win1\\c$\\tools\\script\\ext_task_1.ps1 | | | | 0:00:00 | | | | | | | | | | | | | | | | | | | | | | | | | |
| 4 | | | | | | | | | | | | | | | | | | | 1 | Schema | Weekly | | | | | weekly | 0 0 1 0 | ObserveDaylightSavingTime | 2022-10-19T10:19:30.000 | 9999-01-01T00:00:00.000 | * * - 3 1 * * * | Europe/Paris | | | | | | | | |
| 4 | | | | | | | | | | | | | | | | | | | 2 | Composite | 2 Trigger when upstream tasks are done | | | | | | | | | | | | 0 | 360 | 0 | 0 | | | | |
| 4 | | | | | | | | | | | | | | | | | | | 2 | | | | | | | | | | | | | | | | | | 1 | TaskSuccessful | Ext task 1 | task-3 |
| 5 | External program | [ctrl-q task chain 3] Ext program task chaining | task-5 | 1 | 1440 | 0 | | | | powershell.exe | -File \\\\pro2-win1\\c$\\tools\\script\\ext_task_1.ps1 | | | | 0:00:00 | | | | | | | | | | | | | | | | | | | | | | | | | |
| 5 | | | | | | | | | | | | | | | | | | | 1 | Composite | When [ctrl-q 2] done | 1 | | | | | | | | | | | 0 | 360 | 0 | 0 | | | | |
| 5 | | | | | | | | | | | | | | | | | | | 1 | | | | | | | | | | | | | | | | | | 1 | TaskSuccessful | [ctrl-q task chain 2] Reload task of Ctrl-Q reload chain app 2-1 | task-9 |
| 6 | External program | [ctrl-q task chain 4] Ext program task chaining | special-task-1 | 1 | 1440 | 0 | | | | powershell.exe | -File \\\\pro2-win1\\c$\\tools\\script\\ext_task_1.ps1 | | | | 0:00:00 | | | | | | | | | | | | | | | | | | | | | | | | | |
| 6 | | | | | | | | | | | | | | | | | | | 1 | Composite | When [ctrl-q task chain 3] done | 1 | | | | | | | | | | | 0 | 360 | 0 | 0 | | | | |
| 6 | | | | | | | | | | | | | | | | | | | 1 | | | | | | | | | | | | | | | | | | 1 | TaskSuccessful | [ctrl-q task chain 3] Ext program task chaining | task-5 |
| 7 | Reload | Butler test failing reloads 1 task | | 1 | 1440 | 0 | 4788dc51-2bf6-45f0-a4ad-8bd8d40e1d3f | | 1 | | | | 2023-11-09T08:43:06.081Z | 2023-11-09T08:43:33.079Z | 0:00:26 | pro2-win1.lab.ptarmiganlabs.net | startTask1 / Ctrl-Q demo | Butler_AbortedAlertEnableEmail=Yes / Butler_FailedAlertEnableEmail=Yes | | | | | | | | | | | | | | | | | | | | | | |
| 8 | Reload | Reload task of Lab 1_1 | | 1 | 1440 | 3 | 4716f284-7790-45c3-a0a5-154c898766a0 | | | | | | | | 0:00:00 | | api1 | Department=Finance / Department=Sales | | | | | | | | | | | | | | | | | | | | | | |
| 8 | | | | | | | | | | | | | | | | | | | 1 | Schema | Daily | 1 | | | | daily | 0 0 1 0 | ObserveDaylightSavingTime | 2022-10-17T11:37:26.000 | 9999-01-01T00:00:00.000 | * * - * * * * * | Europe/Paris | | | | | | | | |
| 8 | | | | | | | | | | | | | | | | | | | 2 | Schema | Custom cron | | | | | custom | 1 2 3 4 | ObserveDaylightSavingTime | 2022-10-17T11:37:29.000 | 9999-01-01T00:00:00.000 | * * - * * * * * | Europe/Paris | | | | | | | | |
| 8 | | | | | | | | | | | | | | | | | | | 3 | Composite | Trigger when upstream tasks are done | | | | | | | | | | | | 0 | 360 | 0 | 0 | | | | |
| 8 | | | | | | | | | | | | | | | | | | | 3 | | | | | | | | | | | | | | | | | | 1 | TaskSuccessful | Manually triggered reload of Butler 7 Slack debug | 77f11a41-af3a-4bca-bf67-725be92a88f6 |
| 8 | | | | | | | | | | | | | | | | | | | 3 | | | | | | | | | | | | | | | | | | 2 | TaskFail | Manually triggered reload of App1 π | bea1f18f-b476-4d8e-b9d4-640fe62fbe8a |
| 8 | | | | | | | | | | | | | | | | | | | 3 | | | | | | | | | | | | | | | | | | 3 | TaskSuccessful | Reload task of EV chargers | 8b4fe424-d90c-493f-a61d-0ce91cd485c9 |
| 8 | | | | | | | | | | | | | | | | | | | 3 | | | | | | | | | | | | | | | | | | 4 | TaskSuccessful | Reload task of Residential energy analysis | 30f8a2e9-f0d3-482e-af58-aed6b77d3dd5 |
| 8 | | | | | | | | | | | | | | | | | | | 3 | | | | | | | | | | | | | | | | | | 5 | TaskSuccessful | [ctrl-q task chain 4] Ext program task chaining | special-task-1 |
| 9 | Reload | [ctrl-q task chain 10.1] Reload task of Ctrl-Q reload chain app 1-1 | task-6 | 1 | 1440 | 0 | 3d711d07-c133-48f7-ab26-8350c5b8fe2e | | | | | | | | 0:00:00 | | | | | | | | | | | | | | | | | | | | | | | | | |
| 9 | | | | | | | | | | | | | | | | | | | 1 | Composite | ... | 1 | | | | | | | | | | | 0 | 360 | 0 | 0 | | | | |
| 9 | | | | | | | | | | | | | | | | | | | 1 | | | | | | | | | | | | | | | | | | 1 | TaskSuccessful | [ctrl-q task chain 9.1] Reload task of Ctrl-Q reload chain app 1-1 | task-15 |
| 10 | Reload | [ctrl-q task chain 11.1] Reload task of Ctrl-Q reload chain app 1-1 | task-7 | 1 | 1440 | 0 | 3d711d07-c133-48f7-ab26-8350c5b8fe2e | | | | | | | | 0:00:00 | | | | | | | | | | | | | | | | | | | | | | | | | |
| 10 | | | | | | | | | | | | | | | | | | | 1 | Composite | ... | 1 | | | | | | | | | | | 0 | 360 | 0 | 0 | | | | |
| 10 | | | | | | | | | | | | | | | | | | | 1 | | | | | | | | | | | | | | | | | | 1 | TaskSuccessful | [ctrl-q task chain 10.1] Reload task of Ctrl-Q reload chain app 1-1 | task-6 |
| 11 | Reload | [ctrl-q task chain 1] Reload task of Ctrl-Q reload chain app 1-1 | task-8 | 1 | 1440 | 0 | 3d711d07-c133-48f7-ab26-8350c5b8fe2e | | | | | | | | 0:00:00 | | | | | | | | | | | | | | | | | | | | | | | | | |
| 12 | Reload | [ctrl-q task chain 2] Reload task of Ctrl-Q reload chain app 2-1 | task-9 | 1 | 1440 | 0 | 766c96a8-d8ba-47e6-b4a3-e1935bf12d99 | | | | | | | | 0:00:00 | | | | | | | | | | | | | | | | | | | | | | | | | |
| 12 | | | | | | | | | | | | | | | | | | | 1 | Composite | When Ctrl-Q [1] done | 1 | | | | | | | | | | | 0 | 360 | 0 | 0 | | | | |
| 12 | | | | | | | | | | | | | | | | | | | 1 | | | | | | | | | | | | | | | | | | 1 | TaskSuccessful | [ctrl-q task chain 1] Reload task of Ctrl-Q reload chain app 1-1 | task-8 |
| 13 | Reload | [ctrl-q task chain 5.1] Reload task of Ctrl-Q reload chain app 3-1 | task-10 | 1 | 1440 | 0 | aea0ac54-b377-4325-a1f7-e32a5616ff95 | | | | | | | | 0:00:00 | | | | | | | | | | | | | | | | | | | | | | | | | |
| 13 | | | | | | | | | | | | | | | | | | | 1 | Composite | When Ctrl-q [4] done | 1 | | | | | | | | | | | 0 | 360 | 0 | 0 | | | | |
| 13 | | | | | | | | | | | | | | | | | | | 1 | | | | | | | | | | | | | | | | | | 1 | TaskSuccessful | [ctrl-q task chain 4] Ext program task chaining | special-task-1 |
| 14 | Reload | [ctrl-q task chain 5.2] Reload task of Ctrl-Q reload chain app 3-2 | task-11 | 1 | 1440 | 0 | 972da501-93f7-470d-b8ba-84ef2cfebdc9 | | | | | | | | 0:00:00 | | | | | | | | | | | | | | | | | | | | | | | | | |
| 14 | | | | | | | | | | | | | | | | | | | 1 | Composite | When Ctrl-q [4] done | 1 | | | | | | | | | | | 0 | 360 | 0 | 0 | | | | |
| 14 | | | | | | | | | | | | | | | | | | | 1 | | | | | | | | | | | | | | | | | | 1 | TaskSuccessful | [ctrl-q task chain 4] Ext program task chaining | special-task-1 |
| 15 | Reload | [ctrl-q task chain 6.1] Reload task of Ctrl-Q reload chain app 1-1 | task-12 | 1 | 1440 | 0 | 3d711d07-c133-48f7-ab26-8350c5b8fe2e | | | | | | | | 0:00:00 | | | | | | | | | | | | | | | | | | | | | | | | | |
| 15 | | | | | | | | | | | | | | | | | | | 1 | Composite | ... | 1 | | | | | | | | | | | 0 | 360 | 0 | 0 | | | | |
| 15 | | | | | | | | | | | | | | | | | | | 1 | | | | | | | | | | | | | | | | | | 1 | TaskSuccessful | [ctrl-q task chain 5.2] Reload task of Ctrl-Q reload chain app 3-2 | task-11 |
| 16 | Reload | [ctrl-q task chain 7.1] Reload task of Ctrl-Q reload chain app 1-1 | task-13 | 1 | 1440 | 0 | 3d711d07-c133-48f7-ab26-8350c5b8fe2e | | | | | | | | 0:00:00 | | | | | | | | | | | | | | | | | | | | | | | | | |
| 16 | | | | | | | | | | | | | | | | | | | 1 | Composite | ... | 1 | | | | | | | | | | | 0 | 360 | 0 | 0 | | | | |
| 16 | | | | | | | | | | | | | | | | | | | 1 | | | | | | | | | | | | | | | | | | 1 | TaskSuccessful | [ctrl-q task chain 6.1] Reload task of Ctrl-Q reload chain app 1-1 | task-12 |
| 17 | Reload | [ctrl-q task chain 8.1] Reload task of Ctrl-Q reload chain app 1-1 | task-14 | 1 | 1440 | 0 | 3d711d07-c133-48f7-ab26-8350c5b8fe2e | | | | | | | | 0:00:00 | | | | | | | | | | | | | | | | | | | | | | | | | |
| 17 | | | | | | | | | | | | | | | | | | | 1 | Composite | ... | 1 | | | | | | | | | | | 0 | 360 | 0 | 0 | | | | |
| 17 | | | | | | | | | | | | | | | | | | | 1 | | | | | | | | | | | | | | | | | | 1 | TaskSuccessful | [ctrl-q task chain 7.1] Reload task of Ctrl-Q reload chain app 1-1 | task-13 |
| 18 | Reload | [ctrl-q task chain 9.1] Reload task of Ctrl-Q reload chain app 1-1 | task-15 | 1 | 1440 | 0 | 3d711d07-c133-48f7-ab26-8350c5b8fe2e | | | | | | | | 0:00:00 | | | | | | | | | | | | | | | | | | | | | | | | | |
| 18 | | | | | | | | | | | | | | | | | | | 1 | Composite | ... | 1 | | | | | | | | | | | 0 | 360 | 0 | 0 | | | | |
| 18 | | | | | | | | | | | | | | | | | | | 1 | | | | | | | | | | | | | | | | | | 1 | TaskSuccessful | [ctrl-q task chain 8.1] Reload task of Ctrl-Q reload chain app 1-1 | task-14 |