static void Main(string[] args) { //get current runtime DateTime currentRunTime = DateTime.Now; // get the session directory servers we will talk to NameValueCollection appSettings = ConfigurationManager.AppSettings; //this is the string defined in app.config //the string can have multiple entries, seperate each entry by a semi-colon (;) //each entry must be in the form of: "servername/clustername" string connectionBrokers = appSettings.Get("connectionBrokers"); //what is our error log string errLog = appSettings.Get("errorLog"); //split the connectionBrokers app.config string by semi-colons string[] sessionDirs = connectionBrokers.Split(';'); // get our DB object DBConnect db = new DBConnect(); //update the database with the current runtime date //we MUST do this first so that all the updates and statistics calls will have latest data and satisfy FK constraints in the DB //insertCurrentRuntime marks the "complete" column to false. this is so we can insert a new runtime, but the web application will //not see the new runtime until we mark the complete column to true, which is done after the new stats are gathered/generated etc.. db.InsertCurrentRuntime(currentRunTime); //connect to the session directories, and collect/insert the session info into the DB CBConnect cb = new CBConnect(); cb.LastUpdate = currentRunTime; foreach (string entry in sessionDirs) { string[] currentSD = entry.Split('/'); if (currentSD.Length == 2) { //set the properties for the current Session Directory/Broker to process cb.ServerName = currentSD[0]; cb.ClusterName = currentSD[1]; Console.WriteLine("\nGathering session info for Cluster: {0} on Connection Broker: {1}", cb.ClusterName, cb.ServerName); //Get the stats and write them to our DB cb.GetStats(); } else { string sdErr = "Error Parsing session directory string: " + entry + ", please verify that it is correct!\n"; Console.WriteLine("!!ERROR!!"); Console.WriteLine(" {0}\n", sdErr); Exception sessionDirException = new Exception(sdErr); CatchError(sessionDirException); } } //try and updat the stats //note that each method checks to make sure there were no errors before updating the stats. Console.WriteLine("\n\nNow Generating Latest Stats for newly collected info..."); //update the server Stats db.UpdateServerStats(); //update the domain stats db.UpdateDomainStats(); //update the cluster/per farm stats db.UpdateClusterStats(); //update the curSessions Table db.UpdateCurSessions(currentRunTime); //get current time DateTime endTime = DateTime.Now; TimeSpan runtime = endTime.Subtract(currentRunTime); //mark this last runtime as complete //this needs to be done before we clean out the old stuff from curSessions table //so the website/views have data to grab (current runtime is marked as complete db.CompleteUpdate(currentRunTime, runtime.Seconds); //clean out any old crap from the curSessions table db.CleanCurSessions(currentRunTime); Console.WriteLine("Done\n"); //check for errors if (Rdscbmon.err) { //there were errors - so record them Console.WriteLine("\n{0} error(s) were encountered: ", exceptions.Count.ToString()); Console.WriteLine("Please check the log file {0} for more information", errLog); //open our error log System.IO.StreamWriter errFile = new System.IO.StreamWriter(errLog); //write all the exceptions to the error log foreach (Exception e in exceptions) { errFile.WriteLine("{0}\n\n\n", e); } //close the error log errFile.Close(); } //exit the program with our exit code Environment.Exit(code); }