Esempio n. 1
0
        private void ServiceTick()
        {
            try
            {
                // Cleanup ZEUS table
                Zeus oZeus = new Zeus(0, dsnZeus);
                oZeus.DeleteResults();
                AD        oAD       = new AD(0, dsn, intEnvironment);
                Functions oFunction = new Functions(0, dsn, intEnvironment);
                Variables oVariable = new Variables(intEnvironment);
                Log       oLog      = new Log(0, dsn);
                // Check Servers for Zeus
                Servers    oServer     = new Servers(0, dsn);
                ServerName oServerName = new ServerName(0, dsn);
                DataSet    ds          = SqlHelper.ExecuteDataset(dsn, CommandType.Text, "SELECT * FROM cv_servers WHERE dhcp = '0' AND deleted = 0 OR dhcp = 'SUCCESS' AND deleted = 0");
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    int     intServer = Int32.Parse(dr["id"].ToString());
                    DataSet dsZeus    = SqlHelper.ExecuteDataset(dsnZeus, CommandType.Text, "SELECT * FROM cv_zeus_builds WHERE serverid = " + intServer.ToString() + " AND dhcp IS NOT NULL AND deleted = 0");
                    if (dsZeus.Tables[0].Rows.Count > 0)
                    {
                        DataRow drZeus = dsZeus.Tables[0].Rows[0];
                        oLog.AddEvent(drZeus["name"].ToString(), drZeus["serial"].ToString(), "The DHCP address " + drZeus["dhcp"].ToString() + " was found in the BUILD table", LoggingType.Information);
                        SqlHelper.ExecuteNonQuery(dsn, CommandType.Text, "UPDATE cv_servers SET dhcp = '" + drZeus["dhcp"].ToString() + "', modified = getdate() WHERE id = " + intServer.ToString());
                        object o = SqlHelper.ExecuteScalar(dsn, CommandType.Text, "SELECT dhcp FROM cv_servers WHERE id = " + intServer.ToString());
                        if (o != null && o.ToString() != "" && o.ToString() != "0" && o.ToString() != "SUCCESS")
                        {
                            SqlHelper.ExecuteNonQuery(dsnZeus, CommandType.Text, "UPDATE cv_zeus_builds SET deleted = 1, modified = getdate() WHERE id = " + drZeus["id"].ToString());
                            SqlHelper.ExecuteNonQuery(dsnZeus, CommandType.Text, "UPDATE cv_zeus_builds SET deleted = 10, modified = getdate() WHERE deleted = 0 AND serial = '" + drZeus["serial"].ToString() + "'");
                            oLog.AddEvent(drZeus["name"].ToString(), drZeus["serial"].ToString(), "The DHCP address was updated and the BUILD record was deleted", LoggingType.Information);
                        }
                        // Check for Errors
                        DataSet dsError = oServer.GetErrors(intServer);
                        foreach (DataRow drError in dsError.Tables[0].Rows)
                        {
                            if (drError["fixed"].ToString() == "")
                            {
                                oServer.UpdateError(intServer, Int32.Parse(drError["step"].ToString()), 0, 0, true, "");
                                oLog.AddEvent(drZeus["name"].ToString(), drZeus["serial"].ToString(), "The error has been cleared and the build is now ready to continue", LoggingType.Information);
                            }
                        }
                    }
                }
                // Check VMware workstations for Zeus
                Workstations oWorkstation = new Workstations(0, dsn);
                ds = SqlHelper.ExecuteDataset(dsn, CommandType.Text, "SELECT * FROM cv_workstation_virtual WHERE dhcp = '0' AND vmware = 1 AND deleted = 0 OR dhcp = 'SUCCESS' AND vmware = 1 AND deleted = 0");
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    int     intWorkstation = Int32.Parse(dr["id"].ToString());
                    DataSet dsZeus         = SqlHelper.ExecuteDataset(dsnZeus, CommandType.Text, "SELECT * FROM cv_zeus_builds WHERE vmware_workstationid = " + intWorkstation.ToString() + " AND dhcp IS NOT NULL AND deleted = 0");
                    if (dsZeus.Tables[0].Rows.Count > 0)
                    {
                        DataRow drZeus = dsZeus.Tables[0].Rows[0];
                        oLog.AddEvent(drZeus["name"].ToString(), drZeus["serial"].ToString(), "The DHCP address " + drZeus["dhcp"].ToString() + " was found in the BUILD table", LoggingType.Information);
                        SqlHelper.ExecuteNonQuery(dsn, CommandType.Text, "UPDATE cv_workstation_virtual SET dhcp = '" + drZeus["dhcp"].ToString() + "', modified = getdate() WHERE id = " + intWorkstation.ToString());
                        object o = SqlHelper.ExecuteScalar(dsn, CommandType.Text, "SELECT dhcp FROM cv_workstation_virtual WHERE id = " + intWorkstation.ToString());
                        if (o != null && o.ToString() != "" && o.ToString() != "0" && o.ToString() != "SUCCESS")
                        {
                            SqlHelper.ExecuteNonQuery(dsnZeus, CommandType.Text, "UPDATE cv_zeus_builds SET deleted = 1, modified = getdate() WHERE id = " + drZeus["id"].ToString());
                            oLog.AddEvent(drZeus["name"].ToString(), drZeus["serial"].ToString(), "The DHCP address was updated and the BUILD record was deleted", LoggingType.Information);
                        }
                        // Check for Errors
                        DataSet dsError = oWorkstation.GetVirtualErrors(intWorkstation);
                        foreach (DataRow drError in dsError.Tables[0].Rows)
                        {
                            if (drError["fixed"].ToString() == "")
                            {
                                oWorkstation.UpdateVirtualError(intWorkstation, Int32.Parse(drError["step"].ToString()), 0, 0);
                                oLog.AddEvent(drZeus["name"].ToString(), drZeus["serial"].ToString(), "The error has been cleared and the build is now ready to continue", LoggingType.Information);
                            }
                        }
                    }
                }

                /*
                 * // Check Virtual Workstations for Zeus
                 * Workstations oWorkstation = new Workstations(0, dsn);
                 * Forecast oForecast = new Forecast(0, dsn);
                 * Classes oClass = new Classes(0, dsn);
                 * Workstations oRemote = new Workstations(0, dsnRemote);
                 * ds = SqlHelper.ExecuteDataset(dsn, CommandType.Text, "SELECT * FROM cv_workstation_virtual WHERE dhcp = '0' AND vmware = 0 AND deleted = 0 OR dhcp = 'SUCCESS' AND vmware = 0 AND deleted = 0");
                 * foreach (DataRow dr in ds.Tables[0].Rows)
                 * {
                 *  int intWorkstation = Int32.Parse(dr["id"].ToString());
                 *  int intRemote = Int32.Parse(dr["remoteid"].ToString());
                 *  DataSet dsZeus = SqlHelper.ExecuteDataset(dsnZeus, CommandType.Text, "SELECT * FROM cv_zeus_builds WHERE workstationid = " + intWorkstation.ToString() + " AND dhcp IS NOT NULL AND deleted = 0");
                 *  if (dsZeus.Tables[0].Rows.Count > 0)
                 *  {
                 *      SqlHelper.ExecuteNonQuery(dsn, CommandType.Text, "UPDATE cv_workstation_virtual SET dhcp = '" + dsZeus.Tables[0].Rows[0]["dhcp"].ToString() + "', modified = getdate() WHERE id = " + intWorkstation.ToString());
                 *      oRemote.NextRemoteVirtual(intRemote);
                 *      object o = SqlHelper.ExecuteScalar(dsn, CommandType.Text, "SELECT dhcp FROM cv_workstation_virtual WHERE id = " + intWorkstation.ToString());
                 *      if (o != null && o.ToString() != "" && o.ToString() != "0" && o.ToString() != "SUCCESS")
                 *          SqlHelper.ExecuteNonQuery(dsnZeus, CommandType.Text, "UPDATE cv_zeus_builds SET deleted = 1, modified = getdate() WHERE id = " + dsZeus.Tables[0].Rows[0]["id"].ToString());
                 *  }
                 *  else if (dr["dhcp"].ToString() == "0")
                 *  {
                 *      DateTime datModified = DateTime.Parse(dr["modified"].ToString());
                 *      DateTime _now = DateTime.Now;
                 *      TimeSpan oSpan = _now.Subtract(datModified);
                 *      if (oSpan.Hours > 6)
                 *      {
                 *          string strWorkstation = oWorkstation.GetName(Int32.Parse(dr["nameid"].ToString()));
                 *          Ping oPing = new Ping();
                 *          string strStatus = "";
                 *          try
                 *          {
                 *              PingReply oReply = oPing.Send(strWorkstation);
                 *              strStatus = oReply.Status.ToString().ToUpper();
                 *              if (strStatus == "SUCCESS")
                 *                  strStatus = Convert.ToString(oReply.Address);
                 *              else
                 *                  strStatus = "";
                 *          }
                 *          catch { }
                 *          if (strStatus != "")
                 *          {
                 *              if (intLogging > 0)
                 *                  oLog.WriteEntry(String.Format("PING SUCCESS: " + strWorkstation), EventLogEntryType.Information);
                 *              dsZeus = SqlHelper.ExecuteDataset(dsnZeus, CommandType.Text, "SELECT * FROM cv_zeus_builds WHERE name = '" + strWorkstation + "' AND dhcp IS NULL AND deleted = 0");
                 *              if (dsZeus.Tables[0].Rows.Count > 0)
                 *                  SqlHelper.ExecuteNonQuery(dsnZeus, CommandType.Text, "UPDATE cv_zeus_builds SET dhcp = '" + strStatus + "', modified = getdate() WHERE id = " + dsZeus.Tables[0].Rows[0]["id"].ToString());
                 *          }
                 *          else if (intLogging > 0)
                 *              oLog.WriteEntry(String.Format("PING UNSUCCESSFUL: " + strWorkstation), EventLogEntryType.Warning);
                 *      }
                 *  }
                 * }
                 * // Sync Workstations
                 * ds = SqlHelper.ExecuteDataset(dsn, CommandType.Text, "SELECT * FROM cv_workstation_virtual WHERE deleted = 0 AND vmware = 0 AND completed IS NULL");
                 * foreach (DataRow dr in ds.Tables[0].Rows)
                 * {
                 *  int intWorkstation = Int32.Parse(dr["id"].ToString());
                 *  int intRemote = Int32.Parse(dr["remoteid"].ToString());
                 *  object o = SqlHelper.ExecuteScalar(dsnRemote, CommandType.Text, "SELECT step FROM cv_virtual_workstations WHERE id = " + intRemote.ToString());
                 *  if (o != null && o.ToString() != "")
                 *      SqlHelper.ExecuteDataset(dsn, CommandType.Text, "UPDATE cv_workstation_virtual SET step = " + o.ToString() + " WHERE id = " + intWorkstation.ToString());
                 * }
                 * // Check Workstations for Installed Applications
                 * ds = SqlHelper.ExecuteDataset(dsn, CommandType.Text, "SELECT * FROM cv_workstation_virtual WHERE step = " + intWorkstationInstallStep.ToString() + " AND vmware = 0 AND deleted = 0");
                 * foreach (DataRow dr in ds.Tables[0].Rows)
                 * {
                 *  int intWorkstation = Int32.Parse(dr["id"].ToString());
                 *  int intRemote = Int32.Parse(dr["remoteid"].ToString());
                 *  string strName = oWorkstation.GetName(Int32.Parse(dr["nameid"].ToString()));
                 *  OnDemand oOnDemand = new OnDemand(0, dsn);
                 *  DataSet dsComponents = oWorkstation.GetComponentsSelected(intWorkstation);
                 *  if (dsComponents.Tables[0].Rows.Count == 0)
                 *      oOnDemand.UpdateStepDoneWorkstation(intWorkstation, intWorkstationInstallStep, "No components to install", 0, false, false);
                 *  else
                 *  {
                 *      foreach (DataRow drComponent in dsComponents.Tables[0].Rows)
                 *      {
                 *          int intComponent = Int32.Parse(drComponent["componentid"].ToString());
                 *          if (drComponent["user_group"].ToString() != "")
                 *          {
                 *              oAD.JoinGroup(strName, drComponent["user_group"].ToString());
                 *              strEMailIdsBCC = oFunction.GetGetEmailAlertsEmailIds("EMAILGRP_DEVELOPER_ALERT");
                 *              oFunction.SendEmail("Virtual Workstation Component Installation", drComponent["notifications"].ToString(), "", strEMailIdsBCC, "Virtual Workstation Component Installation", "<p><b>This message is to inform you that the following component(s) were configured for workstation " + strName + "</b></p><p> - " + drComponent["name"].ToString() + "</p>", true, false);
                 *              oOnDemand.UpdateStepDoneWorkstation(intWorkstation, intWorkstationInstallStep, "Successfully installed " + drComponent["name"].ToString() + "<br/>", 0, true, false);
                 *          }
                 *          else
                 *              oOnDemand.UpdateStepDoneWorkstation(intWorkstation, intWorkstationInstallStep, "Unable to install " + drComponent["name"].ToString() + " (currently only configured for user group installations)<br/>", 0, true, false);
                 *          oWorkstation.UpdateComponents(intWorkstation, intComponent, 2);
                 *      }
                 *  }
                 *  oRemote.NextRemoteVirtual(intRemote);
                 * }
                 * if (intProd == 1)
                 * {
                 *  // Check Workstations for completion
                 *  Users oUser = new Users(0, dsn);
                 *  ds = SqlHelper.ExecuteDataset(dsnRemote, CommandType.Text, "SELECT * FROM cv_virtual_workstations WHERE completed IS NOT NULL AND deleted = 0");
                 *  foreach (DataRow dr in ds.Tables[0].Rows)
                 *  {
                 *      int intAnswer = Int32.Parse(dr["answerid"].ToString());
                 *      string strName = dr["name"].ToString();
                 *      string strHost = dr["hostname"].ToString();
                 *      string strEmail = "";
                 *      string strCC = "";
                 *      DataSet dsNotify = SqlHelper.ExecuteDataset(dsnRemote, CommandType.Text, "SELECT * FROM cv_virtual_workstations_notify WHERE name = '" + strName + "'");
                 *      foreach (DataRow drNotify in dsNotify.Tables[0].Rows)
                 *          strEmail += drNotify["xid"].ToString() + ";";
                 *      string strAccounts = "";
                 *      DataSet dsUsers = SqlHelper.ExecuteDataset(dsnRemote, CommandType.Text, "SELECT * FROM cv_virtual_workstations_accounts WHERE name = '" + strName + "'");
                 *      foreach (DataRow drUser in dsUsers.Tables[0].Rows)
                 *      {
                 *          if (drUser["admin"].ToString() == "1")
                 *              strAccounts += oUser.GetFullName(drUser["xid"].ToString()) + " (Administrator)<br/>";
                 *          else if (drUser["remote"].ToString() == "1")
                 *              strAccounts += oUser.GetFullName(drUser["xid"].ToString()) + " (Remote Access)<br/>";
                 *      }
                 *      int intClass = Int32.Parse(oForecast.GetAnswer(intAnswer, "classid"));
                 *      if (oClass.IsProd(intClass))
                 *          strCC = oVariable.NotifyWorkstationProd();
                 *      if (intLogging > 0)
                 *          oLog.WriteEntry(String.Format("Attempting to send email for " + strName), EventLogEntryType.Information);
                 *      if (strAccounts == "")
                 *          strAccounts = "Accounts were not requested at this time. To obtain access to this workstation, please fill out a LAN Access Form";
                 *      string strKnowledge = "http://knova.ntl-city.com/selfservice/documentLink.do?externalID=KN10319";
                 *      if (strKnowledge != "")
                 *      {
                 *          strEMailIdsBCC = oFunction.GetGetEmailAlertsEmailIds("EMAILGRP_PROVISIONING_ALERT,EMAILGRP_WORKSTATION");
                 *          oFunction.SendEmail("Virtual Workstation Notification: " + strName, strEmail, strCC, strEMailIdsBCC, "Virtual Workstation Notification: " + strName, "<p><b>This message is to inform you that the workstation " + strName + " has been auto-provisioned successfully!</b><p><p>This workstation was created on host <b>" + strHost + "</b>.</p><p>As requested, the following users have been granted rights to this workstation:<br/>" + strAccounts + "</p><p>If you are having problems connecting to your virtual workstation, <a href=\"" + strKnowledge + "\" target=\"_blank\"/>please click here</a> to view a helpful knowledge base article published by the support team.</p><p><b>NOTE:</b> This is automated email sent from the ClearView Auto-Provisioning tool. Please do not respond to this message.</p><p>If you would like to learn more about this process, <a href=\"" + oVariable.URL() + "/info.htm\" target=\"_blank\"/>please click here</a>.</p>", true, false);
                 *      }
                 *      else
                 *      {
                 *          strEMailIdsBCC = oFunction.GetGetEmailAlertsEmailIds("EMAILGRP_PROVISIONING_ALERT");
                 *          oFunction.SendEmail("Virtual Workstation Notification: " + strName, strEmail, strCC, strEMailIdsBCC, "Virtual Workstation Notification: " + strName, "<p><b>This message is to inform you that the workstation " + strName + " has been auto-provisioned successfully!</b><p><p>This workstation was created on host <b>" + strHost + "</b>.</p><p>As requested, the following users have been granted rights to this workstation:<br/>" + strAccounts + "</p><p><b>NOTE:</b> This is automated email sent from the ClearView Auto-Provisioning tool. Please do not respond to this message.</p><p>If you would like to learn more about this process, <a href=\"" + oVariable.URL() + "/info.htm\" target=\"_blank\"/>please click here</a>.</p>", true, false);
                 *      }
                 *      if (intLogging > 0)
                 *          oLog.WriteEntry(String.Format("Deleting remote workstation ID " + dr["id"].ToString()), EventLogEntryType.Information);
                 *      SqlHelper.ExecuteNonQuery(dsnRemote, CommandType.Text, "UPDATE cv_virtual_workstations SET deleted = 1 WHERE id = " + dr["id"].ToString() + " AND deleted = 0");
                 *  }
                 * }
                 */
            }
            catch (Exception ex)
            {
                string strError = "Zeus Service: " + "(Error Message: " + ex.Message + ") ~ (Source: " + ex.Source + ") (Stack Trace: " + ex.StackTrace + ") [" + System.Environment.UserName + "]";
                oLog.WriteEntry(strError, EventLogEntryType.Error);
                SystemError(strError);
                oLog.WriteEntry(String.Format(ex.Message), EventLogEntryType.Error);
            }
        }