Exemple #1
0
        /// <summary>
        ///     Loads the transactions.
        /// </summary>
        private void LoadTransactionsAsynchronous( )
        {
            _dispatcher.Invoke(() =>
            {
                ListViewEnabled = false;
                MouseCursor.Set(Cursors.Wait);
                PluginSettings.Channel.SendMessage(new StatusTextMessage(@"Loading transactions...").ToString( ));
            });

            try
            {
                var databaseManager = new DatabaseManager(PluginSettings.DatabaseSettings);

                HashSet <long> selectedTransactions = null;

                if (SelectedTransactions != null)
                {
                    selectedTransactions = new HashSet <long>( );

                    foreach (HistoricalTransaction transaction in SelectedTransactions)
                    {
                        selectedTransactions.Add(transaction.TransactionId);
                    }
                }

                const string commandText = @"--ReadiMon - LoadTransactions
SET NOCOUNT ON

SELECT
	[TransactionId],
	[UserId],
	[TenantId],
	[Spid],
	[Timestamp],
	[HostName],
	[ProgramName],
	[Domain],
	[Username],
	[LoginName],
	[Context]
FROM
	Hist_Transaction
ORDER BY
	TransactionId DESC"    ;

                HistoricalTransaction.TenantCache.Clear( );
                HistoricalTransaction.UserCache.Clear( );

                HashSet <string> users    = new HashSet <string>( );
                HashSet <string> tenants  = new HashSet <string>( );
                HashSet <string> spids    = new HashSet <string>( );
                HashSet <string> programs = new HashSet <string>( );
                HashSet <string> logins   = new HashSet <string>( );

                var transactions = new List <HistoricalTransaction>( );

                using (IDbCommand command = databaseManager.CreateCommand(commandText))
                {
                    using (IDataReader reader = command.ExecuteReader( ))
                    {
                        HistoricalTransaction previousTransaction = null;

                        while (reader.Read( ))
                        {
                            var transaction = new HistoricalTransaction(reader, GetChangeCounts);

                            transactions.Add(transaction);

                            if (previousTransaction != null)
                            {
                                previousTransaction.NextTransaction = transaction;
                            }

                            previousTransaction = transaction;
                        }
                    }
                }

                const string tenantCommandText = @"-- ReadiMon - Select Tenant Names
SELECT
	Id, name
FROM
	_vTenant"    ;
                using (IDbCommand command = databaseManager.CreateCommand(tenantCommandText))
                {
                    using (IDataReader reader = command.ExecuteReader( ))
                    {
                        while (reader.Read( ))
                        {
                            HistoricalTransaction.TenantCache[reader.GetInt64(0)] = reader.GetString(1);
                        }
                    }
                }

                HistoricalTransaction.TenantCache[0] = "Global";

                const string userCommandText = @"-- ReadiMon - Select User Name
SELECT
	dbo.fnName( @userId )"    ;

                foreach (long userId in transactions.Select(t => t.UserId).Distinct( ).Where(t => t > 0))
                {
                    using (SqlCommand command = databaseManager.CreateCommand(userCommandText))
                    {
                        databaseManager.AddParameter(command, "@userId", userId);

                        object userName = command.ExecuteScalar( );

                        if (userName != null && userName != DBNull.Value)
                        {
                            HistoricalTransaction.UserCache[userId] = userName.ToString( );
                        }
                    }
                }

                HistoricalTransaction.UserCache[0] = "Administrator";

                Transactions = transactions;

                users.UnionWith(Transactions.Select(t => t.ActiveUserName.ToString( )));
                tenants.UnionWith(Transactions.Select(t => t.TenantName.ToString( )));
                spids.UnionWith(Transactions.Select(t => t.Spid.ToString( )));
                programs.UnionWith(Transactions.Select(t => t.ProgramName));
                logins.UnionWith(Transactions.Select(t => t.LoginName));

                UserFilters = new List <FilterObject>( );

                foreach (string user in users.OrderBy(k => k))
                {
                    UserFilters.Add(new FilterObject(user, string.IsNullOrEmpty(user) ? "<empty>" : user, true, UserFilterUpdate));
                }

                OnPropertyChanged("UserFilters");

                TenantFilters = new List <FilterObject>( );

                foreach (string ten in tenants.OrderBy(k => k))
                {
                    TenantFilters.Add(new FilterObject(ten, string.IsNullOrEmpty(ten) ? "<empty>" : ten, true, TenantFilterUpdate));
                }

                OnPropertyChanged("TenantFilters");

                SpidFilters = new List <FilterObject>( );

                foreach (string spid in spids.OrderBy(k => k))
                {
                    SpidFilters.Add(new FilterObject(spid, string.IsNullOrEmpty(spid) ? "<empty>" : spid, true, SpidFilterUpdate));
                }

                OnPropertyChanged("SpidFilters");

                ProgramFilters = new List <FilterObject>( );

                foreach (string prog in programs.OrderBy(k => k))
                {
                    ProgramFilters.Add(new FilterObject(prog, string.IsNullOrEmpty(prog) ? "<empty>" : prog, true, ProgramFilterUpdate));
                }

                OnPropertyChanged("ProgramFilters");

                LoginFilters = new List <FilterObject>( );

                foreach (string log in logins.OrderBy(k => k))
                {
                    LoginFilters.Add(new FilterObject(log, string.IsNullOrEmpty(log) ? "<empty>" : log, true, LoginFilterUpdate));
                }

                OnPropertyChanged("LoginFilters");

                FilteredTransactions = new List <HistoricalTransaction>(Transactions);

                if (selectedTransactions != null)
                {
                    List <HistoricalTransaction> newlySelectedTransactions = FilteredTransactions.Where(t => selectedTransactions.Contains(t.TransactionId)).ToList( );

                    SelectedTransactions = newlySelectedTransactions;
                }
            }
            catch (Exception exc)
            {
                PluginSettings.EventLog.WriteException(exc);
            }
            finally
            {
                _dispatcher.Invoke(() =>
                {
                    ListViewEnabled = true;
                    MouseCursor.Set(Cursors.Arrow);
                    PluginSettings.Channel.SendMessage(new StatusTextMessage(@"Ready...").ToString( ));
                });
            }
        }