Ejemplo n.º 1
0
        private void AddCaptureObject(CPNHSDataVO.PackDataType dataType, string userId, out CPNHSDataVO cvo)
        {
            cvo = null;
            List <CPNHSDataVO> activeDataCapture = null;

            if (CollectionUtilities.isNotEmptyContainsKey(this.activeDataCaptureObject, userId))
            {
                activeDataCapture = this.activeDataCaptureObject[userId];
            }
            else
            {
                activeDataCapture = new List <CPNHSDataVO>();
            }

            if (CollectionUtilities.isNotEmpty(activeDataCapture))
            {
                cvo = activeDataCapture.Last();
                if ((cvo.PackType & dataType) > 0)
                {
                    cvo = new CPNHSDataVO();
                    activeDataCapture.Add(cvo);
                }
            }
            else
            {
                cvo = new CPNHSDataVO();
                activeDataCapture.Add(cvo);
            }
        }
Ejemplo n.º 2
0
        private bool UpdateCPNHSData(CPNHSDataVO cvo, bool force = false)
        {
            var rt = false;

            lock (mutex)
            {
                var timeDiff = this.lastTimeStamp - DateTime.Now;
                if (force || timeDiff.TotalMinutes > DEFAULT_CAPTURE_INTERVAL)
                {
                    //Insert CPNHS data
                    if (cvo != null)
                    {
                        try
                        {
                            CPNHSProcedures.InsertCPNHSData(cvo);
                        }
                        catch (Exception eX)
                        {
                            FileLogger.Instance.logMessage(LogLevel.WARN, "CPNHSController", "InsertCPNHSData threw exception: {0}", eX);
                            return(false);
                        }
                    }
                    //Update last time stamp only after data insert
                    if (!force)
                    {
                        this.lastTimeStamp = DateTime.Now;
                        rt = true;
                    }
                }
            }
            return(rt);
        }
Ejemplo n.º 3
0
        private void computeDataTransferOut(string userId, ref CPNHSDataVO cvo)
        {
            if ((cvo.PackType & CPNHSDataVO.PackDataType.DATAXFEROUT) > 0)
            {
                var cvoList   = this.activeDataCaptureObject[userId];
                var cvoListSz = cvoList.Count;
                if (cvoListSz <= 1)
                {
                    //There must be at least two entries
                    return;
                }
                //Setup the accumulator copy
                var tmp       = new CPNHSDataVO(cvo);
                var cvoCntLat = (cvo.CurrentLatency > 0.0M) ? 1 : 0;
                var cvoCntOut = (cvo.CurrentDataRateOut > 0.0M) ? 1 : 0;
                for (var j = 0; j < cvoListSz - 1; ++j)
                {
                    var curCvo = cvoList[j];
                    if (curCvo == null || (curCvo.PackType & CPNHSDataVO.PackDataType.DATAXFEROUT) == 0)
                    {
                        continue;
                    }

                    if (curCvo.CurrentDataRateOut > 0.0M)
                    {
                        cvoCntOut++;
                        tmp.NumberTransactionsOut++;
                        tmp.AverageDataRateOut = tmp.CurrentDataRateOut + curCvo.CurrentDataRateOut;
                    }
                    if (curCvo.CurrentLatency > 0.0M)
                    {
                        cvoCntLat++;
                        tmp.AverageLatency = tmp.CurrentLatency + curCvo.CurrentLatency;
                    }
                    tmp.TotalTimeTxferDataOut = tmp.TotalTimeTxferDataOut + curCvo.TotalTimeTxferDataOut;
                }

                //Compute data transfer averages now that they are accumulated
                if (cvoCntOut > 0)
                {
                    tmp.AverageDataRateOut /= cvoCntOut;
                }
                if (cvoCntLat > 0)
                {
                    tmp.AverageLatency /= cvoCntLat;
                }

                //Set the ref cvo to the tmp object
                cvo = tmp;
            }
        }
Ejemplo n.º 4
0
 private void computeStoredProcCounts(string userId, ref CPNHSDataVO cvo)
 {
     if ((cvo.PackType & CPNHSDataVO.PackDataType.STOREDPROC) > 0)
     {
         if (CollectionUtilities.isNotEmptyContainsKey(this.storedProcCounts, userId))
         {
             var curStorage = this.storedProcCounts[userId];
             if (CollectionUtilities.isNotEmpty(curStorage))
             {
                 var maxCount     = 0L;
                 var maxCountProc = string.Empty;
                 var maxTime      = 0L;
                 var maxTimeProc  = string.Empty;
                 var maxBytes     = 0L;
                 var maxBytesProc = string.Empty;
                 foreach (var key in curStorage.Keys)
                 {
                     var curEntry = curStorage[key];
                     if (curEntry == null)
                     {
                         continue;
                     }
                     if (curEntry.Left > maxCount)
                     {
                         maxCount     = curEntry.Left;
                         maxCountProc = key;
                     }
                     if (curEntry.Mid > maxTime)
                     {
                         maxTime     = curEntry.Mid;
                         maxTimeProc = key;
                     }
                     if (curEntry.Right > maxBytes)
                     {
                         maxBytes     = curEntry.Right;
                         maxBytesProc = key;
                     }
                 }
                 //Update stats
                 cvo.ClientProcTopCalledName = maxCountProc;
                 cvo.ClientProcTopDataName   = maxBytesProc;
                 cvo.ClientProcTopTimeName   = maxTimeProc;
             }
         }
     }
 }
Ejemplo n.º 5
0
        public void AddGranularStoredProcData(string userId, string procName, long callPrep, long callWait, long callProcess, long callTotal, long dataTransferAmt)
        {
            List <QuadType <long, long, long, long> > innerList;

            if (CollectionUtilities.isNotEmptyContainsKey(this.granularStoredProcCounts, userId))
            {
                innerList = this.granularStoredProcCounts[userId];
            }
            else
            {
                innerList = new List <QuadType <long, long, long, long> >();
                this.granularStoredProcCounts.Add(userId, innerList);
            }

            var procStats = new QuadType <long, long, long, long>(callPrep, callWait, callProcess, callTotal);

            innerList.Add(procStats);

            //Get the capture object
            CPNHSDataVO cvo = null;

            AddCaptureObject(CPNHSDataVO.PackDataType.GRANSTOREDPROC, userId, out cvo);

            //Fill in capture data
            cvo.PackType             |= CPNHSDataVO.PackDataType.GRANSTOREDPROC;
            cvo.PackType             |= CPNHSDataVO.PackDataType.DATAXFERIN;
            cvo.ClientProcName        = procName;
            cvo.ClientCallPrepTime    = callPrep;
            cvo.ClientCallProcessTime = callProcess;
            cvo.ClientCallTotalTime   = callTotal;
            cvo.ClientCallWaitTime    = callWait;
            cvo.NumberTransactionsIn += 1;
            cvo.TotalTimeTxferDataIn += callTotal;
            cvo.CurrentLatency       += callWait;
            //Must be in bytes per second
            cvo.CurrentDataRateIn += (decimal)dataTransferAmt / (callTotal * 1000);

            //Force this call through as we need every granular proc data point
            UpdateInternalData(userId, true);
        }
Ejemplo n.º 6
0
        /*
         * PROCEDURE insert_cpnhs (p_curdata_in      IN NUMBER,  -- bytes/sec
         *                         p_curdata_out     IN NUMBER,  -- bytes/sec
         *                         p_avgdata_in      IN NUMBER,  -- bytes/sec
         *                         p_avgdata_out     IN NUMBER,  -- bytes/sec
         *                         p_cur_latency     IN NUMBER,  -- ms
         *                         p_avg_latency     IN NUMBER,  -- ms
         *                         p_tottime_in      IN NUMBER,  -- ms
         *                         p_tottime_out     IN NUMBER,  -- ms
         *                         p_numtrans_in     IN NUMBER,  -- count - number times received data
         *                         p_numtrans_out    IN NUMBER,  -- count - number times sent data
         *                         p_totdata_in      IN NUMBER,  -- bytes - number bytes received
         *                         p_totdata_out     IN NUMBER,  -- bytes - number bytes sent
         *                         p_cli_procname    IN VARCHAR2,-- procedure name
         *                         p_cli_hifreq_proc IN VARCHAR2,-- procedure called the most during the session
         *                         p_cli_hitime_proc IN VARCHAR2,-- procedure consuming the most time during the session
         *                         p_cli_hidata_proc IN VARCHAR2,-- procedure consuming the most data
         *                         p_cli_callprep    IN NUMBER,  -- ms
         *                         p_cli_callwait    IN NUMBER,  -- ms
         *                         p_cli_callproc    IN NUMBER,  -- ms
         *                         p_cli_calltot     IN NUMBER,  -- ms
         *                         p_store_number    IN VARCHAR2,-- store name
         *                         p_wkst_name       IN VARCHAR2,-- workstation name
         *                         p_user_id         IN VARCHAR2,-- user id
         *                         p_tot_sess_time   IN NUMBER,  -- seconds - session is alive
         *                         p_tot_sess_act    IN NUMBER,  -- seconds - session is active
         *                         p_tot_sess_inact  IN NUMBER,  -- seconds - session is inactive
         *                         p_num_trans_tend  IN NUMBER,  -- count  - number transactions tendered
         *                         p_tot_trans_tend  IN NUMBER,  -- amount - total tendered during session
         *                         o_error_code      OUT NUMBER, -- error code
         *                         o_error_text      OUT VARCHAR2
         */

        public static bool InsertCPNHSData(CPNHSDataVO cpnhsData)
        {
            if (cpnhsData == null)
            {
                if (FileLogger.Instance.IsLogError)
                {
                    FileLogger.Instance.logMessage(LogLevel.ERROR, "CPNHSProcedures", "Invalid data capture object");
                }
                BasicExceptionHandler.Instance.AddException(
                    "InsertCPNHSData Failed",
                    new ApplicationException("InsertCPNHSData Failed: Data capture object is null"));
            }

            //
            if (GlobalDataAccessor.Instance == null ||
                !GlobalDataAccessor.Instance.IsDataAccessorValid())
            {
                if (FileLogger.Instance.IsLogWarn)
                {
                    FileLogger.Instance.logMessage(LogLevel.WARN, "CPNHSProcedures", "Invalid data accessor");
                }
                BasicExceptionHandler.Instance.AddException(
                    "InsertCPNHSData Failed",
                    new ApplicationException("InsertCPNHSData Failed: Data accessor instance is invalid"));
                return(false);
            }

            var inParams = new List <OracleProcParam>
            {
                new OracleProcParam("p_curdata_in", cpnhsData.CurrentDataRateIn),
                new OracleProcParam("p_curdata_out", cpnhsData.CurrentDataRateOut),
                new OracleProcParam("p_avgdata_in", cpnhsData.AverageDataRateIn),
                new OracleProcParam("p_avgdata_out", cpnhsData.AverageDataRateOut),
                new OracleProcParam("p_cur_latency", cpnhsData.CurrentLatency),
                new OracleProcParam("p_avg_latency", cpnhsData.AverageLatency),
                new OracleProcParam("p_tottime_in", cpnhsData.TotalTimeTxferDataIn),
                new OracleProcParam("p_tottime_out", cpnhsData.TotalTimeTxferDataOut),
                new OracleProcParam("p_numtrans_in", cpnhsData.NumberTransactionsIn),
                new OracleProcParam("p_numtrans_out", cpnhsData.NumberTransactionsOut),
                new OracleProcParam("p_totdata_in", cpnhsData.NumberTransactionsIn),
                new OracleProcParam("p_totdata_out", cpnhsData.NumberTransactionsOut),
                new OracleProcParam("p_cli_procname", cpnhsData.ClientProcName),
                new OracleProcParam("p_cli_highfreq_proc", cpnhsData.ClientProcTopCalledName),
                new OracleProcParam("p_cli_hitime_proc", cpnhsData.ClientProcTopTimeName),
                new OracleProcParam("p_cli_hidata_proc", cpnhsData.ClientProcTopDataName),
                new OracleProcParam("p_cli_callprep", cpnhsData.ClientCallPrepTime),
                new OracleProcParam("p_cli_callwait", cpnhsData.ClientCallWaitTime),
                new OracleProcParam("p_cli_callproc", cpnhsData.ClientCallProcessTime),
                new OracleProcParam("p_cli_calltot", cpnhsData.ClientCallTotalTime),
                new OracleProcParam("p_store_number", cpnhsData.StoreNumber),
                new OracleProcParam("p_wkst_name", cpnhsData.WorkstationName),
                new OracleProcParam("p_user_id", cpnhsData.UserID),
                new OracleProcParam("p_tot_sess_time", cpnhsData.TotalSessionTime),
                new OracleProcParam("p_tot_sess_act", cpnhsData.TotalSessionTimeActive),
                new OracleProcParam("p_tot_sess_inact", cpnhsData.TotalSessionTimeInActive),
                new OracleProcParam("p_num_trans_tend", cpnhsData.NumberTransactionsTendered),
                new OracleProcParam("p_tot_trans_tend", cpnhsData.TotalAmountTendered),
            };
            bool    retVal;
            DataSet outputDataSet;
            var     errorCode = string.Empty;
            var     errorText = string.Empty;

            try
            {
                retVal = GlobalDataAccessor.Instance.OracleDA.issueSqlStoredProcCommand(
                    "ccsowner",
                    "cpnhs",
                    "insert_cpnhs",
                    inParams,
                    null,
                    "o_error_code",
                    "o_error_text",
                    out outputDataSet);

                errorCode = GlobalDataAccessor.Instance.OracleDA.ErrorCode;
                errorText = GlobalDataAccessor.Instance.OracleDA.ErrorDescription;
            }
            catch (OracleException oEx)
            {
                BasicExceptionHandler.Instance.AddException("InsertCPNHS Failed", oEx);
                errorCode += " --- InsertCPNHS Failed";
                errorText += " --- OracleException thrown: " + oEx.Message;
                FileLogger.Instance.logMessage(LogLevel.ERROR,
                                               "CPNHSProcedures.InsertCPNHSData - Oracle exception - Code {0} Message {1}",
                                               oEx.Number.ToString(), oEx.Message);
                return(false);
            }

            return(true);
        }