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();"); }
public static void ReadUserDatabase() { lock (lockObject) { // Reset alle user account tags zodat we straks kunnen herkenen welke account "verwijderd" moeten worden foreach (UserAccount ua in userDatabase.Values) { ua.Tag = 0; } //foreach // First get the name of the inifile string iniFilename = UserDatabaseFilename; // First read the ini-file settings if (File.Exists(iniFilename)) { IniFile ini = new IniFile(iniFilename); int count = 0; while (true) { count++; string section = String.Format("User{0}", count); bool addToDB = false; string username = ini.IniReadValue(section, "Username", ""); if (username.Length <= 0) { // we zijn klaar! break; } // Als account bestaat dan gegevens wijzigen anders user toevoegen UserAccount ua = null; if (!userDatabase.TryGetValue(username, out ua)) { addToDB = true; ua = new UserAccount(); ua.Username = username; } ua.Tag = 1; // deze account kan blijven ua.Password = ini.IniReadValue(section, "Password", "_________" + count.ToString()); try { ua.NumberOfDifferentIPsPerHour = Convert.ToInt32(ini.IniReadValue(section, "NumberOfDifferentIPsPerHour", "0")); } catch { } try { ua.NumberOfRequestsPerHour = Convert.ToInt32(ini.IniReadValue(section, "NumberOfRequestsPerHour", "0")); } catch { } string groupList = ini.IniReadValue(section, "AccessGroup", ""); foreach (string group in groupList.Split(',')) { // Skip over eventuele everbody groep (die is altijd al aanwezig) if (group.ToUpper().Trim() != AccessGroupList.Everybody.ToString().ToUpper()) { foreach (string s in Enum.GetNames(typeof(AccessGroupList))) { if (group.ToUpper().Trim() == s.ToUpper()) { ua.AccessGroupList.Add((AccessGroupList)Enum.Parse(typeof(AccessGroupList), s)); } } //foreach } } //foreach // Voeg toe aan de database if (addToDB) { userDatabase.Add(ua.Username, ua); } } //while // Nu useraccounts verwijderen die niet meer in ini file voorkomen. Tegelijk Tag resetten var deleteUA = from entry in userDatabase where entry.Value.Tag == 0 select entry.Key; // verwijder de verwijderde useraccounts foreach (string key in deleteUA) { userDatabase.Remove(key); } //foreach // Reset alle tags foreach (UserAccount ua in userDatabase.Values) { ua.Tag = 0; } //foreach } else { userDatabase.Clear(); UserAccount ua; ua = new UserAccount(); ua.Username = "******"; ua.Password = "******"; ua.NumberOfDifferentIPsPerHour = -1; // unlimited ua.NumberOfRequestsPerHour = -1; //unlimited ua.AccessGroupList.Add(AccessGroupList.Administrator); userDatabase.Add(ua.Username, ua); // Write it to disk WriteUserDatabase(); } } }