Пример #1
0
        private dynamic GetConnectionString(dynamic parameters)
        {
            ISiteConnectionString connectionString = this._connectionStringRepository.GetSiteConnectionString(parameters.SiteId);

            logManager.Write($"[GET]-> GetConnectionString Id: {connectionString.Id}");
            return(Response.AsJson(connectionString));
        }
        public static void SendAlert(ISiteConnectionString connectionString)
        {
            ISite site = connectionString.Site;

            if (site == null)
            {
                return;
            }
            bool isSiteAvailable = connectionString.Site.State.Swap() == AppServices.IIS.Models.SiteState.Started;

            string statusFormatted     = connectionString.ServerName + "," + connectionString.Port + "&" + connectionString.DatabaseName;
            string appVersionFormatted = $"Bulid {FileOperations.AssemblyVersion}";

            string availabilityFormatted;
            string isAvailableFormatted;
            string leftImageContent;
            string titleColorContent;

            if (isSiteAvailable)
            {
                availabilityFormatted = "WARNING! site is running but the dependency service not resolved.";
                isAvailableFormatted  = "Yes";
                leftImageContent      = MailService.BASE64_WARNING;
                titleColorContent     = MailService.TITLE_COLOR_YELLOW;
            }
            else
            {
                availabilityFormatted = "CRITICAL CASE! site is not accessible and the dependency service not resolved.";
                isAvailableFormatted  = "No";
                leftImageContent      = MailService.BASE64_CRITICAL_CASE;
                titleColorContent     = MailService.TITLE_COLOR_RED;
            }

            MailMessage mailMessage = new MailMessage
            {
                MailTitle         = "ConnectionString Availability test failed!",
                MailSubTitle      = statusFormatted,
                MailStatus1       = "DATABASE Connection Check FAILED!",
                MailStatus2       = availabilityFormatted,
                MailMachineName   = site.MachineName,
                MailSiteUrl       = site.Name,
                MailSiteName      = site.Name,
                MailSiteAvailable = isAvailableFormatted,
                MailCheckTime     = connectionString.LastCheckTime.ToString(),
                MailAppVersion    = appVersionFormatted,
                MailLeftImage     = leftImageContent,
                MailTitleColor    = titleColorContent
            };

            IISMailQueue mail = new IISMailQueue {
                MailContent = mailMessage.MailContent
            };

            WebTransfer.PostMail(mail);
        }
Пример #3
0
        public static IEnumerable <ISiteConnectionString> TestAvaiilabilty(this IEnumerable <ISiteConnectionString> connectionStrings)
        {
            List <ISiteConnectionString> connectionstringList = new List <ISiteConnectionString>();
            List <Task> csTaskList = new List <Task>();

            foreach (ISiteConnectionString value in connectionStrings)
            {
                Task task = new Task(new Action(delegate
                {
                    try
                    {
                        ISiteConnectionString connectionString = value;
                        Stopwatch watcher = new Stopwatch();

                        watcher.Start();
                        XConsole.WriteLine("CheckSQLDatabaseAccesibility:" + connectionString.RawConnectionString);
                        bool isAvailable = WebOperations.CheckSQLDatabaseAccesibility(connectionString?.RawConnectionString);
                        watcher.Stop();

                        connectionString.IsAvailable  = isAvailable;
                        connectionString.ResponseTime = watcher.ElapsedMilliseconds;
                        connectionstringList.Add(connectionString);

                        watcher.Reset();

                        if (MultiThreading.ActiveTaskCounter > 0)
                        {
                            MultiThreading.ActiveTaskCounter--;
                        }
                    }
                    catch (Exception ex)
                    {
                        XConsole.WriteLine(ex.ToString());
                        logManager.Write(ex.ToString());
                    }
                }));
                csTaskList.Add(task);
            }
            MultiThreading.Run(csTaskList);
            return(connectionstringList.AsEnumerable());
        }
        public static void TestAvailability(object @value)
        {
            ISiteConnectionString connectionString = value as ISiteConnectionString;

            Stopwatch            watcher = new Stopwatch();
            SiteConnectionString connectionStringBlock = new SiteConnectionString();

            watcher.Start();
            bool isAvailable = WebOperations
                               .CheckSQLDatabaseAccesibility(connectionString.RawConnectionString);

            watcher.Stop();
            connectionStringBlock.IsAvailable   = isAvailable;
            connectionStringBlock.LastCheckTime = DateTime.Now;
            connectionStringBlock.ResponseTime  = watcher.ElapsedMilliseconds;

            watcher.Reset();

            if (MultiThreading.ActiveTaskCounter > 0)
            {
                MultiThreading.ActiveTaskCounter--;
            }
        }
        public static IEnumerable <ISiteConnectionString> TrackConnectionString(IEnumerable <ISite> sites)
        {
            // Create Search Dictionary
            IEnumerable <ISiteConnectionString> dictionaryConnectionStrings = sites.GetSearchDictionary <ISiteConnectionString>(TrackerType.ConnectionString);

            if (dictionaryConnectionStrings == null)
            {
                return(null);
            }

            // Test ConnectionStrings in the Search Dictionary
            dictionaryConnectionStrings = dictionaryConnectionStrings.TestAvaiilabilty();

            IList <SiteConnectionString> retvals = new List <SiteConnectionString>();

            foreach (ISite site in sites) // for each sites..do
            {
                // Create list of deleted connection strings
                List <SiteConnectionString> deletedConnectionstrings = new List <SiteConnectionString>();

                // Get Connectionstrings from database.
                IEnumerable <SiteConnectionString> dbConnectionstrings = site.GetDBConnectionStrings();

                // Get Connectionstrings from live configuration file.
                IEnumerable <SiteConnectionString> currentConnectionstrings = site.GetConnectionStrings();


                // If live connectionstrings is null
                if (dbConnectionstrings.Count() < 1 && currentConnectionstrings == null)
                {
                    continue; // skip this iteration
                }

                deletedConnectionstrings = dbConnectionstrings.ToList();

                foreach (SiteConnectionString currConnectionstring in currentConnectionstrings) //foreach connectionstring
                {
                    // Search dictionary test results for site's current connectionstring
                    ISiteConnectionString siteConnectionString = dictionaryConnectionStrings.FirstOrDefault(dict => dict.RawConnectionString == currConnectionstring.RawConnectionString);

                    deletedConnectionstrings = deletedConnectionstrings.SkipWhile(x => x.ConnectionName == currConnectionstring.ConnectionName &&
                                                                                  x.RawConnectionString == currConnectionstring.RawConnectionString).ToList();

                    if (siteConnectionString == null) // If cannot found any result.
                    {
                        continue;                     // Skip this iteration.
                    }

                    currConnectionstring.LastCheckTime = DateTime.Now;         // Update Checkdate

                    retvals.Add(siteConnectionString as SiteConnectionString); // add this record to return values.

                    // If Connectionstring is not available and  mail status yes
                    if (!currConnectionstring.IsAvailable && currConnectionstring.SendAlertMailWhenUnavailable)
                    {
                        // send mail
                    }
                } // end of loop.

                if (deletedConnectionstrings.Count() > 0)
                {
                    deletedConnectionstrings.ForEach(dbcs => dbcs.DeleteDate = DateTime.Now);
                    WebTransfer.PostSiteConnectionString(retvals);
                }
            } // end of loop.

            if (retvals.Count() > 0)
            {
                WebTransfer.PostSiteConnectionString(retvals);
            }

            return(retvals.AsEnumerable());
        }