Ejemplo n.º 1
0
        /// <summary>
        /// To save the call data as a recovery file in case of call data import failure
        /// </summary>
        /// <param name="log">Thread specific logger</param>
        /// <param name="readerSetting">DataReaderSetting to get the recovery folder path</param>
        /// <param name="callDataInfo">Ivr call data information received from database</param>
        /// <param name="failureMode">Call data importation failure mode to identify the failure reason</param>
        private void LoadCallDataIntoFile(ILog log, DataReaderSetting readerSetting, IvrCallDataInfo callDataInfo, ImportationFailureMode failureMode)
        {
            try
            {
                log.Info("Inside Method");
                string folder     = string.Empty;
                string callId     = string.Empty;
                string filePrefix = string.Empty;

                if (string.IsNullOrEmpty(callDataInfo.CallID))
                {
                    callId = "calldata";
                }
                else
                {
                    callId = callDataInfo.CallID;
                }

                switch (failureMode)
                {
                case ImportationFailureMode.BadXml:
                case ImportationFailureMode.InvalidXml:
                case ImportationFailureMode.InvalidData:
                    if (failureMode == ImportationFailureMode.BadXml)
                    {
                        filePrefix = "BAD_";
                    }
                    else if (failureMode == ImportationFailureMode.InvalidData)
                    {
                        filePrefix = "INVALID_";
                    }
                    folder = string.Format("{0}\\{1}\\{2}", readerSetting.InvalidXmlFolder, DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HH"));
                    break;

                case ImportationFailureMode.DuplicateXml:
                    folder = string.Format("{0}\\{1}\\{2}", readerSetting.InvalidDBRequestFolder, DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HH"));
                    break;

                default:
                    folder = string.Format("{0}\\{1}\\{2}", readerSetting.RecoveryFolder, DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HH"));
                    break;
                }

                if (!Directory.Exists(folder))
                {
                    Directory.CreateDirectory(folder);
                }

                int fileCount = Directory.GetFiles(folder).Length + 1;

                string filePath = string.Format("{0}\\{1}{2}_{3}_{4}.txt", folder, filePrefix, readerSetting.Name, fileCount, (new Random()).Next(1000, 9999));

                while (File.Exists(filePath))
                {
                    if (log.IsInfoEnabled)
                    {
                        log.InfoFormat("Recovery File already exist with this name : {0}", filePath);
                    }
                    filePath = string.Format("{0}\\{1}{2}_{3}_{4}.txt", folder, filePrefix, readerSetting.Name, fileCount.ToString("######"), (new Random()).Next(10000, 999999));
                }

                File.WriteAllText(filePath, callDataInfo.CallData);
                log.InfoFormat("Call Data Written to the file, Call ID : {0}, File Path : {1}", callId, filePath);
            }
            catch (Exception ex)
            {
                log.Error("Loading Call Data to Recovery Folder is Failed", ex);
                log.ErrorFormat("Call Data :\n {0} ", callDataInfo.CallData);
            }
        }
        /// <summary>
        /// To update the ivr call data status in database
        /// </summary>
        /// <param name="callData">IVR Call Data</param>
        /// <param name="appId">IVR Application ID</param>
        /// <param name="callId">IVR Call ID</param>
        /// <param name="failureMode">Call Data Imporation Response</param>
        private void UpdateIvrCallDataStatus(string callData, string reportdata, string appId, string callId, string sessionId, DateTime callDateTime, ImportationFailureMode failureMode)
        {
            int    errorCode = 0;
            string errorDesc = string.Empty;
            Dictionary <string, string> dicParams = null;

            try
            {
                _log.Info("Inside Method");
                if (failureMode == ImportationFailureMode.ImportFailed || failureMode == ImportationFailureMode.None)
                {
                    return;
                }

                dicParams = new Dictionary <string, string>();
                dicParams.Add("CALL_ID", callId);
                dicParams.Add("SESSION_ID", sessionId);
                dicParams.Add("APP_ID", appId);
                dicParams.Add("CALL_DATA", callData);
                dicParams.Add("REPORT_DATA", reportdata);
                dicParams.Add("CALL_DATETIME", callDateTime.ToString("MM/dd/yyyy hh:mm:ss"));
                dicParams.Add("STATUS", failureMode == ImportationFailureMode.InvalidXml ? "I" : "F");
                dicParams.Add("PROCESS_STATUS", failureMode.ToString());
                dicParams.Add("PROCESS_FAILUREREASON", failureMode.ToString());
                dicParams.Add("PROCNAME", _dataImportSetting.AppImportSettings[appId].DataImportStatusProcedureName.ToString());
                _dbHelper.UpdateIvrCallDataStatus(dicParams, out errorCode, out errorDesc);
                if (_isDebugLogEnabled)
                {
                    _log.DebugFormat("Error Code : {0}, Error Description : {1}", errorCode, errorDesc);
                }
            }
            catch (Exception ex)
            {
                _log.Error("Error occured while updating the status of Ivr Call Data", ex);
            }
            finally
            {
                if (dicParams != null)
                {
                    dicParams.Clear();
                }
                dicParams = null;
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// To move the recovery file to invalid xml, second cycle or unrecoverable folder in case of call data import failure
        /// </summary>
        /// <param name="log">Thread specific logger</param>
        /// <param name="file">Recovery file path</param>
        /// <param name="failureMode">Call data imporation failure mode</param>
        /// <param name="recoverySetting">FileReaderSetting in the configuration</param>
        private void MoveRecoveryFiles(ILog log, string file, ImportationFailureMode failureMode, FileReaderSetting recoverySetting)
        {
            try
            {
                log.Info("Inside Method");
                string folder     = string.Empty;
                string filePrefix = string.Empty;

                switch (failureMode)
                {
                case ImportationFailureMode.BadXml:
                case ImportationFailureMode.InvalidXml:
                case ImportationFailureMode.InvalidData:
                    if (failureMode == ImportationFailureMode.BadXml)
                    {
                        filePrefix = "BAD_";
                    }
                    else if (failureMode == ImportationFailureMode.InvalidData)
                    {
                        filePrefix = "INVALID_";
                    }
                    folder = string.Format("{0}\\{1}\\{2}", recoverySetting.InvalidXmlFolder, DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HH"));
                    break;

                case ImportationFailureMode.DuplicateXml:
                    folder = string.Format("{0}\\{1}\\{2}", recoverySetting.InvalidDBRequestFolder, DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HH"));
                    break;

                default:
                    FileInfo fileInfo = new FileInfo(file);
                    string   dirName  = fileInfo.Directory.Parent.Parent.Name;

                    if (DateTime.Now.Subtract(fileInfo.CreationTime).TotalHours < _fileRecoveryMaxTime)
                    {
                        return;
                    }

                    if (dirName.Equals(StaticInfo.SecondCycleFolder, StringComparison.CurrentCultureIgnoreCase))
                    {
                        folder = string.Format("{0}\\{1}\\{2}\\{3}", recoverySetting.RecoveryFolder, StaticInfo.UnRecoverableFolder, DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HH"));
                    }
                    else
                    {
                        folder = string.Format("{0}\\{1}\\{2}\\{3}", recoverySetting.RecoveryFolder, StaticInfo.SecondCycleFolder, DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HH"));
                    }
                    break;
                }

                if (!Directory.Exists(folder))
                {
                    Directory.CreateDirectory(folder);
                }

                string fileNameWithExt = System.IO.Path.GetFileName(file);
                string newFilePath     = string.Format("{0}\\{1}{2}", folder, filePrefix, fileNameWithExt);

                int fileCount = Directory.GetFiles(folder).Length + 1;
                while (File.Exists(newFilePath))
                {
                    newFilePath = string.Format("{0}\\{1}{2}_{3}_{4}", folder, filePrefix, fileCount.ToString("######"), (new Random()).Next(1000, 9999), fileNameWithExt);
                }

                File.Move(file, newFilePath);

                log.InfoFormat("Recovery Failed Data Moved From {0} [TO] {1}", file, newFilePath);
            }
            catch (Exception ex)
            {
                log.Error("Recovery Failed - Call Data Movement is Failed", ex);
            }
        }