private string StartThreadProfilingSessions(IDictionary <string, object> arguments)
        {
            if (arguments == null)
            {
                return("No arguments sent with start_profiler command.");
            }

            if (!AgentInstallConfiguration.IsWindows && !AgentInstallConfiguration.IsNetCore30OrAbove)
            {
                const string netCore30RequiredForLinuxThreadProfiling = "Cannot start a thread profiling session. Thread profiling support on Linux was introduced in .NET Core 3.0.";
                Log.Info(netCore30RequiredForLinuxThreadProfiling);
                return(netCore30RequiredForLinuxThreadProfiling);
            }

            var startArgs = new ThreadProfilerCommandArgs(arguments);

            if (startArgs.ProfileId == 0)
            {
                return("A valid profile_id must be supplied to start a thread profiling session.");
            }

            var startedNewSession = ThreadProfilingService.StartThreadProfilingSession(startArgs.ProfileId, startArgs.Frequency, startArgs.Duration);

            if (!startedNewSession)
            {
                return("Cannot start a thread profiling session. Another session may already be in process.");
            }

            return(null);
        }
        private string StopThreadProfilingSessions(IDictionary <string, object> arguments)
        {
            if (arguments == null)
            {
                return("No arguments sent with stop_profiler command.");
            }

            var stopArgs = new ThreadProfilerCommandArgs(arguments);

            if (stopArgs.ProfileId == 0)
            {
                return("A valid profile_id must be supplied to stop a thread profiling session.");
            }

            try
            {
                var stoppedSession = ThreadProfilingService.StopThreadProfilingSession(stopArgs.ProfileId, stopArgs.ReportData);
                if (!stoppedSession)
                {
                    return("A thread profiling session is not running.");
                }
            }
            catch (InvalidProfileIdException e)
            {
                Log.Error(e.Message);
                return(e.Message);
            }

            return(null);
        }