private void ClearRequestCountersToServiceIniFile() { try { IniFile ini = new IniFile(ServiceIniFilename); ini.IniRemoveKey("Statistics", "Date"); // zet stats op gisteren met allemaal 0 waardes ini.IniRemoveKey("Statistics", "GlobalNumberOfRequests"); foreach (KeyValuePair <string, UserAccount> kvp in UserAccountManager.CloneUserDatabase()) { // verwijder de "key" ini.IniRemoveKey("Statistics", string.Format("{0}_NumberOfRequests", kvp.Key)); } //foreach } catch { } }
private void WriteRequestCountersToServiceIniFile() { try { IniFile ini = new IniFile(ServiceIniFilename); ini.IniWriteValue("Statistics", "Date", DateTime.Now.ToString("yyyy-MM-dd")); ini.IniWriteValue("Statistics", "GlobalNumberOfRequests", UserAccountManager.GlobalNumberOfRequests.ToString()); // Nu per gebruiker stats wegschrijven foreach (KeyValuePair <string, UserAccount> kvp in UserAccountManager.CloneUserDatabase()) { // voor het uitlezen hebben we genoeg aan de "clone" vane de user gegevens ini.IniWriteValue("Statistics", string.Format("{0}_NumberOfRequests", kvp.Key), kvp.Value.NumberOfRequests.ToString()); } //foreach } catch { } }
public void ExecuteTask() { while (UserAccountManager.WritingToUserDatabase) { Thread.Sleep(50); } accountingThreadStarted = true; IniFile ini = null; try { // Om maar 1x per uur robot task te draaien string webServiceURL = string.Format("http://{0}:{1}/", System.Net.Dns.GetHostName(), PortNumber).ToLower(); // Lees de statistieken die we bij afsluiten programma hebben weggeschreven ini = new IniFile(ServiceIniFilename); try { UserAccountManager.GlobalNumberOfRequests = Convert.ToInt64(ini.IniReadValue("Statistics", "GlobalNumberOfRequests")); foreach (KeyValuePair <string, UserAccount> kvp in UserAccountManager.CloneUserDatabase()) { // voor het uitlezen hebben we genoeg aan de "clone" vane de user gegevens Int64 v = Convert.ToInt64(ini.IniReadValue("Statistics", string.Format("{0}_NumberOfRequests", kvp.Key))); // Nu deze gebruiker gegevens opslaan UserAccount ua = UserAccountManager.Account(kvp.Key); if (ua != null) { ua.NumberOfRequests = v; } } //foreach } catch { } ini = null; ClearRequestCountersToServiceIniFile(); // Vertel dat we verzoeken kunnen ontvangen. Is voornamelijk voor haproxy! Webservice.ForceServiceOffline = false; DateTime lastCheckIndex = DateTime.MinValue; DateTime lastReboot = DateTime.Now.Date; while (accountingThreadStarted) { try { if (Environment.UserInteractive) { // Laat op het scherm zien hoeveel request we binnen hebben. int cLeft = Console.CursorLeft; int cTop = Console.CursorTop; try { Console.WriteLine(string.Format("Global number of WebService Request : {0,-18}", UserAccountManager.GlobalNumberOfRequests)); } finally { Console.CursorLeft = cLeft; Console.CursorTop = cTop; } } if ((DateTime.Now - lastCheckIndex).TotalDays > 1) { lastCheckIndex = DateTime.Now.Date; /* * if ((DateTime.Now - ReceiveIndex.DateTimeOfIndex).TotalDays > 9) * { * // Verstuur een mail dat de index te "oud" is * string message = string.Format("SubFingerindex on {0} is {1} days old", Environment.MachineName, (DateTime.Now - ReceiveIndex.DateTimeOfIndex).TotalDays); * * Mail.SendMail(Mail.EMail_Automatisering, message, message); * } */ } // ========================================================================================================== // Moet de computer worden herstart? // ========================================================================================================== if ((DateTime.Now - lastReboot).TotalDays >= 7 && (DateTime.Now.DayOfWeek == DayOfWeek.Wednesday || DateTime.Now.DayOfWeek == DayOfWeek.Thursday)) { Console.WriteLine(); Console.WriteLine("Rebooting computer..."); Program.RestartApplication = true; // zorg dat deze service wordt gestopt! // Wacht 10 seconden DateTime dt = DateTime.Now; while (accountingThreadStarted && Program.ApplicationState != ApplicationState.Stopped) { Thread.Sleep(100); if ((DateTime.Now - dt).TotalMilliseconds >= (10 * 1000)) { // Hoe dan ook stoppen na 10 seconden break; } } //while accountingThreadStarted = false; // Wacht 4 seconden! Thread.Sleep(4 * 1000); Console.WriteLine("Reboot signal send."); RebootWindows.Reboot(); break; } // ========================================================================================================== if (accountingThreadStarted) { waitEvent.WaitOne(5000, false); // na 5 seconden komen we hoe dan ook even tot leven } } catch (Exception e) { CDRLogger.Logger.LogError(e); } } //while // Save usage statistics for next run WriteRequestCountersToServiceIniFile(); } finally { Thread.CurrentThread.Abort(); } CDRLogger.Logger.LogInfo("Ending ExecuteTask();"); }