Exemplo n.º 1
0
        public void GetPool(AppPMMEntities Db, string deviceName)
        {
            var responseContent = "";

            try
            {
                ICR icr = new ICR(ApiAccount, ApiPassword);

                IRestResponse response = icr.EstablishConnection("/mgmt/tm/ltm/pool", deviceName);

                responseContent = response.Content;

                //Helper.LogError(responseContent);

                var data = JsonConvert.DeserializeObject <RootPoolObject>(responseContent, new JsonSerializerSettings {
                    MissingMemberHandling = MissingMemberHandling.Ignore, NullValueHandling = NullValueHandling.Ignore
                });
                if (data != null)
                {
                    var pools = data.items.ToList();
                    foreach (var pool in pools)
                    {
                        F5Pool f5Pool = new F5Pool();
                        f5Pool.DeviceName        = deviceName;
                        f5Pool.Name              = pool.name;
                        f5Pool.Monitor           = pool.monitor;
                        f5Pool.LoadBalancingMode = pool.loadBalancingMode;
                        ParsePoolStats.PoolStatsRootObject stats = GetPoolStats(pool.name, deviceName);
                        f5Pool.StatusAvailabilityState = stats.entries.STATS.nestedStats.entries.statusavailabilityState.description;
                        f5Pool.StatusEnabledState      = stats.entries.STATS.nestedStats.entries.statusenabledState.description;
                        f5Pool.StatusStatusReason      = stats.entries.STATS.nestedStats.entries.statusstatusReason.description;
                        f5Pool.CurSessions             = stats.entries.STATS.nestedStats.entries.curSessions.value;
                        f5Pool.TotRequests             = stats.entries.STATS.nestedStats.entries.totRequests.value;
                        Db.F5Pool.Add(f5Pool);

                        Db.SaveChanges();

                        // get pool members
                        GetPoolMemberStats(Db, f5Pool.F5PoolId, pool.name, deviceName);
                    }
                }
            }
            catch (Exception ex)
            {
                Helper.LogError(ex.Message + "\r\n" + responseContent + "\r\n");
            }
        }
Exemplo n.º 2
0
        private void GetPoolMemberStats(AppPMMEntities Db, int f5PoolId, string poolName, string deviceName)
        {
            var responseContent = "";

            try
            {
                ICR    icr      = new ICR(ApiAccount, ApiPassword);
                string resource = "/mgmt/tm/ltm/pool/~Common~" + poolName + "/members/stats";
                List <PoolMemberInfoForWeb> poolMembers = new List <PoolMemberInfoForWeb>();
                JsonSerializerSettings      settings    = new JsonSerializerSettings
                {
                    MissingMemberHandling = MissingMemberHandling.Ignore,
                    NullValueHandling     = NullValueHandling.Ignore
                };

                IRestResponse response = icr.EstablishConnection(resource, deviceName);
                responseContent = response.Content;

                if (responseContent.Contains("nestedStats"))
                {
                    responseContent = responseContent.Replace("connq.ageEdm", "connqageEdm");
                    responseContent = responseContent.Replace("connq.ageEma", "connqageEma");
                    responseContent = responseContent.Replace("connq.ageHead", "connqageHead");
                    responseContent = responseContent.Replace("connq.ageMax", "connqageMax");
                    responseContent = responseContent.Replace("connq.depth", "connqdepth");
                    responseContent = responseContent.Replace("connq.serviced", "connqserviced");
                    responseContent = responseContent.Replace("serverside.bitsIn", "serversidebitsIn");
                    responseContent = responseContent.Replace("serverside.bitsOut", "serversidebitsOut");
                    responseContent = responseContent.Replace("serverside.curConns", "serversidecurConns");
                    responseContent = responseContent.Replace("serverside.maxConns", "serversidemaxConns");
                    responseContent = responseContent.Replace("serverside.pktsIn", "serversidepktsIn");
                    responseContent = responseContent.Replace("serverside.pktsOut", "serversidepktsOut");
                    responseContent = responseContent.Replace("serverside.totConns", "serversidetotConns");
                    responseContent = responseContent.Replace("status.availabilityState", "statusavailabilityState");
                    responseContent = responseContent.Replace("status.enabledState", "statusenabledState");
                    responseContent = responseContent.Replace("status.statusReason", "statusstatusReason");
                    responseContent = responseContent.Replace("/Common/", "");
                    responseContent = responseContent.Replace("~Common~", "");

                    var data = JsonConvert.DeserializeObject <dynamic>(responseContent, settings);
                    foreach (var server in data.entries)
                    {
                        PoolMemberInfoForWeb poolMember = new PoolMemberInfoForWeb();

                        poolMember.deviceName              = deviceName;
                        poolMember.poolName                = poolName;
                        poolMember.addr                    = server.Value.nestedStats.entries.addr.description.Value.ToString();
                        poolMember.connqageEdm             = server.Value.nestedStats.entries.connqageEdm.value.Value.ToString();
                        poolMember.connqageEma             = server.Value.nestedStats.entries.connqageEma.value.Value.ToString();
                        poolMember.connqageHead            = server.Value.nestedStats.entries.connqageHead.value.Value.ToString();
                        poolMember.connqageMax             = server.Value.nestedStats.entries.connqageMax.value.Value.ToString();
                        poolMember.connqdepth              = server.Value.nestedStats.entries.connqdepth.value.Value.ToString();
                        poolMember.connqserviced           = server.Value.nestedStats.entries.connqserviced.value.Value.ToString();
                        poolMember.curSessions             = server.Value.nestedStats.entries.curSessions.value.Value.ToString();
                        poolMember.monitorRule             = server.Value.nestedStats.entries.monitorRule.description.Value;
                        poolMember.monitorStatus           = server.Value.nestedStats.entries.monitorStatus.description.Value.ToString();
                        poolMember.nodeName                = server.Value.nestedStats.entries.nodeName.description.Value.ToString();
                        poolMember.port                    = server.Value.nestedStats.entries.port.value.Value.ToString();
                        poolMember.serversidebitsIn        = server.Value.nestedStats.entries.serversidebitsIn.value.Value.ToString();
                        poolMember.serversidebitsOut       = server.Value.nestedStats.entries.serversidebitsOut.value.Value.ToString();
                        poolMember.serversidecurConns      = server.Value.nestedStats.entries.serversidecurConns.value.Value.ToString();
                        poolMember.serversidemaxConns      = server.Value.nestedStats.entries.serversidemaxConns.value.Value.ToString();
                        poolMember.serversidepktsIn        = server.Value.nestedStats.entries.serversidepktsIn.value.Value.ToString();
                        poolMember.serversidepktsOut       = server.Value.nestedStats.entries.serversidepktsOut.value.Value.ToString();
                        poolMember.serversidetotConns      = server.Value.nestedStats.entries.serversidetotConns.value.Value.ToString();
                        poolMember.sessionStatus           = server.Value.nestedStats.entries.sessionStatus.description.Value.ToString();
                        poolMember.statusavailabilityState = server.Value.nestedStats.entries.statusavailabilityState.description.Value.ToString();
                        poolMember.statusenabledState      = server.Value.nestedStats.entries.statusenabledState.description.Value.ToString();
                        poolMember.statusstatusReason      = server.Value.nestedStats.entries.statusstatusReason.description.Value.ToString();
                        poolMember.totRequests             = server.Value.nestedStats.entries.totRequests.value.Value.ToString();
                        poolMember.F5PoolId                = f5PoolId;
                        poolMembers.Add(poolMember);
                    }

                    if (poolMembers.Count > 0)
                    {
                        Db.PoolMemberInfoForWebs.AddRange(poolMembers);
                        Db.SaveChanges();
                    }
                }
            }
            catch (Exception ex)
            {
                Helper.LogError(ex.Message + "\r\n" + responseContent + "\r\n");
            }
        }