Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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);
            }
        }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
0
        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);
            }
        }
Exemplo n.º 7
0
        // 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);
            }
        }