Пример #1
0
        public DetailData GetDetailDataOnlyById(string databasePrefix, string Id)
        {
            try
            {
                var databaseInfos      = MongodbServerMaintainceCenter.GetDatabaseInfos(databasePrefix);
                var columnDescriptions = MongodbServerMaintainceCenter.GetMongodbColumnDescriptions(databasePrefix);
                var pkColumn           = columnDescriptions.FirstOrDefault(desc => desc.IsPrimaryKey);
                if (pkColumn == null)
                {
                    return(null);
                }

                foreach (var databaseInfo in databaseInfos)
                {
                    foreach (var collectionInfo in databaseInfo.Collections)
                    {
                        var data = GetDetailData(databasePrefix, databaseInfo.DatabaseName, collectionInfo.CollectionName, pkColumn.ColumnName, Id);
                        if (data != null)
                        {
                            return(data);
                        }
                    }
                }

                return(null);
            }
            catch (Exception ex)
            {
                LocalLoggingService.Error("{0} {1} {2} {3}", MongodbServerConfiguration.ModuleName, "MongodbServer_Detail", "GetDetailDataOnlyById", ex.Message);
                throw;
            }
        }
Пример #2
0
 public List <TableData> GetTableDataByContextId(string contextId)
 {
     try
     {
         var beginTime     = new DateTime(DateTime.Now.Year, 1, 1);
         var endTime       = DateTime.Now;
         var data          = new ConcurrentBag <TableData>();
         var databaseInfos = MongodbServerMaintainceCenter.GetDatabaseInfos(beginTime, endTime);
         if (databaseInfos.Count == 0)
         {
             return(null);
         }
         foreach (var databaseInfo in databaseInfos)
         {
             var databasePrefix     = databaseInfo.DatabasePrefix;
             var columnDescriptions = MongodbServerMaintainceCenter.GetMongodbColumnDescriptions(databasePrefix);
             var contextColumn      = columnDescriptions.FirstOrDefault(desc => desc.IsContextIdentityColumn);
             if (contextColumn != null)
             {
                 var collectionInfos = databaseInfo.Collections;
                 var tableData       = GetTableData(databasePrefix, collectionInfos.Select(c => c.CollectionName).ToList(), databaseInfo.DatabaseDate.ToLocalTime(), databaseInfo.DatabaseDate.ToLocalTime().AddMonths(1), 0, 100, new Dictionary <string, object>
                 {
                     { contextColumn.ColumnName, contextId }
                 });
                 tableData.ForEach(item =>
                 {
                     foreach (var t in item.Tables)
                     {
                         if (t.Data.Count > 0)
                         {
                             var d = new TableData
                             {
                                 PkColumnDisplayName = item.PkColumnDisplayName,
                                 PkColumnName        = item.PkColumnName,
                                 TableName           = item.TableName,
                                 Tables = new List <Table>
                                 {
                                     t,
                                 }
                             };
                             data.Add(d);
                         }
                     }
                 });
             }
         }
         ;
         return(data.ToList());
     }
     catch (Exception ex)
     {
         LocalLoggingService.Error("{0} {1} {2} {3}", MongodbServerConfiguration.ModuleName, "MongodbServer_Table", "GetTableDataByContextId", ex.Message);
         throw;
     }
 }
Пример #3
0
        public int GetDataCount(string databasePrefix, string tableName, DateTime beginTime, DateTime endTime, Dictionary <string, object> filters)
        {
            try
            {
                var count         = 0;
                var databaseInfos = MongodbServerMaintainceCenter.GetDatabaseInfos(databasePrefix, beginTime, endTime);
                if (databaseInfos.Count == 0)
                {
                    return(count);
                }
                var typeFullName       = MongodbServerMaintainceCenter.GetTypeFullName(databasePrefix);
                var columnDescriptions = MongodbServerMaintainceCenter.GetMongodbColumnDescriptions(databasePrefix);
                var statTimeColumn     = columnDescriptions.FirstOrDefault(c => c.IsTimeColumn);
                if (statTimeColumn == null)
                {
                    return(0);
                }
                var filterquery = Query.Null;
                if (filters != null)
                {
                    foreach (var item in filters)
                    {
                        if (item.Value != null)
                        {
                            if (item.Value is string && item.Value.ToString().Split(',').Length > 1)
                            {
                                var values = item.Value.ToString().Split(',');
                                filterquery = Query.And(filterquery, Query.In(item.Key, values.Select(val => BsonValue.Create(val)).ToArray()));
                            }
                            else
                            {
                                filterquery = Query.And(filterquery, Query.EQ(item.Key, BsonValue.Create(item.Value)));
                            }
                        }
                    }
                }

                var query = Query.And(Query.LT(statTimeColumn.ColumnName, endTime).GTE(beginTime), filterquery);
                foreach (var databaseInfo in databaseInfos)
                {
                    var server     = CreateSlaveMongoServer(typeFullName);
                    var database   = server.GetDatabase(databaseInfo.DatabaseName);
                    var collection = database.GetCollection(tableName);
                    count += Convert.ToInt32(collection.Count(query));
                }
                return(count);
            }
            catch (Exception ex)
            {
                LocalLoggingService.Error("{0} {1} {2} {3}", MongodbServerConfiguration.ModuleName, "MongodbServer_Slave", "GetDataCount", ex.Message);
                throw;
            }
        }
Пример #4
0
        public List <Group> GetGroupData(string databasePrefix, List <string> tableNames, DateTime beginTime, DateTime endTime, Dictionary <string, object> filters)
        {
            try
            {
                var data                    = new ConcurrentBag <Group>();
                var typeFullName            = MongodbServerMaintainceCenter.GetTypeFullName(databasePrefix);
                var columnDescriptions      = MongodbServerMaintainceCenter.GetMongodbColumnDescriptions(databasePrefix);
                var groupColumnDescriptions = columnDescriptions.Where(cd => cd.MongodbFilterOption == MongodbFilterOption.DropDownListFilter ||
                                                                       cd.MongodbFilterOption == MongodbFilterOption.CheckBoxListFilter || cd.MongodbCascadeFilterOption != MongodbCascadeFilterOption.None).ToList();

                var statTimeColumn = columnDescriptions.FirstOrDefault(c => c.IsTimeColumn);
                if (statTimeColumn == null)
                {
                    return(data.ToList());
                }
                var query = Query.LT(statTimeColumn.ColumnName, endTime).GTE(beginTime);


                Parallel.ForEach(tableNames, tableName =>
                {
                    var item        = new Group();
                    item.GroupItems = new List <GroupItem>();
                    item.TableName  = tableName;
                    groupColumnDescriptions.AsParallel().ForAll(groupColumnDescription =>
                    {
                        var groupItem = new GroupItem
                        {
                            Description = groupColumnDescription.Description,
                            DisplayName = groupColumnDescription.DisplayName,
                            Name        = groupColumnDescription.ColumnName,
                            Values      = new Dictionary <GroupItemValuePair, int>(),
                        };

                        groupItem.Values = InternalGetGroupData(typeFullName, databasePrefix, beginTime, endTime, tableName, query, groupColumnDescription.ColumnName, filters);
                        lock (item.GroupItems)
                            item.GroupItems.Add(groupItem);
                    });
                    data.Add(item);
                });
                return(data.ToList());
            }
            catch (Exception ex)
            {
                LocalLoggingService.Error("{0} {1} {2} {3}", MongodbServerConfiguration.ModuleName, "MongodbServer_Group", "GetGroupData", ex.Message);
                throw;
            }
        }
Пример #5
0
 public DetailData GetStateData(string databasePrefix, string tableName, DateTime beginTime, DateTime endTime, Dictionary <string, object> filters)
 {
     try
     {
         var columnDescriptions = MongodbServerMaintainceCenter.GetMongodbColumnDescriptions(databasePrefix);
         var pkColumn           = columnDescriptions.FirstOrDefault(desc => desc.IsPrimaryKey);
         if (pkColumn != null)
         {
             var pkColumnName = pkColumn.DisplayName;
             var table        = GetTableData(databasePrefix, new List <string> {
                 tableName
             }, beginTime, endTime, 0, 1, filters);
             if (table == null || table.Count == 0)
             {
                 return(null);
             }
             var tab = table.First();
             if (tab.Tables == null || tab.Tables.Count == 0)
             {
                 return(null);
             }
             var t = tab.Tables.First();
             if (t.Data == null || t.Data.Count == 0)
             {
                 return(null);
             }
             var row = t.Data.First();
             var id  = "";
             if (row.ContainsKey(pkColumnName))
             {
                 id = row[pkColumnName];
             }
             if (!string.IsNullOrEmpty(id))
             {
                 var detail = GetDetailData(databasePrefix, t.DatabaseName, tab.TableName, tab.PkColumnName, id);
                 return(detail);
             }
         }
         return(null);
     }
     catch (Exception ex)
     {
         LocalLoggingService.Error("{0} {1} {2} {3}", MongodbServerConfiguration.ModuleName, "MongodbServer_State", "GetStateData", ex.Message);
         throw;
     }
 }
Пример #6
0
        public DetailData GetDetailData(string databasePrefix, string databaseName, string tableName, string pkColumnName, string Id)
        {
            try
            {
                var detailData = new DetailData()
                {
                    DatabasePrefix = databasePrefix,
                    DatabaseName   = databaseName,
                    PkColumnName   = pkColumnName,
                    TableName      = tableName,
                };
                var data         = new List <Detail>();
                var typeFullName = MongodbServerMaintainceCenter.GetTypeFullName(databasePrefix);
                var server       = CreateSlaveMongoServer(typeFullName);
                var database     = server.GetDatabase(databaseName);
                var collection   = database.GetCollection(tableName);
                var row          = collection.FindOne(Query.EQ(pkColumnName, Id));
                if (row != null)
                {
                    var columnDescriptions     = MongodbServerMaintainceCenter.GetMongodbColumnDescriptions(databasePrefix);
                    var enumColumnDescriptions = MongodbServerMaintainceCenter.GetMongodbEnumColumnDescriptions(databasePrefix);

                    foreach (var col in row)
                    {
                        InternalGetDetailData(string.Empty, data, col, columnDescriptions, enumColumnDescriptions, pkColumnName);
                    }
                    detailData.Data = data;
                    return(detailData);
                }
                return(null);
            }
            catch (Exception ex)
            {
                LocalLoggingService.Error("{0} {1} {2} {3}", MongodbServerConfiguration.ModuleName, "MongodbServer_Detail", "GetDetailData", ex.Message);
                throw;
            }
        }
Пример #7
0
        public List <Statistics> GetStatisticsData(string databasePrefix, List <string> tableNames, DateTime beginTime, DateTime endTime, TimeSpan span, Dictionary <string, object> filters)
        {
            try
            {
                var data = new ConcurrentBag <Statistics>();

                var databaseInfos = MongodbServerMaintainceCenter.GetDatabaseInfos(databasePrefix, beginTime, endTime);
                if (databaseInfos.Count == 0)
                {
                    return(null);
                }
                var typeFullName       = MongodbServerMaintainceCenter.GetTypeFullName(databasePrefix);
                var columnDescriptions = MongodbServerMaintainceCenter.GetMongodbColumnDescriptions(databasePrefix);

                var statTimeColumn = columnDescriptions.FirstOrDefault(c => c.IsTimeColumn);
                if (statTimeColumn == null)
                {
                    return(null);
                }

                var filterquery = Query.Null;
                if (filters != null)
                {
                    foreach (var item in filters)
                    {
                        if (item.Value != null)
                        {
                            if (item.Value is string && item.Value.ToString().Split(',').Length > 1)
                            {
                                var values = item.Value.ToString().Split(',');
                                filterquery = Query.And(filterquery, Query.In(item.Key, values.Select(val => BsonValue.Create(val)).ToArray()));
                            }
                            else
                            {
                                filterquery = Query.And(filterquery, Query.EQ(item.Key, BsonValue.Create(item.Value)));
                            }
                        }
                    }
                }

                var server = CreateSlaveMongoServer(typeFullName);
                if (server == null)
                {
                    return(null);
                }
                var serverUrl = GetMongodbServerUrl(typeFullName);
                var delay     = TimeSpan.FromSeconds(0);
                if (serverUrl != null)
                {
                    delay = serverUrl.SyncDelay;
                }

                Parallel.ForEach(tableNames, tableName =>
                {
                    var item             = new Statistics();
                    item.StatisticsItems = new List <StatisticsItem>();
                    item.TableName       = tableName;

                    var begin = beginTime;
                    var end   = endTime;
                    while (begin < endTime)
                    {
                        DateTime tmpEndTime = begin.Add(span);
                        if (tmpEndTime > endTime)
                        {
                            tmpEndTime = endTime;
                        }

                        var statItem = new StatisticsItem
                        {
                            BeginTime = begin,
                            EndTime   = tmpEndTime,
                            Value     = 0,
                        };
                        if (begin.ToString("yyyyMM") == tmpEndTime.AddSeconds(-1).ToString("yyyyMM"))
                        {
                            var databaseInfo = databaseInfos.FirstOrDefault(d => d.DatabaseDate.ToLocalTime().ToString("yyyyMM") == tmpEndTime.ToString("yyyyMM"));
                            if (databaseInfo != null)
                            {
                                var databaseName = databaseInfo.DatabaseName;
                                statItem.Value   = InternalGetDataCount(delay, typeFullName, databaseName, tableName,
                                                                        statTimeColumn.ColumnName, begin, tmpEndTime, filterquery);
                            }
                        }
                        else
                        {
                            var spanBegin = begin;
                            var spanEnd   = tmpEndTime;
                            while (spanBegin < spanEnd)
                            {
                                DateTime tmpSpanEndTime = spanBegin.AddDays(1);
                                if (tmpSpanEndTime > spanEnd)
                                {
                                    tmpSpanEndTime = spanEnd;
                                }

                                var databaseInfo = databaseInfos.FirstOrDefault(d => d.DatabaseDate.ToLocalTime().ToString("yyyyMM") == spanBegin.ToString("yyyyMM"));
                                if (databaseInfo == null)
                                {
                                    continue;
                                }
                                var databaseName = databaseInfo.DatabaseName;
                                var query        = Query.And(Query.LT(statTimeColumn.ColumnName, spanEnd).GTE(spanBegin), filterquery);
                                statItem.Value  += InternalGetDataCount(delay, typeFullName, databaseName, tableName,
                                                                        statTimeColumn.ColumnName, spanBegin, tmpSpanEndTime, filterquery);
                                spanBegin = tmpSpanEndTime;
                            }
                        }
                        item.StatisticsItems.Add(statItem);
                        begin = tmpEndTime;
                    }
                    data.Add(item);
                });
                return(data.ToList());
            }
            catch (Exception ex)
            {
                LocalLoggingService.Error("{0} {1} {2} {3}", MongodbServerConfiguration.ModuleName, "MongodbServer_Statistics", "GetStatisticsData", ex.Message);
                throw;
            }
        }
Пример #8
0
        public List <TableData> GetTableData(string databasePrefix, List <string> tableNames, DateTime beginTime, DateTime endTime, int pageIndex, int pageSize, Dictionary <string, object> filters)
        {
            try
            {
                var data = new ConcurrentBag <TableData>();

                var databaseInfos = MongodbServerMaintainceCenter.GetDatabaseInfos(databasePrefix, beginTime, endTime);
                if (databaseInfos.Count == 0)
                {
                    return(null);
                }

                var typeFullName           = MongodbServerMaintainceCenter.GetTypeFullName(databasePrefix);
                var columnDescriptions     = MongodbServerMaintainceCenter.GetMongodbColumnDescriptions(databasePrefix);
                var enumColumnDescriptions = MongodbServerMaintainceCenter.GetMongodbEnumColumnDescriptions(databasePrefix);
                var statTimeColumn         = columnDescriptions.FirstOrDefault(c => c.IsTimeColumn);
                if (statTimeColumn == null)
                {
                    return(null);
                }

                var filterquery = Query.Null;
                if (filters != null)
                {
                    foreach (var item in filters)
                    {
                        if (item.Value != null)
                        {
                            if (item.Value is string && item.Value.ToString().Split(',').Length > 1)
                            {
                                var values = item.Value.ToString().Split(',');
                                filterquery = Query.And(filterquery, Query.In(item.Key, values.Select(val => BsonValue.Create(val)).ToArray()));
                            }
                            else
                            {
                                filterquery = Query.And(filterquery, Query.EQ(item.Key, BsonValue.Create(item.Value)));
                            }
                        }
                    }
                }
                var query = Query.And(Query.LT(statTimeColumn.ColumnName, endTime).GTE(beginTime), filterquery);

                var sortColumn = columnDescriptions.Where(desc => desc.MongodbSortOption != MongodbSortOption.None).FirstOrDefault();
                var sort       = SortBy.Null;
                if (sortColumn != null)
                {
                    if (sortColumn.MongodbSortOption == MongodbSortOption.Descending)
                    {
                        sort = SortBy.Descending(sortColumn.ColumnName);
                    }
                    else
                    {
                        sort = SortBy.Ascending(sortColumn.ColumnName);
                    }
                }

                var showColumns = columnDescriptions.Where(desc => desc.ShowInTableView).ToList();
                var pkColumn    = columnDescriptions.FirstOrDefault(desc => desc.IsPrimaryKey);
                if (pkColumn == null)
                {
                    return(null);
                }
                var fields = showColumns.Select(c => c.ColumnName).ToList();

                if (fields.Contains(statTimeColumn.ColumnName))
                {
                    fields.Remove(statTimeColumn.ColumnName);
                }
                fields.Insert(0, statTimeColumn.ColumnName);

                if (fields.Contains(pkColumn.ColumnName))
                {
                    fields.Remove(pkColumn.ColumnName);
                }
                fields.Insert(0, pkColumn.ColumnName);

                var server = CreateSlaveMongoServer(typeFullName);
                if (server == null)
                {
                    return(null);
                }

                Parallel.ForEach(tableNames, tableName =>
                {
                    var tables     = new List <Table>();
                    var remainRows = pageSize;
                    //var totalCount = 0;
                    foreach (var databaseInfo in databaseInfos)
                    {
                        var table        = new List <Dictionary <string, string> >();
                        var databaseName = databaseInfo.DatabaseName;
                        var database     = server.GetDatabase(databaseName);
                        var collection   = database.GetCollection(tableName);
                        //var count = Convert.ToInt32(collection.Count(query));
                        //totalCount += count;
                        if (remainRows > 0)
                        {
                            var q = collection.Find(query).SetFields(fields.ToArray())
                                    .SetLimit(remainRows).SetSkip(pageIndex * pageSize);
                            if (sort != SortBy.Null)
                            {
                                q = q.SetSortOrder(sort);
                            }
                            var result = q.ToList();
                            foreach (var item in result)
                            {
                                var row = new Dictionary <string, string>();
                                foreach (var element in item)
                                {
                                    var details = new List <Detail>();
                                    InternalGetDetailData(string.Empty, details, element, columnDescriptions, enumColumnDescriptions, pkColumn.ColumnName);
                                    foreach (var detail in details)
                                    {
                                        InternalGetTableData(detail, row);
                                    }
                                }
                                table.Add(row);
                            }
                            var t = new Table
                            {
                                Data           = table,
                                DatabaseName   = databaseName,
                                DatabasePrefix = databasePrefix,
                                //TotalCount = 0,
                            };
                            tables.Add(t);
                            remainRows -= table.Count;
                        }
                    }

                    //tables.ForEach(t => t.TotalCount = totalCount);
                    data.Add(new TableData
                    {
                        TableName           = tableName,
                        Tables              = tables,
                        PkColumnName        = pkColumn.ColumnName,
                        PkColumnDisplayName = pkColumn.DisplayName,
                    });
                });

                return(data.ToList());
            }
            catch (Exception ex)
            {
                LocalLoggingService.Error("{0} {1} {2} {3}", MongodbServerConfiguration.ModuleName, "MongodbServer_Table", "GetTableData", ex.Message);
                throw;
            }
        }