cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

How to get Intents to send a Relative Timeframe from a Dashboard to my App

andycarlson
Participant

Is there a way to invoke an intent from a dashboard so that my app receives the relative timeframe as... a relative timeframe?

In more detail...

I have an app that receives a timeframe via an intent. There is one required key field, with dt.timeframe being in the intent but non-required.

The intent can be triggered using 'open with' from a dashboard DQL table containing a column matching the name of the key field.

All of that works...

What is not so good is that if the dashboard has a Timeframe of, say, 'now-30d', when the intent is triggered it always seems to convert the begin and end values to absolute time values. The URL invoked contains the absolute times encoded as HTTP query parameters... I think this conversion happens before my app is involved in the process.

Is there a way to invoke an intent from a dashboard so that my app receives the relative timeframe as... a relative timeframe?

It seems to be possible for built-in DT things to do this when invoking each other.

Cheers.

8 REPLIES 8

haris
Dynatrace Mentor
Dynatrace Mentor

Hi Andy,

can you please share your lastIntent from top context in custom app, following an example here: https://developer.dynatrace.com/develop/intents/debug-intents/. Here we will be able to see the timeframe passed. 

Developer Advocate,
Haris Hibic

andycarlson
Participant

This was passed when using 'Open Field With' from the legend of a bar chart on a dashboard. The timeframe on the dash was 'last 10 minutes'... apart from not being passed as a relative value, it kinda looks like 11 minutes to me.

forum-image.png

 

Are you sure the time selector was set up as the last 10 minutes? Since the only way to get that kind of timeframe for me is to manually select that timeframe, otherwise object looks like this:

haris_0-1742207187178.png

 

Developer Advocate,
Haris Hibic

andycarlson
Participant

Thanks for your reply. Yes I am sure

Dashboard screen grab...

andycarlson_0-1742555392922.png

lastIntent seen by the app...

andycarlson_1-1742555565866.png

andycarlson
Participant

Also the relevant part of the config showing the schema for the timeframe parameters (the app also allows timestamp... but that is not being used when drilling from a dashboard graph series)

andycarlson_2-1742555999755.png

 

haris
Dynatrace Mentor
Dynatrace Mentor

Thanks for the details Andy, we're checking this internally and as soon as I have info, I'll share it with you.

Developer Advocate,
Haris Hibic

dani_coll
Dynatrace Participant
Dynatrace Participant

Hi Andy! Apologies for the late reply,

I've been taking a look at your situation and as you said, whenever you open an intent from a chart legend, the intent contains the timestamp instead of the relative time.

For example: 

"timeframe": {
    "start": "2025-07-18T08:57:00.000000000+02:00",
    "end": "2025-07-18T09:28:00.000000000+02:00"
}

I've forwarded this concern internally and it's expected behavior since we assume that you want to do a snapshot of the data whenever you do that.

If you want to get the relative timeframe you can open an intent of the whole chart

dani_coll_0-1752842645581.png

Then, you will get the following timeframe

"dt.timeframe": {
    "from": "now()-30m",
    "to": "now()"
},

 

Finally, you will have to filter yourself on your custom app the part of the chart that you need.

 

You are not the first user requesting this feature so if there is any update regarding this topic I'll let you know

MostafaHussein
Champion

Hi Andy,

kindly check the below example mentioned in the docs to receive intent, i think it's useful to know what is the available payload properties and i think you can convert it to relative time programmatically within your intent receiver function

import React, { useEffect, useState } from 'react';
import { Code, Paragraph } from '@dynatrace/strato-components/typography';
import { getIntent, IntentPayload } from '@dynatrace-sdk/navigation';

export const YourComponent = () => {
  const [intentPayload, setIntentPayload] = useState<IntentPayload>();
  useEffect(() => {
    const intent = getIntent();
    if (intent) {
      setIntentPayload(intent.getPayload());
    }
  }, []);

  return (
    <>
      {intentPayload && (
        <Paragraph>
          Received Intent Payload <Code>{JSON.stringify(intentPayload)}</Code>.
        </Paragraph>
      )}
    </>
  );
};

 

if payload doesn't include any indicator to relative timeframe you can suggest it as a product idea.

and kindly check this code block to convert it to relative timeframe

const dateString = '2025-03-13T15:45:00.000Z';
const targetDate = new Date(dateString);
const now = new Date();

const diffMs = now - targetDate; // Difference in milliseconds

// Convert to days, hours, minutes, seconds
const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
const diffHours = Math.floor((diffMs / (1000 * 60 * 60)) % 24);
const diffMinutes = Math.floor((diffMs / (1000 * 60)) % 60);
const diffSeconds = Math.floor((diffMs / 1000) % 60);
let timeIdentifier = diffDays > 0 ? 'd' : (diffHours > 0 ? 'h' : 'm');
let timeValue = timeIdentifier == 'd' ? diffDays : (timeIdentifier == 'h' ? diffHours : diffMinutes)
console.log(`-${timeValue}${timeIdentifier}`);

 

hope this useful for you.

Certified Dynatrace Professional | Certified Dynatrace Services - Observability | Certified Dynatrace Services - App Developer
Dynatrace Partner 2p.com.sa

Featured Posts