/// <summary> /// GetDiscovererListAsync /// </summary> /// <returns>DiscovererInfo</returns> public async Task <PagedResult <DiscovererInfo> > GetDiscovererListAsync() { var pageResult = new PagedResult <DiscovererInfo>(); try { var discovererModel = new DiscovererQueryApiModel(); var applicationModel = new ApplicationRegistrationQueryApiModel(); var discoverers = await _registryService.QueryAllDiscoverersAsync(discovererModel); if (discoverers != null) { if (discoverers.Count() > 0) { foreach (var discoverer in discoverers) { var info = new DiscovererInfo { DiscovererModel = discoverer, HasApplication = false, ScanStatus = (discoverer.Discovery == DiscoveryMode.Off) || (discoverer.Discovery == null) ? false : true }; applicationModel.DiscovererId = discoverer.Id; var applications = await _registryService.QueryAllApplicationsAsync(applicationModel); if (applications != null) { info.HasApplication = true; } pageResult.Results.Add(info); } } else { pageResult.Results.Add(new DiscovererInfo { DiscovererModel = new DiscovererApiModel { Id = "No Discoveres Found" } }); } } } catch (Exception e) { Trace.TraceWarning("Can not get discoverers as list"); var errorMessage = string.Concat(e.Message, e.InnerException?.Message ?? "--", e?.StackTrace ?? "--"); Trace.TraceWarning(errorMessage); pageResult.Results.Add(new DiscovererInfo { DiscovererModel = new DiscovererApiModel { Id = e.Message } }); } pageResult.PageSize = 10; pageResult.RowCount = pageResult.Results.Count; pageResult.PageCount = (int)Math.Ceiling((decimal)pageResult.RowCount / 10); return(pageResult); }
/// <summary> /// Convert back to service model /// </summary> /// <returns></returns> public static DiscovererQueryModel ToServiceModel( this DiscovererQueryApiModel model) { if (model == null) { return(null); } return(new DiscovererQueryModel { SiteId = model.SiteId, Connected = model.Connected, Discovery = (IIoT.OpcUa.Registry.Models.DiscoveryMode?)model.Discovery }); }
/// <summary> /// Find discoverers /// </summary> /// <param name="service"></param> /// <param name="onlyServerState"></param> /// <param name="query"></param> /// <param name="ct"></param> /// <returns></returns> public static async Task <IEnumerable <DiscovererApiModel> > QueryAllDiscoverersAsync( this IRegistryServiceApi service, DiscovererQueryApiModel query, bool?onlyServerState = null, CancellationToken ct = default) { var registrations = new List <DiscovererApiModel>(); var result = await service.QueryDiscoverersAsync(query, onlyServerState, null, ct); registrations.AddRange(result.Items); while (result.ContinuationToken != null) { result = await service.ListDiscoverersAsync(result.ContinuationToken, onlyServerState, null, ct); registrations.AddRange(result.Items); } return(registrations); }
/// <inheritdoc/> public async Task <DiscovererListApiModel> QueryDiscoverersAsync( DiscovererQueryApiModel query, int?pageSize, CancellationToken ct) { var uri = new UriBuilder($"{_serviceUri}/v2/discovery/query"); var request = _httpClient.NewRequest(uri.Uri, _resourceId); if (pageSize != null) { request.AddHeader(HttpHeader.MaxItemCount, pageSize.ToString()); } request.SetContent(query); var response = await _httpClient.PostAsync(request, ct).ConfigureAwait(false); response.Validate(); return(response.GetContent <DiscovererListApiModel>()); }
public async Task <DiscovererListApiModel> GetFilteredListOfDiscoverersAsync( [FromQuery][Required] DiscovererQueryApiModel query, [FromQuery] int?pageSize) { if (query == null) { throw new ArgumentNullException(nameof(query)); } if (Request.Headers.ContainsKey(HttpHeader.MaxItemCount)) { pageSize = int.Parse(Request.Headers[HttpHeader.MaxItemCount] .FirstOrDefault()); } var result = await _discoverers.QueryDiscoverersAsync( query.ToServiceModel(), pageSize); return(result.ToApiModel()); }
/// <summary> /// GetDiscovererListAsync /// </summary> /// <param name="previousPage"></param> /// <returns>DiscovererInfo</returns> public async Task <PagedResult <DiscovererInfo> > GetDiscovererListAsync(PagedResult <DiscovererInfo> previousPage = null) { var pageResult = new PagedResult <DiscovererInfo>(); try { var discovererModel = new DiscovererQueryApiModel(); var applicationModel = new ApplicationRegistrationQueryApiModel(); var discoverers = new DiscovererListApiModel(); if (string.IsNullOrEmpty(previousPage?.ContinuationToken)) { discoverers = await _registryService.QueryDiscoverersAsync(discovererModel, _commonHelper.PageLengthSmall); if (!string.IsNullOrEmpty(discoverers.ContinuationToken)) { pageResult.PageCount = 2; } } else { discoverers = await _registryService.ListDiscoverersAsync(previousPage.ContinuationToken, _commonHelper.PageLengthSmall); if (string.IsNullOrEmpty(discoverers.ContinuationToken)) { pageResult.PageCount = previousPage.PageCount; } else { pageResult.PageCount = previousPage.PageCount + 1; } } if (discoverers != null && discoverers.Items.Any()) { foreach (var disc in discoverers.Items) { var discoverer = await _registryService.GetDiscovererAsync(disc.Id); var info = new DiscovererInfo { DiscovererModel = discoverer, HasApplication = false, ScanStatus = (discoverer.Discovery == DiscoveryMode.Off) || (discoverer.Discovery == null) ? false : true }; applicationModel.DiscovererId = discoverer.Id; var applications = await _registryService.QueryApplicationsAsync(applicationModel, 1); if (applications != null) { info.HasApplication = true; } pageResult.Results.Add(info); } if (previousPage != null) { previousPage.Results.AddRange(pageResult.Results); pageResult.Results = previousPage.Results; } pageResult.ContinuationToken = discoverers.ContinuationToken; pageResult.PageSize = _commonHelper.PageLengthSmall; pageResult.RowCount = pageResult.Results.Count; } else { pageResult.Error = "No Discoveres Found"; } } catch (UnauthorizedAccessException) { pageResult.Error = "Unauthorized access: Bad User Access Denied."; } catch (Exception e) { _logger.Warning(e, "Can not get discoverers as list"); pageResult.Error = e.Message; } return(pageResult); }
/// <summary> /// GetDiscovererListAsync /// </summary> /// <param name="previousPage"></param> /// <returns>DiscovererInfo</returns> public async Task <PagedResult <DiscovererInfo> > GetDiscovererListAsync(PagedResult <DiscovererInfo> previousPage = null, bool getNextPage = false) { var pageResult = new PagedResult <DiscovererInfo>(); try { var discovererModel = new DiscovererQueryApiModel(); var applicationModel = new ApplicationRegistrationQueryApiModel(); var discoverers = new DiscovererListApiModel(); if (!getNextPage || string.IsNullOrEmpty(previousPage?.ContinuationToken)) { discoverers = await _registryService.QueryDiscoverersAsync(discovererModel, _commonHelper.PageLengthSmall); } else { discoverers = await _registryService.ListDiscoverersAsync(previousPage.ContinuationToken, _commonHelper.PageLengthSmall); } if (discoverers != null) { if (discoverers.Items != null && discoverers.Items.Any()) { foreach (var disc in discoverers.Items) { var discoverer = await _registryService.GetDiscovererAsync(disc.Id); var info = new DiscovererInfo { DiscovererModel = discoverer, HasApplication = false, ScanStatus = (discoverer.Discovery == DiscoveryMode.Off) || (discoverer.Discovery == null) ? false : true }; applicationModel.DiscovererId = discoverer.Id; var applications = await _registryService.QueryApplicationsAsync(applicationModel, 1); if (applications != null) { info.HasApplication = true; } pageResult.Results.Add(info); } } } if (previousPage != null && getNextPage) { previousPage.Results.AddRange(pageResult.Results); pageResult.Results = previousPage.Results; } pageResult.ContinuationToken = discoverers.ContinuationToken; } catch (UnauthorizedAccessException) { pageResult.Error = "Unauthorized access: Bad User Access Denied."; } catch (ResourceInvalidStateException) { pageResult.Error = "IotHubQuotaExceeded. Send and Receive operations are blocked for this hub until the next UTC day."; } catch (Exception e) { var message = "Cannot get discoverers as list"; _logger.Warning(e, message); pageResult.Error = message; } return(pageResult); }