I am trying to replicate an existing advance alert trigger using queryxml using the c# sample provided in the SDK.
Ultimately I am wanting to query Orion database and store the results in a local database to be used by another program to create tickets.
This code works when querying only one table:
void Main()
conststring hostname = "*********";
conststring username = "***********";
conststring password = "***********";
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true;
var client = newInformationServiceClient("BasicHttpBinding_InformationService",
string.Format("https://{0}:17778/SolarWinds/InformationService/OrionBasic", hostname));
var result = client.QueryXml("SELECT TOP 1 A.AlertDefID, A.ActiveObject, A.ObjectType, A.Acknowledged, A.AcknowledgedBy, A.AcknowledgedTime, A.TriggerTimeOffset, A.TriggerTimeStamp FROM Orion.AlertStatus A WHERE A.Acknowledged = 0 RETURN XML AUTO", null);
//var result = client.QueryXml("SELECT I.FullName, ic.ASSYST_CSG, ic.Assyst_short_code, ic.InterfaceID, I.NodeID, N.DNS, N.IPAddress, N.IPAddressType, N.MachineType, N.Status AS Node_Status, N.StatusDescription AS Node_Description, I.Status As Interface_Status, I.StatusDescription AS Interface_Description, nc.PassivePoll FROM Orion.NPM.InterfacesCustomProperties ic INNER JOIN Orion.NPM.Interfaces I ON (ic.InterfaceID = I.InterfaceID) INNER JOIN Orion.Nodes N ON (I.NodeID = N.NodeID) INNER JOIN Orion.NodesCustomProperties nc ON (nc.NodeID = N.NodeID) WHERE ( (I.Status <> '1') AND (I.Status <> '4') AND (I.Status <> '9') AND (I.InterfaceName <> 'VPN') AND (ic.Assyst_Short_Code <> 'NONE') AND (nc.PassivePoll <> 'YES') AND (ic.ASSYST_CSG <> 'CORE')) ");
var element = result.XPathSelectElement("//*[local-name()='A']");
var alert = newAlertInfo
"AlertDefID").Value,
"ActiveObject").Value,
"ObjectType").Value,
"Acknowledged").Value,
"AcknowledgedBy").Value,
"AcknowledgedTime").Value,
"TriggerTimeOffset").Value,
"TriggerTimeStamp").Value,
var alerts = new[] {alert};
var dcs = newDataContractSerializer(alerts.GetType());
var doc = newXmlDocument();
using (var writer = doc.CreateNavigator().AppendChild())
/*
//Console.Write(result2);
Console.WriteLine("Alert Def ID: " + alert.AlertDefID);
Console.WriteLine("Active Object: " + alert.ActiveObject);
Console.WriteLine("Object Type: " + alert.ObjectType);
Console.WriteLine("Acknowledged: " + alert.Acknowledged);
Console.WriteLine("Acknowleged by: " + alert.AcknowledgedBy);
Console.WriteLine("AcknowledgedTime: " + alert.AcknowledgedTime);
Console.WriteLine("TriggerTimeOffset: " + alert.TriggerTimeOffset);
Console.WriteLine("TriggerTimeStamp: " + alert.TriggerTimeStamp);
Console.ReadLine();
DataContract(Name = "AlertInfo", Namespace = "http://schemas.solarwinds.com/2008/Orion")]
publicclassAlertInfo
DataMember(IsRequired = true, Order = 1)]
publicstring AlertDefID { get; set; }
DataMember(IsRequired = true, Order = 2)]
publicstring ActiveObject { get; set; }
DataMember(IsRequired = true, Order = 3)]
publicstring ObjectType { get; set; }
DataMember(IsRequired = true, Order = 4)]
publicstring Acknowledged { get; set; }
DataMember(IsRequired = true, Order = 5)]
publicstring AcknowledgedBy { get; set; }
DataMember(IsRequired = true, Order = 6)]
publicstring AcknowledgedTime { get; set; }
DataMember(IsRequired = true, Order = 7)]
publicstring TriggerTimeOffset { get; set; }
DataMember(IsRequired = true, Order = 8)]
publicstring TriggerTimeStamp { get; set; }
staticIEnumerable<XElement> ElementsAnyNS(thisXElement source, string localName)
return source.Elements().Where(e => e.Name.LocalName == localName);
publicstaticXElement ElementAnyNS(thisXElement source, string localName)
return source.Elements().FirstOrDefault(e => e.Name.LocalName == localName);
However I am wanting to replace the current Query with :
SELECT I.FullName, ic.ASSYST_CSG, ic.Assyst_short_code, ic.InterfaceID, I.NodeID, N.DNS, N.IPAddress, N.IPAddressType, N.MachineType, N.Status AS Node_Status, N.StatusDescription AS Node_Description, I.Status As Interface_Status, I.StatusDescription AS Interface_Description, nc.PassivePoll
FROM Orion.NPM.InterfacesCustomProperties ic
INNER JOIN Orion.NPM.Interfaces I
ON (ic.InterfaceID = I.InterfaceID)
INNER JOIN Orion.Nodes N
ON (I.NodeID = N.NodeID)
INNER JOIN Orion.NodesCustomProperties nc
ON (nc.NodeID = N.NodeID)
WHERE
(
(I.Status <> '1') AND
(I.Status <> '4') AND
(I.Status <> '9') AND
(I.InterfaceName <> 'VPN') AND
(ic.Assyst_Short_Code <> 'NONE') AND
(nc.PassivePoll <> 'YES') AND
(ic.ASSYST_CSG <> 'CORE')
)
and when I do, the code does not work, is it possible to replicate the advance alert manager using the SDK to suit the required query (above)?
Thank you