News and events
Engage and elevate
On October 14, we’ll hold our regular Dynatrace Office Hours for App development.
If you want to interact with us during the session, you’ll need to sign up beforehand with your LinkedIn profile. If you don’t have a LinkedIn profile, simply join us on our Dynatrace YouTube channel at the given date and time.
As always, we’re happy to host you and look forward to answering any questions you have when developing Dynatrace apps. We'll also give you the latest updates and releases.
Useful updates
New placeholderData option available in useDql
The useDql hook now includes a placeholderData option, which lets you provide default data while waiting for the actual query results. This skips the loading state and immediately puts the query in a success state, ensuring a smoother user experience.
Here's an example:
placeholderData: {
records: [
{ "entity.name": "host-1.prod.example.com", id: "HOST-1A2B3C4D5E6F7G8H" },
{ "entity.name": "db-server-01.internal.net", id: "HOST-9Z8Y7X6W5V4U3T2S" },
{ "entity.name": "app-server-12.cloud.local", id: "HOST-4J5K6L7M8N9O0P1Q" },
{ "entity.name": "web-node-34.region.example.org", id: "HOST-2F3E4D5C6B7A8H9I" },
{ "entity.name": "cache-01.cluster.example.com", id: "HOST-0Q1P2O3N4M5L6K7J" },
],
types: [
{
indexRange: [0, 5],
mappings: {
"entity.name": { type: "string" },
id: { type: "string" },
},
},
],
metadata: {
grail: {
canonicalQuery: "fetch dt.entity.host",
timezone: "Z",
query: "fetch dt.entity.host",
scannedRecords: 81,
dqlVersion: "V1_0",
},
},
};
Note: The placeholder data above is derived from a real Dynatrace Grail query response, including types and metadata, that is required for converting data to columns using built-in functions.
Why Use placeholderData?
- Avoids loading spinners by immediately showing placeholder data
- Allows for smoother transitions when real data is fetched
- Provides a way to distinguish placeholder data using the isPlaceholderData boolean
For more details, check out the useDql reference documentation.
Send intents to Davis® AI
We’ve introduced support for sending structured intents to Davis® AI. To ensure your payloads are compatible, include a prompt key to specify the user input or question. Additionally, you can use contexts to provide supplementary details or instructions for better responses.
Here’s an example:
const intentPayload: IntentPayload = {
prompt: 'Tell me more about the Davis Problem titled \'Broken test application\'',
execute: true,
contexts: [
{
type: 'supplementary',
value: 'Use this information to help you, \'Broken test application\': affected entities: \'Service A\', \'Service B\', \'Host 1\'. Events: slowdown on \Service A\', slowdown on \'Service B\'',
},
{
"type": "instruction",
"value": "Answer in bulletpoints"
},
{
type: 'document-retrieval',
value: 'dynatrace',
},
{
type: 'origin-app',
value: 'my.custom.app',
},
],
};
Simply pass this payload when triggering an intent to Davis® AI, and it will use the provided prompt and contexts to generate a tailored response. For more details, visit the Intents Documentation.
The prompt is the primary question sent to the CoPilot AI, and execute determines if the user can edit the prompt before being sent. Then, we have context options: supplementary, which shapes the answer we get as it provides additional info to better answer a question (for example, share broader app context); instruction, which can give specific formatting output; document-retrieval, which specifies the source of information; and origin-app, which shows the app that triggers the conversation in chat.
See it in action here:
Enhanced Notification Service
The Notification Service now supports a broader range of events, including those recognized across the Dynatrace platform. Key highlights:
- Resource Notifications: Simplified setup for resource-specific events like app releases or workflow changes
- Event Notifications: User-defined filters for scenarios like Davis® AI Problem alerts
- YAML Template Support: Templates can now be created in YAML or JSON
- New Expressions: Use owner() and user(userId) for personalized notifications
- Updated Limits:
- 10 emails per user, per resource, per hour for resource notifications.
- 30 emails per user, per app, per hour for event notifications.
Example: Resource Notification Template
Here’s an example of a YAML-based resource notification template:
event_type: dt.system.events
base_query: event.provider == "AUTOMATION_ENGINE" AND event.type == "WORKFLOW_DELETED"
resource_attribute: dt.automation_engine.workflow.id
subject: Workflow "{{ event()['dt.automation_engine.workflow.title'] }} has been deleted"
content: Workflow "{{ event()['dt.automation_engine.workflow.title'] }}" ({{ event()['dt.automation_engine.workflow.id'] }}) was deleted by {{ user(event()['user.id'])['name'] }}.
Check out the Notification Service documentation for full details!
Release highlights for app developers
Design System
Strato Components
Catch up with the latest improvements to the design system: The changes up until the current version 2.3.1 are available in the annotated release notes.
Dynatrace App Toolkit
Catch up with the latest improvements to the App Toolkit: The changes up until the current version 0.148.0 are available in the annotated release notes.