private static EventTracingDataContract.Provider ProviderFromMessage(ProviderConfiguration msgProvider)
 {
     EventTracingDataContract.Provider provider = new EventTracingDataContract.Provider();
     provider.enabled    = msgProvider.Enabled;
     provider.guid       = msgProvider.Guid;
     provider.keywords   = msgProvider.Keywords;
     provider.traceLevel = EventTracingDataContract.TraceLevelFromJsonString(msgProvider.TraceLevel);
     return(provider);
 }
        private static ProviderConfiguration ProviderToMessage(EventTracingDataContract.Provider provider)
        {
            ProviderConfiguration msgProvider = new ProviderConfiguration();

            msgProvider.Guid       = provider.guid;
            msgProvider.TraceLevel = EventTracingDataContract.TraceLevelToJsonString(provider.traceLevel);
            msgProvider.Keywords   = provider.keywords;
            msgProvider.Enabled    = provider.enabled;
            return(msgProvider);
        }
        /// <summary>
        /// Add / Edit a collector via device twin.
        /// </summary>
        private async void SetCollectorButton_ClickAsync(object sender, RoutedEventArgs e)
        {
            string collectorName    = CollectorNameInput.Text;
            string collectorMaxSize = CollectorMaxSizeInput.Text;

            if (collectorName.Length == 0 || collectorMaxSize.Length == 0)
            {
                _mainPage.ShowDialogAsync("Invaid Input", "Please make sure Collector Name and Max Size is not empty");
                return;
            }
            int collectorMaxFileSize = 0;

            if (!Int32.TryParse(CollectorMaxSizeInput.Text, out collectorMaxFileSize))
            {
                _mainPage.ShowDialogAsync("Invaid Input", " Max Size is not Integer");
                return;
            }

            EventTracingDataContract.CollectorInner collectorInner = new EventTracingDataContract.CollectorInner
            {
                name               = collectorName,
                traceMode          = EventTracingDataContract.TraceModeFromJsonString(CollectorModeCombobox.SelectedValue.ToString()),
                logFileSizeLimitMB = collectorMaxFileSize,
                logFileFolder      = CollectorFolderNameInput.Text,
                logFileName        = CollectorFileNameInput.Text,
                started            = CollectorStartedChckbx.IsChecked == true
            };

            if (AddProviderChckbx.IsChecked == true)
            {
                if (ProviderGUIDInput.Text.Length == 0)
                {
                    _mainPage.ShowDialogAsync("Invaid Input", "Please make sure Provider GUID is not empty");
                    return;
                }
                EventTracingDataContract.Provider provider = new EventTracingDataContract.Provider();
                provider.guid       = ProviderGUIDInput.Text;
                provider.traceLevel = EventTracingDataContract.TraceLevelFromJsonString(ProviderTraceLevelCombobox.SelectedValue.ToString());
                provider.keywords   = ProviderKeywordsInput.Text;
                provider.enabled    = ProviderEnabledChckbx.IsChecked == true;
                collectorInner.providers.Add(provider);
            }

            string refreshingValue = "\"refreshing\"";
            string finalValue      = "{ \"eventTracingCollectors\" : {\"" + collectorName + "\": {\"applyProperties\" : " + JsonConvert.SerializeObject(collectorInner.ToJsonObject()) + ", \"reportProperties\": \"yes\"}}}";
            await _mainPage.UpdateTwinData(refreshingValue, finalValue);
        }
        private static CollectorCSPConfiguration CollectorInternalToMessage(EventTracingDataContract.CollectorInner collector)
        {
            Logger.Log("Reading collector CSP desired configuration...", LoggingLevel.Information);

            CollectorCSPConfiguration cspConfiguration = new CollectorCSPConfiguration();

            cspConfiguration.LogFileFolder      = collector.logFileFolder;
            cspConfiguration.LogFileName        = collector.logFileName;
            cspConfiguration.LogFileSizeLimitMB = collector.logFileSizeLimitMB;
            cspConfiguration.TraceLogFileMode   = EventTracingDataContract.TraceModeToJsonString(collector.traceMode);
            cspConfiguration.Started            = collector.started;
            foreach (EventTracingDataContract.Provider provider in collector.providers)
            {
                ProviderConfiguration msgProvider = ProviderToMessage(provider);
                cspConfiguration.Providers.Add(msgProvider);
            }
            return(cspConfiguration);
        }