private async Task <EventTracingDesiredState> SetEventTracingConfiguration(JObject desiredValue)
        {
            var jsonRequest = EventTracingDesiredState.FromJsonObject((JObject)desiredValue);

            // Send the request...
            if (jsonRequest.request.Collectors.Count != 0)
            {
                Logger.Log("Sending request...", LoggingLevel.Information);

                var setResponse = await _systemConfiguratorProxy.SendCommandAsync(jsonRequest.request) as Message.StringResponse;

                if (setResponse.Status != ResponseStatus.Success)
                {
                    throw new Error((int)setResponse.Status, setResponse.Response);
                }
            }
            return(jsonRequest);
        }
        private async Task OnDesiredPropertyChangeAsync(JToken desiredValue)
        {
            Logger.Log("Processing desired properties for section: " + PropertySectionName + "...", LoggingLevel.Information);

            if (!(desiredValue is JObject))
            {
                return;
            }

            EventTracingDesiredState jsonRequest = await SetEventTracingConfiguration((JObject)desiredValue);

            _generalReportLevel   = jsonRequest.generalReportLevel;
            _configuredCollectors = jsonRequest.configuredCollectors;

            JObject reportedProperties = await GetEventTracingConfiguration(_generalReportLevel, _configuredCollectors);

            await NullifyReported();

            await _callback.ReportPropertiesAsync(EventTracingDataContract.SectionName, reportedProperties);
        }
            public static EventTracingDesiredState FromJsonObject(JObject eventTracingCollectorsNode)
            {
                Logger.Log("Building native request from desired json...", LoggingLevel.Information);

                EventTracingDataContract.DesiredProperties desiredPropertyies = EventTracingDataContract.DesiredProperties.FromJsonObject(eventTracingCollectorsNode);

                EventTracingDesiredState jsonRequest = new EventTracingDesiredState();

                jsonRequest.generalReportLevel   = desiredPropertyies.generalReportLevel;
                jsonRequest.configuredCollectors = new HashSet <string>();
                jsonRequest.request = new SetEventTracingConfigurationRequest();

                foreach (EventTracingDataContract.CollectorDesiredState collector in desiredPropertyies.collectors)
                {
                    CollectorDesiredConfiguration msgCollector = SystemConfiguratorConverters.CollectorToMessage(collector);
                    jsonRequest.request.Collectors.Add(msgCollector);
                    jsonRequest.configuredCollectors.Add(msgCollector.Name);
                }

                return(jsonRequest);
            }