예제 #1
0
        public void CalculateTest(double firstValue, double secondValue, double expected)
        {
            var calculator   = new LogX();
            var actualResult = calculator.Calculate(firstValue, secondValue);

            Assert.AreEqual(expected, actualResult);
        }
예제 #2
0
        public static WindowsImpersonationContext targetRepositoryImpersonationContext = null;//SQLsecure 3.1 (Tushar)--Supporting windows auth for repository connection

        #region Helpers
        private static void startup()
        {
            // Initialize diagnostic logging.
            LogX.Initialize();
            logX = new LogX("Idera.SQLsecure.UI.Console.Program");

            logX.loggerX.Info("Console started at ", DateTime.Now.ToString());
        }
예제 #3
0
        public static string GetDiskSerialNumber()
        {
            var rd = "";

            try
            {
                rd = HardwareInfo.GetDiskVolume();
            }
            catch (Exception ex)
            {
                LogX.Error(ex);
            }
            return(rd);
        }
예제 #4
0
        public static string GetMAC()
        {
            var rd = "";

            try
            {
                rd = HardwareInfo.GetMacAddress();
            }
            catch (Exception ex)
            {
                LogX.Error(ex);
            }
            return(rd);
        }
예제 #5
0
        /// <summary>
        /// 获取系统内存大小
        /// </summary>
        /// <returns>内存大小(单位M)</returns>
        public static int GetPhisicalMemory()
        {
            try
            {
                var memInfo = new HardwareInfo.MEMORYSTATUSEX();
                memInfo.dwLength = (uint)Marshal.SizeOf(typeof(HardwareInfo.MEMORYSTATUSEX));
                HardwareInfo.GlobalMemoryStatusEx(ref memInfo);
                var tm = memInfo.ullTotalPhys / 1024 / 1024;
                return((int)tm);
            }
            catch (Exception ex)
            {
                LogX.Error(ex);
            }

            try
            {
                var searcher = new ManagementObjectSearcher();
                searcher.Query = new SelectQuery("Win32_PhysicalMemory ", "", new string[] { "Capacity" });
                var collection = searcher.Get();
                var em         = collection.GetEnumerator();

                long capacity = 0;
                while (em.MoveNext())
                {
                    var baseObj = em.Current;
                    if (baseObj.Properties["Capacity"].Value != null)
                    {
                        try
                        {
                            capacity += long.Parse(baseObj.Properties["Capacity"].Value.ToString());
                        }
                        catch
                        {
                            return(0);
                        }
                    }
                }
                return((int)(capacity / 1024 / 1024));
            }
            catch (Exception ex)
            {
                LogX.Error(ex);
            }

            return(0);
        }
예제 #6
0
        private static void startup(Utility.ProgramArgs programArgs, string args)
        {
            // Initialize diagnostic logging.
            if (programArgs.Valid)
            {
                LogX.Initialize(programArgs.TargetInstance.Replace(@"\", "$"));
            }
            else
            {
                LogX.Initialize();
            }
            logX = new LogX("Idera.SQLsecure.Collector.Program");

            // Log to event log that data loader is starting.
            AppLog.WriteAppEventInfo(SQLsecureEvent.DlInfoStartMsg, SQLsecureCat.DlStartCat,
                                     DateTime.Now.ToString(), args);
            logX.loggerX.Info("Collector started with parameters: ", args);
        }
예제 #7
0
 /// <summary> 深拷贝数据 </summary>
 /// <typeparam name="T"> 数据源类型 </typeparam>
 /// <param name="data"> 数据源 </param>
 /// <returns> 拷贝后的新数据 默认返回 default(T) </returns>
 public static T DeepClone <T>(this T data) where T : class
 {
     if (data != null)
     {
         using (var memStream = new MemoryStream())
         {
             try
             {
                 new BinaryFormatter().Serialize(memStream, data);
                 return(new BinaryFormatter().Deserialize(memStream) as T);
             }
             catch (Exception ex)
             {
                 LogX.Error(ex);
             }
         }
     }
     return(default(T));
 }
예제 #8
0
        public static string GetIp()
        {
            string ip = string.Empty;

            try
            {
                ip = System.Net.Dns.GetHostAddresses(System.Net.Dns.GetHostName())[0].ToString();

                //http://jira.op.ksyun.com/browse/YLYUN-5996?filter=12785
                //在 System.Net.IPAddress.get_Address()
                //在 Yuanbo.ChssClient.InPatient.Model.YiZhuModelBaseVM.SetLock(Nullable`1 sdlx, Nullable`1 mxmodel) 位置 D:\Work\GitProject\HaaS\Yuanbo.ChssClient.InPatient\Model\YiZhuModelBaseVM.cs:行号 279
                //在 Yuanbo.ChssClient.InPatient.ViewModel.HS.LinShiYiZhuVM.Query() 位置 D:\Work\GitProject\HaaS\Yuanbo.ChssClient.InPatient\ViewModel\HS\LinShiYiZhuVM.cs:行号 336
                //在 Yuanbo.ChssClient.InPatient.ViewModel.HS.LinShiYiZhuVM.Load() 位置 D:\Work\GitProject\HaaS\Yuanbo.ChssClient.InPatient\ViewModel\HS\LinShiYiZhuVM.cs:行号 321

                //ip = new System.Net.IPAddress(System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[0].Address).ToString();
            }
            catch (Exception ex)
            {
                LogX.Error(ex);
            }
            return(ip);
        }
예제 #9
0
        static void Main(string[] args)
        {
            //for manual run (for developers)

            /*args = new string[4];
             * args[0] = "-TargetInstance";
             * args[1] = "SS_SQL_SECURE\\MSSQLSERVER2012";
             * args[2] = "-Repository";
             * args[3] = "SS_SQL_SECURE\\MSSQLSERVER2014";*/

            string targetName = string.Empty;
            bool   isOK       = true;
            bool   needToWriteFailedSnapshot = false;

            System.Diagnostics.Stopwatch swTotal = new System.Diagnostics.Stopwatch();
            swTotal.Start();
            try
            {
                // Initialize the data loader utility.
                string argsString = Utility.ProgramArgs.ArgsToString(args);
                // Parse the command line arguments.
                Utility.ProgramArgs programArgs = new Utility.ProgramArgs(args);
                if (string.IsNullOrEmpty(programArgs.EncryptedPassword))
                {
                    startup(programArgs, argsString);
                    using (logX.m_logX.DebugCall())
                    {
                        if (programArgs.Valid)
                        {
                            targetName = programArgs.TargetInstance;
                            // Initialize and validate the repository.
                            m_Repository = new Repository(programArgs.Repository, programArgs.RepositoryUser,
                                                          programArgs.RepositoryPassword);
                            if (m_Repository.IsValid)
                            {
                                // Check license.
                                if (m_Repository.IsLicenseOk())
                                {
                                    Sql.Database.CreateApplicationActivityEventInRepository(
                                        m_Repository.ConnectionString,
                                        programArgs.TargetInstance,
                                        0,
                                        Collector.Constants.
                                        ActivityType_Info,
                                        Collector.Constants.
                                        ActivityEvent_Start,
                                        "Starting snapshot collection for " +
                                        programArgs.TargetInstance);
                                    // Check if the target instance is registered in the Repository.
                                    if (m_Repository.IsTargetRegistered(programArgs.TargetInstance))
                                    {
                                        // Retrieve target instance credentials from the repository.
                                        string     server, sqlLogin, sqlPassword, sqlAuthTypeString, serverLogin, serverPassword, serverTypeString;
                                        int?       port;
                                        ServerType serverType = ServerType.OnPremise;
                                        AuthType   authType   = AuthType.Null;
                                        if (m_Repository.GetTargetCredentials(programArgs.TargetInstance,
                                                                              out server, out port,
                                                                              out sqlLogin, out sqlPassword,
                                                                              out sqlAuthTypeString,
                                                                              out serverLogin, out serverPassword, out serverTypeString))
                                        {
                                            serverType           = Helper.ConvertSQLTypeStringToEnum(serverTypeString);
                                            authType             = (AuthType)Enum.Parse(typeof(AuthType), sqlAuthTypeString);
                                            m_targetUserName     = serverLogin;
                                            m_targetUserPassword = serverPassword;

                                            // SQLSecure 3.1 (Biresh Kumar Mishra) - Add Support for Azure VM

                                            if (serverType == ServerType.SQLServerOnAzureVM)
                                            {
                                                m_SQLServerOnAzureVM_FullName = server;

                                                if (server.IndexOf(".") != -1)
                                                {
                                                    m_SQLServerOnAzureVM_DomainName = server.Substring(server.IndexOf(".") + 1);
                                                    server = server.Substring(0, server.IndexOf("."));
                                                }
                                            }

                                            if (string.IsNullOrEmpty(serverLogin))
                                            {
                                                // Only issue warning for this case
                                                Sql.Database.CreateApplicationActivityEventInRepository(m_Repository.ConnectionString,
                                                                                                        targetName,
                                                                                                        0,
                                                                                                        Collector.Constants.ActivityType_Warning,
                                                                                                        Collector.Constants.ActivityEvent_Start,
                                                                                                        string.Format("No credentials specified for Operating System and Active Directory, using SQLsecure Collector user {0}", WindowsIdentity.GetCurrent().Name));
                                            }
                                            if (string.IsNullOrEmpty(sqlLogin))
                                            {
                                                throw new Exception("No credentials specified for collecting SQL Server security.");
                                            }
                                            if (serverType == ServerType.OnPremise)
                                            {
                                                GetIdentitiesForImpersonation(sqlLogin, sqlPassword, authType, serverLogin, serverPassword);
                                            }
                                            else if (serverType == ServerType.AzureSQLDatabase && authType == AuthType.W)
                                            {
                                                //AuthenticationResult authenticationResult= AzureDatabase.GetConnectionToken(serverLogin, serverPassword);
                                            }
                                            //SQLsecure 3.1 (Tushar)--Support for Azure VM.
                                            else if (serverType == ServerType.SQLServerOnAzureVM)
                                            {
                                                GetIdentitiesForImpersonation(sqlLogin, sqlPassword, authType, serverLogin, serverPassword);
                                            }
                                        }
                                        Program.ImpersonationContext wi;
                                        // Initialize and validate the target.
                                        System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
                                        sw.Start();
                                        if (serverType == ServerType.OnPremise)
                                        {
                                            wi       = SetTargetSQLServerImpersonationContext();
                                            m_Target = new Target(programArgs.TargetInstance, m_Repository);
                                            RestoreImpersonationContext(wi);
                                        }
                                        else if (serverType == ServerType.AzureSQLDatabase)
                                        {
                                            m_Target = new Target(programArgs.TargetInstance, m_Repository);
                                        }
                                        //SQLsecure 3.1 (Tushar)--Support for Azure VM.
                                        else if (serverType == ServerType.SQLServerOnAzureVM)
                                        {
                                            wi       = SetTargetSQLServerImpersonationContext();
                                            m_Target = new Target(programArgs.TargetInstance, m_Repository);
                                            RestoreImpersonationContext(wi);
                                        }
                                        sw.Stop();
                                        logX.loggerX.Verbose("TIMING - Time to initialize and validate target = " +
                                                             sw.ElapsedMilliseconds.ToString() + " msec");
                                        if (m_Target.IsValid)
                                        {
                                            if (serverType == ServerType.OnPremise)
                                            {
                                                wi = SetTargetImpersonationContext();

                                                // Load the permissions data.
                                                m_Target.LoadData(programArgs.AutomatedRun);

                                                RestoreImpersonationContext(wi);
                                            }
                                            else if (serverType == ServerType.AzureSQLDatabase)
                                            {
                                                //SQLsecure 3.1 (Tushar)--Passing the server name becasue we are not creating server object for azure DB.
                                                m_Target.LoadDataAzureDB(programArgs.AutomatedRun, server);
                                            }
                                            //SQLsecure 3.1 (Tushar)--Support for Azure VM.
                                            else if (serverType == ServerType.SQLServerOnAzureVM)
                                            {
                                                wi = SetTargetImpersonationContext();

                                                m_Target.LoadDataForAzureVM(programArgs.AutomatedRun);

                                                RestoreImpersonationContext(wi);
                                            }
                                        }
                                        else
                                        {
                                            needToWriteFailedSnapshot = true;
                                            logX.loggerX.Error("ERROR - target instance is not valid");
                                            Sql.Database.CreateApplicationActivityEventInRepository(
                                                m_Repository.ConnectionString,
                                                programArgs.TargetInstance,
                                                0,
                                                Constants.ActivityType_Error,
                                                Constants.ActivityEvent_Error,
                                                "Target " + programArgs.TargetInstance + " could not be found");
                                            AppLog.WriteAppEventError(SQLsecureEvent.DlErrOpenTargetConnectionFailed,
                                                                      SQLsecureCat.DlValidationCat,
                                                                      "Target " + programArgs.TargetInstance +
                                                                      " could not be found");
                                            isOK = false;
                                        }
                                    }
                                    else
                                    {
                                        needToWriteFailedSnapshot = true;
                                        logX.loggerX.Error("ERROR - target instance is not registered");
                                        Sql.Database.CreateApplicationActivityEventInRepository(
                                            m_Repository.ConnectionString,
                                            programArgs.TargetInstance,
                                            0,
                                            Collector.Constants.ActivityType_Error,
                                            Collector.Constants.ActivityEvent_Error,
                                            "Target " + programArgs.TargetInstance + " is not registered");
                                        AppLog.WriteAppEventError(SQLsecureEvent.DlErrTargetNotRegistered,
                                                                  SQLsecureCat.DlValidationCat,
                                                                  "Target " + programArgs.TargetInstance +
                                                                  " is not registered");

                                        isOK = false;
                                    }
                                    if (needToWriteFailedSnapshot)
                                    {
                                        int snapshotID = m_Repository.CreateErrorSnapshot(programArgs.TargetInstance);
                                        if (snapshotID != 0)
                                        {
                                            Sql.Database.UpdateRepositoryRegisteredServerTable(
                                                m_Repository.ConnectionString, snapshotID, Constants.StatusError);
                                        }
                                    }
                                }
                                else
                                {
                                    logX.loggerX.Error("ERROR - license check failed.");
                                    Sql.Database.CreateApplicationActivityEventInRepository(
                                        m_Repository.ConnectionString,
                                        programArgs.TargetInstance,
                                        0,
                                        Collector.Constants.
                                        ActivityType_Error,
                                        Collector.Constants.
                                        ActivityEvent_Error,
                                        "The SQLsecure Collector was unable to aquire a valid license");
                                    AppLog.WriteAppEventInfo(SQLsecureEvent.DlErrNoLicense, SQLsecureCat.DlValidationCat);
                                    isOK = false;
                                }
                            }
                            else
                            {
                                logX.loggerX.Error("ERROR - SQLsecure Repository is invalid.");
                                isOK = false;
                            }
                        }
                        else // Invalid args display usage
                        {
                            if (logX == null)
                            {
                                logX = new LogX("Idera.SQLsecure.Collector.Program");
                            }
                            logX.loggerX.Error("ERROR: Failed to parse the arguments");
                            Console.WriteLine(Constants.CopyrightMsg);
                            Console.WriteLine(Constants.UsageMsg);
                            isOK = false;
                        }
                    }
                }
                else        //handle output of the encrypted password
                {
                    Console.WriteLine(string.Format("Encrypted Password: {0}", programArgs.EncryptedPassword));
                }
            }
            catch (Exception ex)
            {
                string msg = "Collection Error: " + ex.Message;
                if (m_Repository != null && m_Repository.IsValid)
                {
                    Sql.Database.CreateApplicationActivityEventInRepository(m_Repository.ConnectionString,
                                                                            targetName,
                                                                            0,
                                                                            Collector.Constants.ActivityType_Error,
                                                                            Collector.Constants.ActivityEvent_Error,
                                                                            msg);
                }
                AppLog.WriteAppEventError(SQLsecureEvent.DlErrOpenTargetConnectionFailed,
                                          SQLsecureCat.DlValidationCat,
                                          "Target " + targetName +
                                          " " + ex.Message);

                if (logX == null)
                {
                    logX = new LogX("Idera.SQLsecure.Collector.Program");
                }
                logX.loggerX.Error(msg);
            }
            finally
            {
                // Undo the impersonation
                if (m_targetImpersionationContext != null)
                {
                    m_targetImpersionationContext.Undo();
                    m_targetImpersionationContext.Dispose();
                }
                if (m_targetSQLServerImpersionationContext != null)
                {
                    m_targetSQLServerImpersionationContext.Undo();
                    m_targetSQLServerImpersionationContext.Dispose();
                }
                if (TargetServer != null)
                {
                    TargetServer.RealUnbind();
                }
            }

            swTotal.Stop();
            logX.loggerX.Verbose("TIMING - Total Time for Collector = " + swTotal.ElapsedMilliseconds.ToString() +
                                 " msec");
            // Exiting utility, do shutdown processing.
            shutdown();
            Environment.ExitCode = isOK ? 0 : 1;
        }
예제 #10
0
        public static bool CanConnectServer(string su)
        {
            if (string.IsNullOrWhiteSpace(su))
            {
                return(false);
            }

            lock (ConnectServerLockData)
            {
                // 包含且在10s成功连接,直接认为正常联通中
                if (Servers.ContainsKey(su))
                {
                    var lt = Servers[su];
                    if (lt != null)
                    {
                        var ts = (DateTime.Now - lt.Value).TotalSeconds;
                        if (ts < 10)
                        {
                            return(true);
                        }
                    }
                }
                else
                {
                    Servers.Add(su, null);
                }
            }

            bool isconnet  = false;
            var  serverurl = su;

            if (serverurl.Contains("?"))
            {
                serverurl += "&r=" + DateTime.Now.ToString("yyyyMMddHHmmssfff");
            }
            else
            {
                serverurl += "?r=" + DateTime.Now.ToString("yyyyMMddHHmmssfff");
            }

            var request = WebRequest.Create(serverurl) as HttpWebRequest;

            request.Accept = ("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
            request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.9");
            request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
            request.Method      = "GET";
            request.ServicePoint.Expect100Continue = false;
            request.UserAgent         = "ConnectTest";
            request.Timeout           = 20000;
            request.AllowAutoRedirect = true;

            try
            {
                var s = request.GetResponse() as HttpWebResponse;
                if (s != null)
                {
                    isconnet = s.StatusCode == HttpStatusCode.OK;
                    s.Close();

                    lock (ConnectServerLockData)
                    {
                        if (isconnet)
                        {
                            Servers[su] = DateTime.Now;
                        }
                        else
                        {
                            Servers[su] = null;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LogX.Error(ex);
                Debug.WriteLine(ex.Message + " => " + ex.StackTrace);
            }

            return(isconnet);
        }
예제 #11
0
        private static void StartServer()
        {
            ILogX log = null;

            try
            {
                Console.Title = "[Yuanfeng] Log UDP Server v1.0";
                Console.WriteLine("正在启动日志服务...");

                log = LogX.NewLogger(typeof(Program));
                IUdpServerX server = new SimpleUdpServer();

                server.Create(8000, new OnReceivedMsgDelegate((string ipaddr, object obj) =>
                {
                    UdpMsg msg = obj as UdpMsg;
                    switch (msg.Level)
                    {
                    case Level.DEBUG:
                        log.Debug(msg.Logger, msg.Message, msg.Exception);
                        break;

                    case Level.FATAL:
                        log.Fatal(msg.Logger, msg.Message, msg.Exception);
                        break;

                    case Level.INFO:
                        log.Info(msg.Logger, msg.Message, msg.Exception);
                        break;

                    case Level.ERROR:
                        log.Error(msg.Logger, msg.Message, msg.Exception);
                        break;

                    default:
                        break;
                    }
                    Console.Write("[" + ipaddr + "]");
                    Console.Write(msg.Message + ",");
                    Console.WriteLine(msg.Exception);
                }));
                Console.WriteLine("日志服务启动成功..");
                Console.WriteLine(string.Format("服务器IP地址:{0},端口:8000", server.IpAddr));
                Console.WriteLine("操作命令:\n1、exit-关闭日志服务\n2、list-客户端列表");
                Console.Write("<yuanfeng.udpserver>");
                new Thread(new ThreadStart(() =>
                {
                    while (true)
                    {
                        string line = Console.ReadLine();
                        if ("exit".Equals(line))
                        {
                            server.Close(); break;
                        }
                        else if ("list".Equals(line))
                        {
                            foreach (var item in server.Clients)
                            {
                                Console.WriteLine(item);
                            }
                        }
                        else if ("clear".Equals(line))
                        {
                            Console.Clear();
                        }

                        Console.Write("<yuanfeng.udpserver>");
                    }
                })).Start();
            }
            catch (Exception exception) { log.Error(exception); throw new Exception("启动服务失败", exception); }
        }