Пример #1
0
        private IEnumerable <NetstatEntry> GetNetstatEntriesForWorker(int workerIndex)
        {
            ICollection <NetstatEntry> netstatEntries = new List <NetstatEntry>();

            var          netstatQuery    = MongoQueryHelper.GetNetstatForWorker(netstatCollection, workerIndex);
            BsonDocument netstatDocument = netstatCollection.Find(netstatQuery).FirstOrDefault();

            if (netstatDocument == null)
            {
                Log.InfoFormat("No netstat data available for worker {0}.", workerIndex);
                return(netstatEntries);
            }

            BsonArray netstatEntryArray = netstatDocument["entries"].AsBsonArray;
            DateTime? fileLastModified  = BsonDocumentHelper.GetNullableDateTime("last_modified_at", netstatDocument);

            if (netstatEntryArray.Count > 0)
            {
                foreach (BsonValue netstatEntry in netstatEntryArray)
                {
                    IEnumerable <BsonValue> transportReservations = GetTransportReservationDocuments(netstatEntry.AsBsonDocument);
                    foreach (var transportReservation in transportReservations)
                    {
                        var entry = new NetstatEntry(logsetHash, workerIndex, netstatEntry.AsBsonDocument, transportReservation.AsBsonDocument, fileLastModified);
                        netstatEntries.Add(entry);
                    }
                }
            }

            return(netstatEntries);
        }
Пример #2
0
        public override JObject ParseLogDocument(TextReader reader)
        {
            IList <NetstatEntry> entries = new List <NetstatEntry>();

            NetstatEntry entry = new NetstatEntry();

            string line;
            int    lineCounter = 0;

            while ((line = ReadLine(reader)) != null)
            {
                lineCounter++;

                // Ignore headers & empty lines.
                if (!IsNetstatContent(line))
                {
                    continue;
                }

                IList <string> tokens = line.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()).ToList();
                if (tokens.Count == 1)
                {
                    if (tokens[0].StartsWith("[") && tokens[0].EndsWith("]"))
                    {
                        entry.Process = tokens[0].Trim('[', ']');
                        entry.Line    = lineCounter;
                        entries.Add(entry);
                        entry = new NetstatEntry();
                    }
                    else
                    {
                        entry.Component = tokens[0];
                    }
                }
                else if (tokens.Count == 3 || tokens.Count == 4)
                {
                    var portReservation = new PortReservation
                    {
                        Protocol       = tokens[0],
                        LocalAddress   = ExtractHostname(tokens[1]),
                        LocalPort      = ExtractPort(tokens[1]),
                        ForeignAddress = ExtractHostname(tokens[2]),
                        ForeignPort    = ExtractPort(tokens[2])
                    };
                    if (tokens.Count == 4)
                    {
                        portReservation.TcpState = tokens[3];
                    }
                    entry.TransportReservations.Add(portReservation);
                }
            }

            // Roll up entries into JObject
            JObject netstatJson = CreateJObject(entries);

            return(InsertMetadata(netstatJson));
        }
Пример #3
0
 bool Filter(NetstatEntry entry)
 {
     if (!Settings.ShowListening && entry.State == TcpState.Listen)
     {
         return(false);
     }
     if (!Settings.ShowLocal)
     {
         if (IsLocalHost(entry.LocalEndpoint.Address) && IsLocalHost(entry.RemoteEndpoint.Address))
         {
             return(false);
         }
     }
     if (Settings.UsePortFilter && entry.RemoteEndpoint.Port != Settings.PortFilter)
     {
         return(false);
     }
     return(true);
 }
 bool Filter(NetstatEntry entry)
 {
     if (!Settings.ShowListening && entry.State == TcpState.Listen)
         return false;
     if (!Settings.ShowLocal) {
         if (IsLocalHost (entry.LocalEndpoint.Address) && IsLocalHost (entry.RemoteEndpoint.Address))
             return false;
     }
     if (Settings.UsePortFilter && entry.RemoteEndpoint.Port != Settings.PortFilter)
         return false;
     return true;
 }