Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Appanvil karma designer
summary YOU ASKED, SO WE DELIVERED Dashboard Release November 20242024_11 BackUp & Restore     Download Now     Ken Miller CTO I'm pleased to share with you our latest dashboard release, pi.2024_11 which is available to download now.In this release, we've taken the opportunity to ..... - but that's not all. As always, have a read through the notes in full to learn of all the changes before you upgrade, just to make sure its right for you and your end users. Highlights - Item 1- Item 2- Item 3 TBC 11 New Features TBC 10 Changes TBC 17 Bug Fixes TBC Customer Requests
page{"premium":true,"id":"FMkTud2JrHXMpzIylO0bD","name":"page","children":[{"name":"section","params":{"backgroundSize":"cover","gap":10,"background":"#2d2f4cd4","padding":8,"image":{"value":"https://images.unsplash.com/photo-1491582325207-80d06869fb3d?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwzMzg3MzF8MHwxfHNlYXJjaHwxMnx8bmV3JTIweW9ya3xlbnwwfDB8MXxibGFja19hbmRfd2hpdGV8MTY2MjEyNDU2MA&ixlib=rb-1.2.1&q=80&w=1080","target":"_self","type":"link"}},"children":[{"children":[{"children":[{"name":"text","children":[],"params":{"value":[{"children":[{"type":"paragraph","children":[{"letterSpacing":0,"fontSize":20,"fontWeight":700,"fontFamily":"Poppins, sans-serif","text":"YOU ASKED, SO WE DELIVERED","lineHeight":"10px","color":"#ffffff"}]}],"type":"paragraph"}]},"id":"rNX3qXaG8Q4ewjRCBgZcx"},{"params":{"value":[{"children":[{"type":"paragraph","children":[{"text":"Dashboard Release ","letterSpacing":0,"fontWeight":700,"fontFamily":"Poppins, sans-serif","color":"#ffffff","lineHeight":"90px","fontSize":64}]}],"type":"paragraph"}]},"children":[],"name":"text","id":"nr3C5FnGCNgZlayR21QHV"},{"children":[],"params":{"value":[{"type":"paragraph","children":[{"children":[{"fontFamily":"Poppins, sans-serif","letterSpacing":0,"text":"November 2024","lineHeight":"unset","color":"#ffffff","fontSize":24,"fontWeight":700}],"type":"paragraph"},{"type":"paragraph","children":[{"fontFamily":"Poppins, sans-serif","letterSpacing":0,"lineHeight":"unset","color":"#ffffff","text":"2024_11","fontSize":16}]}]}]},"name":"text","id":"DmpJb_rO3Qj4l9Aj66HdK"},{"name":"divider","params":{"templateId":"solid long","color":"#ef5693","alignment":"start","fontSize":24,"fontColor":{"light":"#000000","dark":"#ffffff"},"height":1,"borderStyle":"solid"},"children":[],"id":"TAZcq3EgP-1KdJ2bsdXuE"},{"name":"button","params":{"templateId":"regular button","label":"BackUp & Restore ","size":"medium","shape":"circular","alignment":"start","states":{"idle":{"colors":{"background":"#1181F8"}},"hover":{"colors":{}}},"link":{"value":"https://panintelligence.atlassian.net/wiki/spaces/PD/pages/376307765/Backup+and+Restore+of+the+Dashboard","target":"_blank","type":"link"}},"children":[],"id":"hfpGR1FJxGFfePSJR4g7T"},{"name":"button","params":{"templateId":"regular button","label":"   Download Now    ","size":"medium","shape":"circular","alignment":"start","states":{"idle":{"colors":{"background":"#1181F8"}},"hover":{"colors":{}}},"link":{"value":"https://panintelligence.atlassian.net/wiki/spaces/PD/pages/1258652085","target":"_blank","type":"link"}},"children":[],"id":"ImDnaOMj9XpCxaDqyPZPk"}],"params":{"verticalAlignment":"center","borderRadius":{"btl":0,"btr":0,"bbl":0,"bbr":0,"all":0,"isIndividualCorners":false},"padding":0,"gap":20},"name":"column","id":"jm4mo6d7GzYx3hUB4l-F0"},{"name":"column","children":[],"params":{"gap":20,"padding":0,"borderRadius":{"isIndividualCorners":false,"all":0,"bbl":0,"bbr":0,"btr":0,"btl":0},"verticalAlignment":"center"},"id":"yBKq_7TPH5d1DV8hFdhLu"},{"children":[],"name":"column","params":{"gap":20,"padding":0,"verticalAlignment":"center","borderRadius":{"bbl":0,"all":0,"btl":0,"bbr":0,"btr":0,"isIndividualCorners":false}},"id":"fH6MHBuk3I0R4it7BRCGP"},{"children":[],"params":{"verticalAlignment":"center","borderRadius":{"btl":0,"bbl":0,"bbr":0,"isIndividualCorners":false,"all":0,"btr":0},"padding":0,"gap":20},"name":"column","id":"_FPGEp6mQPRJJvPIB6VPD"},{"name":"column","params":{"borderRadius":{"bbr":0,"isIndividualCorners":false,"btl":0,"all":0,"btr":0,"bbl":0},"verticalAlignment":"center","gap":20,"padding":0},"children":[],"id":"mJWfn1yDf0yleGusTvyDV"},{"name":"column","params":{"verticalAlignment":"center","gap":20,"borderRadius":{"bbl":0,"btr":0,"bbr":0,"all":0,"btl":0,"isIndividualCorners":false},"padding":0},"children":[],"id":"3WBEHbIwEeCHcL3oWU6bg"}],"name":"row","params":{"gap":100,"padding":10,"minHeight":200,"borderRadius":0,"layout":[1]},"id":"mbQy4dSTfKlyYK-9k0_SM"}],"id":"AazdKjV1KYMbgvQPAld6a"},{"id":"iPYoTT8UrrUFlXqDlVg1m","params":{"background":"#ffffff","padding":22,"gap":10},"children":[{"id":"HaE0KXsm3rDEJhjTV7Mjx","name":"row","children":[{"id":"VaA-Y-CIV4m2ogQe_Sqmo","name":"column","children":[{"name":"image","params":{"alignment":"center","height":400,"position":"center center","borderRadius":{"all":5,"bbl":0,"bbr":0,"btl":0,"btr":0,"isIndividualCorners":false},"image":{"value":"att1673265190","target":"_blank","type":"attachment"}},"children":[],"id":"T2bXrsdBHviCyZtS2HZvV"}],"params":{"borderRadius":{"all":0,"btl":0,"bbl":0,"btr":0,"bbr":0,"isIndividualCorners":false},"padding":0,"gap":10,"verticalAlignment":"center"}},{"id":"0HIQC86K7mXpaQnPu4lsM","name":"column","children":[{"name":"text","params":{"value":[{"type":"paragraph","children":[{"typetext":"paragraphKen Miller","children":[{"text":"Ken Miller","letterSpacing":0,"fontWeight":600,"fontSize":28,"color":"#2c2c2c"}],"align":"left"}]}]},"children":[],"id":"pHAKnX_bCCwJ0kzgKbWXi"},{"name":"text","params":{"value":[{"type":"paragraph","children":[{"type":"paragraph","children":[{"text":"CTO ","letterSpacing":0,"color":"#969696","fontWeight":300,"fontSize":18}],"align":"left"}]}]},"children":[],"id":"l_VOVkhnKQUZUw-ve2Wf0"},{"name":"text","params":{"value":[{"type":"paragraph","children":[{"type":"paragraph","children":[{"lineHeight":"24px","letterSpacing":0,"text":"I'm pleased to share with you our latest dashboard release, ","fontFamily":"unset","fontSize":16,"color":"#555555"},{"lineHeight":"24px","letterSpacing":0,"fontFamily":"unset","fontSize":16,"fontWeight":700,"text":"pi.2024_11 ","color":"#ef5693"},{"lineHeight":"24px","letterSpacing":0,"fontFamily":"unset","fontSize":16,"text":"which","color":"#555555"},{"lineHeight":"24px","letterSpacing":0,"fontFamily":"unset","fontSize":16,"color":"#000000","text":" "},{"lineHeight":"24px","letterSpacing":0,"fontFamily":"unset","fontSize":16,"text":"is available to download now.","color":"#555555"}],"align":"left"},{"type":"paragraph","align":"left","children":[{"lineHeight":"24px","letterSpacing":0,"fontFamily":"unset","fontSize":16,"color":"#555555","text":""}]},{"type":"paragraph","align":"left","children":[{"lineHeight":"24px","letterSpacing":0,"fontFamily":"unset","fontSize":16,"color":"#555555","text":"In this release, we've taken the opportunity to ..... - but that's not all. "}]},{"type":"paragraph","align":"left","children":[{"lineHeight":"24px","letterSpacing":0,"fontFamily":"unset","fontSize":16,"color":"#555555","text":""}]},{"type":"paragraph","align":"left","children":[{"lineHeight":"24px","letterSpacing":0,"fontFamily":"unset","fontSize":16,"color":"#555555","text":"As always, have a read through the notes in full to learn of all the changes "},{"lineHeight":"24px","letterSpacing":0,"fontFamily":"unset","fontSize":16,"color":"#555555","text":"before","fontWeight":700},{"lineHeight":"24px","letterSpacing":0,"fontFamily":"unset","fontSize":16,"color":"#555555","text":" you upgrade, just to make sure its right for you and your end users."}]}]}]},"children":[],"id":"3yPpnPcG9Ua1cMKx_-oPx"},{"name":"button","params":{"label":"","size":"medium","shape":"circular","alignment":"start","states":{"idle":{"colors":{"background":"#414141","label":"#ffffff"}},"hover":{"colors":{"background":"#000000","label":"#ffffff"}}},"icon":"linkedin-in","link":{"value":"https://www.linkedin.com/in/ken-miller-bb77975/?originalSubdomain=uk","target":"_blank","type":"link"}},"children":[],"id":"YkQiC1UEdSABfAG30yCAE"}],"params":{"borderRadius":{"all":0,"btl":0,"bbl":0,"btr":0,"bbr":0,"isIndividualCorners":false},"padding":0,"gap":10,"verticalAlignment":"center"}},{"id":"zQPv9B1ZIKSgIEL2-TqyZ","name":"column","children":[{"name":"image","params":{"alignment":"center","height":300,"position":"top center","borderRadius":{"all":5,"bbl":0,"bbr":0,"btl":0,"btr":0,"isIndividualCorners":false},"image":{"value":"att1698562062","target":"_blank","type":"attachment"}},"children":[],"id":"HC2565mrpH6QIPWrXG9rq"}],"params":{"borderRadius":{"all":0,"btl":0,"bbl":0,"btr":0,"bbr":0,"isIndividualCorners":false},"padding":0,"gap":10,"verticalAlignment":"center"}},{"id":"uFI2qIqzCdlp4soZcoFKh","name":"column","children":[{"name":"text","params":{"value":[{"type":"paragraph","children":[{"type":"paragraph","children":[{"text":"Highlights","letterSpacing":0,"fontWeight":600,"fontSize":28,"color":"#2c2c2c"}],"align":"left"}]}]},"children":[],"id":"StFraL4oyQVb2F1-fMUdr"},{"name":"text","params":{"value":[{"type":"paragraph","children":[{"type":"paragraph","children":[{"text":"- Item 1","letterSpacing":0,"color":"#969696","fontWeight":300,"fontSize":18}],"align":"left"},{"type":"paragraph","align":"left","children":[{"letterSpacing":0,"color":"#969696","fontWeight":300,"fontSize":18,"text":"- Item 2"}]},{"type":"paragraph","align":"left","children":[{"letterSpacing":0,"color":"#969696","fontWeight":300,"fontSize":18,"text":"- Item 3"}]},{"type":"paragraph","children":[{"type":"paragraph","align":"left","children":[{"letterSpacing":0,"color":"#969696","fontWeight":300,"fontSize":18,"text":""}]}]},{"type":"paragraph","align":"left","children":[{"letterSpacing":0,"color":"#969696","fontWeight":300,"fontSize":18,"text":""}]},{"type":"paragraph","align":"left","children":[{"letterSpacing":0,"color":"#969696","fontWeight":300,"fontSize":18,"text":""}]},{"type":"paragraph","align":"left","children":[{"letterSpacing":0,"color":"#969696","fontWeight":300,"fontSize":18,"text":""}]},{"type":"paragraph","align":"left","children":[{"letterSpacing":0,"color":"#969696","fontWeight":300,"fontSize":18,"text":""}]},{"type":"paragraph","align":"left","children":[{"letterSpacing":0,"color":"#969696","fontWeight":300,"fontSize":18,"text":""}]}]}]},"children":[],"id":"lDEf-U_uv7DU3v6czqDnR"},{"name":"spacer","params":{"space":10},"children":[],"id":"iLlGX7VLo5DPMdB15Nsu8"},{"name":"spacer","params":{"space":10},"children":[],"id":"CEa3nvn4dCUclBcV0LcGx"}],"params":{"borderRadius":{"all":0,"btl":0,"bbl":0,"btr":0,"bbr":0,"isIndividualCorners":false},"padding":0,"gap":10,"verticalAlignment":"center"}},{"id":"6IYCbdH0yACltgbuUqUsV","name":"column","children":[],"params":{"borderRadius":{"all":0,"btl":0,"bbl":0,"btr":0,"bbr":0,"isIndividualCorners":false},"padding":0,"gap":10,"verticalAlignment":"center"}},{"id":"TC07p_TJiJqkld5i-FtRF","name":"column","children":[],"params":{"borderRadius":{"all":0,"btl":0,"bbl":0,"btr":0,"bbr":0,"isIndividualCorners":false},"padding":0,"gap":10,"verticalAlignment":"center"}}],"params":{"layout":[1,1,1,1],"gap":35,"minHeight":200,"padding":10,"borderRadius":0,"size":"full"}}],"name":"section"},{"params":{"background":"#393d4f","gap":10,"padding":0},"name":"section","children":[{"children":[{"name":"column","children":[{"name":"card","children":[{"children":[],"params":{"value":[{"children":[{"color":"#6fceb4","fontFamily":"Montserrat, sans-serif","fontWeight":700,"text":"TBC11","fontSize":54}],"type":"paragraph","align":"center"}]},"name":"text","id":"x8h3JtbaitH4rONaExd2J"},{"children":[],"name":"text","params":{"value":[{"children":[{"text":"New Features","fontSize":20,"fontFamily":"Montserrat, sans-serif","color":"#ffffff"}],"type":"paragraph","align":"center"}]},"id":"lSiInwGpA8cK6ew5Fkmlz"}],"params":{"padding":20,"gap":10,"borderRadius":{"bbl":0,"bbr":0,"btr":0,"isIndividualCorners":false,"all":0,"btl":0},"hover":"elevate"},"id":"8sGgpAEhoNbWpufDnX9Is"}],"params":{"padding":0,"verticalAlignment":"center","gap":20,"borderRadius":{"all":0,"btr":0,"isIndividualCorners":false,"btl":0,"bbl":0,"bbr":0}},"id":"vxQl8_xUTLUeSdy6Zj667"},{"name":"column","children":[{"name":"card","children":[{"params":{"value":[{"type":"paragraph","children":[{"fontWeight":700,"text":"TBC10","color":"#4bb9d2","fontFamily":"Montserrat, sans-serif","fontSize":54}],"align":"center"}]},"children":[],"name":"text","id":"YCgKCdTm1qwKX5q1EuCdr"},{"params":{"value":[{"align":"center","children":[{"fontSize":20,"color":"#ffffff","fontFamily":"Montserrat, sans-serif","text":"Changes"}],"type":"paragraph"}]},"name":"text","children":[],"id":"BR4va-GpZlAJOp2mwMH-1"}],"params":{"borderRadius":{"bbr":0,"isIndividualCorners":false,"btr":0,"btl":0,"bbl":0,"all":0},"gap":10,"hover":"elevate","padding":20},"id":"18AFcFB160BbE0iQeYr8c"}],"params":{"borderRadius":{"bbl":0,"bbr":0,"isIndividualCorners":false,"all":0,"btr":0,"btl":0},"verticalAlignment":"center","gap":20,"padding":0},"id":"l-GJ3YT3H_VJSsOjq70wP"},{"params":{"gap":20,"borderRadius":{"all":0,"bbr":0,"btr":0,"btl":0,"bbl":0,"isIndividualCorners":false},"verticalAlignment":"center","padding":0},"children":[{"name":"card","params":{"gap":10,"borderRadius":{"bbr":0,"isIndividualCorners":false,"all":0,"bbl":0,"btr":0,"btl":0},"padding":20,"hover":"elevate"},"children":[{"params":{"value":[{"type":"paragraph","align":"center","children":[{"fontWeight":700,"color":"#8871f9","fontSize":54,"text":"TBC17","fontFamily":"Montserrat, sans-serif"}]}]},"name":"text","children":[],"id":"OLpC1-Pgjlm5sO19zrQ39"},{"params":{"value":[{"align":"center","type":"paragraph","children":[{"text":"Bug Fixes","fontSize":20,"color":"#ffffff","fontFamily":"Montserrat, sans-serif"}]}]},"children":[],"name":"text","id":"9mMYPgwoc1O74DZkegvHw"}],"id":"r5axRw3H73kS5E_cIjBvm"}],"name":"column","id":"zXI-oq_sWnVXrhI0dB3so"},{"children":[{"params":{"borderRadius":{"bbl":0,"bbr":0,"btr":0,"btl":0,"all":0,"isIndividualCorners":false},"gap":10,"hover":"elevate","padding":20},"name":"card","children":[{"name":"text","children":[],"params":{"value":[{"children":[{"fontFamily":"Montserrat, sans-serif","text":"TBC","fontSize":54,"fontWeight":700,"color":"#5098fa"}],"type":"paragraph","align":"center"}]},"id":"7DNl9bkskIgNrLnsUqDjN"},{"name":"text","children":[],"params":{"value":[{"align":"center","type":"paragraph","children":[{"fontSize":20,"color":"#ffffff","fontFamily":"Montserrat, sans-serif","text":"Customer Requests"}]}]},"id":"YLmi5VfiWq6zAkHD5bIWH"}],"id":"OWVeUSdsPsJFgJV2KFu6M"}],"name":"column","params":{"verticalAlignment":"center","gap":20,"borderRadius":{"btl":0,"all":0,"bbr":0,"btr":0,"isIndividualCorners":false,"bbl":0},"padding":0},"id":"3eUuDQUJ_7Wt3H0ogN0gG"},{"params":{"borderRadius":{"all":0,"btl":0,"bbl":0,"isIndividualCorners":false,"btr":0,"bbr":0},"gap":20,"verticalAlignment":"center","padding":0},"name":"column","children":[],"id":"LFnVMjeI8jdrjJ5UCbCpq"},{"params":{"borderRadius":{"bbr":0,"isIndividualCorners":false,"bbl":0,"all":0,"btl":0,"btr":0},"verticalAlignment":"center","gap":20,"padding":0},"name":"column","children":[],"id":"FotJeCTUtI5G5on3410IY"}],"params":{"gap":40,"borderRadius":0,"layout":[1,1,1,1],"minHeight":200,"padding":0},"name":"row","id":"d6_mAzNbYQvSXQvqfrwO7"}],"id":"hBpUSNSybAXZlGhjE3HRg"}]}

Table of Contents
minLevel1
maxLevel6
include
outlinefalse
indent
exclude
typelist
class
printablefalse
  • Customer Request tickets are highlighted with the 🗣️ icon

  • The 2024_11 release contains no Schema changes


NEW FEATURES

New Feature - Item 1 🗣️

GitLab

Zen

Area

New Feature - Item 2 🗣️

GitLab

Zen

Area

New Feature - Item 3 🗣️

GitLab

Zen

Area

New Feature - Item 4 🗣️

GitLab

Zen

Area

New Feature - Item 5 🗣️

GitLab

Zen

Area

New Feature - Item 6 🗣️

GitLab

Zen

Area

New Feature - Item 7 🗣️

GitLab

Zen

Area

New Feature - Item 8 🗣️

GitLab

Zen

Area

New Feature - Item 9 🗣️

GitLab

Zen

Area

New Feature - Item 10 🗣️

GitLab

Zen

Area

New Feature - Item 11 🗣️

GitLab

Zen

Area

JSON logging for the Scheduler - Default level changed to INFO 🗣️

scheduler#76

-

Logging

You can now have the Scheduler log in JSON format via checking the box in the Configuration-Tool GUI or setting the following Environment Variable to true: SCHEDULER_LOGGING_JSON. This setting, the other logging settings, and the JWT Key Path setting have also been added to the Configuration-Tool GUI.

image-20241030-154741.pngImage Added
Warning

Environment Variables file will need the following:

  • SCHEDULER_LOGGING_JSON added to Scheduler list with a default of false

  • SCHEDULER_LOGGING_LEVEL default mention the change to INFO rather than ERROR

Pirana Logs with JSON format 🗣️

pirana#42

-

Logging

The option to have pirana logs output in JSON has been added. This can be configured via the config tool. You can also now successfully set the appropriate log level, with it defaulting to INFO.

Screenshot from 2024-10-25 16-32-14.pngImage Added

You can use the “PIRANA_LOG_LEVEL" variable to set the log level, either to “ERROR“, “WARN”, “DEBUG” or “INFO”.

You can set the “PIRANA_LOGGER_JSON" variable to either “true” or “false”, to enable JSON logs.

Ability to use Usercode rather than Email for SAML Login and option to define custom claim names for both Usercode and Email 🗣️

pi#2618

32145

SAML Login

Previously, a hardcoded default was used for the email claim name that would attempt to link a SAML login response and a Dashboard user. This default ‘XMLSoap’ value will still be used as a last resort but you now have the ability to define a custom email claim name in the SAML section of the Global Variables screen.

Additionally, there is also a field for a custom Usercode claim name which rather than attempting to match to a user’s email address will match based upon their Dashboard Usercode (Username). If the usercode claim name is defined or the default (see below) manages to extract a value from the SAML response then the Email claim will be ignored even if provided.

The defaulting behaviour of these claims is as follows:

Usercode:

  • If defined the Custom value will be used. Should it fail to retrieve a value or the retrieved value does not match a Dashboard User’s Usercode then login will fail

  • Our namespaced default claim of “https://www.panintelligence.com/claims/usercode“ will be attempted. If it fails to return a value or match a Dashboard User then login will fail

Email:

  • If defined the Custom value will be used. Should it fail to retrieve a value or the retrieved value does not match a Dashboard User’s Email then login will fail

  • Our namespaced default claim of “/wiki/spaces/DEV/pages/1582238068 will be attempted. If it fails to return a value the final fallback will be attempted

  • The final fallback for Email is the ‘XMLSoap’ claim that was previously the only claim used. If this fails to retrieve a value or match a Dashboard User’s Email then login will fail

2618_saml-ui.pngImage Added
Warning

Updated Docs Around SAML: https://panintelligence.atlassian.net/wiki/spaces/DEV/pages/edit-v2/1621327873

 

Financial periods awareness and new financial magic variables 🗣️

pi#2567

31388 and 32934

Category Objects

A new system variable `START_OF_FINANCIAL_YEAR_MONTH` has been introduced to the dashboard that defines a month in which a financial year begins. This variable can be set in the Global Variables panel in Dashboard Configuration:

Screenshot from 2024-10-30 12-01-45.pngImage Added

This input field accepts values from 1 to 12 to represent the starting month for the financial year, where 1 equals January and 12 equals December.

This `START_OF_FINANCIAL_YEAR_MONTH` system variable will drive the values available in the new ‘Financial’ tab in the popup panel for the date range category object type. ‘Financial’ tab will only be visible when `START_OF_FINANCIAL_YEAR_MONTH` is defined.

Screenshot_from_2024-10-23_11-43-09.pngImage Added

The month name in ‘Your Financial Periods run from xx’ can be translated by adding its translated value to the messagesData.properties file. For example, in messagesData_fr_FR.properties file: January=Janvier.

The ‘From’ and ‘To’ for the selected option (e.g. ‘This Quarter’, ‘Next Year’) will be calculated based on the entry for `START_OF_FINANCIAL_YEAR_MONTH`. For example, if you enter 5 (May) for `START_OF_FINANCIAL_YEAR_MONTH` then 'Next Year' will be From: 2025-05-01 to 2026-04-30.

The same calculations for variable replacement based on `START_OF_FINANCIAL_YEAR_MONTH` definition can also be accessed by using the new financial magic variables:

Code Block
- START_OF_CURRENT_FINANCIAL_QUARTER
- END_OF_CURRENT_FINANCIAL_QUARTER
- START_OF_LAST_FINANCIAL_QUARTER
- END_OF_LAST_FINANCIAL_QUARTER
- START_OF_NEXT_FINANCIAL_QUARTER
- END_OF_NEXT_FINANCIAL_QUARTER
- START_OF_CURRENT_FINANCIAL_YEAR
- END_OF_CURRENT_FINANCIAL_YEAR
- START_OF_LAST_FINANCIAL_YEAR
- END_OF_LAST_FINANCIAL_YEAR
- START_OF_NEXT_FINANCIAL_YEAR
- END_OF_NEXT_FINANCIAL_YEAR
Warning

You can find more information about these new variables here: /wiki/spaces/DEV/pages/2038202369

Ability to add temporary category objects via post message 🗣️

pi#2667

-

Embedding Category Objects

We have added the ability to add temporary category objects via a post message when embedding a category. Here is an example HTML and JS file you would use to configure this.

Code Block
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="parent-div"></div>
    <script src="tempcatobjpm.js" type="text/javascript"></script>
</body>
</html>
Code Block
const url = "http://localhost:8080/pi/?lang=en_GB&categoryMode=0#/dashboard-system/#/redirectToDefaultCategoryState/34";
const iframe = document.createElement("iframe");
iframe.setAttribute("src", url);
iframe.style.width = "750px";
iframe.style.height = "750px";
document.getElementById('parent-div').appendChild(iframe);
window.addEventListener("message", (event) => {
    if (event.data && event.data === "canAddTempCategoryObjects") {
        const postMesssageJson = {
            type: "add-temp-category-objects",
            data: {
                categoryObjects: [
                    {
                        orgId: 1,
                        dataSourceItemIdentifier: "Dashboard Repos",
                        columnIdentifier: "Chart Name"
                    },
                    {
                        orgId: 1,
                        dataSourceItemIdentifier: "Dashboard Repos",
                        columnIdentifier: "Audit Type",
                        dynamicAttribute: "hello"
                    }
                ],
                messageIdentifier: "cat1"
            }
        }
        iframe.contentWindow.postMessage(postMesssageJson, url);
    }
}, false);
window.addEventListener("message", (event) => {
    if (event.data && event.data.message === "tempCategoryObjectsAdded" && event.data.messageIdentifier === "cat1") {
        const newHash = "PA-CA%23%23%23category%2F34%2Fc-o-p%3D34__0%2F*%24*eq__%5B%5BAudit%20Date%5D%5D%7B%7B--%20All%20--!%7C%23%7C--%20ALL%20VALUES%20ARE%20SELECTED%20--%7D%7D%2F*%24*eq__%5B%5BChart%20Name%5D%5D%7B%7BChart%20Types%7D%7D%2F*%24*eq__%5B%5BAudit%20Type%5D%5D%7B%7B--%20All%20--%7D%7D";
        const newUrl = url.split('#')[0] + '#' + newHash;
        iframe.src = newUrl;
    }
})
  1. Ensure the you wait for the event ‘canAddTempCategoryObjects’ before attempting to make this post message, this will ensure the data stores required are loaded

  2. Ensure the ‘type’ param is always ‘add-temp-category-objects’

  3. Each category object requires an org id, ‘dataSourceItemIdentifier '- which is the display name of the data source, and 'columnIdentifier’ - which is the display name of the object

  4. You can add an optional 4th param which is 'dynamicAttribute' which allows this to work with custom fields

  5. The ‘messageIdentifier’ is used to link the post message to the next event listener in the JS example, ensuring that you apply the correct hash to the correct category

  6. In the 2nd event listener, you are waiting for the category objects to be added before you update the URL hash, which will allow you to populate the category objects - alter the ‘newHash’ variable to match the data within your dashboard

Dev Ops (BETA) - Add support for branched content 🗣️

pi#2701

-

DevOps

As part of our drive to support infrastructure as code and dev ops ways of working we have added the ability to create a branch of a full setup including connection, categories, charts etc. Once created you can use import-export to migrate live content into this isolated environment and work on it, then extract it again later to move to production. Please see our docs for more information. We intend to build on this work so look forward to hearing feedback which will help us refine and extend this functionality.

Handling of and logging around exceptions that occur when an attempt to save a domain class to the DB fails despite passing validation 🗣️

pi#2478

-

Exceptions / Logging

In rare, unforeseen scenarios an exception can occur when saving to the Dashboard Repo even though the validation checks have been completed. Additional handling and logging have been added that will help diagnose these issues should they occur.

Recording the last updated time and the user that made the change 🗣️

pi#2472, pi#2611, pi#2612

-

-

New columns have been added to the database to track the last update time and the user responsible for modifications to data connections, categories, and charts.

JAVA Agent for Application Monitoring 🗣️

pi#2370

-

Observability

Added an option to enable Java Agent in order to collect and export telemetry data (metrics, traces, logs) for observability and performance monitoring.

Java Agent can be configured through the following environment variables:

  • PI_TOMCAT_MONITORING_ENABLED

  • PI_TOMCAT_MONITORING_OTLP_EXPORTER_ENDPOINT

  • PI_TOMCAT_MONITORING_OTLP_EXPORTER_PROTOCOL

  • PI_TOMCAT_MONITORING_SERVICE_NAME

Find more info about the new environment variables - /wiki/spaces/DEV/pages/2010218497

This can also be configured using configuration-tool gui:

Screenshot from 2024-10-15 15-45-03.pngImage Added

Further information and examples of the setup can be found in the following link - Monitoring - Using Java Agent

SSH tunnel support for data connections 🗣️

pi#2461

29388

Data Connections

A new tab has been added to the data connections screen that allows you to configure an ssh tunnel.

Screenshot from 2024-10-10 09-58-07.pngImage Added

It includes:

  1. A checkbox to allow you to include the SSH tunnel as part of your connection

  2. The SSH user name

  3. The tunnel that the port lives on

  4. A field for the private key (note: this will not be visible once it has already been saved, will be encrypted, and will not be visible when accessing a data connection from the API, and will be hidden in the JSON export file)

  5. A local port - you will need to set the port on the ‘details’ tab to be the same as this

  6. A target port - where your database lives on the target system

  7. A target host - here your database lives on the target system

If the checkbox is checked, and any fields are missing, you will not be allowed to save the data connection, and will be presented with a warning on the inputs which are missing.

Screenshot from 2024-10-15 10-29-26.pngImage Added

If the connection is successful, and you are using the SSH tunnel, an additional indicator will be included on the details tab to confirm this.

Screenshot from 2024-10-15 10-29-12.pngImage Added

You can only have one SSH tunnel per data connection. And each tunnel port must be unique to the system.

The SSH tunnel will be instantiated on data connection save, and will persist until you save it again with the box un-checked. A tunnel will also be created briefly upon introspection. All relevant tunnels will also be created on system start up.

All of these fields have been added to the API for you to set.

A thread will run in the background every 10 minutes to check for any closed connections, and re-open them again if they have failed.

You can set the ssh private key with a global variable, this is the only variable support we currently have for this feature. Only secure variables are supported.

Dynamic Driver functionality - initially only active for ClickHouse and SQLite 🗣️

pi#2617

32543

Data Connections

Initial steps into moving away from bundling all of the supported drivers and instead having many of them be downloaded only for those who are using them. This functionality has only been applied to the ClickHouse and SQLite JDBC drivers in this release.

Alongside the other driver directories there is a new directory named ‘dynamic_drivers’. This directory contains a JSON file that holds details related to the supported versions of the aforementioned drivers - here is the ClickHouse entry as an example:

image-20241023-095352.pngImage Added

This block of JSON details the files that are needed when using a connection via the listed Driver Class Path - in this case it is both the JDBC JAR and an accompanying compression library. In this case, the dynamic downloading of these files occurs if they do not already exist in the ‘dynamic_drivers/com.clickhouse.jdbc.ClickHouseDriver’ directory or fail validation due to a SHA-256 mismatch:

  • On startup ONLY if you have a ClickHouse Data Connection defined

  • When you Introspect or Save a ClickHouse Data Connection

  • When you try to load a Chart that uses a ClickHouse Data Connection

  • Via a thread that runs every 3 minutes to sync defined Data Connections and their Dynamic Drivers if applicable

CHANGES

Change - Item 1 🗣️

GitLab

ZenDesk

Area

Change - Item 2 🗣️

GitLab

ZenDesk

Area

Change - Item 3 🗣️

GitLab

ZenDesk

Area

Change - Item 4 🗣️

GitLab

ZenDesk

Area

Change - Item 5 🗣️

GitLab

ZenDesk

Area

Change - Item 6 🗣️

GitLab

ZenDesk

Area

Change - Item 7 🗣️

GitLab

ZenDesk

Area

Change - Item 8 🗣️

GitLab

ZenDesk

Area

Change - Item 9 🗣️

GitLab

ZenDesk

Area

Change - Item 10 🗣️

GitLab

ZenDesk

Area

Change - Item 11 🗣️

GitLab

ZenDesk

Area

Change - Item 12 🗣️

GitLab

ZenDesk

Area

Change - Item 13 🗣️

GitLab

ZenDesk

Area

Change - Item 14 🗣️

GitLab

ZenDesk

Area

Change - Item 15 🗣️

GitLab

ZenDesk

Area

Change - Item 16 🗣️

GitLab

ZenDesk

Area

Change - Item 174🗣️

GitLab

ZenDesk

Area