Пример #1
0
        public static void RegisterComponent(IDiagnosable diagnosable)
        {
            if (diagnosable == null)
            {
                throw new ArgumentNullException("diagnosable");
            }
            string diagnosticComponentName = diagnosable.GetDiagnosticComponentName();

            if (string.IsNullOrEmpty(diagnosticComponentName))
            {
                throw new ArgumentNullException("diagnosable.GetDiagnosticComponentName()");
            }
            lock (ProcessAccessManager.RpcServerLockObject)
            {
                ProcessAccessManager.diagnosableComponents[diagnosticComponentName] = diagnosable;
                if (ProcessAccessManager.RpcServer == null)
                {
                    ObjectSecurity serverAdminSecurity = ProcessAccessManager.GetServerAdminSecurity();
                    if (serverAdminSecurity != null)
                    {
                        using (Process currentProcess = Process.GetCurrentProcess())
                        {
                            string annotation;
                            if (string.Equals(currentProcess.ProcessName, "w3wp", StringComparison.InvariantCultureIgnoreCase))
                            {
                                annotation = currentProcess.Id + '\t' + Environment.GetEnvironmentVariable("APP_POOL_ID", EnvironmentVariableTarget.Process);
                            }
                            else
                            {
                                annotation = currentProcess.Id + '\t' + currentProcess.ProcessName;
                            }
                            ProcessAccessManager.RpcServer = (ProcessAccessManager)ProcessAccessRpcServer.RegisterServer(typeof(ProcessAccessManager), serverAdminSecurity, 1, Guid.NewGuid(), annotation, false, 8U);
                        }
                    }
                }
            }
        }
Пример #2
0
        private static string RunComponentCommand(string componentName, DiagnosableParameters componentParameters)
        {
            XDocument xdocument = new XDocument();
            XElement  xelement  = new XElement("Diagnostics");

            xdocument.Add(xelement);
            if (string.Equals(componentName, "ProcessLocator", StringComparison.OrdinalIgnoreCase))
            {
                XElement xelement2 = new XElement("ProcessLocator");
                xelement.Add(xelement2);
                List <KeyValuePair <Guid, string> > registeredProcessGuids = ProcessAccessRpcServer.GetRegisteredProcessGuids();
                int num = 0;
                if (string.Equals(componentParameters.Argument, "debug", StringComparison.OrdinalIgnoreCase))
                {
                    using (List <KeyValuePair <Guid, string> > .Enumerator enumerator = registeredProcessGuids.GetEnumerator())
                    {
                        while (enumerator.MoveNext())
                        {
                            KeyValuePair <Guid, string> pair = enumerator.Current;
                            ProcessAccessManager.AddAsXmlElement(xelement2, pair);
                            num++;
                        }
                        goto IL_117;
                    }
                }
                HashSet <string> hashSet = new HashSet <string>(registeredProcessGuids.Count);
                foreach (KeyValuePair <Guid, string> pair2 in registeredProcessGuids)
                {
                    if (pair2.Key != ProcessAccessRpcServer.ProcessLocatorGuid && !hashSet.Contains(pair2.Value))
                    {
                        ProcessAccessManager.AddAsXmlElement(xelement2, pair2);
                        num++;
                        hashSet.Add(pair2.Value);
                    }
                }
IL_117:
                xelement2.AddFirst(new XElement("count", num));
            }
            else
            {
                using (Process currentProcess = Process.GetCurrentProcess())
                {
                    DateTime dateTime = currentProcess.StartTime.ToUniversalTime();
                    DateTime utcNow   = DateTime.UtcNow;
                    XElement content  = new XElement("ProcessInfo", new object[]
                    {
                        new XElement("id", currentProcess.Id),
                        new XElement("serverName", Environment.MachineName),
                        new XElement("startTime", dateTime),
                        new XElement("currentTime", utcNow),
                        new XElement("lifetime", (utcNow - dateTime).ToString()),
                        new XElement("threadCount", currentProcess.Threads.Count),
                        new XElement("handleCount", currentProcess.HandleCount),
                        new XElement("workingSet", ByteQuantifiedSize.FromBytes((ulong)currentProcess.WorkingSet64))
                    });
                    xelement.Add(content);
                }
                bool flag  = string.IsNullOrEmpty(componentName);
                bool flag2 = componentName == "?";
                if (!flag2 && !flag && !ProcessAccessManager.diagnosableComponents.ContainsKey(componentName))
                {
                    XElement content2 = new XElement(componentName, new XElement("message", string.Format("Component \"{0}\" is not supported by this process.", componentName)));
                    xelement.Add(content2);
                    flag2 = true;
                }
                XElement xelement3 = new XElement("Components");
                xelement.Add(xelement3);
                lock (ProcessAccessManager.RpcServerLockObject)
                {
                    if (flag)
                    {
                        using (IEnumerator <KeyValuePair <string, IDiagnosable> > enumerator3 = ProcessAccessManager.diagnosableComponents.GetEnumerator())
                        {
                            while (enumerator3.MoveNext())
                            {
                                KeyValuePair <string, IDiagnosable> keyValuePair = enumerator3.Current;
                                xelement3.Add(keyValuePair.Value.GetDiagnosticInfo(componentParameters));
                            }
                            goto IL_3C2;
                        }
                    }
                    if (flag2)
                    {
                        using (IEnumerator <KeyValuePair <string, IDiagnosable> > enumerator4 = ProcessAccessManager.diagnosableComponents.GetEnumerator())
                        {
                            while (enumerator4.MoveNext())
                            {
                                KeyValuePair <string, IDiagnosable> keyValuePair2 = enumerator4.Current;
                                xelement3.Add(new XElement("Component", keyValuePair2.Key));
                            }
                            goto IL_3C2;
                        }
                    }
                    IDiagnosable diagnosable    = ProcessAccessManager.diagnosableComponents[componentName];
                    XElement     diagnosticInfo = diagnosable.GetDiagnosticInfo(componentParameters);
                    xelement3.Add(diagnosticInfo);
                    IL_3C2 :;
                }
            }
            string result;

            try
            {
                using (StringWriter stringWriter = new StringWriter())
                {
                    using (XmlTextWriter xmlTextWriter = new XmlTextWriter(stringWriter))
                    {
                        xmlTextWriter.Formatting = Formatting.None;
                        xdocument.Save(xmlTextWriter);
                    }
                    result = stringWriter.ToString();
                }
            }
            catch (XmlException ex)
            {
                foreach (XElement xelement4 in xdocument.Descendants())
                {
                    ex.Data[xelement4.Name] = xelement4.Value;
                }
                throw;
            }
            return(result);
        }