Esempio n. 1
0
        /// <summary>
        /// Establish connection to the configuration server
        /// </summary>
        /// <param name="pri_ConfigServerHost">The pri_ configuration server host.</param>
        /// <param name="pri_ConfigServerPort">The pri_ configuration server port.</param>
        /// <param name="clientName">Name of the client.</param>
        /// <param name="applicationName">Name of the application.</param>
        /// <param name="userName">Name of the user.</param>
        /// <param name="password">The password.</param>
        /// <param name="sec_ConfigServerHost">The sec_ configuration server host.</param>
        /// <param name="sec_ConfigServerPort">The sec_ configuration server port.</param>
        /// <returns></returns>
        public OutputValues ConfigConnectionEstablish(string pri_ConfigServerHost, string pri_ConfigServerPort, string applicationName,
                                                      string userName, string password, string sec_ConfigServerHost, string sec_ConfigServerPort, string[] sectionToRead, params string[] sections)
        {
            _configContainer = null;
            _configContainer = ConfigContainer.Instance();
            OutputValues output = new OutputValues();

            try
            {
                var assembly = typeof(ConfigManager).Assembly;
                if (assembly != null)
                {
                    _logger.Info("-----------------------------------------------------------------------------");
                    _logger.Info(assembly.GetName().Name + " : " + assembly.GetName().Version);
                    _logger.Info("-----------------------------------------------------------------------------");
                }
            }
            catch (Exception generalException)
            {
                _logger.Error("Error occurred while getting the assembly version of library : " +
                              ((generalException.InnerException == null) ? generalException.Message : generalException.InnerException.ToString()));
            }
            ConfigConnectionManager connect = new ConfigConnectionManager();

            //Clear and null all values
            if (_configContainer.ConfServiceObject != null)
            {
                if (_configContainer.ConfServiceObject.Protocol != null && _configContainer.ConfServiceObject.Protocol.State == ChannelState.Opened)
                {
                    _configContainer.ConfServiceObject.Protocol.Close();
                }
                if (_configContainer.ConfServiceObject != null)
                {
                    ConfServiceFactory.ReleaseConfService(_configContainer.ConfServiceObject);
                }
                _configContainer.ConfServiceObject = null;
            }
            //_configContainer.AllKeys.Clear();
            _configContainer.CMEValues.Clear();
            //Connect Config Server
            output = connect.ConnectConfigServer(pri_ConfigServerHost, pri_ConfigServerPort, applicationName, userName, password,
                                                 sec_ConfigServerHost, sec_ConfigServerPort);

            if (output.MessageCode == "200")
            {
                //Authenticate the user first and read the CME configurations
                output = AuthenticateUser(userName, password);
                if (output.MessageCode == "200")
                {
                    ConfigurationHandler readValues = new ConfigurationHandler();

                    ConfigContainer.Instance().UserName = userName;

                    //Get access group first then read values hierarchy

                    //Read System section to get Tenant and switch type
                    output = readValues.ReadSystemSection(applicationName);

                    if (output.MessageCode == "2001")
                    {
                        return(output);
                    }
                    //Register for CME Alter Notification
                    //readValues.RegisterCMEAlterNotification(_configContainer.TenantDbId);

                    //Read logger to print CME values in log

                    readValues.ReadLoggerData(userName, applicationName);
                    InitializeLogger(userName);
                    //Read Application keys
                    readValues.ReadApplication(applicationName, sectionToRead, sections);
                    //Read Agent Group Keys and override existing application keys
                    readValues.ReadAgentGroup(userName, sectionToRead, sections);
                    //Read person Keys and override existing application keys and Agent group keys

                    readValues.ReadPerson(userName, sectionToRead, sections);
                    GetContactBusinessAttribute("ContactAttributes");
                    //Check the user is in access group
                    bool accessAuthenticationEnable = true;
                    try
                    {
                        if (_configContainer.CMEValues.ContainsKey("login.enable.access.group-authentication"))
                        {
                            if (!string.IsNullOrEmpty(((ConfigValue)_configContainer.CMEValues["login.access-group"]).Value.ToString()) &&
                                !Convert.ToBoolean(((ConfigValue)_configContainer.CMEValues["login.enable.access.group-authentication"]).Value.ToString()))
                            {
                                accessAuthenticationEnable = false;
                            }
                        }
                    }
                    catch
                    {
                        _logger.Warn("Authentication using access group may not work as expected. Implementing default functionality.");
                    }
                    if (_configContainer.CMEValues.ContainsKey("login.access-group"))
                    {
                        if (_configContainer.CMEValues["login.access-group"] != null &&
                            ((ConfigValue)_configContainer.CMEValues["login.access-group"]).Value.ToString() != string.Empty)
                        {
                            if (accessAuthenticationEnable)
                            {
                                output = readValues.ReadAccessPermission(((ConfigValue)_configContainer.CMEValues["login.access-group"]).Value);
                                if (output.MessageCode == "2001")
                                {
                                    return(output);
                                }
                            }
                        }
                        else
                        {
                            _logger.Warn("login.access-group value is null or empty");
                            output.MessageCode = "2001";
                            output.Message     = "Access group name is not configured. Please contact your Administrator";
                            return(output);
                        }
                    }
                    else
                    {
                        _logger.Warn("login.access-group key is not configured");
                        output.MessageCode = "2001";
                        output.Message     = "Access group name is not configured. Please contact your Administrator";
                        return(output);
                    }
                    //Read the available Queues such as ACD queues
                    if (_configContainer.CMEValues.ContainsKey("login.voice.available-queues") && ((ConfigValue)_configContainer.CMEValues["login.voice.available-queues"]).Value != null)
                    {
                        readValues.ReadQueues(((ConfigValue)_configContainer.CMEValues["login.voice.available-queues"]).Value.ToString());
                    }
                    else
                    {
                        _logger.Warn("login.voice.available-queues key-value is not configured");
                    }

                    //Check case data and disposition from business attribute or transaction object
                    if (_configContainer.CMEValues.ContainsKey("interaction.casedata.use-transaction-object") &&
                        ((ConfigValue)_configContainer.CMEValues["interaction.casedata.use-transaction-object"]).Value.ToLower().Equals("true") ? true : false)
                    {
                        //Read the case data Transaction object for add/filter/sort case data
                        if (_configContainer.CMEValues.ContainsKey("interaction.casedata-object-name") &&
                            !string.IsNullOrEmpty(((ConfigValue)_configContainer.CMEValues["interaction.casedata-object-name"]).Value))
                        {
                            readValues.ReadCaseDataTransactionObject(((ConfigValue)_configContainer.CMEValues["interaction.casedata-object-name"]).Value.ToString());
                            readValues.ReadCaseDataFilterTransactionObject(((ConfigValue)_configContainer.CMEValues["interaction.casedata-object-name"]).Value.ToString());
                            readValues.ReadCaseDataSortingTransactionObject(((ConfigValue)_configContainer.CMEValues["interaction.casedata-object-name"]).Value.ToString());
                        }
                        else
                        {
                            _logger.Warn("interaction.casedata-object-name value is not configured");
                        }

                        //Read the case data Transaction object for disposition
                        if (_configContainer.CMEValues.ContainsKey("interaction.disposition-object-name") &&
                            !string.IsNullOrEmpty(((ConfigValue)_configContainer.CMEValues["interaction.disposition-object-name"]).Value))
                        {
                            readValues.ReadDispositionTransctionObject(((ConfigValue)_configContainer.CMEValues["interaction.disposition-object-name"]).Value.ToString());
                        }
                        else
                        {
                            _logger.Warn("interaction.disposition-object-name value is not configured");
                        }
                    }
                    else
                    {
                        if (_configContainer.CMEValues.ContainsKey("interaction.casedata-object-name") &&
                            !string.IsNullOrEmpty(((ConfigValue)_configContainer.CMEValues["interaction.casedata-object-name"]).Value))
                        {
                            //Read casedata information from Business attributes
                            readValues.ReadCaseDataFromBusinessAttribute(((ConfigValue)_configContainer.CMEValues["interaction.casedata-object-name"]).Value.ToString());
                        }
                        else
                        {
                            _logger.Warn("interaction.casedata-object-name key-value is not configured");
                        }

                        if (_configContainer.CMEValues.ContainsKey("interaction.disposition-object-name") &&
                            !string.IsNullOrEmpty(((ConfigValue)_configContainer.CMEValues["interaction.disposition-object-name"]).Value))
                        {
                            //Read disposition information from Business attributes
                            readValues.ReadDispositionFromBusinessAttribute(((ConfigValue)_configContainer.CMEValues["interaction.disposition-object-name"]).Value.ToString());
                        }
                        else
                        {
                            _logger.Warn("interaction.disposition-object-name key-value is not configured");
                        }
                    }
                    //Read all skills
                    readValues.ReadAllSkills();
                    //Read all places
                    readValues.ReadAllPlaces();
                    //Read all DN's based on switch type
                    //readValues.ReadAllDNs();
                    //Read channel based not ready reason codes for voice, email and chat medias
                    readValues.ReadChannelNotReadyReasonCodes();
                    //Read global not ready reason codes
                    if (_configContainer.AllKeys.Contains("agent-global-status.not-ready-reasoncodes"))
                    {
                        string[] notReadyReasonCodes = ((string)_configContainer.GetValue("agent-global-status.not-ready-reasoncodes")).Split(',');
                        if (notReadyReasonCodes.Length > 0)
                        {
                            readValues.ReadGlobalNotReadyReasonCodes(notReadyReasonCodes.Distinct().ToArray <string>());
                        }
                    }
                    //Read Voice not Ready Reason Codes
                    if (_configContainer.AllKeys.Contains("agent-voice-status.not-ready-reasoncodes"))
                    {
                        string[] notReadyReasonCodes = ((string)_configContainer.GetValue("agent-voice-status.not-ready-reasoncodes")).Split(',');
                        if (notReadyReasonCodes.Length > 0)
                        {
                            readValues.ReadVoiceHierarchyLevelNotReadyReasonCodes(notReadyReasonCodes.Distinct().ToArray <string>());
                        }
                    }

                    CfgPersonQuery qPerson = new CfgPersonQuery();
                    qPerson.TenantDbid = ConfigContainer.Instance().TenantDbId;
                    qPerson.IsAgent    = 0;// 0 - Means select only Agents (or) 1 - means select only user(default)
                    System.Collections.Generic.ICollection <CfgPerson> _allPersons = _configContainer.ConfServiceObject.RetrieveMultipleObjects <CfgPerson>(qPerson);
                    //_configContainer.AllKeys.Add("AllPersons");
                    _configContainer.CMEValues.Add("AllPersons", _allPersons);
                    readValues.RegisterCMEAlterNotification(ConfigContainer.Instance().TenantDbId);
                    readValues = null;
                }
                else
                {
                    return(output);
                }
            }
            return(output);
        }
Esempio n. 2
0
        /// <summary>
        /// Initializes the logger.
        /// </summary>
        internal void InitializeLogger(string userName)
        {
            int    maxRollBacks      = 0;
            string maxFileSize       = string.Empty;
            string logRollStyle      = string.Empty;
            string conversionPattern = string.Empty;
            string logFileName       = string.Empty;
            string logFilterLevel    = string.Empty;
            string levelsToFilter    = string.Empty;
            string datePattern       = string.Empty;

            try
            {
                if (_configContainer.CMEValues.ContainsKey("log.max-roll-size"))
                {
                    maxRollBacks = Convert.ToInt32(_configContainer.GetValue("log.max-roll-size"));
                }

                if (_configContainer.CMEValues.ContainsKey("log.max-file-size"))
                {
                    maxFileSize = _configContainer.GetValue("log.max-file-size");
                }

                if (_configContainer.CMEValues.ContainsKey("log.conversion-pattern"))
                {
                    conversionPattern = _configContainer.GetValue("log.conversion-pattern");
                }

                if (_configContainer.CMEValues.ContainsKey("log.date-pattern"))
                {
                    datePattern = _configContainer.GetValue("log.date-pattern");
                }

                if (_configContainer.CMEValues.ContainsKey("log.levels-to-filter"))
                {
                    levelsToFilter = _configContainer.GetValue("log.levels-to-filter");
                }

                if (_configContainer.CMEValues.ContainsKey("log.file-name"))
                {
                    logFileName = _configContainer.GetValue("log.file-name");
                }

                if (_configContainer.CMEValues.ContainsKey("log.filter-level"))
                {
                    logFilterLevel = _configContainer.GetValue("log.filter-level");
                }

                if (_configContainer.CMEValues.ContainsKey("log.roll-style"))
                {
                    logRollStyle = _configContainer.GetValue("log.roll-style");
                }

                var lastchar = logFileName.Contains(@"\") ? @"\" : @"/";

                if (!logFileName.Substring(logFileName.Length - 1, 1).Contains(lastchar))
                {
                    logFileName = logFileName + lastchar;
                }

                //var directoryInfo = new DirectoryInfo(logFileName);
                //if (logFileName == string.Empty || !Directory.Exists(directoryInfo.Root.Name))
                //{
                //    string folder = Path.Combine(Environment.CurrentDirectory.ToString(), "Logs");
                //    if (!Directory.Exists(folder))
                //        Directory.CreateDirectory(folder);
                //    logFileName = folder + @"\";
                //}

                Pointel.Logger.Core.Logger.ConfigureLog4net(maxRollBacks.ToString(), maxFileSize, logRollStyle, conversionPattern, logFileName + userName, logFilterLevel, levelsToFilter, datePattern);
                //Pointel.Logger.Core.Logger.ConfigureLog4net(maxRollBacks, maxFileSize, logRollStyle, conversionPattern, logFileName + userName, logFilterLevel, levelsToFilter, datePattern);

                var      assembly  = Assembly.GetExecutingAssembly();
                var      fvi       = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location);
                DateTime buildDate = new FileInfo(Assembly.GetExecutingAssembly().Location).LastWriteTime;

                _logger.Info("---------------------------------------------------------------");
                _logger.Info("   Agent Interaction Desktop Application   ");
                _logger.Info("   Version : " + FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion);
                _logger.Info("   Framework : " + Environment.Version);
                var currentOs = Environment.OSVersion;
                _logger.Info("   Environment : " + currentOs.VersionString);
                _logger.Info("---------------------------------------------------------------");
            }
            catch { }
            finally
            {
                maxRollBacks      = 0;
                maxFileSize       = null;
                logRollStyle      = null;
                conversionPattern = null;
                logFileName       = null;
                logFilterLevel    = null;
                levelsToFilter    = null;
                datePattern       = null;
            }
        }