/// <summary> /// Discovers schemas located in the users Sage instance /// </summary> /// <param name="request"></param> /// <param name="context"></param> /// <returns>Discovered schemas</returns> public override async Task <DiscoverSchemasResponse> DiscoverSchemas(DiscoverSchemasRequest request, ServerCallContext context) { Logger.SetLogPrefix("discover"); Logger.Info("Discovering Schemas..."); DiscoverSchemasResponse discoverSchemasResponse = new DiscoverSchemasResponse(); // only return requested schemas if refresh mode selected if (request.Mode == DiscoverSchemasRequest.Types.Mode.Refresh) { try { var refreshSchemas = request.ToRefresh; Logger.Info($"Refresh schemas attempted: {refreshSchemas.Count}"); var tasks = refreshSchemas.Select((s) => { var metaJsonObject = JsonConvert.DeserializeObject <PublisherMetaJson>(s.PublisherMetaJson); // add insert schema if (metaJsonObject.Module.Contains("Insert")) { return(Task.FromResult(Discover.GetInsertSchemaForModule(metaJsonObject.Module))); } // add discover schema return(GetSchemaForModule(metaJsonObject.Module)); }) .ToArray(); await Task.WhenAll(tasks); discoverSchemasResponse.Schemas.AddRange(tasks.Where(x => x.Result != null).Select(x => x.Result)); // return all schemas Logger.Info($"Schemas returned: {discoverSchemasResponse.Schemas.Count}"); return(discoverSchemasResponse); } catch (Exception e) { Logger.Error(e, e.Message, context); return(new DiscoverSchemasResponse()); } } // attempt to get a schema for each module requested try { Logger.Info($"Schemas attempted: {_server.Settings.ModulesList.Length + Discover.GetTotalInsertSchemas()}"); var tasks = _server.Settings.ModulesList.Select(GetSchemaForModule) .ToArray(); await Task.WhenAll(tasks); discoverSchemasResponse.Schemas.AddRange(tasks.Where(x => x.Result != null).Select(x => x.Result)); // add insert schemas discoverSchemasResponse.Schemas.AddRange(Discover.GetAllInsertSchemas()); // return all schema Logger.Info($"Schemas returned: {discoverSchemasResponse.Schemas.Count}"); return(discoverSchemasResponse); } catch (Exception e) { Logger.Error(e, e.Message, context); return(new DiscoverSchemasResponse()); } }