Link

App Metadata Analyzer

developmentproduction

Estimated Configuration Time 5 min

Table of Contents


About

The App Metadata Analyzer is now a supported application that is shipped with Qlik Sense as of the September 2019 release.

The App Metadata Analyzer iterates over every application metadata endpoint along with several other QRS calls (Nodes, Apps, Proxies, LB audit), ultimately providing a comprehensive dashboard to analyze your application metadata server-wide.

This allows you to have a holistic view of the makeup of all of your Qlik applications, enabling you to have awareness at a granular level of the types of applications in your organization. This application is 100% native to Qlik without any installer, and is easy to configure within the Qlik Sense Enterprise environment as the app takes advantage of the existing ‘monitor_apps_REST_app’ connection to drive all of the REST calls.

As of the Qlik Sense June 2018 release, a new application level metadata endpoint is available. Data is populated for this endpoint per app post-reload in a June 2018+ environment. You can view this application metadata within your own June 2018+ environment at:

http(s)://<server>/api/v1/apps/<GUID>/data/metadata

where <server> is your Qlik Sense Enterprise server and <GUID> is the application ID. Note that the application does not need to be lifted into RAM for the metadata to be accessed.

Data from this endpoint is derived as part of the app reload process, and therefore does not include any object or expression related metadata.

The data from the endpoint includes:

  • server metadata including number of server cores, total server RAM
  • reload time
  • app RAM base footprint
  • field metadata including cardinality, tags, total count, RAM size
  • table metadata including fields, rows, key fields, RAM size
{
    "reload_meta": {
        "cpu_time_spent_ms": 12696,
        "hardware": {
            "logical_cores": 4,
            "total_memory": 13018009600
        }
    },
    "static_byte_size": 252583030,
    "fields": [
        {
            "name": "$Field",
            "src_tables": [],
            "is_system": true,
            "is_hidden": true,
            "is_semantic": false,
            "distinct_only": false,
            "cardinal": 239,
            "total_count": 244,
            "is_locked": false,
            "always_one_selected": false,
            "is_numeric": false,
            "comment": "",
            "tags": [
                "$ascii",
                "$text",
                "$hidden",
                "$system",
                "$key"
            ],
            "byte_size": 6208
        },
        {
            "name": "$Table",
            "src_tables": [],
            "is_system": true,
            "is_hidden": true,
            "is_semantic": false,
            "distinct_only": false,
            "cardinal": 7,
            "total_count": 244,
            "is_locked": false,
            "always_one_selected": false,
            "is_numeric": false,
            "comment": "",
            "tags": [
                "$ascii",
                "$text",
                "$hidden",
                "$system",
                "$key"
            ],
            "byte_size": 110
        },
        {
            "name": "$Rows",
            "src_tables": [],
            "is_system": true,
            "is_hidden": true,
            "is_semantic": false,
            "distinct_only": false,
            "cardinal": 5,
            "total_count": 7,
            "is_locked": false,
            "always_one_selected": false,
            "is_numeric": true,
            "comment": "",
            "tags": [
                "$numeric",
                "$integer",
                "$hidden",
                "$system"
            ],
            "byte_size": 70
        },
        {
            "name": "$Fields",
            "src_tables": [],
            "is_system": true,
            "is_hidden": true,
            "is_semantic": false,
            "distinct_only": false,
            "cardinal": 5,
            "total_count": 7,
            "is_locked": false,
            "always_one_selected": false,
            "is_numeric": true,
            "comment": "",
            "tags": [
                "$numeric",
                "$integer",
                "$hidden",
                "$system"
            ],
            "byte_size": 59
        },
        {
            "name": "$FieldNo",
            "src_tables": [],
            "is_system": true,
            "is_hidden": true,
            "is_semantic": false,
            "distinct_only": false,
            "cardinal": 114,
            "total_count": 244,
            "is_locked": false,
            "always_one_selected": false,
            "is_numeric": true,
            "comment": "",
            "tags": [
                "$numeric",
                "$integer",
                "$hidden",
                "$system"
            ],
            "byte_size": 1374
        },
        {
            "name": "$Info",
            "src_tables": [],
            "is_system": true,
            "is_hidden": true,
            "is_semantic": false,
            "distinct_only": false,
            "cardinal": 1,
            "total_count": 239,
            "is_locked": false,
            "always_one_selected": false,
            "is_numeric": false,
            "comment": "",
            "tags": [
                "$ascii",
                "$text",
                "$hidden",
                "$system"
            ],
            "byte_size": 6
        },
        {
            "name": "Game URL",
            "src_tables": [
                "Plays"
            ],
            "is_system": false,
            "is_hidden": false,
            "is_semantic": false,
            "distinct_only": false,
            "cardinal": 2298,
            "total_count": 343045,
            "is_locked": false,
            "always_one_selected": false,
            "is_numeric": false,
            "comment": "",
            "tags": [
                "$ascii",
                "$text"
            ],
            "byte_size": 174648
        },
        {
            "name": "GameID",
            "src_tables": [
                "Plays",
                "Link",
                "FinalScores",
                "GamePassStats",
                "PlayerPassStats"
            ],
            "is_system": false,
            "is_hidden": false,
            "is_semantic": false,
            "distinct_only": true,
            "cardinal": 2304,
            "total_count": 0,
            "is_locked": false,
            "always_one_selected": false,
            "is_numeric": true,
            "comment": "",
            "tags": [
                "$numeric",
                "$integer",
                "$key"
            ],
            "byte_size": 46080
        },
        {
            "name": "PlayerPassStats.yacEPA_Drop",
            "src_tables": [
                "PlayerPassStats"
            ],
            "is_system": false,
            "is_hidden": false,
            "is_semantic": false,
            "distinct_only": false,
            "cardinal": 5270,
            "total_count": 5492,
            "is_locked": false,
            "always_one_selected": false,
            "is_numeric": true,
            "comment": "",
            "tags": [
                "$numeric"
            ],
            "byte_size": 171202
        }
    ],
    "has_section_access": false
}


Demo & Analysis

For a demo video and information on the benefits of the application, see: Analyze App Metadata Analyzer.


Where to get it

The application can be found in %ProgramData%\Qlik\Sense\Repository\DefaultApps on the Qlik Sense Enterprise Server and is titled App Metadata Analyzer.qvf. The latest copy of the app can also be pulled from Qlik Community - App Metadata Analyzer (Windows), and is encouraged as it will always be the most recent, whereas the version shipped with the releases could end up being a few months behind. For example, if a bug is fixed in July timeframe, it might not be shipped with the product until the September release. Also, considering that clients are commonly 2 or 3 releases behind, this is best way to keep the app up to date.

Either copy of the app can be implemented on a Qlik Sense Enterprise site which is June 2018 or newer. The Community page will always have the most recent version, so if for example a site is on June 2019, and a bug was fixed in Sept 2019, the application can be downloaded from the Community page and installed on the June 2019 version.


Screenshots

ama_dashboard.png

ama_threshold_analysis.png

ama_app_analysis.png

ama_alerting.png

ama_app_availability.png


Documentation

App Metadata Analyzer - Qlik Help

Tags

#tooling

#apps