Skip to content
DataMiner DoJo

More results...

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors
Search in posts
Search in pages
Search in posts
Search in pages
Log in
Menu
  • Updates & Insights
  • Questions
  • Learning
    • E-learning Courses
    • Empower Replay: Limited Edition
    • Tutorials
    • Open Classroom Training
    • Agility
      • Kanban workshop
      • Agile Fundamentals
    • Certification
      • DataMiner Fundamentals
      • DataMiner Configurator
      • DataMiner Automation
      • Scripts & Connectors Developer: HTTP Basics
      • Scripts & Connectors Developer: SNMP Basics
      • Visual Overview – Level 1
      • Verify a certificate
    • Video Library
    • Books We Like
    • >> Go to DataMiner Docs
  • Expert Center
    • Solutions & Use Cases
      • Solutions
      • Use Case Library
    • Markets & Industries
      • Media production
      • Government & defense
      • Content distribution
      • Service providers
      • Partners
      • OSS/BSS
    • Agile
      • Agile Webspace
      • Everything Agile
        • The Agile Manifesto
        • Best Practices
        • Retro Recipes
      • Methodologies
        • The Scrum Framework
        • Kanban
        • Extreme Programming
      • Roles
        • The Product Owner
        • The Agile Coach
        • The Quality & UX Coach (QX)
    • DataMiner DevOps Professional Program
      • About the DevOps Program
      • DataMiner DevOps Support
  • Downloads
  • More
    • Feature Suggestions
    • Climb the leaderboard!
    • Swag Shop
    • Contact
    • Global Feedback Survey
  • Support
  • PARTNERS
    • All Partners
    • Technology Partners
    • Strategic Partner Program
    • Deal Registration
  • >> Go to dataminer.services

QAction Tigger on Params

Solved124 views4th June 2025
3
Jose Araujo [DevOps Advocate]557 4th June 2025 0 Comments

Hi

I have 2 issues with my http protocol

The first:

QAction no load after params change value:

<Sessionid="1"name="API Status">

<Connectionid="1"name="Check Ping">

<Requestverb="GET"url="/api/v1/system/network/ping">

</Request>

<ResponsestatusCode="2">

<Contentpid="3"></Content>

</Response>

</Connection>

</Session>

<Timerid="1">

<Name>Fast Timer (10s)</Name>

<Timeinitial="true">10000</Time>

<Interval>75</Interval>

<Content>

<Group>2</Group>

</Content>

</Timer>

<Groupid="2">

<Name>Fast Polling</Name>

<Description>Fast Polling 10s</Description>

<Type>poll</Type>

<Content>

<Session>1</Session>

</Content>

</Group>

<Paramid="2">

<Name>StatusCodePingCheck</Name>

<Description>Status Code API</Description>

<Type>dummy</Type>

</Param>

<Paramid="3">

<Name>PingCheckResponse</Name>

<Description>Ping Check Response</Description>

<Type>dummy</Type>

</Param>

LOG:
2025/06/03 23:03:31.374|SLProtocol - 1084 - Titan-Live - copy|19012|CTimer::Execute|DBG|6|1 groups to execute
2025/06/03 23:03:31.374|SLProtocol - 1084 - Titan-Live - copy|19012|CTimer::TimerThreadFunc|DBG|6|Waiting for last group to be finished.
2025/06/03 23:03:31.378|SLProtocol - 1084 - Titan-Live - copy|8832|CGroup::Execute|DBG|6|Start executing group 2 (interval = 75) (depth=1)
2025/06/03 23:03:31.379|SLProtocol - 1084 - Titan-Live - copy|8832|CProtocol::LogHttpRequest|INF|3|<- 23:03:31 - GET http://172.28.20.201:80/api/v1/system/network/ping
2025/06/03 23:03:31.391|SLProtocol - 1084 - Titan-Live - copy|8832|CProtocol::ProcessHttpResult|INF|3|HTTP/1.1 200 OK
2025/06/03 23:03:31.392|SLProtocol - 1084 - Titan-Live - copy|8832|CParameter::SetValue|DBG|2|-> StatusCodePingCheck set value to VT_BSTR : HTTP/1.1 200 OK (HTTP/1.1 200 OK)
2025/06/03 23:03:31.392|SLProtocol - 1084 - Titan-Live - copy|8832|CParameter::SetValue|DBG|2|
2025/06/03 23:03:31.393|SLProtocol - 1084 - Titan-Live - copy|8832|CParameter::SetValue|DBG|2|-> PingCheckResponse set value to VT_BSTR : {"ping": "ok"} ({"ping": "ok"})
2025/06/03 23:03:31.393|SLProtocol - 1084 - Titan-Live - copy|8832|CParameter::SetValue|DBG|2|
2025/06/03 23:03:31.469|SLProtocol - 1084 - Titan-Live - copy|8832|CGroup::Execute|DBG|6|Finished executing group 2
2025/06/03 23:03:31.470|SLProtocol - 1084 - Titan-Live - copy|19012|CTimer::TimerThreadFunc|DBG|6|Last group finished.

Session working ok and  get : {
"ping": "ok"
}

But no tigger QAction when params 3 have value.

The second issue:
I run manually Qaction:

using System;

using Newtonsoft.Json.Linq;

using Skyline.DataMiner.Scripting;

public static class QAction

{

publicstaticvoid Run(SLProtocol protocol)

{

try

{

string json = protocol.GetParameter(3)?.ToString();

protocol.Log("Value jsonnnnn:" + json,LogLevel.LogEverything);

var jsonObject = JObject.Parse(json);

if (jsonObject.TryGetValue("ping", out JToken pingToken))

{

string pingValue = pingToken.ToString();

if (string.Equals(pingValue, "ok", StringComparison.OrdinalIgnoreCase))

{

protocol.SetParameter(Parameter.apihealth, 1); // OK

}

else

{

protocol.SetParameter(Parameter.apihealth, 0); // FAIL

}

}

else

{

protocol.SetParameter(Parameter.apihealth, 0);

}

}

catch (Exception ex)

{

protocol.Log($"QA{protocol.QActionID}|{protocol.GetTriggerParameter()}|Run|Exception:{Environment.NewLine}{ex}", LogType.Error, LogLevel.NoLogging);

protocol.SetParameter(Parameter.apihealth, 0); // Por seguridad: asumimos FAIL

}

}

}

For some reason params 3 is null

but in log appear :

2025/06/03 23:03:31.379|SLProtocol - 1084 - Titan-Live - copy|8832|CProtocol::LogHttpRequest|INF|3|<- 23:03:31 - GET http://172.28.20.201:80/api/v1/system/network/ping
2025/06/03 23:03:31.391|SLProtocol - 1084 - Titan-Live - copy|8832|CProtocol::ProcessHttpResult|INF|3|HTTP/1.1 200 OK
2025/06/03 23:03:31.392|SLProtocol - 1084 - Titan-Live - copy|8832|CParameter::SetValue|DBG|2|-> StatusCodePingCheck set value to VT_BSTR : HTTP/1.1 200 OK (HTTP/1.1 200 OK)
2025/06/03 23:03:31.392|SLProtocol - 1084 - Titan-Live - copy|8832|CParameter::SetValue|DBG|2|
2025/06/03 23:03:31.393|SLProtocol - 1084 - Titan-Live - copy|8832|CParameter::SetValue|DBG|2|-> PingCheckResponse set value to VT_BSTR : {"ping": "ok"} ({"ping": "ok"})
2025/06/03 23:03:31.393|SLProtocol - 1084 - Titan-Live - copy|8832|CParameter::SetValue|DBG|2|
2025/06/03 23:03:31.469|SLProtocol - 1084 - Titan-Live - copy|8832|CGroup::Execute|DBG|6|Finished executing group 2

Thanks

Jose Araujo [DevOps Advocate] Selected answer as best 4th June 2025

3 Answers

  • Active
  • Voted
  • Newest
  • Oldest
0
Jose Araujo [DevOps Advocate]557 Posted 4th June 2025 1 Comment

Hi,

I run manually QAction and work ok
2025/06/04 10:35:04.655|SLProtocol - 16756 - Titan-Live - copy|16092|CQAction::Run|INF|2|QAction [3] triggered by [pid=3/idx=-1/pk=/user=] Input: new = {"ping": "ok"}
Input: old =
Input: extra = <NULL>

2025/06/04 10:35:04.667|SLManagedScripting.exe|ManagedInterop|CRU|5|51|Value jsonnnnn:{"ping": "ok"}
2025/06/04 10:35:04.668|SLProtocol - 16756 - Titan-Live - copy|22420|CParameter::SetValue|DBG|2|-> APIHealth set value to VT_R8 : 1.000000 (calculated = 1.000000)
2025/06/04 10:35:04.668|SLProtocol - 16756 - Titan-Live - copy|22420|CParameter::SetValue|DBG|2|   000000  31                                           1
2025/06/04 10:35:04.669|SLElement.exe|8024|CElement::SetParameterValueFuncAsync|DBG|5|Set for PID 100 Value = VT_R8 : 1.000000
2025/06/04 10:35:04.684|SLElement.exe|17076|CElement::SetParameterValue|DBG|1|** Parameter 100 changed to VT_R8 : 1.000000
2025/06/04 10:35:08.904|SLProtocol - 16756 - Titan-Live - copy|22272|CTimer::TimerThreadFunc|DBG|6|Resetting last group
2025/06/04 10:35:08.905|SLProtocol - 16756 - Titan-Live - copy|22272|CTimer::Execute|DBG|6|1 groups to execute
2025/06/04 10:35:08.905|SLProtocol - 16756 - Titan-Live - copy|22272|CTimer::TimerThreadFunc|DBG|6|Waiting for last group to be finished.
2025/06/04 10:35:08.918|SLProtocol - 16756 - Titan-Live - copy|13588|CGroup::Execute|DBG|6|Start executing group 2 (interval = 75) (depth=1)
2025/06/04 10:35:08.919|SLProtocol - 16756 - Titan-Live - copy|13588|CProtocol::LogHttpRequest|INF|3|<- 10:35:08 - GET http://172.28.20.201:80/api/v1/system/network/ping
2025/06/04 10:35:08.948|SLProtocol - 16756 - Titan-Live - copy|13588|CProtocol::ProcessHttpResult|INF|3|HTTP/1.1 200 OK
2025/06/04 10:35:08.948|SLProtocol - 16756 - Titan-Live - copy|13588|CParameter::SetValue|DBG|2|-> StatusCodePingCheck set value to VT_BSTR : HTTP/1.1 200 OK (HTTP/1.1 200 OK)
2025/06/04 10:35:08.952|SLProtocol - 16756 - Titan-Live - copy|13588|CParameter::SetValue|DBG|2|   000000  485454502F 312E312032 3030204F4B             HTTP/1.1 200 OK
2025/06/04 10:35:08.952|SLProtocol - 16756 - Titan-Live - copy|13588|CParameter::SetValue|DBG|2|-> PingCheckResponse set value to VT_BSTR : {"ping": "ok"} ({"ping": "ok"})
2025/06/04 10:35:08.953|SLProtocol - 16756 - Titan-Live - copy|13588|CParameter::SetValue|DBG|2|   000000  7B2270696E 67223A2022 6F6B227D               {"ping": "ok"}
2025/06/04 10:35:09.040|SLProtocol - 16756 - Titan-Live - copy|13588|CGroup::Execute|DBG|6|Finished executing group 2
2025/06/04 10:35:09.044|SLProtocol - 16756 - Titan-Live - copy|22272|CTimer::TimerThreadFunc|DBG|6|Last group finished.
2025/06/04 10:35:18.905|SLProtocol - 16756 - Titan-Live - copy|22272|CTimer::TimerThreadFunc|DBG|6|Resetting last group
2025/06/04 10:35:18.905|SLProtocol - 16756 - Titan-Live - copy|22272|CTimer::Execute|DBG|6|1 groups to execute
2025/06/04 10:35:18.905|SLProtocol - 16756 - Titan-Live - copy|22272|CTimer::TimerThreadFunc|DBG|6|Waiting for last group to be finished.
2025/06/04 10:35:18.912|SLProtocol - 16756 - Titan-Live - copy|13588|CGroup::Execute|DBG|6|Start executing group 2 (interval = 75) (depth=1)
2025/06/04 10:35:18.912|SLProtocol - 16756 - Titan-Live - copy|13588|CProtocol::LogHttpRequest|INF|3|<- 10:35:18 - GET http://172.28.20.201:80/api/v1/system/network/ping
2025/06/04 10:35:18.920|SLProtocol - 16756 - Titan-Live - copy|13588|CProtocol::ProcessHttpResult|INF|3|HTTP/1.1 200 OK
2025/06/04 10:35:18.920|SLProtocol - 16756 - Titan-Live - copy|13588|CParameter::SetValue|DBG|2|-> StatusCodePingCheck set value to VT_BSTR : HTTP/1.1 200 OK (HTTP/1.1 200 OK)
2025/06/04 10:35:18.921|SLProtocol - 16756 - Titan-Live - copy|13588|CParameter::SetValue|DBG|2|   000000  485454502F 312E312032 3030204F4B             HTTP/1.1 200 OK
2025/06/04 10:35:18.921|SLProtocol - 16756 - Titan-Live - copy|13588|CParameter::SetValue|DBG|2|-> PingCheckResponse set value to VT_BSTR : {"ping": "ok"} ({"ping": "ok"})
2025/06/04 10:35:18.921|SLProtocol - 16756 - Titan-Live - copy|13588|CParameter::SetValue|DBG|2|   000000  7B2270696E 67223A2022 6F6B227D               {"ping": "ok"}
2025/06/04 10:35:18.997|SLProtocol - 16756 - Titan-Live - copy|13588|CGroup::Execute|DBG|6|Finished executing group 2
2025/06/04 10:35:18.997|SLProtocol - 16756 - Titan-Live - copy|22272|CTimer::TimerThreadFunc|DBG|6|Last group finished.

The issue is why no run QAction for first time.

Bram Devlaminck [SLC] [DevOps Advocate] Posted new comment 5th June 2025
Bram Devlaminck [SLC] [DevOps Advocate] commented 5th June 2025

Hi Jose,

I tested your connector locally (just put another URL in the session) and everything seems to work OK on my side (the apiHealth-parameter shows "OK" a few seconds after startup of the element).

Is this indeed what you are trying to achieve, or am I misunderstanding you?
Because I cannot find any reason that the QAction does not get triggered.

Kind regards,

2
Bram Devlaminck [SLC] [DevOps Advocate]325 Posted 4th June 2025 4 Comments

Hi Jose,

It's hard to see from your code fragment what goes wrong, since not your whole connector is included.
My best guess at the moment is that the problem is caused by parameter 3 since it is defined as a dummy parameter.
That parameter should be a string/text parameter instead of a dummy parameter because we want to store the content of the response into that parameter.

Let me know if this resolves at least 1 of your issues.

Kind regards,

Bram Devlaminck [SLC] [DevOps Advocate] Posted new comment 4th June 2025
Jose Araujo [DevOps Advocate] commented 4th June 2025

<?xml version="1.0" encoding="utf-8" ?>
<Protocol xmlns="http://www.skyline.be/protocol"&gt;
<Name>ATEME Titan-Live</Name>
<Description>Titan Live DataMiner API connector</Description>
<Version>1.0.0.1</Version>
<IntegrationID>DMS-DRV-0001</IntegrationID>
<Provider>test</Provider>
<Vendor>test</Vendor>
<VendorOID>1.3.6.1.4.1.8813.2.99</VendorOID>
<DeviceOID>100</DeviceOID>
<ElementType>Monitoring Platform</ElementType>
<Type relativeTimers="true">http</Type>
<Display defaultPage="General" pageOrder="General;———-;Security;———-;Resources;Management;Services;Networking;Sensor;Licence;———-;Webpage#http://[Polling Ip]/" wideColumnPages="Security"/>
<SNMP includepages="true">auto</SNMP>

<Compliancies>
<CassandraReady>true</CassandraReady>
<MinimumRequiredVersion>10.2.0.0 – 12603</MinimumRequiredVersion>
</Compliancies>

<Params>
<Param id="1">
<Name>AfterStartup</Name>
<Description>After Startup</Description>
<Type>dummy</Type>
</Param>
<Param id="2">
<Name>StatusCodePingCheck</Name>
<Description>StatusCodePingCheck</Description>
<Type>read</Type>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
</Param>
<Param id="3">
<Name>PingCheckResponse</Name>
<Description>PingCheckResponse</Description>
<Type>read</Type>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
</Param>
<Param id="4">
<Name>StatusCodeLogin</Name>
<Description>status Code Login</Description>
<Type>dummy</Type>
</Param>
<Param id="5">
<Name>LoginResponse</Name>
<Description>Login Response</Description>
<Type>dummy</Type>
</Param>

<Param id="100" trending="true">
<Name>APIHealth</Name>
<Description>API Health</Description>
<Type>read</Type>
<Information>
<Subtext>
<![CDATA[API Health Status]]>
</Subtext>
</Information>
<Interprete>
<RawType>numeric text</RawType>
<Type>double</Type>
<LengthType>next param</LengthType>
</Interprete>
<Alarm>
<Monitored>true</Monitored>
<CH>Fail</CH>
<Normal>Ok</Normal>
</Alarm>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>General</Page>
<Column>0</Column>
<Row>0</Row>
</Position>
<Position>
<Page>Resources</Page>
<Column>0</Column>
<Row>0</Row>
</Position>
<Position>
<Page>Management</Page>
<Column>0</Column>
<Row>0</Row>
</Position>
<Position>
<Page>Services</Page>
<Column>0</Column>
<Row>0</Row>
</Position>
<Position>
<Page>Networking</Page>
<Column>0</Column>
<Row>0</Row>
</Position>
<Position>
<Page>Sensor</Page>
<Column>0</Column>
<Row>0</Row>
</Position>
<Position>
<Page>Licence</Page>
<Column>0</Column>
<Row>0</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type>discreet</Type>
<Discreets>
<Discreet>
<Display>Fail</Display>
<Value>0</Value>
</Discreet>
<Discreet>
<Display>Ok</Display>
<Value>1</Value>
</Discreet>
</Discreets>
</Measurement>
</Param>
<Param id="101" trending="false">
<Name>ProtocolSupport</Name>
<Description>Protocol Support</Description>
<Type>read</Type>
<Information>
<Subtext>
<![CDATA[API support with this protocol]]>
</Subtext>
</Information>
<Alarm>
<Monitored>true</Monitored>
<Normal>Support</Normal>
<CH>Not Support</CH>
</Alarm>
<Interprete>
<RawType>numeric text</RawType>
<Type>double</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>General</Page>
<Column>0</Column>
<Row>1</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type>discreet</Type>
<Discreets>
<Discreet>
<Display>Not Support</Display>
<Value>0</Value>
</Discreet>
<Discreet>
<Display>Support</Display>
<Value>1</Value>
</Discreet>
</Discreets>
</Measurement>
</Param>
<Param id="102" trending="false">
<Name>APIVersion</Name>
<Description>API Version</Description>
<Type>read</Type>
<Information>
<Subtext>
<![CDATA[API Version]]>
</Subtext>
</Information>
<Alarm>
<Monitored>true</Monitored>
<Normal>2.4.0.3</Normal>
<CH>=!2.4.0.3</CH>
</Alarm>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>General</Page>
<Column>0</Column>
<Row>2</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type>string</Type>
</Measurement>
</Param>
<Param id="103" trending="false">
<Name>FirmwareVersion</Name>
<Description>Firmware Version</Description>
<Type>read</Type>
<Information>
<Subtext>
<![CDATA[Firmware Version]]>
</Subtext>
</Information>
<Alarm>
<Monitored>true</Monitored>
<Normal>4.1.30.0-0</Normal>
<CH>=!4.1.30.0-0</CH>
</Alarm>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>General</Page>
<Column>0</Column>
<Row>3</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type>string</Type>
</Measurement>
</Param>
<Param id="104" trending="false">
<Name>ServerUUID</Name>
<Description>Server UUID</Description>
<Type>read</Type>
<Information>
<Subtext>
<![CDATA[Unique UUID of Encoder]]>
</Subtext>
</Information>
<Alarm>
<Monitored>false</Monitored>
</Alarm>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>General</Page>
<Column>0</Column>
<Row>4</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type>string</Type>
</Measurement>
</Param>
<Param id="105" trending="false">
<Name>EncoderStatus</Name>
<Description>Encoder Status</Description>
<Type>read</Type>
<Information>
<Subtext>
<![CDATA[Login Status of Encoder]]>
</Subtext>
</Information>
<Alarm>
<Monitored>true</Monitored>
<Normal>Authorized</Normal>
<CH>Not Authorized</CH>
</Alarm>
<Interprete>
<RawType>numeric text</RawType>
<Type>double</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>General</Page>
<Column>0</Column>
<Row>5</Row>
</Position>
<Position>
<Page>Security</Page>
<Column>0</Column>
<Row>0</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type>discreet</Type>
<Discreets>
<Discreet>
<Display>Not Authorized</Display>
<Value>0</Value>
</Discreet>
<Discreet>
<Display>Authorized</Display>
<Value>1</Value>
</Discreet>
</Discreets>
</Measurement>
</Param>
<Param id="106" trending="false">
<Name>FirmwareRelease</Name>
<Description>Firmware Release</Description>
<Type>read</Type>
<Information>
<Subtext>
<![CDATA[Firmware release version]]>
</Subtext>
</Information>
<Alarm>
<Monitored>false</Monitored>
</Alarm>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>General</Page>
<Column>0</Column>
<Row>6</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type>string</Type>
</Measurement>
</Param>
<Param id="135" trending="false">
<Name>username</Name>
<Description>Username</Description>
<Type>read</Type>
<Information>
<Subtext>
0
</Subtext>
</Information>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>Security</Page>
<Column>0</Column>
<Row>2</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type>string</Type>
</Measurement>
</Param>
<Param id="235" setter="true">
<Name>username</Name>
<Description>Username</Description>
<Type>write</Type>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>Security</Page>
<Column>0</Column>
<Row>2</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type>string</Type>
</Measurement>
</Param>

<Param id="136" trending="false">
<Name>Password</Name>
<Description>Password</Description>
<Type>read</Type>
<Information>
<Subtext>
0
</Subtext>
</Information>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>Security</Page>
<Column>0</Column>
<Row>3</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type options="Password">string</Type>
</Measurement>
</Param>
<Param id="236" setter="true">
<Name>Password</Name>
<Description>Password</Description>
<Type>write</Type>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>Security</Page>
<Column>0</Column>
<Row>3</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type options="Password">string</Type>
</Measurement>
</Param>
<Param id="137" trending="false">
<Name>TokenValue</Name>
<Description>Token</Description>
<Type>read</Type>
<Information>
<Subtext>
0
</Subtext>
</Information>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>Security</Page>
<Column>0</Column>
<Row>1</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type>string</Type>
</Measurement>
</Param>
<Param id="237" setter="true">
<Name>TokenValue</Name>
<Description>Token</Description>
<Type>write</Type>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>Security</Page>
<Column>0</Column>
<Row>1</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type>string</Type>
</Measurement>
</Param>
</Params>
<QActions>
<QAction id="1" name="Precompiled Code" encoding="csharp" options="precompile" />
<QAction id="2" name="After Startup" encoding="csharp" triggers="1" />
<QAction id="3" name="Ping Status" encoding="csharp" triggers="3" />
</QActions>

<HTTP>
<Session id="1" name="API Status">
<Connection id="1" name="Check Ping">
<Request verb="GET" url="/api/v1/system/network/ping">
</Request>
<Response statusCode="2">
<Content pid="3"></Content>
</Response>
</Connection>
</Session>
<Session id="2" name="API Login">
<Connection id="1" name="Credentials">
<Request verb="POST" url="/api/management/login">
<Parameters>
<Parameter key="user" pid="135"></Parameter>
<Parameter key="password" pid="136"></Parameter>
</Parameters>
<Headers>
<Header key="Content-Type">application/json</Header>
</Headers>
</Request>
<Response statusCode="4">
<Content pid="5"></Content>
</Response>
</Connection>
</Session>

</HTTP>

<Groups>
<Group id="1">
<Name>After Startup</Name>
<Description>After Startup</Description>
<Type>poll action</Type>
<Content>
<Action>2</Action>
</Content>
</Group>
<Group id="2">
<Name>Fast Polling</Name>
<Description>Fast Polling 10s</Description>
<Type>poll</Type>
<Content>
<Session>1</Session>
</Content>
</Group>
</Groups>

<Triggers>
<Trigger id="1">
<Name>After Startup</Name>
<On>protocol</On>
<Time>after startup</Time>
<Type>action</Type>
<Content>
<Id>1</Id>
</Content>
</Trigger>
</Triggers>

<Actions>
<Action id="1">
<Name>After Startup Group</Name>
<On id="1">group</On>
<Type>execute next</Type>
</Action>
<Action id="2">
<Name>After Startup QAction</Name>
<On id="1">parameter</On>
<Type>run actions</Type>
</Action>
</Actions>

<Timers>
<Timer id="1">
<Name>Fast Timer (10s)</Name>
<Time initial="true">10000</Time>
<Interval>75</Interval>
<Content>
<Group>2</Group>
</Content>
</Timer>
<Timer id="2">
<Name>Medium Timer (1m)</Name>
<Time initial="true" dataDisplay="30000">60000</Time>
<Interval>75</Interval>
<Content>
</Content>
</Timer>
<Timer id="3">
<Name>Slow Timer (5m)</Name>
<Time initial="true">300000</Time>
<Interval>75</Interval>
<Content>
</Content>
</Timer>
</Timers>

<PortSettings name="HTTP Connection">
<BusAddress>
<DefaultValue>ByPassProxy</DefaultValue>
<Disabled>false</Disabled>
</BusAddress>
<IPport>
<DefaultValue>80</DefaultValue>
<Disabled>false</Disabled>
</IPport>
</PortSettings>

</Protocol>

Bram Devlaminck [SLC] [DevOps Advocate] commented 4th June 2025

Hi,

Are you still experiencing both of your problems?
You mention in your initial post that the QAction is not triggered on parameter change, but at the same time that the response is {"ping": "ok"}, so I assume that the QAction does get triggered on some moments? It's good to know that DataMiner will not trigger the QAction if the data in the parameter stays identical (so in your case a ping that results again in the same response {"ping": "ok"} that is put in parameter 3, will not cause the QAction to be triggered again).

Could you provide some more information on what exactly is going wrong and what you expect to be happening?

Kind regards,

Jose Araujo [DevOps Advocate] commented 4th June 2025

Hi Bram,

Yes, have both problem

No tigger QAction, APIHealth parameter no show "ok", APIHealth have 2 status (Fail and Ok),

when run for first time protocol no run Qaction, I need qaction detect if :
{
"ping": "ok"
}
show "OK" in API Health parameter if is null or other value show "Fail"

thanks

Bram Devlaminck [SLC] [DevOps Advocate] commented 4th June 2025

Hi,

Could you as a debugging step make parameter 3 visible by giving it a position on the display?
I'd expect that the raw json string ({"ping": "ok"}) will be visible in that parameter after a few seconds (when the timer goes off and the session is executed).

Let me know if you can indeed see that response or not.

0
Jose Araujo [DevOps Advocate]557 Posted 4th June 2025 1 Comment

Hi,

I can see values in both parameters, but the API Health parameter is linked to a QAction. The QAction should send 1 to API Health if it detects "ping": "ok", and 0 if it detects null or an error.
However, I don’t know how to trigger the QAction to analyze the first value and show the result in the API Health parameter.

Bram Devlaminck [SLC] [DevOps Advocate] Posted new comment 4th June 2025
Bram Devlaminck [SLC] [DevOps Advocate] commented 4th June 2025

Hi,

It seems that the session is correctly fetching the data, and your configuration to trigger the QAction also seems correct to me.

I suspect that something in the QAction itself is going wrong.
The logs of the element itself should give you more information.
These can be found at C:Skyline DataminerLogging<elementName>.txt.

Could you before you even fetch the value of parameter 3 add a log message (e.g. 'protocol.Log("My unique log message", LogType.Error, LogLevel.NoLogging);')

You should be able to see this log message appear in that log file every time the QAction is triggered (so in your case once at startup since the value of parameter 3 is the same every time and the QAction won't retrigger).

If that succeeds, I suggest you add logging messages after every step to see what goes wrong.

I hope this will give you a way to proceed.
Let me know if you keep having problems.

Kind regards,

Please login to be able to comment or post an answer.

My DevOps rank

DevOps Members get more insights on their profile page.

My user earnings

0 Dojo credits

Spend your credits in our swag shop.

0 Reputation points

Boost your reputation, climb the leaderboard.

Promo banner DataMiner DevOps Professiona Program
DataMiner Integration Studio (DIS)
Empower Katas
Privacy Policy • Terms & Conditions • Contact

© 2025 Skyline Communications. All rights reserved.

DOJO Q&A widget

Can't find what you need?

? Explore the Q&A DataMiner Docs

[ Placeholder content for popup link ] WordPress Download Manager - Best Download Management Plugin