示例#1
0
        /// <summary>
        /// The run elastic search pipeline.
        /// </summary>
        /// <param name="config">
        /// The config.
        /// </param>
        /// <param name="cancellationToken">
        /// The cancellation token.
        /// </param>
        public void RunElasticSearchPipeline(IJob config, CancellationToken cancellationToken)
        {
            using (var progressMonitor = new ProgressMonitor(new ConsoleProgressLogger()))
            {
                var container = new UnityContainer();

                ILogger logger = new LoggerConfiguration().MinimumLevel.Verbose().WriteTo
                                 .File(Path.Combine(Path.GetTempPath(), "Databus.out.txt")).CreateLogger();

                container.RegisterInstance <IProgressMonitor>(progressMonitor);

                var databusSqlReader = new DatabusSqlReader(config.Config.ConnectionString, 0);
                container.RegisterInstance <IDatabusSqlReader>(databusSqlReader);
                container.RegisterType <IElasticSearchUploaderFactory, ElasticSearchUploaderFactory>();
                container.RegisterType <IElasticSearchUploader, ElasticSearchUploader>();
                container.RegisterType <IHttpClientFactory, HttpClientFactory>();
                container.RegisterInstance(logger);

                if (config.Config.UseMultipleThreads)
                {
                    container.RegisterType <IPipelineExecutorFactory, MultiThreadedPipelineExecutorFactory>();
                }
                else
                {
                    container.RegisterType <IPipelineExecutorFactory, SingleThreadedPipelineExecutorFactory>();
                }

                this.RunElasticSearchPipeline(container, config, cancellationToken);
            }
        }
示例#2
0
        /// <summary>
        /// The main.
        /// </summary>
        /// <param name="args">
        /// The args.
        /// </param>
        /// <exception cref="Exception">exception thrown
        /// </exception>
        public static void Main(string[] args)
        {
            if (!args.Any())
            {
                throw new Exception("Please pass the job.xml file as a parameter");
            }

            if (args[0] == "-generateschema")
            {
                if (args.Length < 2 || string.IsNullOrEmpty(args[1]))
                {
                    throw new Exception("You must specify a valid filename to write the schema to.");
                }

                var filename = args[1];

                JsonSchemaGenerator.WriteSchemaToFile(typeof(QueryConfig), filename);

                Console.WriteLine($"Written schema to {filename}");
                return;
            }

            string inputFile = args[0];

            var config = new ConfigReader().ReadXml(inputFile);

            var stopwatch = new Stopwatch();

            stopwatch.Start();

            ILogger logger = new LoggerConfiguration()
                             .MinimumLevel.Verbose()
                             .WriteTo.File(Path.Combine(Path.GetTempPath(), "Databus.out.txt"))
                             .CreateLogger();

            using (ProgressMonitor progressMonitor = new ProgressMonitor(new ConsoleProgressLogger()))
            {
                using (var cancellationTokenSource = new CancellationTokenSource())
                {
                    var container = new UnityContainer();
                    container.RegisterInstance <IProgressMonitor>(progressMonitor);

                    var databusSqlReader = new DatabusSqlReader(config.Config.ConnectionString, 0);
                    container.RegisterInstance <IDatabusSqlReader>(databusSqlReader);
                    container.RegisterType <IElasticSearchUploaderFactory, ElasticSearchUploaderFactory>();
                    container.RegisterType <IFileUploaderFactory, FileUploaderFactory>();
                    container.RegisterType <IElasticSearchUploader, ElasticSearchUploader>();
                    container.RegisterType <IFileUploader, FileUploader>();

                    container.RegisterType <IHttpClientFactory, HttpClientFactory>();
                    container.RegisterInstance(logger);

                    if (config.Config.UseMultipleThreads)
                    {
                        container.RegisterType <IPipelineExecutorFactory, MultiThreadedPipelineExecutorFactory>();
                    }
                    else
                    {
                        container.RegisterType <IPipelineExecutorFactory, SingleThreadedPipelineExecutorFactory>();
                    }

                    var pipelineRunner = new DatabusRunner();

                    if (config.Config.UploadToElasticSearch)
                    {
                        pipelineRunner.RunElasticSearchPipeline(container, config, cancellationTokenSource.Token);
                    }
                    else
                    {
                        pipelineRunner.RunRestApiPipeline(container, config, cancellationTokenSource.Token);
                    }
                }
            }

            stopwatch.Stop();
            var timeElapsed = stopwatch.Elapsed.ToString(@"hh\:mm\:ss");
            var threadText  = config.Config.UseMultipleThreads ? "multiple threads" : "single thread";

            Console.WriteLine($"Finished in {timeElapsed} using {threadText}");

#if TRUE
            logger.Verbose("Finished in {ElapsedMinutes} minutes on {Date}.", stopwatch.Elapsed.TotalMinutes, DateTime.Today);
            //logger.Error(new Exception("test"), "An error has occurred.");

            Log.CloseAndFlush();

            //file.Flush();
            //file.Close();
            //file.Dispose();
            //file = null;
#endif
            Console.WriteLine("(Type any key to exit)");
            Console.ReadKey();
        }