Exemplo n.º 1
0
        private void ProcessNotExecutedTask(IReportTaskRunContext taskContext,
                                            List <Tuple <Exception, string> > exceptions, Exception e)
        {
            var oper = taskContext.OpersToExecute.First();

            exceptions.Add(new Tuple <Exception, string>(e, oper.Properties.Name));

            var msg = $"Task {taskContext.TaskId} was not executed (" + e.Message + ")";

            SendServiceInfo(msg);

            taskContext.DefaultExporter.SendError(exceptions, taskContext.TaskName);

            taskContext.TaskInstance.Duration = 0;

            taskContext.TaskInstance.State =
                (int)InstanceState.Failed;

            var dtoOperInstance = new DtoOperInstance
            {
                TaskInstanceId = taskContext.TaskInstance.Id,
                OperationId    = oper.Properties.Id,
                StartTime      = DateTime.Now,
                Duration       = 0,
                ErrorMessage   = e.Message,
                State          = (int)InstanceState.Failed
            };

            dtoOperInstance.Id =
                repository.CreateEntity(dtoOperInstance);

            repository.UpdateEntity(taskContext.TaskInstance);
        }
Exemplo n.º 2
0
        public async Task ExecuteAsync(IReportTaskRunContext taskContext)
        {
            var sqlContext = SqlContextProvider.DefaultInstance
                             .CreateContext(ConnectionString);

            var token = taskContext.CancelSource.Token;

            await sqlContext.UsingConnectionAsync(async connectionContext =>
            {
                var package = taskContext.Packages[Properties.PackageName];

                if (!RunIfVoidPackage && package.DataSets.Count == 0)
                {
                    return;
                }

                var firstSet = packageParser.GetPackageValues(package).First();

                var columns = package.DataSets.First().Columns;

                if (CreateTable)
                {
                    await connectionContext.CreateSimple(new QueryOptions(DbTimeOut), CreateTableByColumnInfo(columns))
                    .ExecuteNonQueryAsync(token);
                }

                //todo:logic for auto-creating table by user-defined list of columns
                if (DropBefore)
                {
                    await connectionContext.CreateSimple(new QueryOptions(DbTimeOut),
                                                         $"IF OBJECT_ID('{TableName}') IS NOT NULL DELETE {TableName}")
                    .ExecuteNonQueryAsync(token);
                }

                StringBuilder comm = new StringBuilder($@"INSERT INTO {TableName} (");
                for (int i = 0; i < columns.Count - 1; i++)
                {
                    comm.Append($@"[{columns[i].Name}],");
                }

                comm.Append($@"[{columns.Last().Name}]) VALUES (");

                foreach (var row in firstSet.Rows)
                {
                    var fullRowData = new StringBuilder(comm.ToString());
                    int i;

                    for (i = 0; i < columns.Count - 1; i++)
                    {
                        fullRowData.Append($"@p{i},");
                    }

                    fullRowData.Append($"@p{i})");

                    await connectionContext
                    .CreateSimple(new QueryOptions(DbTimeOut), fullRowData.ToString(), row.ToArray())
                    .ExecuteNonQueryAsync(token);
                }
            });
        }
Exemplo n.º 3
0
        protected virtual async Task ExportDataSet(IReportTaskRunContext taskContext, DbConnection connection)
        {
            var token = taskContext.CancelSource.Token;

            var package = taskContext.Packages[Properties.PackageName];

            if (!RunIfVoidPackage && package.DataSets.Count == 0)
            {
                return;
            }

            var firstSet = packageParser.GetPackageValues(package).First();

            var columns = package.DataSets.First().Columns;

            if (CreateTable)
            {
                await connection.ExecuteAsync(new CommandDefinition(BuildCreateTableQuery(columns),
                                                                    commandTimeout : DbTimeOut,
                                                                    cancellationToken : token)); //todo:logic for auto-creating table by user-defined list of columns?
            }
            connection.Open();
            await using var transaction = connection.BeginTransaction();

            try
            {
                if (DropBefore)
                {
                    await connection.ExecuteAsync(new CommandDefinition(CleanTableQuery,
                                                                        commandTimeout : DbTimeOut, cancellationToken : token, transaction : transaction));
                }

                var query = BuildInsertQuery(columns);

                var dynamicRows = firstSet.Rows.Select(row =>
                {
                    var p = new DynamicParameters();

                    for (int i = 0; i < row.Count; i++)
                    {
                        p.Add($"@p{i}", row[i]);
                    }

                    return(p);
                });

                await connection.ExecuteAsync(new CommandDefinition(
                                                  query, dynamicRows,
                                                  commandTimeout : DbTimeOut, cancellationToken : token,
                                                  transaction : transaction));

                transaction.Commit();
            }

            catch
            {
                transaction.Rollback();
                throw;
            }
        }
Exemplo n.º 4
0
        public async Task <string> RunTaskAndGetLastViewAsync(IReportTaskRunContext taskContext)
        {
            await Task.Factory.StartNew(() =>
                                        RunTask(taskContext));

            var val = taskContext.Packages.LastOrDefault().Value;

            return(taskContext.DefaultExporter.GetDefaultPackageView(taskContext.TaskName, val));
        }
Exemplo n.º 5
0
        public void Execute(IReportTaskRunContext taskContext)
        {
            var query    = $"select DataSet from [OperInstance] with(nolock) where id={OperInstanceId}";
            var instance = repos.GetBaseQueryResult(query);

            var package = OperationPackage.Parser.ParseFrom(archiver.ExtractFromByteArchive(instance as byte[]));

            taskContext.Packages[Properties.PackageName] = package;
        }
Exemplo n.º 6
0
        public void Execute(IReportTaskRunContext taskContext)
        {
            using var client = new SftpClient(Host, Login, Password);
            client.Connect();

            using FileStream fstr =
                      File.Create(Path.Combine(taskContext.DataFolderPath,
                                               Path.GetFileName(FilePath) ?? throw new SftpPathNotFoundException("Incorrect file name in file path!")));
            client.DownloadFile(FilePath, fstr);
        }
Exemplo n.º 7
0
        public async Task ExecuteAsync(IReportTaskRunContext taskContext)
        {
            var query = $@"select ""DataSet"" from ""OperInstance"" with(nolock) where ""Id""={OperInstanceId}";

            var instance = await repos.GetBaseQueryResult(query, taskContext.CancelSource.Token);

            var package = OperationPackage.Parser.ParseFrom(archiver.ExtractFromByteArchive(instance as byte[]));

            taskContext.Packages[Properties.PackageName] = package;
        }
Exemplo n.º 8
0
        private void SaveFileToServer(IReportTaskRunContext taskContext, SftpClient client)
        {
            var fullPath = Path.Combine(FileFolder == "Default folder" ? taskContext.DataFolderPath : FileFolder,
                                        FileName);

            using (FileStream fstr =
                       File.OpenRead(fullPath))
            {
                client.UploadFile(fstr, Path.Combine(FolderPath, FileName));
            }
        }
Exemplo n.º 9
0
        public async Task ExecuteAsync(IReportTaskRunContext taskContext)
        {
            var package = taskContext.Packages[Properties.PackageName];

            if (!RunIfVoidPackage && package.DataSets.Count == 0)
            {
                return;
            }

            var context = SqlContextProvider.DefaultInstance
                          .CreateContext(ConnectionString);


            //Properties.Id = 3;
            //taskContext.TaskId = 3;

            if (await context.CreateSimple($@"IF OBJECT_ID('{ExportTableName}') IS NOT NULL
                IF EXISTS(SELECT * FROM {ExportTableName} WHERE id = {taskContext.TaskId})
				AND OBJECT_ID('{ExportInstanceTableName}') IS NOT NULL
                AND  EXISTS(SELECT 1 FROM sys.columns 
				  WHERE Name = 'Id'
				  AND Object_ID = Object_ID('{ExportInstanceTableName}'))
				  AND  EXISTS(SELECT 1 FROM sys.columns 
				  WHERE Name = 'Created'
				  AND Object_ID = Object_ID('{ExportInstanceTableName}')) 
				  AND  EXISTS(SELECT 1 FROM sys.columns 
				  WHERE Name = 'ReportID'
				  AND Object_ID = Object_ID('{ExportInstanceTableName}')) 
				  AND  EXISTS(SELECT 1 FROM sys.columns 
				  WHERE Name = 'DataPackage'
				  AND Object_ID = Object_ID('{ExportInstanceTableName}'))  
                SELECT 1
                ELSE SELECT 0").ExecuteQueryFirstColumnAsync <int>().First() != 1)
            {
                return;
            }

            byte[] archivedPackage;

            using (var stream = new MemoryStream())
            {
                package.WriteTo(stream);
                archivedPackage = archiver.CompressStream(stream);
            }

            var newInstance = new
            {
                ReportID    = taskContext.TaskId,
                Created     = DateTime.Now,
                DataPackage = archivedPackage
            };

            await context.InsertAsync(ExportInstanceTableName, newInstance, new QueryOptions(DbTimeOut), "Id");
        }
Exemplo n.º 10
0
        public async Task <string> GetCurrentViewAsync(IReportTaskRunContext context)
        {
            var taskWorker = autofac.Resolve <ITaskWorker>();

            var defaultView =
                await taskWorker.RunTaskAndGetLastViewAsync(context);

            return(string.IsNullOrEmpty(defaultView)
                ? null
                : defaultView);
        }
Exemplo n.º 11
0
        public void Execute(IReportTaskRunContext taskContext)
        {
            var sqlContext = SqlContextProvider.DefaultInstance
                             .CreateContext(ConnectionString);

            var package = taskContext.Packages[Properties.PackageName];

            if (!RunIfVoidPackage && package.DataSets.Count == 0)
            {
                return;
            }

            var firstSet = packageParser.GetPackageValues(package).First();

            var columns = package.DataSets.First().Columns;

            if (CreateTable)
            {
                sqlContext.CreateSimple(new QueryOptions(DbTimeOut), CreateTableByColumnInfo(columns))
                .ExecuteNonQuery();
            }

            if (DropBefore)
            {
                sqlContext.CreateSimple(new QueryOptions(DbTimeOut),
                                        $"IF OBJECT_ID('{TableName}') IS NOT NULL DELETE {TableName}")
                .ExecuteNonQuery();
            }

            StringBuilder comm = new StringBuilder($@"INSERT INTO {TableName} (");

            for (int i = 0; i < columns.Count - 1; i++)
            {
                comm.Append($@"[{columns[i].Name}],");
            }

            comm.Append($@"[{columns.Last().Name}]) VALUES (");

            foreach (var row in firstSet.Rows)
            {
                var fullRowData = new StringBuilder(comm.ToString());
                int i;

                for (i = 0; i < columns.Count - 1; i++)
                {
                    fullRowData.Append($"@p{i},");
                }

                fullRowData.Append($"@p{i})");

                sqlContext.CreateSimple(new QueryOptions(DbTimeOut), fullRowData.ToString(), row.ToArray())
                .ExecuteNonQuery();
            }
        }
Exemplo n.º 12
0
        public async Task RunTaskAndSendLastViewAsync(IReportTaskRunContext taskContext,
                                                      string mailAddress)
        {
            var view = await RunTaskAndGetLastViewAsync(taskContext);

            if (string.IsNullOrEmpty(view))
            {
                return;
            }

            taskContext.DefaultExporter.ForceSend(view, taskContext.TaskName, mailAddress);
        }
Exemplo n.º 13
0
        private void Execute(IReportTaskRunContext taskContext)
        {
            using var client = new SftpClient(Host, Login, Password);

            client.Connect();

            if (ClearInterval > 0)
            {
                CleanupFolder(client);
            }

            if (!string.IsNullOrEmpty(FileName) && !string.IsNullOrEmpty(SourceFileFolder))
            {
                SaveFileToServer(taskContext, client);
            }

            if (string.IsNullOrEmpty(Properties.PackageName))
            {
                return;
            }

            var package = taskContext.Packages[Properties.PackageName];

            if (!RunIfVoidPackage && package.DataSets.Count == 0)
            {
                return;
            }

            var packageFileName = (string.IsNullOrEmpty(PackageRename)
                                      ? $@"{Properties.PackageName}"
                                      : taskContext.SetStringParameters(PackageRename))
                                  + (DateInName
                                      ? $" {DateTime.Now:dd.MM.yy}"
                                      : null);

            if (ConvertPackageToXlsx)
            {
                SaveXlsxPackageToServer(package, packageFileName, client);
            }

            if (ConvertPackageToJson)
            {
                SaveJsonPackageToServer(package, packageFileName, client);
            }

            if (ConvertPackageToCsv)
            {
                SaveCsvPackageToServer(package, packageFileName, client);
            }

            //if (ConvertPackageToXml)
            //    SaveXmlFileToServer(package, packageFileName, client);
        }
Exemplo n.º 14
0
        public void Execute(IReportTaskRunContext taskContext)
        {
            var sqlContext = SqlContextProvider.DefaultInstance
                             .CreateContext(ConnectionString);

            var parValues   = new List <object>();
            var actualQuery = taskContext.SetQueryParameters(parValues, Query);

            sqlContext.UsingConnection(connectionContext =>
            {
                if (parValues.Count > 0)
                {
                    connectionContext
                    .CreateSimple(new QueryOptions(TimeOut), $"{actualQuery}",
                                  parValues.ToArray())
                    .UseReader(reader =>
                    {
                        var pack = packageBuilder.GetPackage(reader, GroupNumbers);

                        for (int i = 0; i < DataSetNames.Count; i++)
                        {
                            if (pack.DataSets.ElementAtOrDefault(i) != null)
                            {
                                pack.DataSets[i].Name = DataSetNames[i];
                            }
                        }

                        taskContext.Packages[Properties.PackageName] = pack;
                    });
                }

                else
                {
                    connectionContext
                    .CreateSimple(new QueryOptions(TimeOut), $"{actualQuery}")
                    .UseReader(reader =>
                    {
                        var pack = packageBuilder.GetPackage(reader, GroupNumbers);

                        for (int i = 0; i < DataSetNames.Count; i++)
                        {
                            if (pack.DataSets.ElementAtOrDefault(i) != null)
                            {
                                pack.DataSets[i].Name = DataSetNames[i];
                            }
                        }

                        taskContext.Packages[Properties.PackageName] = pack;
                    });
                }
            });
        }
Exemplo n.º 15
0
        public async Task ExecuteAsync(IReportTaskRunContext taskContext)
        {
            var service = autofac.Resolve <IEmailClientService>();

            var attachmentMimePart = await service.GetFileFromEmail
                                         (emailSettings, taskContext.CancelSource.Token);

            using FileStream fstr =
                      File.Create(Path.Combine(taskContext.DataFolderPath,
                                               emailSettings.AttachmentName));

            attachmentMimePart.Content.DecodeTo(fstr);
        }
Exemplo n.º 16
0
        private void SaveFileToServer(IReportTaskRunContext taskContext, SftpClient client)
        {
            var localFileName = Path.GetFileNameWithoutExtension(FileName) +
                                (DateInName ? $" {DateTime.Now:dd.MM.yy}" : null)
                                + Path.GetExtension(FileName);

            var fullPath = Path.Combine(SourceFileFolder == "Default folder" ? taskContext.DataFolderPath : SourceFileFolder,
                                        FileName);

            using FileStream fstr = File.OpenRead(fullPath);

            client.UploadFile(fstr, Path.Combine(FolderPath, localFileName));
        }
Exemplo n.º 17
0
        public void Execute(IReportTaskRunContext taskContext)
        {
            var fullPath = Path.Combine(FileFolder == "Default folder" ? taskContext.DataFolderPath : FileFolder,
                                        FileName);

            var fi = new FileInfo(fullPath);

            using (var pack = new ExcelPackage(fi))
            {
                var package = packageBuilder.GetPackage(pack, ExcelParameters, GroupNumbers);
                taskContext.Packages[Properties.PackageName] = package;
            }
        }
Exemplo n.º 18
0
        public async Task ExecuteAsync(IReportTaskRunContext taskContext)
        {
            var package = taskContext.Packages[PackageName];

            if (!RunIfVoidPackage && package.DataSets.Count == 0)
            {
                return;
            }

            await bot.SendTextMessageAsync(channel.ChatId,
                                           viewExecutor.ExecuteTelegramView(package, ReportName, UseAllSets),
                                           ParseMode.Markdown, cancellationToken : taskContext.CancelSource.Token);
        }
Exemplo n.º 19
0
        public void Execute(IReportTaskRunContext taskContext)
        {
            var package = taskContext.Packages[PackageName];

            if (!RunIfVoidPackage && package.DataSets.Count == 0)
            {
                return;
            }

            bot.SendTextMessageAsync(channel.ChatId,
                                     viewExecutor.ExecuteTelegramView(package, ReportName),
                                     ParseMode.Markdown)
            .Wait();
        }
        public override async Task ExecuteAsync(IReportTaskRunContext taskContext)
        {
            int parameterGlobalIdx = 0;

            foreach (var packageName in GetRequiredPackageNames(Query))
            {
                if (taskContext.Packages.ContainsKey(packageName) == false)
                {
                    throw new InvalidOperationException($"Required package, name:{packageName} doesn`t exist in the task context.");
                }

                complexScriptCreator.BuildPackageExportQuery(taskContext.Packages[packageName], packageName, commandInitializer, ref parameterGlobalIdx);
            }

            complexScriptCreator.BuildMainQuery(taskContext.Parameters, Query, commandInitializer, parameterGlobalIdx);
            await ExecuteCommand(taskContext);
        }
Exemplo n.º 21
0
        private void SaveFileToServer(IReportTaskRunContext taskContext, Session session)
        {
            var fullPath = Path.Combine(
                SourceFileFolder == "Default folder" ? taskContext.DataFolderPath : SourceFileFolder,
                FileName);

            var uri = Path.Combine(FolderPath, FileName);

            TransferOptions transferOptions = new TransferOptions
            {
                TransferMode = TransferMode.Binary
            };

            var transferResult = session.PutFiles(fullPath, uri, false, transferOptions);

            transferResult.Check();
        }
Exemplo n.º 22
0
        private MailMessage ConfigureMessage(IReportTaskRunContext taskContext, string filename)
        {
            var msg = new MailMessage
            {
                From    = new MailAddress(fromAddress),
                Subject = filename
            };

            msg.AddRecipientsFromGroup(addresses);

            if (!string.IsNullOrEmpty(RecepientsDatasetName))
            {
                msg.AddRecipientsFromPackage(taskContext.Packages[RecepientsDatasetName]);
            }

            return(msg);
        }
Exemplo n.º 23
0
        private void Execute(IReportTaskRunContext taskContext)
        {
            var fullPath = Path.Combine(FileFolder == "Default folder" ? taskContext.DataFolderPath : FileFolder,
                                        FileName);

            var fi = new FileInfo(fullPath);

            using var pack = new ExcelPackage(fi);

            var package = packageBuilder.GetPackage(pack, ExcelParameters, GroupNumbers);

            if (SendVoidPackageError && !package.DataSets.Any())
            {
                throw new InvalidDataException("No datasets obtaned during import");
            }

            taskContext.Packages[Properties.PackageName] = package;
        }
Exemplo n.º 24
0
        public void Execute(IReportTaskRunContext taskContext)
        {
            var fullPath = Path.Combine(FileFolder == "Default folder" ? taskContext.DataFolderPath :
                                        FileFolder, FileName);

            using (var textReader =
                       File.OpenText(fullPath))
            {
                using (var csvReader = new CsvReader(textReader))
                {
                    csvReader.Configuration.Delimiter = Delimiter;

                    var pack = packageBuilder.GetPackage(csvReader, GroupNumbers);
                    pack.DataSets.First().Name = DataSetName;

                    taskContext.Packages[Properties.PackageName] = pack;
                }
            }
        }
Exemplo n.º 25
0
        protected virtual void FillPackage(DbDataReader reader, IReportTaskRunContext taskContext)
        {
            var pack = packageBuilder.GetPackage(reader, GroupNumbers);

            if (SendVoidPackageError && !pack.DataSets.Any())
            {
                throw new InvalidDataException("No datasets obtaned during import");
            }

            for (int i = 0; i < DataSetNames.Count; i++)
            {
                if (pack.DataSets.ElementAtOrDefault(i) != null)
                {
                    pack.DataSets[i].Name = DataSetNames[i];
                }
            }

            taskContext.Packages[Properties.PackageName] = pack;
        }
Exemplo n.º 26
0
        public override async Task ExecuteAsync(IReportTaskRunContext taskContext)
        {
            var parValues = new DynamicParameters();

            var actualQuery = taskContext.SetQueryParameters(parValues, Query);

            var token = taskContext.CancelSource.Token;

            for (int i = 0; i < TriesCount; i++)
            {
                try
                {
                    await using var connection = new SqlConnection(ConnectionString);

                    await using var reader =
                                    await connection.ExecuteReaderAsync(new CommandDefinition (
                                                                            $"{actualQuery}", parValues, commandTimeout : TimeOut));

                    FillPackage(reader, taskContext);

                    break;
                }

                catch (Exception e)
                {
                    if (!(e is SqlException se))
                    {
                        throw e;
                    }

                    if (i >= TriesCount - 1)
                    {
                        throw se;
                    }

                    await Task.Delay(rnd.Next(1000, 60000), token);
                }
            }
        }
Exemplo n.º 27
0
        protected async override Task ExecuteCommand(IReportTaskRunContext taskContext)
        {
            var token = taskContext.CancelSource.Token;

            for (int i = 0; i < TriesCount; i++)
            {
                using var connection = new SqlConnection(ConnectionString);
                connection.Open();
                using var transaction = connection.BeginTransaction();
                try
                {
                    var resultedExportPackagesCommand = commandInitializer.ResolveCommand();
                    resultedExportPackagesCommand.Connection  = connection;
                    resultedExportPackagesCommand.Transaction = transaction;

                    using var reader = await resultedExportPackagesCommand.ExecuteReaderAsync(token);

                    FillPackage(reader, taskContext);

                    break;
                }
                catch (Exception e)
                {
                    if (!(e is SqlException se))
                    {
                        throw e;
                    }

                    if (i >= TriesCount - 1)
                    {
                        throw se;
                    }

                    transaction.Rollback();
                    await Task.Delay(rnd.Next(1000, 60000), token);
                }
            }
        }
Exemplo n.º 28
0
        protected async Task ExportPackage(IReportTaskRunContext taskContext, DbConnection connection)
        {
            var package = taskContext.Packages[Properties.PackageName];

            if (!RunIfVoidPackage && package.DataSets.Count == 0)
            {
                return;
            }

            var token = taskContext.CancelSource.Token;

            var dbStructureExists = await dbStructureChecker.CheckIfDbStructureExists(connection, taskContext);

            if (!dbStructureExists)
            {
                var msg = $"The export database structure doesn't contain the data required for export. Required ExportTableName: {ExportTableName}, ExportInstanceTableName: {ExportInstanceTableName}.";
                throw new Exception(msg);
            }

            byte[] archivedPackage;

            await using (var stream = new MemoryStream())
            {
                package.WriteTo(stream);
                archivedPackage = archiver.CompressStream(stream);
            }

            var newInstance = new
            {
                ReportID    = taskContext.TaskId,
                Created     = DateTime.Now,
                DataPackage = archivedPackage
            };

            await connection.ExecuteAsync(new CommandDefinition(InsertQuery,
                                                                newInstance, commandTimeout : DbTimeOut,
                                                                cancellationToken : token));
        }
Exemplo n.º 29
0
        private void Execute(IReportTaskRunContext taskContext)
        {
            var fullPath = Path.Combine(FileFolder == "Default folder" ? taskContext.DataFolderPath : FileFolder,
                                        FileName);

            using var textReader = File.OpenText(fullPath);
            using var csvReader  = new CsvReader(textReader);

            csvReader.Configuration.Delimiter = Delimiter;

            var pack = packageBuilder.GetPackage(csvReader, GroupNumbers);

            if (SendVoidPackageError && !pack.DataSets.Any())
            {
                throw new InvalidDataException("No datasets obtaned during import");
            }

            if (!string.IsNullOrEmpty(DataSetName))
            {
                pack.DataSets.First().Name = DataSetName;
            }

            taskContext.Packages[Properties.PackageName] = pack;
        }
Exemplo n.º 30
0
 public abstract Task ExecuteAsync(IReportTaskRunContext taskContext);