Example #1
0
        private static bool GetBestIfShouldMultiThreadRequests()
        {
            if (_systemInfo == null)
            {
                _systemInfo = SystemInfoHelper.GetSystemInfo();
            }

            return(_systemInfo.CpuCores >= 2);
        }
Example #2
0
        private static int GetBestMaxDegreesOfParallelism()
        {
            if (_systemInfo == null)
            {
                _systemInfo = SystemInfoHelper.GetSystemInfo();
            }

            if (_systemInfo.CpuCores == 1)
            {
                return(1);
            }
            else if (_systemInfo.CpuCores == 2)
            {
                return(2);
            }
            else if (_systemInfo.CpuCores < 5)
            {
                return(3);
            }
            else if (_systemInfo.CpuCores < 7)
            {
                return(4);
            }
            else if (_systemInfo.CpuCores < 9)
            {
                return(5);
            }
            else if (_systemInfo.CpuCores < 13)
            {
                return(6);
            }
            else if (_systemInfo.CpuCores < 17)
            {
                return(7);
            }
            else if (_systemInfo.CpuCores < 21)
            {
                return(8);
            }
            else if (_systemInfo.CpuCores < 25)
            {
                return(9);
            }
            else if (_systemInfo.CpuCores < 33)
            {
                return(10);
            }
            else if (_systemInfo.CpuCores < 65)
            {
                return(11);
            }
            else
            {
                return(12);
            }
        }
Example #3
0
        private void imageTextButtonSendErrorInfo_Click(object sender, EventArgs e)
        {
            var helpdeskMail = AdditionalInfo.SplitByTwoDifferentStrings("HelpdeskEmail:", ";", true)[0];
            var userCode     = AdditionalInfo.SplitByTwoDifferentStrings("UserCode:", ";", true)[0];
            var appVersion   = AdditionalInfo.SplitByTwoDifferentStrings("ApplicationVersion:", ";", true)[0];
            var valueText    = new ValueText {
                Value = ".NET Framework", Text = ""
            };
            var listValueText = new List <ValueText>();

            listValueText.Add(valueText);
            var installedNetFxes    = SystemInfoHelper.GetInstalledSoftwareList(listValueText);
            var installedNetFxesStr = "";

            for (int index = 0; index < installedNetFxes.Count; index++)
            {
                var installedSoftware = installedNetFxes[index];
                if (index == 0)
                {
                    installedNetFxesStr = installedSoftware.ProductName + " " +
                                          installedSoftware.VersionString;
                }
                else
                {
                    installedNetFxesStr = installedNetFxesStr + "; " + installedSoftware.ProductName + " " +
                                          installedSoftware.VersionString;
                }
            }
            var body = "Dear Developer%0D%0A"
                       + "%0D%0A"
                       + "Following is system running error infomation for you:"
                       + (userCode.IsNullOrEmpty() ? "" : " (send by " + userCode + ")") + "%0D%0A"
                       + "Application Version : " + appVersion + "%0D%0A"
                       + "Assembly Bits : " + IntPtr.Size * 8 + "%0D%0A"
                       + "OS : " + SystemInfoHelper.GetSystemInfo("osinfo") + " " + SystemInfoHelper.GetSystemInfo("osbit") + " bits" + "%0D%0A"
                       + "Machine Name: " + SystemInfoHelper.GetSystemInfo("machinename") + "%0D%0A"
                       + "IP: " + SystemInfoHelper.GetSystemInfo("Ips") + "%0D%0A"
                       + "Windows Account: " + SystemInfoHelper.GetSystemInfo("currentuser") + "%0D%0A"
                       + "Occurring Time: " + OccurringTime + "%0D%0A"
                       + "Installed dotNetFx: " + installedNetFxesStr + "%0D%0A"
                       + "Exception Message: " + ExceptionMsg;

            body = body.Replace("\n", "%0D%0A");
            var subject = ErrorText + " occured at " + OccurringTime;

            LocalEmailHelper.Send(helpdeskMail, subject, body);
        }
Example #4
0
        public void System_Should_Serialize_ConfiguredHostName_And_DetectedHostName()
        {
            var systemHelper = new SystemInfoHelper(new NoopLogger());

            var hostName = "this_is_my_hostname";
            var system   = systemHelper.GetSystemInfo(hostName);

            var json    = _payloadItemSerializer.Serialize(system);
            var jObject = JObject.Parse(json);

            var configuredHostName = jObject.Property("configured_hostname");

            configuredHostName.Should().NotBeNull();
            configuredHostName.Value.Value <string>().Should().Be(hostName);

            var detectedHostName = jObject.Property("detected_hostname");

            detectedHostName.Should().NotBeNull();
        }
        internal AgentComponents(
            IApmLogger logger,
            IConfigurationReader configurationReader,
            IPayloadSender payloadSender,
            IMetricsCollector metricsCollector,
            ICurrentExecutionSegmentsContainer currentExecutionSegmentsContainer,
            ICentralConfigurationFetcher centralConfigurationFetcher,
            IApmServerInfo apmServerInfo,
            BreakdownMetricsProvider breakdownMetricsProvider = null
            )
        {
            try
            {
                var tempLogger = logger ?? ConsoleLogger.LoggerOrDefault(configurationReader?.LogLevel);
                ConfigurationReader = configurationReader ?? new EnvironmentConfigurationReader(tempLogger);
                Logger  = logger ?? ConsoleLogger.LoggerOrDefault(ConfigurationReader.LogLevel);
                Service = Service.GetDefaultService(ConfigurationReader, Logger);

                var systemInfoHelper = new SystemInfoHelper(Logger);
                var system           = systemInfoHelper.GetSystemInfo(ConfigurationReader.HostName);

                ConfigurationStore = new ConfigurationStore(new ConfigurationSnapshotFromReader(ConfigurationReader, "local"), Logger);

                ApmServerInfo = apmServerInfo ?? new ApmServerInfo();

                PayloadSender = payloadSender
                                ?? new PayloadSenderV2(Logger, ConfigurationStore.CurrentSnapshot, Service, system, ApmServerInfo,
                                                       isEnabled: ConfigurationReader.Enabled);

                if (ConfigurationReader.Enabled)
                {
                    breakdownMetricsProvider ??= new BreakdownMetricsProvider(Logger);
                }

                HttpTraceConfiguration = new HttpTraceConfiguration();
                SubscribedListeners    = new HashSet <Type>();

                // initialize the tracer before central configuration or metric collection is started
                TracerInternal = new Tracer(Logger, Service, PayloadSender, ConfigurationStore,
                                            currentExecutionSegmentsContainer ?? new CurrentExecutionSegmentsContainer(), ApmServerInfo, breakdownMetricsProvider);

                if (ConfigurationReader.Enabled)
                {
                    CentralConfigurationFetcher = centralConfigurationFetcher ?? new CentralConfigurationFetcher(Logger, ConfigurationStore, Service);
                    MetricsCollector            = metricsCollector ?? new MetricsCollector(Logger, PayloadSender, ConfigurationStore, breakdownMetricsProvider);
                    MetricsCollector.StartCollecting();
                }
                else
                {
                    Logger.Info()?.Log("The Elastic APM .NET Agent is disabled - the agent won't capture traces and metrics.");
                }

                TracerInternal = new Tracer(Logger, Service, PayloadSender, ConfigurationStore,
                                            currentExecutionSegmentsContainer ?? new CurrentExecutionSegmentsContainer(), ApmServerInfo, breakdownMetricsProvider);


                if (ConfigurationReader.EnableOpenTelemetryBridge)
                {
#if NET5_0 || NET6_0
                    if (ApmServerInfo.Version >= new ElasticVersion(7, 16, 0, string.Empty))
                    {
                        new OpenTelemetry.ElasticActivityListener(this, TracerInternal);
                    }
                    else
                    {
                        Logger.Warning()?.Log("OpenTelemetry (Activity) bridge is only supported with APM Server 7.16.0 or newer - bridge won't be enabled..");
                    }
#else
                    Logger.Warning()?.Log("OpenTelemetry (Activity) bridge is only supported on .NET5 or newer - bridge won't be enabled.");
#endif
                }
            }
            catch (Exception e)
            {
                Logger.Error()?.LogException(e, "Failed initializing agent.");
            }
        }
Example #6
0
        internal AgentComponents(
            IApmLogger logger,
            IConfigurationReader configurationReader,
            IPayloadSender payloadSender,
            IMetricsCollector metricsCollector,
            ICurrentExecutionSegmentsContainer currentExecutionSegmentsContainer,
            ICentralConfigurationFetcher centralConfigurationFetcher,
            IApmServerInfo apmServerInfo,
            BreakdownMetricsProvider breakdownMetricsProvider = null
            )
        {
            try
            {
                var tempLogger = logger ?? ConsoleLogger.LoggerOrDefault(configurationReader?.LogLevel);
                ConfigurationReader = configurationReader ?? new EnvironmentConfigurationReader(tempLogger);
                Logger  = logger ?? ConsoleLogger.LoggerOrDefault(ConfigurationReader.LogLevel);
                Service = Service.GetDefaultService(ConfigurationReader, Logger);

                var systemInfoHelper = new SystemInfoHelper(Logger);
                var system           = systemInfoHelper.GetSystemInfo(ConfigurationReader.HostName);

                ConfigurationStore = new ConfigurationStore(new ConfigurationSnapshotFromReader(ConfigurationReader, "local"), Logger);

                ApmServerInfo = apmServerInfo ?? new ApmServerInfo();

                // Called by PayloadSenderV2 after the ServerInfo is fetched
                Action <bool, IApmServerInfo> serverInfoCallback = null;

#if NET5_0 || NET6_0
                ElasticActivityListener activityListener = null;
                if (ConfigurationReader.EnableOpenTelemetryBridge)
                {
                    activityListener = new OpenTelemetry.ElasticActivityListener(this);

                    serverInfoCallback = (success, serverInfo) =>
                    {
                        if (success)
                        {
                            if (serverInfo.Version >= new ElasticVersion(7, 16, 0, string.Empty))
                            {
                                Logger.Info()
                                ?.Log("APM Server version ready - OpenTelemetry (Activity) bridge is active. Current Server version: {version}",
                                      serverInfo.Version.ToString());
                            }
                            else
                            {
                                Logger.Warning()
                                ?.Log(
                                    "OpenTelemetry (Activity) bridge is only supported with APM Server 7.16.0 or newer - bridge won't be enabled. Current Server version: {version}",
                                    serverInfo.Version.ToString());
                                activityListener?.Dispose();
                            }
                        }
                        else
                        {
                            Logger.Warning()
                            ?.Log(
                                "Unable to read server version - OpenTelemetry (Activity) bridge is only supported with APM Server 7.16.0 or newer. "
                                + "The bridge remains active, but due to unknown server version it may not work as expected.");
                        }
                    };
                }
#endif
                PayloadSender = payloadSender
                                ?? new PayloadSenderV2(Logger, ConfigurationStore.CurrentSnapshot, Service, system, ApmServerInfo,
                                                       isEnabled: ConfigurationReader.Enabled, serverInfoCallback: serverInfoCallback);

                if (ConfigurationReader.Enabled)
                {
                    breakdownMetricsProvider ??= new BreakdownMetricsProvider(Logger);
                }

                HttpTraceConfiguration = new HttpTraceConfiguration();
                SubscribedListeners    = new HashSet <Type>();

                // initialize the tracer before central configuration or metric collection is started
                TracerInternal = new Tracer(Logger, Service, PayloadSender, ConfigurationStore,
                                            currentExecutionSegmentsContainer ?? new CurrentExecutionSegmentsContainer(), ApmServerInfo, breakdownMetricsProvider);

#if NET5_0 || NET6_0
                if (ConfigurationReader.EnableOpenTelemetryBridge)
                {
                    // If the server version is not known yet, we enable the listener - and then the callback will do the version check once we have the version
                    if (ApmServerInfo.Version == null || ApmServerInfo?.Version == new ElasticVersion(0, 0, 0, null))
                    {
                        activityListener?.Start(TracerInternal);
                    }
                    // Otherwise do a version check
                    else if (ApmServerInfo.Version >= new ElasticVersion(7, 16, 0, string.Empty))
                    {
                        Logger.Info()
                        ?.Log("Starting OpenTelemetry (Activity) bridge");

                        activityListener?.Start(TracerInternal);
                    }
                    else
                    {
                        Logger.Warning()
                        ?.Log(
                            "OpenTelemetry (Activity) bridge is only supported with APM Server 7.16.0 or newer - bridge won't be enabled. Current Server version: {version}",
                            ApmServerInfo.Version.ToString());
                        activityListener?.Dispose();
                    }
                }
#endif

                if (ConfigurationReader.Enabled)
                {
                    CentralConfigurationFetcher = centralConfigurationFetcher ?? new CentralConfigurationFetcher(Logger, ConfigurationStore, Service);
                    MetricsCollector            = metricsCollector ?? new MetricsCollector(Logger, PayloadSender, ConfigurationStore, breakdownMetricsProvider);
                    MetricsCollector.StartCollecting();
                }
                else
                {
                    Logger.Info()?.Log("The Elastic APM .NET Agent is disabled - the agent won't capture traces and metrics.");
                }
            }
            catch (Exception e)
            {
                Logger.Error()?.LogException(e, "Failed initializing agent.");
            }
        }
Example #7
0
        public MonitWindowsAgent()
        {
            Run                   = new Run_T();
            Run.id                = UniqueWindowsId.GetOrCreateUniqueId();
            Run.incarnation       = SystemStats.ProcessRunningInSec();
            Run.controlfile       = "none"; //TODO
            Run.startdelay        = 0;      //TODO
            Run.polltime          = 120;    //TODO
            Run.Env               = new myenvironment();
            Run.Env.user          = SystemStats.GetHostname();
            Run.httpd             = new Httpd_T();
            Run.httpd.port        = ConfigMgr.Config.Httpd.Port;
            Run.httpd.ssl         = ConfigMgr.Config.Httpd.SSL;
            Run.httpd.address     = ConfigMgr.Config.Httpd.BindIp;
            Run.httpd.credentials = new List <Auth_T>();
            Run.httpd.credentials.Add(new Auth_T
            {
                uname  = ConfigMgr.Config.Httpd.Username,
                passwd = ConfigMgr.Config.Httpd.Password
            });

            Run.mmonits = new List <Mmonit_T>();
            Run.mmonits.Add(new Mmonit_T
            {
                url = new URL_T
                {
                    url = ConfigMgr.Config.MMonits[0].Url,
                    //port = ConfigMgr.Config.MMonits[0].Port,
                    password = ConfigMgr.Config.MMonits[0].Password,
                    user     = ConfigMgr.Config.MMonits[0].Username
                }
            });

            servicelist      = new List <Service_T>();
            servicelist_conf = new List <Service_T>();
            ConfigMgr.Config.Services.ForEach(sc =>
            {
                var newS = ServiceHelper.CreateService(sc, sc.Name.ToLower());

                if (newS == null)
                {
                    Logger.Log.Error("Service could not be created!");
                }
                else
                {
                    if (sc is ProcessConfig)
                    {
                        ProcessHelper.AddProcess(newS);
                    }
                    else if (sc is FilesystemConfig)
                    {
                        FilesystemHelper.AddFilesystem(newS);
                    }
                }
            });

            servicegrouplist = new List <ServiceGroup_T>();
            systeminfo       = SystemInfoHelper.GetSystemInfo();

            m_timer           = new Timer(ConfigMgr.Config.Period);
            m_timer.Elapsed  += DoPeriodicCheck;
            m_timer.AutoReset = true;

            m_mMonitClient = new Collector();

            var service = ServiceHelper.GetSystemService();

            Run.system = new List <Service_T>();
            Run.system.Add(service);
        }