public DateTime GetCubeLastProcessed(string Server, string Database, string Cube, bool throwExc) { string taskId = Guid.NewGuid().ToString(); OlapServices.QueryProcessor processor = OlapServices.ProcessorPool.Instance.GetAvailableFromPool(Server, Database, taskId); DateTime ret = DateTime.MinValue; try { // get cube processing time if (Cube != null && Cube != "") { ret = processor.GetCubeLastProcessed(Cube); } } catch (Exception exc) { if (throwExc) { throw exc; } } finally { processor.Release(taskId, false); } return(ret); }
public string GetMemberParent(string Server, string Database, string Cube, string HierUniqueName, string MemUniqueName) { string taskId = Guid.NewGuid().ToString(); OlapServices.QueryProcessor processor = OlapServices.ProcessorPool.Instance.GetAvailableFromPool(Server, Database, taskId); try { string ret = processor.GetMemberParent(Cube, HierUniqueName, MemUniqueName); return(ret); } finally { processor.Release(taskId, false); } }
public string GetReportSchemaXml(string Server, string Database, string Cube, string OpenNodesXml) { string taskId = Guid.NewGuid().ToString(); OlapServices.QueryProcessor processor = OlapServices.ProcessorPool.Instance.GetAvailableFromPool(Server, Database, taskId); try { string ret = processor.GetReportSchemaXml(Cube, OpenNodesXml); return(ret); } finally { processor.Release(taskId, false); } }
public QueryProcessor GetAvailableFromPool(string Server, string Database, string TaskId) { if(TaskId==null || TaskId=="") throw new ArgumentException("Invlaid TaskId"); if(_canceledTasks.Contains(TaskId)) throw new Exception("Task is canceled: " + TaskId.ToUpper()); // check if not resetting WaitForAvalability(); QueryProcessor proc=null; int count=0; int maxCount=FI.Common.AppConfig.DA_OlapProcessorCount; // find avalailable while(true) { lock(this) { for(int i=0;i<_pool.Count;i++) { proc=(QueryProcessor)_pool[i]; if(proc.Server==Server && proc.Database==Database) { count++; if(proc.TryAllocate(TaskId)) return proc; } } // if possible to add processor if(count<maxCount) { int port=__BASETCPPORT + _pool.Count +1; proc=new QueryProcessor(port, Server, Database); _pool.Add(proc); if(proc.TryAllocate(TaskId)) return proc; } } // sleep till next loop System.Threading.Thread.Sleep(200); } }
public string BuildCellset(string Server, string Database, string Mdx, string TaskId, string TaskTag) { if (Mdx == null || Mdx.Trim() == "") { throw new Exception("Mdx is empty"); } OlapServices.QueryProcessor processor = OlapServices.ProcessorPool.Instance.GetAvailableFromPool(Server, Database, TaskId); try { processor.TaskTag = TaskTag; string ret = processor.BuildCellset(Mdx); return(ret); } finally { processor.Release(TaskId, false); } }
public string BuildCellset(string Server, string Database, string Cube, string Mdx, string TaskId, string TaskDescrition, string ReportType, decimal ReportId) { if (Mdx == null || Mdx.Trim() == "") { throw new Exception("Mdx is empty"); } OlapServices.QueryProcessor processor = OlapServices.ProcessorPool.Instance.GetAvailableFromPool(Server, Database, TaskId); try { // execute processor.TaskDescription = TaskDescrition; string ret = processor.BuildCellset(Mdx); // save as report if (ReportId >= 0) { if (string.Compare(ReportType, "Olap", true) == 0) { // get cube processing time DateTime cubeProcessedOn = DateTime.MinValue; if (Cube != null && Cube != "") { cubeProcessedOn = processor.GetCubeLastProcessed(Cube); } OlapReports rpt = new OlapReports(); rpt.UpdateReportCache(ReportId, Server, Database, Cube, Mdx, TaskId, ret, cubeProcessedOn); } } // return return(ret); } finally { processor.Release(TaskId, false); } }
// singleton pattern #endregion singleton public QueryProcessor GetAvailableFromPool(string Server, string Database, string TaskId) { //Common.LogWriter.Instance.WriteEventLogEntry( // string.Format("ProcessorPool request: server {0}, database {1}.", Server, Database)); if (TaskId == null || TaskId == "") { throw new ArgumentException("Invlaid TaskId"); } if (_canceledTasks.Contains(TaskId)) { throw new Exception("Task is canceled: " + TaskId.ToUpper()); } // check if not resetting WaitForAvalability(); QueryProcessor proc = null; int count = 0; int maxCount = __MAXPROCESSORCOUNT; //FI.Common.AppConfig.DA_OlapProcessorCount; // find avalailable QueryProcessor ret = null; while (true) { lock (this) { for (int i = 0; i < _pool.Count; i++) { proc = (QueryProcessor)_pool[i]; if (proc.Server == Server && proc.Database == Database) { count++; if (proc.TryAllocate(TaskId)) { ret = proc; } } } // if possible to add processor if (ret == null && count < maxCount) { //int port=__BASETCPPORT + _pool.Count +1; proc = new QueryProcessor(Server, Database); _pool.Add(proc); if (proc.TryAllocate(TaskId)) { ret = proc; } } } if (ret != null) { //Common.LogWriter.Instance.WriteEventLogEntry( // string.Format("ProcessorPool count {0}.", _pool.Count.ToString())); return(ret); } // sleep till next loop System.Threading.Thread.Sleep(200); } }