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; } }
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; } }
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; } }
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; } }
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; } }
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; } }
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; } }
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; } }