public async Task ReadByDateAndUserAsync_Should_Filter_By_UserId()
        {
            var teamId     = Guid.NewGuid();
            var userId1    = Guid.NewGuid();
            var userId2    = Guid.NewGuid();
            var reportDate = new DateTime(2019, 1, 14);
            var reportDateItemIdentifier = new ReportDateItemIdentifier
            {
                TeamId = teamId,
                Date   = reportDate,
                UserId = userId1
            };
            var reportTask1 = new ReportTask
            {
                Id                 = Guid.NewGuid(),
                CurrentState       = "some state",
                Problems           = "some problems",
                Url                = "some url",
                Theme              = "some theme",
                IsPublic           = true,
                DateItemIdentifier = reportDateItemIdentifier
            };
            var reportTask2 = new ReportTask
            {
                Id                 = Guid.NewGuid(),
                CurrentState       = "some state2",
                Problems           = "some problems2",
                Url                = "some url2",
                Theme              = "some theme2",
                IsPublic           = true,
                DateItemIdentifier = new ReportDateItemIdentifier
                {
                    Date   = reportDateItemIdentifier.Date,
                    UserId = userId2,
                    TeamId = reportDateItemIdentifier.TeamId
                }
            };
            var reportTask3 = new ReportTask
            {
                Id                 = Guid.NewGuid(),
                CurrentState       = "some state3",
                Problems           = "some problems",
                Url                = "some url3",
                Theme              = "some theme3",
                IsPublic           = true,
                DateItemIdentifier = reportDateItemIdentifier
            };

            await repository.SaveAsync(reportTask1).ConfigureAwait(false);

            await repository.SaveAsync(reportTask2).ConfigureAwait(false);

            await repository.SaveAsync(reportTask3).ConfigureAwait(false);

            var readedTask = await repository.ReadByDateAndUserAsync(reportDateItemIdentifier, true).ConfigureAwait(false);

            readedTask.Should().BeEquivalentTo(new List <ReportTask> {
                reportTask1, reportTask3
            });
        }
Пример #2
0
        public StaticCommandList()
        {
            InitializeComponent();
            _myContext  = new MyContext();
            _reportTask = new ReportTask();
            IoC.Container.Register <IHistoryManager, HistoryManager <MyContext> >();
            IoC.Container.Register <MyContext, MyContext>();

            var historyBrowserConfiguation = IoC.Resolve <IHistoryBrowserConfiguration>();
            var historyManagerRetriever    = IoC.Resolve <IHistoryManagerRetriever>();

            historyBrowserConfiguation.AddDynamicColumn("p1", "A wonderful p1");
            historyBrowserConfiguation.AddDynamicColumn("p2", "A great p2");

            HistoryColumns.ColumnByName("p1").Position = 0;
            HistoryColumns.User.Position               = 1;
            HistoryColumns.Description.Position        = 2;
            HistoryColumns.ColumnByName("p2").Position = 3;
            HistoryColumns.Description.Position        = 4;
            HistoryColumns.State.Position              = 5;

            _historyManager = historyManagerRetriever.Current;

            _historyBrowserPresenter = IoC.Resolve <IHistoryBrowserPresenter>();
            _historyBrowserPresenter.Initialize();

            var control = _historyBrowserPresenter.View as Control;

            control.Dock = DockStyle.Fill;
            panelControl1.Controls.Add(control);

            _historyBrowserPresenter.HistoryManager = _historyManager;
            _historyBrowserPresenter.UpdateHistory();
        }
Пример #3
0
        protected void RunTask(IReportItem reportItem)
        {
            if (this.TaskRunning != null)
            {
                this.TaskRunning(this, new EventArgs());
            }

            IError     error = null;
            ReportTask task  = null;

            try
            {
                task = reportItem as ReportTask;
                ExportEngine engine = new ExportEngine(QlikViewConnectorProxy.Instance);
                engine.Logger = new QVConfigLog();
                error         = engine.RunTask(task, ReportConfig.SmtpServerManager.SmtpServer);
            }
            catch (Exception ex)
            {
                if (error == null)
                {
                    error = new QvError();
                }
                error.ErrorMessage.Append(ex.StackTrace);
                error.HasError = true;
            }

            this.DeleteAllExportedFiles(task);
            if (this.TaskRunCompleted != null)
            {
                this.TaskRunCompleted(error);
            }
        }
Пример #4
0
        public void Setup()
        {
            processor = new ReportTask();
            payer     = DataMother.CreatePayer();

            Save(payer);
        }
        public async Task ReadByDateAndUserAsync_Should_Return_Exactly_Saved_Task()
        {
            var teamId     = Guid.NewGuid();
            var userId     = Guid.NewGuid();
            var reportDate = new DateTime(2019, 1, 14);
            var reportDateItemIdentifier = new ReportDateItemIdentifier
            {
                TeamId = teamId,
                Date   = reportDate,
                UserId = userId
            };
            var reportTask = new ReportTask
            {
                Id                 = Guid.NewGuid(),
                CurrentState       = "some state",
                Problems           = "some problems",
                Url                = "some url",
                Theme              = "some theme",
                IsPublic           = true,
                DateItemIdentifier = reportDateItemIdentifier
            };

            await repository.SaveAsync(reportTask).ConfigureAwait(false);

            var readedTask = await repository.ReadByDateAndUserAsync(reportDateItemIdentifier, true).ConfigureAwait(false);

            readedTask.Should().BeEquivalentTo(reportTask);
        }
Пример #6
0
        public void ReportAdd(QlikViewReport report)
        {
            ReportTask task = this.ReportItem as ReportTask;

            if (task.Reports.ContainsKey(report.Name))
            {
                MessageBox.Show("The same name report exists, cannot add.");
                return;
            }
            task.Reports.Add(report.Name, report);
        }
Пример #7
0
        private void btnFtpSetting_Click(object sender, RoutedEventArgs e)
        {
            ReportTask  task        = this.ViewModel.ReportItem as ReportTask;
            FtpSettings settingForm = new FtpSettings();

            settingForm.FtpServer = task.FtpServer;

            if (settingForm.ShowDialog() == true)
            {
                task.FtpServer = settingForm.FtpServer;
            }
        }
Пример #8
0
        public void RecipientDelete(Recipient recipient)
        {
            if (recipient == null)
            {
                MessageBox.Show("Please select a recipient.");
                return;
            }

            if (MessageBox.Show("Do you want to delete the recipient " + recipient.Name, "Delete", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
            {
                ReportTask task = this.ReportItem as ReportTask;
                task.Recipients.Remove(recipient.Name);
            }
        }
Пример #9
0
 public void ReportDelete(QlikViewReport report)
 {
     if (report == null)
     {
         MessageBox.Show("Please select an report.");
         return;
     }
     if (MessageBox.Show("Do you want to delete the report " + report.Name, "Delete", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
     {
         ReportTask task = this.ReportItem as ReportTask;
         task.Reports.Remove(report.Name);
         this.ReportList.Add(report);
     }
 }
Пример #10
0
        public void Run(string task)
        {
            ReportItemDictionary <ReportTask> tasks = ReportConfig.ReportTaskManager.ItemCollection;

            ExportEngine engine = new ExportEngine(new QlikViewConnector());

            engine.Logger = this.Logger;

            ReportTask taskItem = tasks.Values.FirstOrDefault(x => x.Name.ToString() == task);

            if (taskItem != null)
            {
                Console.WriteLine("Running task first time: " + taskItem.Name + ".......");
                engine.Logger.Message("Running task first time: " + taskItem.Name + ".......");
                IError error = engine.RunTask(taskItem, ReportConfig.SmtpServerManager.SmtpServer);

                if (error.HasError == false)
                {
                    Console.WriteLine("Running task fisrt time" + taskItem.Name + " complete.......");
                    engine.Logger.Message("Running task fisrt time" + taskItem.Name + " complete.......");
                }
                else
                {
                    Console.WriteLine("Running task fisrt time " + taskItem.Name + " failed.......");
                    engine.Logger.Error("Running task fisrt time " + taskItem.Name + " failed....... \n" + error.ErrorMessage.ToString());
                    //MailHelper.ExceptionNotify("Running task fisrt time " + taskItem.Name + " failed", error.ErrorMessage.ToString(), ReportConfig.Instance.SmtpServer);

                    Console.WriteLine("Running task second time: " + taskItem.Name + ".......");
                    engine.Logger.Message("Running task second time: " + taskItem.Name + ".......");

                    error = engine.RunTask(taskItem, ReportConfig.SmtpServerManager.SmtpServer);

                    if (error.HasError)
                    {
                        MailHelper.ExceptionNotify("Running task second time " + taskItem.Name + " failed", error.ErrorMessage.ToString(), ReportConfig.SmtpServerManager.SmtpServer);
                    }
                }
            }
            else
            {
                engine.Logger.Error(string.Format("There is no task {0}. ", task));
            }

            this.Close();
        }
Пример #11
0
        private void DeleteAllExportedFiles(ReportTask task)
        {
            string folder = string.Empty;

            if (task.OutputFolder.EndsWith(@"\"))
            {
                folder = task.OutputFolder.Remove(task.OutputFolder.Length - 1);
            }
            else
            {
                folder = task.OutputFolder;
            }

            if (File.Exists(folder + @"\DeleteCmd.bat"))
            {
                System.Diagnostics.Process.Start(folder + @"\DeleteCmd.bat");
            }
        }
        public async Task ReadByDateAndUserAsync_Should_Return_Empty_List_If_There_Are_No_Suitable_Tasks()
        {
            var reportDateItemIdentifier = new ReportDateItemIdentifier
            {
                TeamId = Guid.NewGuid(),
                Date   = new DateTime(2019, 1, 14),
                UserId = Guid.NewGuid()
            };
            var reportTask1 = new ReportTask
            {
                Id                 = Guid.NewGuid(),
                CurrentState       = "some state",
                Problems           = "some problems",
                Url                = "some url",
                Theme              = "some theme",
                IsPublic           = true,
                DateItemIdentifier = reportDateItemIdentifier
            };
            var reportTask2 = new ReportTask
            {
                Id                 = Guid.NewGuid(),
                CurrentState       = "some state2",
                Problems           = "some problems2",
                Url                = "some url2",
                Theme              = "some theme2",
                IsPublic           = false,
                DateItemIdentifier = reportDateItemIdentifier
            };

            await repository.SaveAsync(reportTask1).ConfigureAwait(false);

            await repository.SaveAsync(reportTask2).ConfigureAwait(false);

            var readedTask = await repository.ReadByDateAndUserAsync(new ReportDateItemIdentifier
            {
                Date   = DateTime.Now,
                UserId = Guid.NewGuid(),
                TeamId = Guid.NewGuid()
            }, true).ConfigureAwait(false);

            readedTask.Should().BeEquivalentTo(EmptyCollection <ReportTask> .List);
        }
        public async Task DeleteAsync_Should_Do_Nothing_When_Trying_To_Delete_Absent_Task()
        {
            var reportDateItemIdentifier = new ReportDateItemIdentifier
            {
                TeamId = Guid.NewGuid(),
                Date   = new DateTime(2019, 1, 14),
                UserId = Guid.NewGuid()
            };
            var taskId1     = Guid.NewGuid();
            var reportTask1 = new ReportTask
            {
                Id                 = taskId1,
                CurrentState       = "some state",
                Problems           = "some problems",
                Url                = "some url",
                Theme              = "some theme",
                IsPublic           = true,
                DateItemIdentifier = reportDateItemIdentifier
            };
            var reportTask2 = new ReportTask
            {
                Id                 = Guid.NewGuid(),
                CurrentState       = "some state2",
                Problems           = "some problems2",
                Url                = "some url2",
                Theme              = "some theme2",
                IsPublic           = true,
                DateItemIdentifier = reportDateItemIdentifier
            };

            await repository.SaveAsync(reportTask1).ConfigureAwait(false);

            await repository.SaveAsync(reportTask2).ConfigureAwait(false);

            await repository.DeleteAsync(Guid.NewGuid()).ConfigureAwait(false);

            var readedTask = await repository.ReadByDateAsync(reportDateItemIdentifier.TeamId, reportDateItemIdentifier.Date, true).ConfigureAwait(false);

            readedTask.Should().BeEquivalentTo(new List <ReportTask> {
                reportTask1, reportTask2
            });
        }
Пример #14
0
 private void CreateTemplate(ReportTask task)
 {
     System.Diagnostics.Debug.WriteLine(string.Format("Neuer Report Task: Template erstellen {0}", task.TaskId));
     try
     {
         using (Report_PPT report = new Report_PPT(task, _globalSettings.ReportDirectory_PPT, _globalSettings.ReportDirectory_PPT_Template, _rm, _globalSettings)) {
             try
             {
                 report.Process();
             }catch (Exception e)
             {
                 report.AddErrorToLog(e.ToString());
                 System.Diagnostics.Debug.WriteLine("Fehler Template erstellen: " + e.ToString());
             }
         }
     }
     catch (Exception ex)
     {
         System.Diagnostics.Debug.WriteLine("Fehler Template erstellen: " + ex.ToString());
     }
 }
Пример #15
0
        public Task SaveAsync(ReportTask reportTask)
        {
            if (reportTask == null)
            {
                throw new ArgumentNullException(nameof(reportTask));
            }
            if (reportTask.DateItemIdentifier == null)
            {
                throw new ArgumentNullException(nameof(ReportTask.DateItemIdentifier));
            }

            return(queryExecuter.QueryAsync(async connection =>
            {
                var saveParameters = new ReportTaskStored
                {
                    Id = reportTask.Id,
                    UserId = reportTask.DateItemIdentifier.UserId,
                    TeamId = reportTask.DateItemIdentifier.TeamId,
                    TaskDate = reportTask.DateItemIdentifier.Date,
                    IsPublic = reportTask.IsPublic,
                    Url = reportTask.Url,
                    Theme = reportTask.Theme,
                    CurrentState = reportTask.CurrentState,
                    Problems = reportTask.Problems,
                };
                var saveResult = await connection.ExecuteAsync(SaveQuery, saveParameters).ConfigureAwait(false);
                Log.Information("ReportTask ({Id}, {UserId}, {TeamId}, {TaskDate}, {IsPublic}, {Url}, {Theme}, {CurrentState}, {Problems}) " +
                                "inserted with result {SaveResult}",
                                reportTask.Id,
                                reportTask.DateItemIdentifier.UserId,
                                reportTask.DateItemIdentifier.TeamId,
                                reportTask.DateItemIdentifier.Date,
                                reportTask.IsPublic,
                                reportTask.Url,
                                reportTask.Theme,
                                reportTask.CurrentState,
                                reportTask.Problems,
                                saveResult);
            }));
        }
Пример #16
0
        protected override bool OnQvItemAdd(IReportItem qvItem)
        {
            try
            {
                ReportTask task = qvItem as ReportTask;

                if (string.IsNullOrWhiteSpace(task.Name) || string.IsNullOrWhiteSpace(task.OutputFolder))
                {
                    MessageBox.Show("The name and output folder are required.");
                    return(false);
                }

                ReportConfig.ReportTaskManager.AddItem(qvItem);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return(false);
            }

            return(true);
        }
Пример #17
0
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            ReportTask task = this.ViewModel.ReportItem as ReportTask;

            if (task.Group == null)
            {
                this.comboBoxGroup.SelectedIndex = 0;
            }
            else
            {
                this.comboBoxGroup.SelectedValue = task.Group;
            }

            if (this.ViewModel.IsNew)
            {
                this.gridName.Visibility        = System.Windows.Visibility.Visible;
                this.stackNewActions.Visibility = System.Windows.Visibility.Visible;
            }
            else
            {
                this.gridName.Visibility        = System.Windows.Visibility.Collapsed;
                this.stackNewActions.Visibility = System.Windows.Visibility.Collapsed;
            }
        }
        public void checkSQL()
        {
            string initialSQL = "", error = "";

            try
            {
                if (Instance is ReportModel)
                {
                    ReportModel model = Instance as ReportModel;
                    if (PropertyName == "PreSQL" || PropertyName == "PostSQL")
                    {
                        if (sqlTextBox.Text.StartsWith("@"))
                        {
                            FormHelper.CheckRazorSyntax(sqlTextBox, "", model, _compilationErrors);
                        }
                        error = model.Source.CheckSQL(RazorHelper.CompileExecute(sqlTextBox.Text, model), null, model, true);
                    }
                    else
                    {
                        var sql = !string.IsNullOrEmpty(SqlToCheck) ? SqlToCheck : sqlTextBox.Text;
                        if (model.IsLINQ)
                        {
                            error = model.Source.CheckLINQ(sql, model.FromTables, model);
                        }
                        else
                        {
                            error = model.Source.CheckSQL(sql, model.FromTables, model, false);
                        }
                    }
                }
                if (Instance is MetaEnum)
                {
                    MetaEnum anEnum = Instance as MetaEnum;
                    if (sqlTextBox.Text.StartsWith("@"))
                    {
                        FormHelper.CheckRazorSyntax(sqlTextBox, "", anEnum, _compilationErrors);
                    }
                    error = anEnum.Source.CheckSQL(RazorHelper.CompileExecute(sqlTextBox.Text, anEnum), null, null, false);
                }
                else if (Instance is MetaSource)
                {
                    MetaSource source = Instance as MetaSource;
                    if (PropertyName == "PreSQL" || PropertyName == "PostSQL")
                    {
                        if (sqlTextBox.Text.StartsWith("@"))
                        {
                            FormHelper.CheckRazorSyntax(sqlTextBox, "", source, _compilationErrors);
                        }
                        error = source.CheckSQL(RazorHelper.CompileExecute(sqlTextBox.Text, source), null, null, true);
                    }
                }
                else if (Instance is MetaTable)
                {
                    MetaTable table = Instance as MetaTable;
                    if (PropertyName == "PreSQL" || PropertyName == "PostSQL")
                    {
                        if (sqlTextBox.Text.StartsWith("@"))
                        {
                            FormHelper.CheckRazorSyntax(sqlTextBox, "", table, _compilationErrors);
                        }
                        error = table.Source.CheckSQL(RazorHelper.CompileExecute(sqlTextBox.Text, table), null, null, true);
                    }
                    else
                    {
                        if (PropertyName == "WhereSQL")
                        {
                            initialSQL = table.WhereSQL;
                            if (sqlTextBox.Text.StartsWith("@"))
                            {
                                FormHelper.CheckRazorSyntax(sqlTextBox, "", table, _compilationErrors);
                            }
                            table.WhereSQL = RazorHelper.CompileExecute(sqlTextBox.Text, table);
                        }
                        else
                        {
                            initialSQL = table.Sql;
                            table.Sql  = sqlTextBox.Text;
                        }
                        try
                        {
                            table.CheckTable(null);
                            if (sqlTextBox.ReadOnly)
                            {
                                table.SetReadOnly();
                            }
                            error = table.Error;
                        }
                        finally
                        {
                            if (PropertyName == "WhereSQL")
                            {
                                table.WhereSQL = initialSQL;
                            }
                            else
                            {
                                table.Sql = initialSQL;
                            }
                        }
                    }
                }
                else if (Instance is MetaJoin)
                {
                    MetaJoin join = Instance as MetaJoin;
                    initialSQL = join.Clause;
                    try
                    {
                        join.Clause = sqlTextBox.Text;
                        join.CheckJoin();
                        if (sqlTextBox.ReadOnly)
                        {
                            join.SetReadOnly();
                        }
                        error = join.Error;
                    }
                    finally
                    {
                        join.Clause = initialSQL;
                    }
                }
                else if (Instance is ReportTask)
                {
                    ReportTask task = Instance as ReportTask;
                    if (sqlTextBox.Text.StartsWith("@"))
                    {
                        FormHelper.CheckRazorSyntax(sqlTextBox, "", task, _compilationErrors);
                    }
                    error = task.Source.CheckSQL(RazorHelper.CompileExecute(sqlTextBox.Text, task), null, null, false);
                }
            }
            catch (Exception ex)
            {
                error = ex.Message;
            }

            errorTextBox.Text = error;
            if (!string.IsNullOrEmpty(error))
            {
                toolStripStatusLabel.Text  = "Error";
                toolStripStatusLabel.Image = global::Seal.Properties.Resources.error2;
            }
            else
            {
                toolStripStatusLabel.Text  = "Script checked successfully";
                toolStripStatusLabel.Image = global::Seal.Properties.Resources.checkedGreen;
            }
        }
Пример #19
0
 public TaskHelper(ReportTask task)
 {
     _task = task;
 }
Пример #20
0
        public IError RunTask(ReportTask task, SmtpServer smtpServer)
        {
            IError taskError = new QvError();

            try
            {
                this.Logger.Message("Begin to Run task [" + task.Name + "]------------------------------------------------");

                this.Logger.Message("Preview the connection. ");

                this.ConnectionPreview(task.Reports.Values.First());

                this.Logger.Message(string.Format("Task [{0}] have reports [{1}]", task.Name, string.Join(",", task.Reports.Keys.ToArray())));

                List <ReportContext> reports;
                List <string>        missingExportReports;

                IError error = this.PopulateReportContext(task, smtpServer, out reports, out missingExportReports);

                if (error.HasError)
                {
                    taskError.HasError = true;
                    taskError.ErrorMessage.AppendLine(error.ErrorMessage.ToString());
                }
                else
                {
                    #region Send Mail

                    if (smtpServer.Validate() && reports.Count > 0)
                    {
                        SmtpClientAdaptor smtpClient = new SmtpClientAdaptor(smtpServer);

                        //Get the recipients
                        List <string> recipients = task.Recipients.Values.Select(x => x.Email).ToList();
                        if (task.Group != null)
                        {
                            foreach (var r in task.Group.RecipientList.Values)
                            {
                                if (!recipients.Contains(r.Email))
                                {
                                    recipients.Add(r.Email);
                                }
                            }
                        }

                        if (recipients.Count > 0)
                        {
                            if (task.IsSendMailInSingleMail)
                            {
                                smtpClient.SendEmail(task.MessageDefinition, reports, recipients);
                            }
                            else
                            {
                                foreach (var item in reports)
                                {
                                    List <ReportContext> list = new List <ReportContext>();
                                    list.Add(item);
                                    smtpClient.SendEmail(task.MessageDefinition, list, recipients);
                                }
                            }
                        }
                        else
                        {
                            this.Logger.Error("No recipients set up");
                        }
                    }
                    else
                    {
                        this.Logger.Error("SMTP SERVER Validate failed or there is no report exported, can not send email.");
                        this.Logger.Info("Exported reports count " + reports.Count);
                    }

                    #endregion

                    #region Upload to Ftp Server

                    if (task.FtpServer != null)
                    {
                        string remoteFile = string.Empty;
                        try
                        {
                            FtpClient client = new FtpClient(task.FtpServer.Host, task.FtpServer.Username, task.FtpServer.Password, task.FtpServer.Port);

                            foreach (var item in reports)
                            {
                                if (!string.IsNullOrWhiteSpace(task.FtpServer.Folder))
                                {
                                    remoteFile = task.FtpServer.Folder + (task.FtpServer.Folder.EndsWith("/") ? string.Empty : "/") + item.OutputFullName.Split("\\".ToArray())[item.OutputFullName.Split("\\".ToArray()).Length - 1];
                                }
                                else
                                {
                                    remoteFile = item.OutputFullName.Split("\\".ToArray())[item.OutputFullName.Split("\\".ToArray()).Length - 1];
                                }
                                client.Upload(remoteFile, item.OutputFullName);
                            }
                        }
                        catch (Exception ex)
                        {
                            this.Logger.Error("Ftp upload failed!" + ex.Message + ex.StackTrace);

                            MailHelper.ExceptionNotify("Ftp upload failed", ex.Message + ex.StackTrace + "\n" + "Remote file:" + remoteFile, smtpServer);
                        }
                    }

                    #endregion
                    if (missingExportReports.Count > 0)
                    {
                        string subject = "Some reports can not be exported";
                        string message = string.Join("\n\r", missingExportReports);
                        MailHelper.ExceptionNotify(subject, message, smtpServer);
                        taskError.HasError = true;
                        taskError.ErrorMessage.AppendLine(message);
                    }
                }
            }
            catch (Exception ex)
            {
                this.Logger.Error("Failed to run the task [" + task.Name + "] Error:" + ex.Message + "\n" + ex.StackTrace);

                try
                {
                    if (!string.IsNullOrEmpty(smtpServer.ExceptionTo))
                    {
                        string        subject = "QlikView Report Export&MailSend system Exception";
                        StringBuilder sb      = new StringBuilder();
                        sb.AppendLine("Task name: " + task.Name);
                        sb.AppendLine(string.Empty);
                        sb.AppendLine("Exception message: " + ex.Message);
                        sb.AppendLine("Stack Trace---------------");
                        sb.AppendLine(ex.StackTrace);

                        MailHelper.ExceptionNotify(subject, sb.ToString(), smtpServer);
                        taskError.HasError = true;
                        taskError.ErrorMessage.AppendLine(sb.ToString());
                    }
                }
                catch (Exception ex1)
                {
                    this.Logger.Error("Send exception mail failed. " + ex.Message + "\n" + ex1.StackTrace);
                }
            }

            this.Logger.Message("Complete running the task----------------------------------------------------------");

            return(taskError);
        }
Пример #21
0
        private IError PopulateReportContext(ReportTask task, SmtpServer smtpServer, out List <ReportContext> exportedReports, out List <string> missingReports)
        {
            exportedReports = new List <ReportContext>();
            missingReports  = new List <string>();

            List <ReportContext> excelReports = new List <ReportContext>();

            string folder = string.Empty;

            if (task.OutputFolder.EndsWith(@"\"))
            {
                folder = task.OutputFolder.Remove(task.OutputFolder.Length - 1);
            }
            else
            {
                folder = task.OutputFolder;
            }
            IError error = new QvError();

            #region Export report
            foreach (var item in task.Reports.Values)
            {
                this.Logger.Message("Running report [" + item.Name + "]");
                this.Logger.Message("Setting connection [" + item.Connection.Name + "]");

                string fileName;

                error = this.ExportReport(item, folder, out fileName);

                if (error.HasError == false)
                {
                    if (item.ReportType != Common.ReportType.Excel)
                    {
                        exportedReports.Add(new ReportContext()
                        {
                            Name           = item.Name,
                            Description    = item.Description,
                            OutputFullName = fileName,
                            ReportType     = item.ReportType,
                            HtmlFormat     = this.GetHtml(item, fileName)
                        });
                    }
                    else
                    {
                        excelReports.Add(new ReportContext()
                        {
                            Name           = item.Name,
                            Description    = item.Description,
                            OutputFullName = fileName,
                            ReportType     = item.ReportType,
                            HtmlFormat     = this.GetHtml(item, fileName)
                        });
                    }
                    this.Logger.Message("Export report [" + item.Name + "] complete");
                }
                else
                {
                    missingReports.Add(fileName);
                    this.Logger.Error(string.Format("The report [{0}] cannot be exported.", fileName));
                }
            }

            if (task.IsMergeInSingleExcel)
            {
                this.Logger.Message("Begin Merge in single excel");
                ReportContext mergedReport;
                string        mergedFileName = folder + @"\" + task.Name + ".xls";

                error = this.MergeExcelReports(excelReports, mergedFileName, task.Name, out mergedReport);

                if (error.HasError == false)
                {
                    exportedReports.Add(mergedReport);
                    this.Logger.Message("Succed to merge in single excel");
                }
                else
                {
                    this.Logger.Message("Failed to merge, retain multiple files \n" + error.ErrorMessage);
                    MailHelper.ExceptionNotify("Failed to merge files for task " + task.Name, error.ErrorMessage.ToString(), smtpServer);
                }
            }
            else
            {
                exportedReports.AddRange(excelReports);
            }
            #endregion

            return(error);
        }
        public async Task ReadByDateAsync_Should_Return_Tasks_Of_All_Users_In_Team()
        {
            var teamId     = Guid.NewGuid();
            var userId     = Guid.NewGuid();
            var reportDate = new DateTime(2019, 1, 14);
            var reportDateItemIdentifier = new ReportDateItemIdentifier
            {
                TeamId = teamId,
                Date   = reportDate,
                UserId = userId
            };
            var reportTask1 = new ReportTask
            {
                Id                 = Guid.NewGuid(),
                CurrentState       = "some state",
                Problems           = "some problems",
                Url                = "some url",
                Theme              = "some theme",
                IsPublic           = true,
                DateItemIdentifier = reportDateItemIdentifier
            };
            var reportTask2 = new ReportTask
            {
                Id                 = Guid.NewGuid(),
                CurrentState       = "some state2",
                Problems           = "some problems2",
                Url                = "some url2",
                Theme              = "some theme2",
                IsPublic           = true,
                DateItemIdentifier = reportDateItemIdentifier
            };
            var reportTask3 = new ReportTask
            {
                Id                 = Guid.NewGuid(),
                CurrentState       = "some state3",
                Problems           = "some problems3",
                Url                = "some url3",
                Theme              = "some theme3",
                IsPublic           = true,
                DateItemIdentifier = new ReportDateItemIdentifier
                {
                    Date   = reportDateItemIdentifier.Date.AddDays(2),
                    TeamId = reportDateItemIdentifier.TeamId,
                    UserId = reportDateItemIdentifier.UserId
                }
            };
            var reportTask4 = new ReportTask
            {
                Id                 = Guid.NewGuid(),
                CurrentState       = "some state4",
                Problems           = "some problems4",
                Url                = "some url4",
                Theme              = "some theme4",
                IsPublic           = true,
                DateItemIdentifier = new ReportDateItemIdentifier
                {
                    Date   = reportDateItemIdentifier.Date,
                    TeamId = reportDateItemIdentifier.TeamId,
                    UserId = Guid.NewGuid()
                }
            };

            await repository.SaveAsync(reportTask1).ConfigureAwait(false);

            await repository.SaveAsync(reportTask3).ConfigureAwait(false);

            await repository.SaveAsync(reportTask2).ConfigureAwait(false);

            await repository.SaveAsync(reportTask4).ConfigureAwait(false);

            var readedTask = await repository.ReadByDateAsync(teamId, reportDate, true).ConfigureAwait(false);

            readedTask.Should().BeEquivalentTo(new List <ReportTask> {
                reportTask1, reportTask2, reportTask4
            });
        }
Пример #23
0
 public void start()
 {
     if (this.messageHandler == null)
         throw new NullReferenceException("messageHandler must not be null");
     if (this.reportUrl == null)
         throw new NullReferenceException("reportUrl must not be null");
     int queueSizeMultiple = 20;
     long reportTimerInterval = 50;
     //初始化消息队列
     queue = new MessageCircleQueue(reportCount * queueSizeMultiple, timeoutSeconds);
     //初始化消费线程数组
     consumerThreads = new Thread[consumerThreadCount];
     //构建消费者线程的Task任务
     consumeTask = new consumeThreadTask(messageHandler, queue);
     //构建线程委托任务
     ThreadStart threadTask = new ThreadStart(consumeTask.doTask);
     for (int i = 0; i < consumerThreads.Length; i++)
     {
         consumerThreads[i] = new Thread(threadTask);
         consumerThreads[i].Start();
     }
     reportTask = new ReportTask(queue, reportUrl, appKey, secret);
     reportTask.reportCount = reportCount;
     reportTask.reportInterval = reportInterval;
     TimerCallback tcb = reportTask.run;
     timerTask = new Timer(tcb, null, reportTimerInterval, reportTimerInterval);
 }
Пример #24
0
        public void checkSQLToolStripButton_Click(object sender, EventArgs e)
        {
            string initialSQL = "", error = "";

            try
            {
                if (Instance is ReportModel)
                {
                    ReportModel model = Instance as ReportModel;
                    if (PropertyName == "PreSQL" || PropertyName == "PostSQL")
                    {
                        error = model.Source.CheckSQL(Helper.ParseRazor(sqlTextBox.Text, model), null, model, true);
                    }
                    else
                    {
                        error = model.Source.CheckSQL(sqlTextBox.Text, model.FromTables, model, false);
                    }
                }
                if (Instance is MetaEnum)
                {
                    MetaEnum anEnum = Instance as MetaEnum;
                    error = anEnum.Source.CheckSQL(sqlTextBox.Text, null, null, false);
                }
                else if (Instance is MetaSource)
                {
                    MetaSource source = Instance as MetaSource;
                    if (PropertyName == "PreSQL" || PropertyName == "PostSQL")
                    {
                        error = source.CheckSQL(Helper.ParseRazor(sqlTextBox.Text, source), null, null, true);
                    }
                }
                else if (Instance is MetaTable)
                {
                    MetaTable table = Instance as MetaTable;
                    if (PropertyName == "PreSQL" || PropertyName == "PostSQL")
                    {
                        error = table.Source.CheckSQL(Helper.ParseRazor(sqlTextBox.Text, table), null, null, true);
                    }
                    else
                    {
                        if (PropertyName == "WhereSQL")
                        {
                            initialSQL     = table.WhereSQL;
                            table.WhereSQL = Helper.ParseRazor(sqlTextBox.Text, table);
                        }
                        else
                        {
                            initialSQL = table.Sql;
                            table.Sql  = sqlTextBox.Text;
                        }
                        try
                        {
                            table.CheckTable(null);
                            if (sqlTextBox.IsReadOnly)
                            {
                                table.SetReadOnly();
                            }
                            error = table.Error;
                        }
                        finally
                        {
                            if (PropertyName == "WhereSQL")
                            {
                                table.WhereSQL = initialSQL;
                            }
                            else
                            {
                                table.Sql = initialSQL;
                            }
                        }
                    }
                }
                else if (Instance is MetaJoin)
                {
                    MetaJoin join = Instance as MetaJoin;
                    initialSQL = join.Clause;
                    try
                    {
                        join.Clause = sqlTextBox.Text;
                        join.CheckJoin();
                        if (sqlTextBox.IsReadOnly)
                        {
                            join.SetReadOnly();
                        }
                        error = join.Error;
                    }
                    finally
                    {
                        join.Clause = initialSQL;
                    }
                }
                else if (Instance is ReportTask)
                {
                    ReportTask task = Instance as ReportTask;
                    error = task.Source.CheckSQL(Helper.ParseRazor(sqlTextBox.Text, task), null, null, false);
                }
            }
            catch (Exception ex)
            {
                error = ex.Message;
            }

            errorTextBox.Text = error;
            if (!string.IsNullOrEmpty(error))
            {
                toolStripStatusLabel.Text  = "Error";
                toolStripStatusLabel.Image = global::Seal.Properties.Resources.error2;
            }
            else
            {
                toolStripStatusLabel.Text  = "SQL checked successfully";
                toolStripStatusLabel.Image = global::Seal.Properties.Resources.checkedGreen;
            }
        }
            public GetReportsResponse Beautify()
            {
                GetReportsResponse ret = null;

                if (this.Status.Status == "200")
                {
                    ret = new GetReportsResponse();
                    if (null != this.Report)
                    {
                        ret.Results = new List <GetReportsResponse.Result>();
                        foreach (WelcomeReport report in this.Report)
                        {
                            var r = new GetReportsResponse.Result();

                            r.Id = report.Id?.Id;
                            if (TryGetValue(report.Owner, out var owner) && TryGetValue(owner.Name, out var ownerName))
                            {
                                r.Owner = ownerName;
                            }
                            if (TryGetValue(report.Name, out var name))
                            {
                                r.Name = name.ToString();
                            }

                            r.Comment      = report.Comment?.FirstOrDefault();
                            r.CreationTime = report.CreationTime.FirstOrDefault();
                            r.Writable     = report.Writable.FirstOrDefault().As <bool>();
                            r.InUse        = report.InUse.FirstOrDefault().As <bool>();
                            //r.TaskId = report.GetValue(p => p.Task).As<ReportFormat>()?.Empty?.Id?.ConvertTo<string>();
                            //r.TaskName = report.GetValue(p => p.Task).As<ReportFormat>()?.GetValue(p=>p.Name).As<string>();

                            ReportReport inner = report.Report.FirstOrDefault();
                            if (null != inner)
                            {
                                r.OmpVersion    = inner.Omp.FirstOrDefault()?.Version.FirstOrDefault();
                                r.ScanRunStatus = inner.ScanRunStatus.FirstOrDefault();
                                r.VulnsCount    = inner.Vulns.FirstOrDefault()?.Count?.FirstOrDefault();
                                r.AppCount      = inner.Apps.FirstOrDefault()?.Count.FirstOrDefault();
                                r.SslCertsCount = inner.SslCerts.FirstOrDefault()?.Count.FirstOrDefault();

                                ReportTask task = inner.Task.FirstOrDefault();
                                if (null != task)
                                {
                                    r.Task          = new GetReportsResponse.Result.TaskInfo();
                                    r.Task.Id       = task.Empty?.Id;// task.GetValue(p => p.Empty).As<Filter>()?.Id;
                                    r.Task.Name     = task.Name?.FirstOrDefault();
                                    r.Task.Comment  = task.Comment?.FirstOrDefault();
                                    r.Task.TargetId = task.Target?.FirstOrDefault()?.Empty?.Id;
                                    r.Task.Progress = task.Progress?.FirstOrDefault();
                                }

                                r.ScanStart = inner.ScanStart.FirstOrDefault();

                                var ports = inner.Ports;
                                if (ports != null && ports.Length > 0)
                                {
                                    var port = ports[0];
                                    if (null != port && null != port.Port)
                                    {
                                        r.Ports = new List <GetReportsResponse.Result.PortInfo>();
                                        foreach (PortPort prt in port.Port)
                                        {
                                            var entity = new GetReportsResponse.Result.PortInfo();

                                            entity.Port     = prt.Empty;
                                            entity.Host     = prt.Host?.FirstOrDefault();
                                            entity.Severity = prt.Severity?.FirstOrDefault()?.As <double>();
                                            entity.Threat   = prt.Threat?.FirstOrDefault();

                                            r.Ports.Add(entity);
                                        }
                                    }
                                }

                                var resultsArr = inner.Results;
                                if (resultsArr != null && resultsArr.Length > 0)
                                {
                                    var results = resultsArr[0];
                                    if (null != results && null != results.Result)
                                    {
                                        r.Results = new List <ResultInfo>();
                                        foreach (ResultResult result in results.Result)
                                        {
                                            var entity = new ResultInfo();

                                            entity.Id               = result.Empty?.Id;
                                            entity.Name             = result.Name?.FirstOrDefault();
                                            entity.Owner            = result.Owner?.FirstOrDefault()?.Name.FirstOrDefault();
                                            entity.Comment          = result.Comment?.FirstOrDefault();
                                            entity.CreationTime     = result.CreationTime?.FirstOrDefault();
                                            entity.ModificationTime = result.ModificationTime?.FirstOrDefault();
                                            entity.Host             = result.Host?.FirstOrDefault()?.Empty;
                                            entity.AssetId          = result.Host?.FirstOrDefault().Asset?.FirstOrDefault()?.Empty?.AssetId;
                                            entity.Port             = result.Port?.FirstOrDefault();

                                            var nvt = result.Nvt.FirstOrDefault();
                                            if (null != nvt)
                                            {
                                                entity.Nvt          = new NvtInfo();
                                                entity.Nvt.Oid      = nvt.Empty?.Oid;
                                                entity.Nvt.Type     = nvt.Type?.FirstOrDefault();
                                                entity.Nvt.Name     = nvt.Name?.FirstOrDefault();
                                                entity.Nvt.Family   = nvt.Family?.FirstOrDefault();
                                                entity.Nvt.CvssBase = nvt.CvssBase?.FirstOrDefault();
                                                entity.Nvt.Cve      = nvt.Cve?.FirstOrDefault();
                                                entity.Nvt.Bid      = nvt.Bid?.FirstOrDefault();
                                                entity.Nvt.Xref     = nvt.Xref?.FirstOrDefault();
                                                entity.Nvt.Tags     = nvt.Tags?.FirstOrDefault();
                                                entity.Nvt.Cert     = nvt.Cert?.FirstOrDefault()?.ToString();
                                            }

                                            entity.ScanNvtVersion  = result.ScanNvtVersion?.FirstOrDefault();
                                            entity.Threat          = result.Threat?.FirstOrDefault();
                                            entity.Severity        = result.Severity?.FirstOrDefault();
                                            entity.Qod             = result.Qod?.FirstOrDefault()?.Value?.FirstOrDefault().ToString();
                                            entity.QodType         = result.Qod?.FirstOrDefault()?.Type.FirstOrDefault();
                                            entity.Description     = result.Description?.FirstOrDefault();
                                            entity.OrginalThreat   = result.OriginalThreat?.FirstOrDefault();
                                            entity.OrginalSeverity = result.OriginalSeverity?.FirstOrDefault()?.As <double>();
                                            entity.Notes           = result.Notes?.FirstOrDefault();
                                            entity.Overrides       = result.Overrides?.FirstOrDefault();

                                            r.Results.Add(entity);
                                        }
                                    }

                                    ReportResultCount[] resultCountArr = inner.ResultCount;
                                    if (null != resultCountArr && 0 != resultCountArr.Length)
                                    {
                                        ReportResultCount resultCount = resultCountArr[0];
                                        if (null != resultCount)
                                        {
                                            r.ResultCount               = new GetReportsResponse.Result.ResultCountInfo();
                                            r.ResultCount.Total         = resultCount.Empty;
                                            r.ResultCount.Debug         = resultCount.Debug?.FirstOrDefault()?.Full?.FirstOrDefault()?.As <int>();
                                            r.ResultCount.Hole          = resultCount.Hole?.FirstOrDefault()?.Full?.FirstOrDefault()?.As <int>();
                                            r.ResultCount.Info          = resultCount.Info?.FirstOrDefault()?.Full?.FirstOrDefault()?.As <int>();
                                            r.ResultCount.Log           = resultCount.Log?.FirstOrDefault()?.Full?.FirstOrDefault()?.As <int>();
                                            r.ResultCount.Warning       = resultCount.Warning?.FirstOrDefault()?.Full?.FirstOrDefault()?.As <int>();
                                            r.ResultCount.FalsePositive = resultCount.FalsePositive?.FirstOrDefault()?.Full?.FirstOrDefault()?.As <int>();
                                        }
                                    }

                                    r.Severity = inner.Severity?.FirstOrDefault()?.Full?.FirstOrDefault().As <double>();

                                    ReportHost host = inner.Host?.FirstOrDefault();
                                    if (null != host)
                                    {
                                        r.Host = new GetReportsResponse.Result.HostInfo();
                                        var model = r.Host;
                                        model.Ip        = host.Ip?.FirstOrDefault();
                                        model.AssetId   = host.Asset?.FirstOrDefault()?.Empty?.AssetId;
                                        model.Start     = host.Start?.FirstOrDefault();
                                        model.End       = host.End?.FirstOrDefault();
                                        model.PortCount = host.PortCount?.FirstOrDefault()?.Page?.FirstOrDefault();
                                        var rcArr = host.ResultCount;
                                        if (null != rcArr && 0 != rcArr.Length)
                                        {
                                            var rc = rcArr[0];
                                            model.ResultCount               = new GetReportsResponse.Result.ResultCountInfo();
                                            model.ResultCount.Total         = rc.Page?.FirstOrDefault();
                                            model.ResultCount.Hole          = rc.Hole?.FirstOrDefault()?.Page?.FirstOrDefault();
                                            model.ResultCount.Warning       = rc.Warning?.FirstOrDefault()?.Page?.FirstOrDefault();
                                            model.ResultCount.Info          = rc.Info?.FirstOrDefault()?.Page?.FirstOrDefault();
                                            model.ResultCount.Log           = rc.Log?.FirstOrDefault()?.Page?.FirstOrDefault();
                                            model.ResultCount.FalsePositive = rc.FalsePositive?.FirstOrDefault()?.Page?.FirstOrDefault();
                                        }
                                        var details = host.Detail;
                                        if (null != details && 0 != details.Length)
                                        {
                                            model.Details = new List <GetReportsResponse.Result.HostInfo.Detail>();
                                            foreach (var detail in details)
                                            {
                                                var d = new GetReportsResponse.Result.HostInfo.Detail();

                                                d.Name              = detail.Name?.FirstOrDefault();
                                                d.Value             = detail.Value?.FirstOrDefault();
                                                d.SourceType        = detail.Source?.FirstOrDefault()?.Type?.FirstOrDefault();
                                                d.SourceName        = detail.Source?.FirstOrDefault()?.Name?.FirstOrDefault();
                                                d.SourceDescription = detail.Source?.FirstOrDefault()?.Description.FirstOrDefault();
                                                d.Extra             = detail.Extra?.FirstOrDefault();

                                                model.Details.Add(d);
                                            }
                                        }
                                    }

                                    var hostStart = inner.HostStart?.FirstOrDefault();
                                    if (null != hostStart)
                                    {
                                        r.HostStart     = hostStart.Empty;
                                        r.HostStartHost = hostStart.HostHost?.FirstOrDefault();
                                    }
                                    var hostEnd = inner.HostEnd?.FirstOrDefault();
                                    if (null != hostEnd)
                                    {
                                        r.HostEnd     = hostEnd.Empty;
                                        r.HostEndHost = hostEnd.HostHost?.FirstOrDefault();
                                    }
                                    r.ScanEnd      = inner.ScanEnd?.FirstOrDefault();
                                    r.ErrorCount   = inner.Errors?.FirstOrDefault()?.Count?.FirstOrDefault();
                                    r.ReportFormat = inner.ReportFormat?.FirstOrDefault();
                                }
                            }

                            ret.Results.Add(r);
                        }
                    }

                    ret.Filters = this.Filters?.FirstOrDefault()?.Term?.FirstOrDefault();
                    if (null != this.Sort && 0 < this.Sort.Length)
                    {
                        var s = this.Sort[0];
                        ret.Sort = s.Field?.FirstOrDefault()?.Empty + ", " + s.Field?.FirstOrDefault()?.Order?.FirstOrDefault();
                    }
                    ret.ReportCount = this.ReportCount?.FirstOrDefault()?.Empty.As <int>();
                }

                return(ret);
            }