Cisco AXL Query

Cisco CVP kullanıyorsanız, Cluster sunuculardan bilgi almak biraz sıkıntılı ve bu süreci kesin yaşamışsınızdır.
Bu bilgiyi çalışma anında almanız çok olası değil, hem performans açısından hem de aradığınız bilginin aslen hangi cluster sunucuda olduğunu bilmenizin zor olmasından dolayı tam bir dert.
Bu noktada Cisco’ nun sunduğu çözüm Sunuculara AXL Query ile bağlanıp Belirli bir zamanda tüm veriyi alarak sonrası  için SQL gibi daha rahat işleyip kullanabileceğiniz bir ortama taşımak.
Peki, bu noktada kendi aksiyonumuzu alabilir miyiz? … Elbette bu mümkün.
Bu şekilde ilerlerken yapıyı bilmeniz yeterli. Temel olarak yapı Bir http adrese (Kullanıcı, şifre bilgileri ile oluşan bir URL’e)
Uygun XML formatında çalıştırmak istediğiniz query’i yollamak.
İlgili adresi aşağıdakine benzer bir kod ile C# ortamında oluşturmak oldukça basit:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(@"https://" + hostIP + ":" + hostPORT.ToString() + "/axl/");
req.Method = "POST";
            req.ProtocolVersion = System.Net.HttpVersion.Version10;
            req.ContentType = "text/xml";
            req.Accept = "text/xml";
            req.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(hostUSER + ":" + hostPASS)));
           
Dikkat edebileceğiniz gibi, isteğimizi POST method’u ile yolluyor olacağız. Peki, yollayacağımız request neye benzeyecek?

<soapenv:Envelope    xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns=\"http://www.cisco.com/AXL/API/10.0\"> <soapenv:Header/> <soapenv:Body> <ns:executeSQLQuery sequence=\"?\"> <sql>***Query***</sql> </ns:executeSQLQuery> </soapenv:Body> </soapenv:Envelope>

Bu noktada, istenen sorguyu, çalıştırabilmek adına, aşağıdaki şekilde basit bir method, işe yarayacaktır;

using System;
using System.ComponentModel;
using System.Data;
using System.IO;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Xml;

namespace AXL
{
    public class QUERY
    {
        public string hostIP { get; set; }
        public int hostPORT { get; set; }
        public string hostUSER { get; set; }
        public string hostPASS { get; set; }

        public QUERY(string IP, int PORT, string USER, string PASS)
        {
            hostIP = IP;
            hostPORT = PORT;
            hostUSER = USER;
            hostPASS = PASS;       
        }

        public string runQuery(string Query)
        {
            string resultTXT = "";

            //Request'in yollanacağı endpoint URL oluşturuluyor.
            #region requestURL
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(@"https://" + hostIP + ":" + hostPORT.ToString() + "/axl/");
            req.ProtocolVersion = HttpVersion.Version10;
            req.Method = "POST";
            req.ProtocolVersion = System.Net.HttpVersion.Version10;
            req.ContentType = "text/xml";
            req.Accept = "text/xml";
            req.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(hostUSER + ":" + hostPASS)));
            #endregion

            //Request'in XML yapıdaki formatı hazırlanıyor.
            #region requestString
            string strAXLRequest = " <soapenv:Envelope    xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns=\"http://www.cisco.com/AXL/API/10.0\">";
            strAXLRequest += " <soapenv:Header/>";
            strAXLRequest += " <soapenv:Body>";
            strAXLRequest += " <ns:executeSQLQuery sequence=\"?\">";
            strAXLRequest += " <sql>" + Query + "</sql>";
            strAXLRequest += " </ns:executeSQLQuery>";
            strAXLRequest += " </soapenv:Body>";
            strAXLRequest += " </soapenv:Envelope>";
            #endregion

            //Sertifika kontrolü için, Konfigurasyona bağımlı olarak ihtiyaç duyulabilir.
            System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(object senderObje, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };

            //Request'in yapıldığı ve cevabın alındığı adım.
            #region sendAndRecieve
            req.ContentLength = strAXLRequest.Length;

            Stream s = req.GetRequestStream();
            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(strAXLRequest);
            s.Write(buffer, 0, strAXLRequest.Length);
            s.Close();
            try
            {
                WebResponse resp = req.GetResponse();
               
                s = resp.GetResponseStream();
                StreamReader sr = new StreamReader(s);
                string outputString = "";
                while (!sr.EndOfStream)
                {
                    outputString += sr.ReadLine() + "\n"; //Just output XML response
                }
                sr.Close();
                s.Close();
                resp.Close();
                resultTXT = outputString;
            }
            catch (Exception ex)
            {
                string excep = ex.ToString();
                resultTXT = excep;
            }
            #endregion

            return resultTXT;
        }
    }
}

Yorumlar

Yazılar

Kotlin - 1 - Giriş

Genesys Nuance-ASR Entegrasyonu Port Kullanımı

Kotlin - 5 - Dönüşler ve Atlamalar (Returns and Jumps)