예제 #1
0
        public void LogEtlSessionEnd(EtlSession session)
        {
            if (session == null)
            {
                throw new ArgumentNullException("session");
            }

            var cmdText = string.Format(@"
update {0}[EtlSessions]
set
	[EndDateTime] = getdate(),
	[EndUtcDateTime] = getutcdate(),
	[Status] = @Status
where
	[EtlPackageId] = @EtlPackageId and
	[EtlSessionId] = @EtlSessionId
            ", _schemaToken);

            using (var conn = CreateConnection())
            {
                conn.Open();

                var cmd = new SqlCommand(cmdText, conn);
                AddParameter(cmd, "@EtlPackageId", session.EtlPackageId);
                AddParameter(cmd, "@EtlSessionId", session.EtlSessionId);
                AddParameter(cmd, "@EndDateTime", session.EndDateTime);
                AddParameter(cmd, "@EndUtcDateTime", session.EndUtcDateTime);
                AddParameter(cmd, "@Status", (int)session.Status);

                cmd.ExecuteNonQuery();
            }
        }
        private static EtlSessionSummary GetEtlSessionSummary(EtlSession session, IEtlLogParser logParser)
        {
            var sessionSummary = new EtlSessionSummary
            {
                EtlPackageId = session.EtlPackageId,
                EtlPackageName = session.EtlPackageName,
                EtlSessionId = session.EtlSessionId,
                StartDateTime = session.StartDateTime,
                StartUtcDateTime = session.StartUtcDateTime,
                EndDateTime = session.EndDateTime,
                EndUtcDateTime = session.EndUtcDateTime,
                Status = session.Status,
                UserName = session.UserName,
            };

            var variables = logParser.GetEtlVariables(session.EtlPackageId, session.EtlSessionId);
            sessionSummary.Variables.AddRange(variables);

            var counters = logParser.GetEtlCounters(session.EtlPackageId, session.EtlSessionId);
            sessionSummary.Counters.AddRange(counters);

            var messages = logParser.GetEtlMessages(session.EtlPackageId, session.EtlSessionId);
            sessionSummary.Messages.AddRange(messages);

            for (var i = messages.Length - 1; i >= 0; i--)
            {
                if (messages[i].MessageType == EtlMessageType.Error)
                {
                    sessionSummary.LastErrorMessage = messages[i];
                    break;
                }
            }

            return sessionSummary;
        }
예제 #3
0
        public void LogEtlSessionEnd(EtlSession session)
        {
            if (session == null)
            {
                throw new ArgumentNullException("session");
            }

            _currentProgress = 100;
            //_worker.ReportProgress(_currentProgress, null);
        }
 public static EtlPackageMonitorItemStatus GetMonitorItemStatus(EtlSession session, int runInvervalSeconds)
 {
     return(session.Status ==
            EtlStatus.Failed ? EtlPackageMonitorItemStatus.Failed :
            // пакет выполнялся слишком давно
            session.EndDateTime.HasValue?
            runInvervalSeconds > 0 && DateTime.Now.Subtract(session.EndDateTime.Value).TotalSeconds >= runInvervalSeconds ?
            EtlPackageMonitorItemStatus.TooFar :
            session.Status == EtlStatus.Succeeded ?
            EtlPackageMonitorItemStatus.Succeeded :
            EtlPackageMonitorItemStatus.Failed:
            EtlPackageMonitorItemStatus.Running);
 }
예제 #5
0
        public void LogEtlSessionStart(EtlSession session)
        {
            if (session == null)
            {
                throw new ArgumentNullException("session");
            }

            var insertSessionSql = string.Format(@"
insert into {0}[EtlSessions]
(
    [EtlPackageId],
    [EtlPackageName],
    [EtlSessionId],
    [StartDateTime],
    [StartUtcDateTime],
    [Status],
    [ParentEtlSessionId],
    [UserName]
)
values
(
    @EtlPackageId,
    @EtlPackageName,
    @EtlSessionId,
    @StartDateTime,
    @StartUtcDateTime,
    @Status,
    @ParentEtlSessionId,
    @userName
)
            ", _schemaToken);

            var insertSessionCommand = new SqlCommand(insertSessionSql);

            AddParameter(insertSessionCommand, "@EtlPackageId", session.EtlPackageId);
            AddParameter(insertSessionCommand, "@EtlPackageName", session.EtlPackageName);
            AddParameter(insertSessionCommand, "@EtlSessionId", session.EtlSessionId);
            AddParameter(insertSessionCommand, "@StartDateTime", session.StartDateTime);
            AddParameter(insertSessionCommand, "@StartUtcDateTime", session.StartUtcDateTime);
            AddParameter(insertSessionCommand, "@Status", (int)EtlStatus.Started);
            AddParameter(insertSessionCommand, "@ParentEtlSessionId", session.ParentEtlSessionId);
            AddParameter(insertSessionCommand, "@UserName", GetSubstring(session.UserName, EtlSessionUserNameMaxLength));

            using (var conn = CreateConnection())
            {
                conn.Open();

                insertSessionCommand.Connection = conn;
                insertSessionCommand.ExecuteNonQuery();
            }
        }
            public EtlSession GetEtlSession(string etlPackageId, string etlSessionId)
            {
                EtlSession result = null;

                foreach (var agent in _etlAgents)
                {
                    var logParser = agent.GetEtlLogParser();
                    result = logParser.GetEtlSession(etlPackageId, etlSessionId);
                    if (result != null)
                    {
                        break;
                    }
                }

                return(result);
            }
예제 #7
0
        public EtlContext
        (
            EtlSession session
        )
        {
            if (session == null)
            {
                throw new ArgumentNullException("session");
            }

            _parentSessionId  = session.ParentEtlSessionId;
            _packageId        = session.EtlPackageId;
            _sessionId        = session.EtlSessionId;
            _userName         = session.UserName;
            _startDateTime    = session.StartDateTime;
            _startUtcDateTime = session.StartUtcDateTime;
        }
예제 #8
0
        private EtlSession ReadEtlSession(SqlDataReader reader)
        {
            var session = new EtlSession
            {
                EtlPackageId     = EtlValueConverter.ToString(reader["EtlPackageId"]),
                EtlPackageName   = EtlValueConverter.ToString(reader["EtlPackageName"]),
                EtlSessionId     = EtlValueConverter.ToString(reader["EtlSessionId"]),
                StartDateTime    = EtlValueConverter.ParseDateTime(reader["StartDateTime"]),
                StartUtcDateTime = EtlValueConverter.ParseDateTime(reader["StartUtcDateTime"]),
                EndDateTime      = EtlValueConverter.ParseDateTimeOrNull(reader["EndDateTime"]),
                EndUtcDateTime   = EtlValueConverter.ParseDateTimeOrNull(reader["EndUtcDateTime"]),
                Status           = (EtlStatus)EtlValueConverter.ParseInt32(reader["Status"]),
                UserName         = EtlValueConverter.ToString(reader["UserName"]),
            };

            return(session);
        }
예제 #9
0
        private static EtlSessionSummary GetEtlSessionSummary(EtlSession session, IEtlLogParser logParser)
        {
            var sessionSummary = new EtlSessionSummary
            {
                EtlPackageId     = session.EtlPackageId,
                EtlPackageName   = session.EtlPackageName,
                EtlSessionId     = session.EtlSessionId,
                StartDateTime    = session.StartDateTime,
                StartUtcDateTime = session.StartUtcDateTime,
                EndDateTime      = session.EndDateTime,
                EndUtcDateTime   = session.EndUtcDateTime,
                Status           = session.Status,
                UserName         = session.UserName,
            };

            var variables = logParser.GetEtlVariables(session.EtlPackageId, session.EtlSessionId);

            sessionSummary.Variables.AddRange(variables);

            var counters = logParser.GetEtlCounters(session.EtlPackageId, session.EtlSessionId);

            sessionSummary.Counters.AddRange(counters);

            var messages = logParser.GetEtlMessages(session.EtlPackageId, session.EtlSessionId);

            sessionSummary.Messages.AddRange(messages);

            for (var i = messages.Length - 1; i >= 0; i--)
            {
                if (messages[i].MessageType == EtlMessageType.Error)
                {
                    sessionSummary.LastErrorMessage = messages[i];
                    break;
                }
            }

            return(sessionSummary);
        }
예제 #10
0
    public static IExecutionResult Execute(Host host, CompiledModule module, string[] taskNames)
    {
        var executionResult = new ExecutionResult
        {
            TaskResults = new List <TaskExectionResult>(),
        };

        var instance  = Environment.MachineName;
        var arguments = new ArgumentCollection(module.DefaultArgumentProviders, module.InstanceArgumentProviders, instance);

        var environmentSettings = new EnvironmentSettings();

        module.Startup.Configure(environmentSettings);
        var customTasks = new Dictionary <string, Func <IArgumentCollection, IEtlTask> >(module.Startup.CustomTasks, StringComparer.InvariantCultureIgnoreCase);

        var sessionId = "s" + DateTime.Now.ToString("yyMMdd-HHmmss-ff", CultureInfo.InvariantCulture);
        var session   = new EtlSession(sessionId, arguments);

        session.Context.TransactionScopeTimeout = environmentSettings.TransactionScopeTimeout;

        try
        {
            if (host.EtlContextListeners?.Count > 0)
            {
                foreach (var listenerCreator in host.EtlContextListeners)
                {
                    session.Context.Listeners.Add(listenerCreator.Invoke(session));
                }
            }
        }
        catch (Exception ex)
        {
            var formattedMessage = ex.FormatExceptionWithDetails();
            session.Context.Log(LogSeverity.Fatal, null, "{ErrorMessage}", formattedMessage);
            session.Context.LogOps(LogSeverity.Fatal, null, "{ErrorMessage}", formattedMessage);
        }

        if (host.SerilogForModulesEnabled)
        {
            if (environmentSettings.FileLogSettings.Enabled || environmentSettings.ConsoleLogSettings.Enabled || !string.IsNullOrEmpty(environmentSettings.SeqSettings.Url))
            {
                var serilogAdapter = new EtlSessionSerilogAdapter(environmentSettings, host.DevLogFolder, host.OpsLogFolder);
                session.Context.Listeners.Add(serilogAdapter);
            }
        }

        session.Context.Log(LogSeverity.Information, null, "session {SessionId} started", sessionId);

        if (!string.IsNullOrEmpty(environmentSettings.SeqSettings.Url))
        {
            session.Context.Log(LogSeverity.Debug, null, "all session logs will be sent to SEQ listening on {SeqUrl}", environmentSettings.SeqSettings.Url);
        }

        var sessionStartedOn  = Stopwatch.StartNew();
        var sessionExceptions = new List <Exception>();

        var taskResults = new List <TaskExectionResult>();

        try
        {
            foreach (var taskName in taskNames)
            {
                IEtlTask task = null;
                if (customTasks.TryGetValue(taskName, out var taskCreator))
                {
                    task = taskCreator.Invoke(arguments);
                }
                else
                {
                    var taskType = module.TaskTypes.Find(x => string.Equals(x.Name, taskName, StringComparison.InvariantCultureIgnoreCase));
                    if (taskType != null)
                    {
                        task = (IEtlTask)Activator.CreateInstance(taskType);
                    }
                }

                if (task == null)
                {
                    session.Context.Log(LogSeverity.Error, null, "unknown task/flow type: " + taskName);
                    break;
                }

                try
                {
                    try
                    {
                        var taskResult = session.ExecuteTask(null, task) as ProcessResult;
                        taskResults.Add(new TaskExectionResult(task, taskResult));
                        executionResult.TaskResults.Add(new TaskExectionResult(task, taskResult));

                        sessionExceptions.AddRange(taskResult.Exceptions);

                        if (sessionExceptions.Count > 0)
                        {
                            session.Context.Log(LogSeverity.Error, task, "failed, terminating execution");
                            executionResult.Status = ExecutionStatusCode.ExecutionFailed;
                            session.Context.Close();
                            break; // stop processing tasks
                        }
                    }
                    catch (Exception ex)
                    {
                        session.Context.Log(LogSeverity.Error, task, "failed, terminating execution, reason: {0}", ex.Message);
                        executionResult.Status = ExecutionStatusCode.ExecutionFailed;
                        session.Context.Close();
                        break; // stop processing tasks
                    }
                }
                catch (TransactionAbortedException)
                {
                }

                LogTaskCounters(session.Context, task);
            }

            session.Stop();

            if (taskResults.Count > 0)
            {
                session.Context.Log(LogSeverity.Information, null, "-------");
                session.Context.Log(LogSeverity.Information, null, "SUMMARY");
                session.Context.Log(LogSeverity.Information, null, "-------");

                var longestTaskName = taskResults.Max(x => x.TaskName.Length);
                foreach (var taskResult in taskResults)
                {
                    LogTaskSummary(session.Context, taskResult, longestTaskName);
                }
            }

            session.Context.Close();
        }
        catch (TransactionAbortedException)
        {
        }

        return(executionResult);
    }
예제 #11
0
 public void LogEtlSessionEnd(EtlSession session)
 {
 }
예제 #12
0
            private void InvokePackageCatched(EtlPackage package, EtlSession session, EtlVariableAssignment[] assignments)
            {
                var buildStartDateTime = DateTime.Now;

                _logger.LogEtlMessage
                (
                    new EtlMessage
                {
                    EtlPackageId   = session.EtlPackageId,
                    EtlSessionId   = session.EtlSessionId,
                    LogDateTime    = buildStartDateTime,
                    LogUtcDateTime = buildStartDateTime.ToUniversalTime(),
                    MessageType    = EtlMessageType.Debug,
                    Text           = string.Format(Properties.Resources.VariablesInitStarted),
                }
                );

                var context = new _Context(package, session);

                context.InitVariables(package.Variables, assignments);

                foreach (var variable in context.GetVariables())
                {
                    var escapedVariable = EscapeVariable(variable);

                    _logger.LogEtlMessage
                    (
                        new EtlMessage
                    {
                        EtlPackageId   = context.EtlPackageId,
                        EtlSessionId   = context.EtlSessionId,
                        LogDateTime    = buildStartDateTime,
                        LogUtcDateTime = buildStartDateTime.ToUniversalTime(),
                        MessageType    = EtlMessageType.Debug,
                        Text           = string.Format(Properties.Resources.VariableInit, escapedVariable.Name, escapedVariable.Value),
                    }
                    );

                    if (variable.Modifier == EtlVariableModifier.Input || variable.Modifier == EtlVariableModifier.Bound)
                    {
                        _logger.LogEtlVariable(escapedVariable);
                    }
                }

                var preprocessor = new EtlPackagePreprocessor();

                package = preprocessor.PreprocessPackage(package, context.GetVariables());

                var buildEndDateTime = DateTime.Now;

                _logger.LogEtlMessage
                (
                    new EtlMessage
                {
                    EtlPackageId   = session.EtlPackageId,
                    EtlSessionId   = session.EtlSessionId,
                    LogDateTime    = buildEndDateTime,
                    LogUtcDateTime = buildEndDateTime.ToUniversalTime(),
                    MessageType    = EtlMessageType.Debug,
                    Text           = string.Format(Properties.Resources.VariablesInitFinished),
                }
                );

                InvokePackageSteps(package, context);

                foreach (var variable in context.GetVariables())
                {
                    if (variable.Modifier == EtlVariableModifier.Output)
                    {
                        _logger.LogEtlVariable(EscapeVariable(variable));
                    }
                }

                session.Status = context.CurrentStatus;
            }
        public void LogEtlSessionStart(EtlSession session)
        {
            if (session == null)
            {
                throw new ArgumentNullException("session");
            }

            var insertSessionSql = string.Format(@"
            insert into {0}[EtlSessions]
            (
            [EtlPackageId],
            [EtlPackageName],
            [EtlSessionId],
            [StartDateTime],
            [StartUtcDateTime],
            [Status],
            [ParentEtlSessionId],
            [UserName]
            )
            values
            (
            @EtlPackageId,
            @EtlPackageName,
            @EtlSessionId,
            @StartDateTime,
            @StartUtcDateTime,
            @Status,
            @ParentEtlSessionId,
            @userName
            )
            ", _schemaToken);

            var insertSessionCommand = new SqlCommand(insertSessionSql);
            AddParameter(insertSessionCommand, "@EtlPackageId", session.EtlPackageId);
            AddParameter(insertSessionCommand, "@EtlPackageName", session.EtlPackageName);
            AddParameter(insertSessionCommand, "@EtlSessionId", session.EtlSessionId);
            AddParameter(insertSessionCommand, "@StartDateTime", session.StartDateTime);
            AddParameter(insertSessionCommand, "@StartUtcDateTime", session.StartUtcDateTime);
            AddParameter(insertSessionCommand, "@Status", (int)EtlStatus.Started);
            AddParameter(insertSessionCommand, "@ParentEtlSessionId", session.ParentEtlSessionId);
            AddParameter(insertSessionCommand, "@UserName", GetSubstring(session.UserName, EtlSessionUserNameMaxLength));

            using (var conn = CreateConnection())
            {
                conn.Open();

                insertSessionCommand.Connection = conn;
                insertSessionCommand.ExecuteNonQuery();
            }
        }
        public void LogEtlSessionEnd(EtlSession session)
        {
            if (session == null)
            {
                throw new ArgumentNullException("session");
            }

            var cmdText = string.Format(@"
            update {0}[EtlSessions]
            set
            [EndDateTime] = getdate(),
            [EndUtcDateTime] = getutcdate(),
            [Status] = @Status
            where
            [EtlPackageId] = @EtlPackageId and
            [EtlSessionId] = @EtlSessionId
            ", _schemaToken);

            using (var conn = CreateConnection())
            {
                conn.Open();

                var cmd = new SqlCommand(cmdText, conn);
                AddParameter(cmd, "@EtlPackageId", session.EtlPackageId);
                AddParameter(cmd, "@EtlSessionId", session.EtlSessionId);
                AddParameter(cmd, "@EndDateTime", session.EndDateTime);
                AddParameter(cmd, "@EndUtcDateTime", session.EndUtcDateTime);
                AddParameter(cmd, "@Status", (int)session.Status);

                cmd.ExecuteNonQuery();
            }
        }
예제 #15
0
 public _Context(EtlPackage originalPackage, EtlSession session)
     : base(session)
 {
     _currentStatus   = session.Status;
     _originalPackage = originalPackage;
 }
예제 #16
0
            private EtlSession InvokePackageCore(EtlPackage package, EtlVariableAssignment[] assignments, string parentSessionId)
            {
                var session = new EtlSession
                {
                    EtlSessionId       = Guid.NewGuid().ToString(),
                    EtlPackageId       = package.Id,
                    EtlPackageName     = package.Name,
                    ParentEtlSessionId = parentSessionId,
                    Status             = EtlStatus.Started,
                    UserName           = GetCurrentUserName(),
                };

                session.StartDateTime    = DateTime.Now;
                session.StartUtcDateTime = session.StartDateTime.ToUniversalTime();

                _logger.LogEtlSessionStart(session);
                _logger.LogEtlMessage
                (
                    new EtlMessage
                {
                    EtlPackageId   = session.EtlPackageId,
                    EtlSessionId   = session.EtlSessionId,
                    LogDateTime    = session.StartDateTime,
                    LogUtcDateTime = session.StartUtcDateTime,
                    MessageType    = EtlMessageType.SessionStart,
                    Text           = string.Format(Properties.Resources.SessionStarted, session.EtlSessionId, session.EtlPackageId, session.EtlPackageName)
                }
                );

                try
                {
                    InvokePackageCatched(package, session, assignments);
                }
                catch (Exception exc)
                {
                    if (IsCriticalException(exc))
                    {
                        throw;
                    }

                    session.Status = EtlStatus.Failed;

                    var errorDateTime = DateTime.Now;
                    _logger.LogEtlMessage
                    (
                        new EtlMessage
                    {
                        EtlPackageId   = session.EtlPackageId,
                        EtlSessionId   = session.EtlSessionId,
                        LogDateTime    = errorDateTime,
                        LogUtcDateTime = errorDateTime.ToUniversalTime(),
                        MessageType    = EtlMessageType.Error,
                        Text           = exc.Message,
                        StackTrace     = exc.StackTrace,
                    }
                    );
                }
                finally
                {
                    session.EndDateTime    = DateTime.Now;
                    session.EndUtcDateTime = session.EndDateTime.Value.ToUniversalTime();

                    _logger.LogEtlMessage
                    (
                        new EtlMessage
                    {
                        EtlPackageId   = session.EtlPackageId,
                        EtlSessionId   = session.EtlSessionId,
                        LogDateTime    = session.EndDateTime.Value,
                        LogUtcDateTime = session.EndUtcDateTime.Value,
                        MessageType    = EtlMessageType.SessionEnd,
                        Text           = string.Format(Properties.Resources.SessionFinished, session.EtlSessionId, session.EtlPackageId, session.EtlPackageName, session.Status)
                    }
                    );

                    _logger.LogEtlSessionEnd(session);
                }

                return(session);
            }
예제 #17
0
        public static ExecutionResult Execute(CommandContext commandContext, CompiledModule module, string[] commands)
        {
            var result = ExecutionResult.Success;

            var etlContext = new EtlContext();

            try
            {
                var listeners = commandContext.HostConfiguration.GetSessionListeners(null);
                if (listeners?.Count > 0)
                {
                    etlContext.Listeners.AddRange(listeners);
                }
            }
            catch (Exception ex)
            {
                var formattedMessage = ex.FormatExceptionWithDetails();
                etlContext.Log(LogSeverity.Fatal, null, "{ErrorMessage}", formattedMessage);
                etlContext.LogOps(LogSeverity.Fatal, null, "{ErrorMessage}", formattedMessage);
            }

            var instance  = Environment.MachineName;
            var arguments = GetArguments(module, instance);

            var environmentSettings = new EnvironmentSettings();

            module.Startup.Configure(environmentSettings);
            var taskCreators = new Dictionary <string, Func <IEtlSessionArguments, IEtlTask> >(module.Startup.Commands, StringComparer.InvariantCultureIgnoreCase);

            var sessionId = "s" + DateTime.Now.ToString("yyMMdd-HHmmss-ff", CultureInfo.InvariantCulture);
            var session   = new EtlSession(sessionId, etlContext, arguments);

            etlContext.TransactionScopeTimeout = environmentSettings.TransactionScopeTimeout;

            var logger    = CreateLogger(environmentSettings, commandContext.DevLogFolder, commandContext.OpsLogFolder);
            var opsLogger = CreateOpsLogger(environmentSettings, commandContext.DevLogFolder, commandContext.OpsLogFolder);
            var ioLogger  = CreateIoLogger(environmentSettings, commandContext.DevLogFolder, commandContext.OpsLogFolder);

            var serilogAdapter = new EtlSessionSerilogAdapter(logger, opsLogger, ioLogger, commandContext.DevLogFolder, commandContext.OpsLogFolder);

            etlContext.Listeners.Add(serilogAdapter);

            serilogAdapter.Log(LogSeverity.Information, false, null, null, "session {SessionId} started", sessionId);

            if (!string.IsNullOrEmpty(environmentSettings.SeqSettings.Url))
            {
                etlContext.Log(LogSeverity.Debug, null, "all session logs will be sent to SEQ listening on {SeqUrl}", environmentSettings.SeqSettings.Url);
            }

            var sessionStartedOn      = Stopwatch.StartNew();
            var sessionExceptionCount = 0;

            var taskResults = new List <KeyValuePair <IEtlTask, TaskResult> >();

            try
            {
                foreach (var command in commands)
                {
                    IEtlTask task = null;
                    if (taskCreators.TryGetValue(command, out var taskCreator))
                    {
                        task = taskCreator.Invoke(arguments);
                    }
                    else
                    {
                        var taskType = module.TaskTypes.Find(x => string.Equals(x.Name, command, StringComparison.InvariantCultureIgnoreCase));
                        if (taskType != null)
                        {
                            task = (IEtlTask)Activator.CreateInstance(taskType);
                        }
                    }

                    if (task == null)
                    {
                        serilogAdapter.Log(LogSeverity.Error, false, null, null, "unknown task/flow type: " + command);
                        break;
                    }

                    try
                    {
                        try
                        {
                            var taskResult = session.ExecuteTask(null, task);
                            taskResults.Add(new KeyValuePair <IEtlTask, TaskResult>(task, taskResult));

                            sessionExceptionCount += taskResult.ExceptionCount;

                            if (sessionExceptionCount > 0)
                            {
                                etlContext.Log(LogSeverity.Error, task, "failed, terminating execution");
                                result = ExecutionResult.ExecutionFailed;
                                etlContext.Close();
                                break; // stop processing tasks
                            }
                        }
                        catch (Exception ex)
                        {
                            etlContext.Log(LogSeverity.Error, task, "failed, terminating execution, reason: ", task.Statistics.RunTime, ex.Message);
                            result = ExecutionResult.ExecutionFailed;
                            etlContext.Close();
                            break; // stop processing tasks
                        }
                    }
                    catch (TransactionAbortedException)
                    {
                    }

                    LogTaskCounters(serilogAdapter, task);
                }

                session.Stop();

                if (taskResults.Count > 0)
                {
                    serilogAdapter.Log(LogSeverity.Information, false, null, null, "-------");
                    serilogAdapter.Log(LogSeverity.Information, false, null, null, "SUMMARY");
                    serilogAdapter.Log(LogSeverity.Information, false, null, null, "-------");

                    var longestTaskName = taskResults.Max(x => x.Key.Name.Length);
                    foreach (var kvp in taskResults)
                    {
                        LogTaskSummary(serilogAdapter, kvp.Key, kvp.Value, longestTaskName);
                    }
                }

                etlContext.Close();
            }
            catch (TransactionAbortedException)
            {
            }

            return(result);
        }
예제 #18
0
 public void LogEtlSessionStart(EtlSession session)
 {
 }
        private EtlSession ReadEtlSession(SqlDataReader reader)
        {
            var session = new EtlSession
            {
                EtlPackageId = EtlValueConverter.ToString(reader["EtlPackageId"]),
                EtlPackageName = EtlValueConverter.ToString(reader["EtlPackageName"]),
                EtlSessionId = EtlValueConverter.ToString(reader["EtlSessionId"]),
                StartDateTime = EtlValueConverter.ParseDateTime(reader["StartDateTime"]),
                StartUtcDateTime = EtlValueConverter.ParseDateTime(reader["StartUtcDateTime"]),
                EndDateTime = EtlValueConverter.ParseDateTimeOrNull(reader["EndDateTime"]),
                EndUtcDateTime = EtlValueConverter.ParseDateTimeOrNull(reader["EndUtcDateTime"]),
                Status = (EtlStatus)EtlValueConverter.ParseInt32(reader["Status"]),
                UserName = EtlValueConverter.ToString(reader["UserName"]),
            };

            return session;
        }