/// <summary> /// SetScanAsync /// </summary> /// <param name="discoverer"></param> /// <returns></returns> public async Task <string> SetDiscoveryAsync(DiscovererInfo discoverer) { var model = discoverer.DiscovererModel.DiscoveryConfig; DiscoveryMode discoveryMode; if (model == null) { model = new DiscoveryConfigApiModel(); } if (discoverer.ScanStatus == true) { discoveryMode = DiscoveryMode.Fast; } else { discoveryMode = DiscoveryMode.Off; } try { await _registryService.SetDiscoveryModeAsync(discoverer.DiscovererModel.Id, discoveryMode, model); } catch (Exception exception) { var errorMessageTrace = string.Concat(exception.Message, exception.InnerException?.Message ?? "--", exception?.StackTrace ?? "--"); _logger.Error(errorMessageTrace); return(errorMessageTrace); } return(null); }
/// <summary> /// UpdateDiscovererAsync /// </summary> /// <param name="discoverer"></param> /// <param name="config"></param> /// <returns></returns> public async Task <string> UpdateDiscovererAsync(DiscovererInfo discoverer, DiscoveryConfigApiModel config) { var model = new DiscovererUpdateApiModel(); model.DiscoveryConfig = discoverer.DiscovererModel.DiscoveryConfig; if (config.AddressRangesToScan != null) { model.DiscoveryConfig.AddressRangesToScan = config.AddressRangesToScan; } if (config.PortRangesToScan != null) { model.DiscoveryConfig.PortRangesToScan = config.PortRangesToScan; } if (config.ActivationFilter != null) { model.DiscoveryConfig.ActivationFilter = config.ActivationFilter; } if (config.MaxNetworkProbes != null && config.MaxNetworkProbes != 0) { model.DiscoveryConfig.MaxNetworkProbes = config.MaxNetworkProbes; } if (config.MaxPortProbes != null && config.MaxPortProbes != 0) { model.DiscoveryConfig.MaxPortProbes = config.MaxPortProbes; } if (config.NetworkProbeTimeoutMs != null && config.NetworkProbeTimeoutMs != 0) { model.DiscoveryConfig.NetworkProbeTimeoutMs = config.NetworkProbeTimeoutMs; } if (config.PortProbeTimeoutMs != null && config.PortProbeTimeoutMs != 0) { model.DiscoveryConfig.PortProbeTimeoutMs = config.PortProbeTimeoutMs; } if (config.IdleTimeBetweenScansSec != null && config.IdleTimeBetweenScansSec != 0) { model.DiscoveryConfig.IdleTimeBetweenScansSec = config.IdleTimeBetweenScansSec; } else { model.DiscoveryConfig.IdleTimeBetweenScansSec = _5MINUTES; } if (config.DiscoveryUrls != null) { model.DiscoveryConfig.DiscoveryUrls = config.DiscoveryUrls; } try { await _registryService.UpdateDiscovererAsync(discoverer.DiscovererModel.Id, model); } catch (Exception exception) { var errorMessageTrace = string.Concat(exception.Message, exception.InnerException?.Message ?? "--", exception?.StackTrace ?? "--"); _logger.Error(errorMessageTrace); return(errorMessageTrace); } return(null); }
public async Task SetDiscoveryModeAsync(string discovererId, [FromQuery][Required] IIoT.OpcUa.Api.Registry.Models.DiscoveryMode mode, [FromBody] DiscoveryConfigApiModel config) { var request = new DiscovererUpdateApiModel { Discovery = mode, DiscoveryConfig = config }; await _discoverers.UpdateDiscovererAsync(discovererId, request.ToServiceModel()); }
/// <summary> /// SetScanAsync /// </summary> /// <param name="discoverer"></param> /// <param name="ipMask"></param> /// <param name="portRange"></param> /// <param name="forceScan"></param> /// <returns></returns> public async Task SetScanAsync(DiscovererInfo discoverer, string ipMask, string portRange, bool forceScan) { var model = new DiscoveryConfigApiModel(); DiscoveryMode discoveryMode; if (forceScan == true) { model.AddressRangesToScan = string.Empty; model.PortRangesToScan = string.Empty; } else { if (discoverer.DiscovererModel.DiscoveryConfig != null) { model = discoverer.DiscovererModel.DiscoveryConfig; } } if (discoverer.ScanStatus == true && forceScan == true) { discoveryMode = DiscoveryMode.Fast; if (ipMask != null) { model.AddressRangesToScan = ipMask; } if (portRange != null) { model.PortRangesToScan = portRange; } model.IdleTimeBetweenScansSec = _5MINUTES; } else { discoveryMode = DiscoveryMode.Off; } try { if (discoveryMode == DiscoveryMode.Off) { await _registryService.SetDiscoveryModeAsync(discoverer.DiscovererModel.Id, discoveryMode, new DiscoveryConfigApiModel()); } else { await _registryService.SetDiscoveryModeAsync(discoverer.DiscovererModel.Id, discoveryMode, model); } } catch (Exception exception) { var errorMessageTrace = string.Concat(exception.Message, exception.InnerException?.Message ?? "--", exception?.StackTrace ?? "--"); Trace.TraceError(errorMessageTrace); } }
/// <inheritdoc/> public async Task SetDiscoveryModeAsync(string discovererId, DiscoveryMode mode, DiscoveryConfigApiModel config, CancellationToken ct) { if (string.IsNullOrEmpty(discovererId)) { throw new ArgumentNullException(nameof(discovererId)); } var uri = new UriBuilder($"{_serviceUri}/v2/discovery/{discovererId}") { Query = $"mode={mode}" }; var request = _httpClient.NewRequest(uri.Uri, _resourceId); request.SetContent(config); var response = await _httpClient.PostAsync(request, ct).ConfigureAwait(false); response.Validate(); }
/// <summary> /// Convert back to service model /// </summary> /// <returns></returns> public static DiscoveryConfigModel ToServiceModel( this DiscoveryConfigApiModel model) { if (model == null) { return(null); } return(new DiscoveryConfigModel { AddressRangesToScan = model.AddressRangesToScan, NetworkProbeTimeout = model.NetworkProbeTimeout, MaxNetworkProbes = model.MaxNetworkProbes, PortRangesToScan = model.PortRangesToScan, PortProbeTimeout = model.PortProbeTimeout, MaxPortProbes = model.MaxPortProbes, MinPortProbesPercent = model.MinPortProbesPercent, IdleTimeBetweenScans = model.IdleTimeBetweenScans, ActivationFilter = model.ActivationFilter.ToServiceModel(), Locales = model.Locales, DiscoveryUrls = model.DiscoveryUrls, }); }
/// <summary> /// Convert back to service model /// </summary> /// <returns></returns> public static DiscoveryConfigModel ToServiceModel( this DiscoveryConfigApiModel model) { if (model == null) { return(null); } return(new DiscoveryConfigModel { AddressRangesToScan = model.AddressRangesToScan, NetworkProbeTimeout = model.NetworkProbeTimeoutMs == null ? (TimeSpan?)null : TimeSpan.FromMilliseconds((double)model.NetworkProbeTimeoutMs), MaxNetworkProbes = model.MaxNetworkProbes, PortRangesToScan = model.PortRangesToScan, PortProbeTimeout = model.PortProbeTimeoutMs == null ? (TimeSpan?)null : TimeSpan.FromMilliseconds((double)model.PortProbeTimeoutMs), MaxPortProbes = model.MaxPortProbes, MinPortProbesPercent = model.MinPortProbesPercent, IdleTimeBetweenScans = model.IdleTimeBetweenScansSec == null ? (TimeSpan?)null : TimeSpan.FromSeconds((double)model.IdleTimeBetweenScansSec), ActivationFilter = model.ActivationFilter.ToServiceModel(), Locales = model.Locales, DiscoveryUrls = model.DiscoveryUrls }); }
/// <summary> /// Update an config /// </summary> /// <param name="config"></param> /// <param name="update"></param> public static DiscoveryConfigApiModel Patch(this DiscoveryConfigApiModel update, DiscoveryConfigApiModel config) { if (update == null) { return(config); } if (config == null) { config = new DiscoveryConfigApiModel(); } config.ActivationFilter = update.ActivationFilter; config.AddressRangesToScan = update.AddressRangesToScan; config.DiscoveryUrls = update.DiscoveryUrls; config.IdleTimeBetweenScans = update.IdleTimeBetweenScans; config.Locales = update.Locales; config.MaxNetworkProbes = update.MaxNetworkProbes; config.MaxPortProbes = update.MaxPortProbes; config.MinPortProbesPercent = update.MinPortProbesPercent; config.NetworkProbeTimeout = update.NetworkProbeTimeout; config.PortProbeTimeout = update.PortProbeTimeout; config.PortRangesToScan = update.PortRangesToScan; return(config); }